MT4のEAについて教えてください。m(_ _)m 現在、MT4の同じ口座で数本のEAを稼動し…

MT4のEAについて教えてください。m(_ _)m
現在、MT4の同じ口座で数本のEAを稼動しています。その中で同通貨で時間帯の違うEAがあります。

1時間足でエントリーしているのに、15分足のロジックで決済されています。画面上の1時間足にエントリーの矢印マークがはいり、15分足の画面に決済の矢印マークが入ります。通貨別・時間足別にMT4を立ち上げています。またどちらにも違うマジックナンバーを設定しています。EAの最初に下記のように違うナンバーを書いています。
#define MAGIC 700001
オーダーは下記のように書いています。
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-LC*Point,Ask+TP*Point,Comments,MAGIC,0,Green);
この書き方でマジックナンバーで識別すると思っていましたが、間違っていますでしょうか?

..[補足]..
こんにちは、xchss hzoさん。いつもありがとうございます。成行決済プログラムとはどのような意味でしょうか?
TPとかLCの事を意味するのでしょうか?

回答1

>補足に対して

OrderSend()関数で出すTPやLCは、(逆)指値決済ですが、それとは別に、OrderClose()関数で行う成行決済もあり得ます。

たとえば、ドテンするEAならば必ず記述されているはずです。

通常は、以下のように、OrderClose()関数の前に、マジックナンバーと通貨ペアの一致するポジションを探して実行しますが、ここでマジックナンバーによる抽出をしてないと、別のマジックナンバーのポジションが決済されてしまいます。

void ClosePositions()
{
for(int i=0; i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slip,White);
break;
}
}
}

以下古い回答

成行決済プログラムがある場合には、そちらでマジックナンバーが無視された書き方になっていると、そのような現象が生じますよ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA