Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
10:58:23.963 Test (EURUSD,H1) 2016.01.0400:06:42 CTrade::OrderSend: instant buy 0.04 EURUSD at 1.08732 [done at 1.08732]
10:58:30.692 Test (EURUSD,H1) 2016.01.0400:07:10DEAL_POSITION_ID0, DEAL_VOLUME0.00, DEAL_ENTRYDEAL_ENTRY_IN, DEAL_TYPEDEAL_TYPE_BALANCE10:58:30.784 Test (EURUSD,H1) 2016.01.0400:07:10DEAL_POSITION_ID2, DEAL_VOLUME0.02, DEAL_ENTRYDEAL_ENTRY_IN, DEAL_TYPEDEAL_TYPE_BUY10:58:32.074 Test (EURUSD,H1) 2016.01.0400:07:10DEAL_POSITION_ID2, DEAL_VOLUME0.01, DEAL_ENTRYDEAL_ENTRY_IN, DEAL_TYPEDEAL_TYPE_BUY10:58:33.826 Test (EURUSD,H1) 2016.01.0400:07:10DEAL_POSITION_ID2, DEAL_VOLUME0.07, DEAL_ENTRYDEAL_ENTRY_INOUT, DEAL_TYPEDEAL_TYPE_SELL10:58:37.237 Test (EURUSD,H1) 2016.01.0400:07:10DEAL_POSITION_ID4, DEAL_VOLUME0.04, DEAL_ENTRYDEAL_ENTRY_OUT, DEAL_TYPEDEAL_TYPE_BUY10:59:07.397 Test (EURUSD,H1) 2016.01.0400:07:19DEAL_POSITION_ID2: volume in 0.03, volume out 0.07
よく使う機能、便利な機能
GetPositionPrice()関数のデザインを変更。
この機能では、間違った結果を示してしまう、というか。調べてみたところ、ドキュメントにあるように、Uターン時(=イン/アウトトレード時)にはポジションIDが変化しないことがわかりました。
https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties
ポジションの取り消しを行うと、取り消しを行った注文チケットにIDが変更されます。
GetPositionPriceは、反転した場合、2つ以上の反対方向のポジションを積み上げ、それらの平均価格を計算することができます。このようなポジションの平均価格は、実用的なものではありません。
では、反転時にポジションIDは変わるのか、変わらないのか?
イン/アウト取引で、どの出来高が前のポジションを閉じ、どの出来高が新しいポジションを開いたか、どうやって見分けるのでしょうか?
現在のオープンポジションと比較することができます。しかし、立場が 逆転しても変わらないidで歴史を 検証した方が良いのでは...。買い/売りのボリュームが助けになる。
最近になって、振り向くとポジションIDがCHANGEするようになりました。これに関するドキュメントはすでに更新されています...。
position_identifier
ポジションIDは、新しくオープンしたポジションに割り当てられるユニークな番号で、その生涯を通じて変更されることはありません。ポジションが開設された注文のチケットに対応します。
ポジション識別子は、各注文(ORDER_POSITION_ID)と、それをオープン、変更、クローズした各取引(DEAL_POSITION_ID)に指定されています。このプロパティは、ポジションに関連する注文や取引を検索するために使用します。
ポジションを取り消すと、その識別子は取り消しを行ったオーダーチケットに変更されます。
長
今のオープンと比べてもいいんじゃない?しかし、反転時に変化しないイドによる位置の履歴を 調べた方が良いのでは...。買い/売りのボリュームが助けになる。
これは全く選択肢にない。また、反転などにより前のポジションが開いている可能性もあります。選択肢の一つにはなり得るが、明らかに最適とは言えない。
最近になって、振り向くとポジションIDがCHANGESするようになりました。これに関するドキュメントはすでに更新されています...。
position_identifier
ポジションIDは、新しくオープンしたポジションに割り当てられるユニークな番号で、その生涯を通じて変更されることはありません。ポジションが開設された注文のチケットに対応します。
ポジション識別子は、各注文(ORDER_POSITION_ID)と、それをオープン、変更、クローズした各取引(DEAL_POSITION_ID)に指定されています。このプロパティは、ポジションに関連する注文や取引を検索するために使用します。
ポジションを取り消すと、その識別子は取り消しを行ったオーダーチケットに変更されます。
長
このように書かれていますが、実際は何も変わりません。
よかったら、私のコード。
ここで、deal2_ticketは入出庫取引チケット、deal1_ticketは入出庫取引前のチケット、deal3_ticketは入出庫取引後のチケットである。3つのケースとも同じPosition IDが表示されます。
そう言っておきながら、実際は何も変わらない。
よかったら、私のコード。
ここで、deal2_ticketは入出庫取引チケット、deal1_ticketは入出庫取引前のチケット、deal3_ticketは入出庫取引後のチケットである。3つのケースとも同じPosition IDが表示されます。
また、イン/アウトの取引から、どの数量が前のポジションを閉じ、どの数量が新しいポジションを開いたかを判断するにはどうすればよいのでしょうか。
このExpert Advisorは、ネッティング口座で「Debugging on History」モードで実行されます。この例は、取引履歴に「IN/OUT」タイプの取引が1件しかないことを計算しているため、少し乱暴な表現になっています。
まず、全ての取引が成立し、ポジションを完全にクローズした後、全ての取引の説明(DEAL_POSITION_ID, DEAL_VOLUME, DEAL_ENTRY, DEAL_TYPE)を取得し、IN/OUTタイプの取引に対するDEAL_POSITION_IDを記憶する。
次に、履歴を再度確認し、DEAL_POSITION_ID を持つ取引のすべてのエントリーを合計します。
このようなものが得られます。
自分の中で変化しています。最新のビルド1340で試してみてください。