エキスパートアドバイザーのコードにインジケータのコードを追加する方法は? - ページ 4

 

どのように1つの方法のみを開く書くのですか?

というのも、私のEAは売りと買いの両方向のポジションを開くからです。

私はただコードを編集して、そこにelse;を追加するだけです。

それは正しいですか?

ここでは、コードです。

      if ((diClose0<diMA1))&&(ZigZagLow){
         OpenBuy();
         return(0);
      }
      else;

      if ((diClose2>diMA3))&&(ZigZagHigh){
         OpenSell();
         return(0);
      }
 
albert_lim83:

やっと変数の問題が解決しました。

今だけです

( - 関数定義が予想外

) - アンバランスな右括弧...

それは私のコードに(および)を置く左lですか?

あなたはこれを持っている... ... ...

double zag, zig; b=0; while(a<2) {

......閉じはどこですか?} ?

 
if (!ExistPositions()){

      if ((diClose0<diMA1))&&(ZigZagLow){
         OpenBuy();
         return(0);
      }
      else;

      if ((diClose2>diMA3))&&(ZigZagHigh){
         OpenSell();
         return(0);
      }
   }
   
   return (0);
}

bool ExistPositions() {
for (int i=100; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol()) {
return(True);
}
} 
} 
return(false);
}
void OpenBuy() { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 
   ldLot = GetSizeLot(); 
   ldStop = GetStopLossBuy(); 
   ldTake = GetTakeProfitBuy(); 
   lsComm = GetCommentForOrder(); 
   OrderSend(Symbol
(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,0,0,clOpenBuy); 
 
} 
void OpenSell() { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 
   ldLot = GetSizeLot(); 
   ldStop = GetStopLossSell(); 
   ldTake = GetTakeProfitSell(); 
   lsComm = GetCommentForOrder(); 
   OrderSend(Symbol
(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,0,0,clOpenSell); 

} 
string GetCommentForOrder() { return(Name_Expert); } 

double GetSizeLot() { return(Lots); } 
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); } 
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }
double GetStopLossBuy() { return(Bid-lStopLoss*Point); }
double GetStopLossSell() { return(Ask+sStopLoss*Point); }

というエラーが発生します。

ExistPositions - グローバルスコープでの式は許可されません。

と } - アンバランスな括弧。

 

ただ、なぜいつもエラーが変わるのだろう?

を修正した後、これを修正しました。

と思ったら、そこでエラー。

そこが直った後

ここでエラー

 
albert_lim83:

というエラーが発生します。

ExistPositions - グローバルスコープでの式は許可されていません。

と } - 不均衡な括弧です。

OK、この関数は 宣言されて いますね ... ...私が読みやすいようにインデントを調整しました ... ...

bool ExistPositions() 
   {
   for (int i=100; i<OrdersTotal(); i++) 
      {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
         {
         if (OrderSymbol()==Symbol()) 
            {
            return(True);
            }
         } 
      } 
   return(false);
   }

このコード .... この関数の宣言は ... 他のどの関数の外側にも なければならないので、start, init, deinitなどの外側でなければならない。

 
albert_lim83:

ただ、なぜいつもエラーが変わるのだろう?

を修正した後、これを修正しました。

と思ったら、そこでエラー。

そこが直った後

ここでエラー

例えば、中括弧の数は正しいのに、中括弧の位置が間違っていることがあります。あるいは、閉じ中括弧と開き中括弧が抜けている ... ... 数は合っているのに間違っている。
 
RaptorUK:

OK,この関数は宣言されて いますね. 私が読みやすいようにインデントを調整しました ... ...

このコード .... この関数の宣言は ... 他のどの関数の外側にも なければならないので、start, init, deinitなどの外側でなければなりません。

それでも同じエラーです...


ExistPositions - グローバルスコープでの式は許可されていません。

と } - アンバランスな括弧。

どこを変更すればいいのでしょうか?

 
albert_lim83:


どこを変更すればいいのでしょうか?

私は知らない ... ... 完全なコードを表示します。
 
RaptorUK:
私は知らない......あなたに完全なコードを表示します。

同意します!。フルコードでないと、あまり役に立てないので、これ以上は期待しないでください。

MetaEditor 5でコンブしています。

   if(!ExistPositions())
     {

      if((diClose0<diMA1)) && (ZigZagLow)  // <<== ???
        {
         OpenBuy();
         return(0);
        }
      else;   // <<=== ???

      if((diClose2>diMA3)) && (ZigZagHigh) // <<=== ???
        {
         OpenSell();
         return(0);
        }
     }

   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ExistPositions() 
  {
   for(int i=100; i<OrdersTotal(); i++) // <<=== strange calculation 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         if(OrderSymbol()==Symbol()) 
           {
            return(True);
           }
        }
     }
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenBuy() 
  {
   double ldLot,ldStop,ldTake;
   string lsComm;
   ldLot=GetSizeLot();
   ldStop = GetStopLossBuy();
   ldTake = GetTakeProfitBuy();
   lsComm = GetCommentForOrder();
   OrderSend(Symbol
             (),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,0,0,clOpenBuy);

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenSell() 
  {
   double ldLot,ldStop,ldTake;
   string lsComm;
   ldLot=GetSizeLot();
   ldStop = GetStopLossSell();
   ldTake = GetTakeProfitSell();
   lsComm = GetCommentForOrder();
   OrderSend(Symbol
             (),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,0,0,clOpenSell);

  }
string GetCommentForOrder() { return(Name_Expert); }

double GetSizeLot() { return(Lots); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }
double GetStopLossBuy() { return(Bid-lStopLoss*Point); }
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
 

これは、こう書くべきかもしれませんね。

 if(!ExistPositions())
     {
      if(diClose0 < diMA1 && (ZigZagLow)) // <<== ???
        {
         OpenBuy();
         return(0);
        }
        else // <<=== ???
        {
        if(diClose2 > diMA3 && (ZigZagHigh)) // <<=== ???
          {
          OpenSell();
          return(0);
          }
        }
     }