ポジション管理について

MetaTrader 4
ニックネーム未設定
2019/07/29 16:13
2423

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))){

ニックネーム未設定
2020/08/24 12:07

ádasd

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。