お客様から、ちょっと複雑なトラリピのご注文を受けたのですが、どうしてもEAがうまく稼働しないので、自分で実験してみました。
以下は、OrderType()関数によって返される結果についての実験結果です。
0.OP_BUY
OrderType()関数が実行された時点でのロングポジションすべてがこれに含まれます。よって、(逆)指値などによって発注・成立したポジションでもこれに含まれます。逆に、決済されてポジションが消滅すれば、これに含まれなくなります。
1.OP_SELL
OrderType()関数が実行された時点でのショートポジションすべてがこれに含まれます。よって、(逆)指値などによって発注・成立したポジションでもこれに含まれます。逆に、決済されてポジションが消滅すれば、これに含まれなくなります。
2.OP_BUYLIMIT
OrderType()関数が実行された時点での新規の指値買い注文だけがこれに含まれます。よって、その指値が約定してロングポジション化したものや、決済の指値買い注文はこれに含まれません。
3.OP_BUYSTOP
OrderType()関数が実行された時点での新規の逆指値買い注文だけがこれに含まれます。よって、その逆指値が約定してロングポジション化したものや、決済の逆指値買い注文はこれに含まれません。
4.OP_SELLLIMIT
OrderType()関数が実行された時点での新規の指値売り注文だけがこれに含まれます。よって、その指値が約定してショートポジション化したものや、決済の指値売り注文はこれに含まれません。
5.OP_SELLSTOP
OrderType()関数が実行された時点での新規の逆指値売り注文だけがこれに含まれます。よって、その逆指値が約定してショートポジション化したものや、決済の逆指値売り注文はこれに含まれません。
たとえば、以下のようなIFO注文がなされたとします。
①1ドル=100円のときに、99円に新規の指値買い注文を出し、同時に、0.5円ずつの損切りと利食いをつける。
②99円に到達し、買いポジションを持つ。
③98.5円で損切りを食らう。
①の時点での注文やポジションの数は、
OP_BUYLIMIT = 1
OP_BUY = 0
OP_SELLSTOP = 0
OP_SELLLIMIT = 0
②の時点での注文やポジションの数は、
OP_BUYLIMIT = 0
OP_BUY = 1
OP_SELLSTOP = 0 ← 「1」にならない。
OP_SELLLIMIT = 0 ← 「1」にならない。
③の時点での注文やポジションの数は、
OP_BUYLIMIT = 0
OP_BUY = 0
OP_SELLSTOP = 0
OP_SELLLIMIT = 0
となるわけです。
ここまで正確に知ってる人なんておるんかしゃん?
コメントをお書きください