ポジション管理について

2019/07/29 16:13
375

EAを自作で何個か作って試しているのですが、
どうも違うEAのポジションを決済してしまう時があります。
1つのMT4でEA別にポジションを管理するにはどのようにコードを書いたら良いのでしょうか。
教えてください。

コメント

キングレブロン
2019/07/29 17:23

違うEAのポジションを決済してしまう現象は、
OrderCloseの際に誤って他EAのチケット番号を指定してしまっていることにより発生します。
下記2つの対応をすれば問題ないかと思います。

① EAごとに異なるマジックナンバーを設定(外部パラメータにされるのがよいかと思います)

extern int Magic = 999999;

② ポジション管理

   for (int i = 0; i < OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == FALSE) break;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){
         RefreshRates();
         Ticket=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0, White);
         return;
      }
    }

マジックナンバーと通貨ペアが正しいことを判定すれば正しいチケットを決済することができます。

PENTAゴン
2019/07/29 17:34

はじめまして。ソースがないので何とも言えないのですが、
マジックナンバーを確認していないのかもしれません。

エントリー時と決済時にはマジックナンバーの確認をすれば、他のEAが決済することはないと思います。

↓参考までに

// マジックナンバーを外部パラメータとする
extern int MagicNumber = 123;
// エントリー時はマジックナンバーを指定
OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,Com,MagicNumber,0,Blue);

// 決済時にマジックナンバーを確認
for(i=OrdersTotal()-1; i>=0; i--){
  if(OrderSelect(i, SELECT_BY_POS) == true){
    if(OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol()){
      if(!(OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Green))){

テストマン
2019/11/15 18:52

img.jpg

関連項目

検索結果がありません。