PositionSelect() 関数でポジションを選択し、PositionGetInteger() 関数と mql5 識別子POSITION_IDENTIFIER を使用して識別子を取得します。
ヘルプの例
//+------------------------------------------------------------------+ //| トレード機能| //+------------------------------------------------------------------+ void OnTrade() { //--- ポジションが利用可能かどうかをチェックし、その変更時刻を表示する。 if(PositionSelect(_Symbol)) { //--- ポジション識別子を取得する。 ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER); Print(_Symbol," postion #",position_ID); //--- 1970年01月01日からのポジション形成時間をミリ秒単位で取得する。 long create_time_msc=PositionGetInteger(POSITION_TIME_MSC); PrintFormat("Position #%d POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID, create_time_msc,TimeToString(create_time_msc/1000)); //--- 1970年01月01日以降、最後に位置を変更した時刻を秒単位で取得する。 long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE); PrintFormat("Position #%d POSITION_TIME_UPDATE = %i64 seconds => %s", position_ID,update_time_sec,TimeToString(update_time_sec)); //--- 1970年01月01日以降、最後にポジションが変更された時刻をミリ秒単位で取得する。 long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC); PrintFormat("Position #%d POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s", position_ID,update_time_msc,TimeToString(update_time_msc/1000)); } //--- }
PositionSelect() 関数を使用して位置を選択し、PositionGetInteger() 関数とmql5識別子 -POSITION_IDENTIFIERを 使用してその識別子を取得します。
ヘルプの例
tol64さん、ありがとうございます!原則的にはその通りです。
そして、最初の質問が簡潔だったことをお詫びします...ポジション識別子への 参照を与えたにもかかわらず。
問題はこうです。ポジションがオープンされた後、CDealInfo クラスのメソッド ::PositionId() を使って、取引の履歴からこのオープンを検出する必要があります。そして、できれば、オープンした瞬間と、 DEAL_ENTRY_IN またはDEAL_ENTRY_INOUT タイプの取引が 履歴に表示される瞬間との 間の時間差が最小になるようにします。
ありがとう、tol64!原則的に、真実はあなたのものです。
そして、最初の質問が簡潔だったことをお詫びします...ポジションIDへの リンクを示したにもかかわらず。
問題は次のようなものです。ポジションがオープンされた後、CDealInfo クラスの::PositionId()メソッドを使用して、取引履歴でこのオープンをキャッチする必要があります。また、できれば、オープンの瞬間と DEAL_ENTRY_INまたはDEAL_ENTRY_INOUT タイプの取引が 履歴に表示される瞬間との 間の時間差が最小になるようにする必要があります 。
私の意見では、上記の例のようにOnTrade()でイベントを追跡することは、これに非常に適しています。しかし、あるポジションが突然トレード・イベントで選択できなくなり、次のポジションもすぐには選択できなくなると思います。その場合は、タイマーで環境を追跡する必要があります。今はミリ秒でも設定できる。
さて、あるいはオープンポジションを追跡する代わりに、トレードの履歴(トレード回数)をスキャンする。前回のものを記憶しておき、現在のものと比較する。タイマーでもできます。たくさんのバリエーションがあります。すべては特定のタスクに依存します。
アナトリー、ここで問題が発生しました。あなたの経験を教えてください。関数を使うときにバグがあるのか、それとも私が「間違って」いるのか。でも、すべて正しくやったつもりなのですが...。
関数のバリアントについて質問があります。
例えば
1)
double HistoryOrderGetDouble( ulong ticket_number, // チケット ENUM_ORDER_PROPERTY_DOUBLE property_id // プロパティ識別子 );
2)
bool HistoryOrderGetDouble( ulong ticket_number, // チケット ENUM_ORDER_PROPERTY_DOUBLE property_id, // プロパティ識別子 double& double_var // ここでは、プロパティの値を取る );
ソースコードを添付します。
アナトリー、ここで問題が発生しました。あなたの経験を教えてください。関数を使うときにバグがあるのか、それとも私が「間違って」いるのか。でも、すべて正しくやったつもりなんですが...。
質問は、2番目のものが「機能」しない関数のバリアントについてです。
...
ログには何が記録されていますか?スクリプトを実行しても問題は見当たりません。
スクリプトのデフォルト設定では、"Failure to returnHistoryOrderGetDouble()"のようなエントリがあります。
つまり、この関数のブール値バージョンはプロパティ値を取得しません。
デフォルトのスクリプト設定では、「Failure to returnHistoryOrderGetDouble()関数」のような記録がありますね。
つまり、関数のブール値バージョンはプロパティ値を取得しません。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 MQL5 クックブック:ポジションプロパティを取得するためのディール履歴と関数ライブラリ はパブリッシュされました:
ポジションプロパティについて先行記事で提供されている情報を簡単にまとめます。本稿では、ディールヒストリーにアクセスした後にのみ取得可能なプロパティを得る関数を数個追加して作成します。また便利な方法でポジションやシンボルプロパティにアクセスできるようにするデータストラクチャについても知識を得ます。
作者: Anatoli Kazharski