Wie fügt man den Indikatorcode in den Expertadvisor-Code ein? - Seite 4

 

wie zu schreiben offen nur 1 Weg?

weil meine ea öffnen beide Richtung Position, kaufen und verkaufen.

Ich bearbeite einfach den Code und fügen Sie die else; auf dort,

ist es richtig?

Hier ist der Code.

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

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

endlich das Variablenproblem gelöst,

jetzt ist nur

( - Funktionsdefinition unerwartet

) - unausgewogene rechte Klammer...

ist es l links setzen ( und ) auf meinem Code??

Sie haben dieses . . . .

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

. . . wo ist Ihre schließende } ?

 
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); }

Der Fehler ist

ExistPositions - Ausdruck im globalen Bereich nicht erlaubt

und } - unausgewogene Klammern.

 

Ich frage mich nur, warum sich der Fehler immer ändert?

nachdem ich dies behoben habe,

dann Fehler dort.

nach Behebung dort,

Fehler hier.

 
albert_lim83:

Der Fehler lautet

ExistPositions - Ausdruck im globalen Bereich nicht erlaubt

und } - unausgewogene Klammern.

OK, Sie haben diese Funktion deklariert... Ich habe die Einrückung angepasst, damit ich sie leichter lesen kann...

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

dieser Code . . . diese Funktionsdeklaration . . muss außerhalb jeder anderen Funktion stehen, also außerhalb von start, init, deinit, etc.

 
albert_lim83:

Ich frage mich nur, warum sich der Fehler immer ändert?

nachdem ich dies behoben habe,

dann Fehler dort.

nach Behebung dort,

Fehler hier.

Denn ein Fehler maskiert einen anderen... Wenn Sie einen Fehler beheben, wird ein anderer für den Compiler sichtbar... Sie können zum Beispiel die richtige Anzahl von Klammern haben, aber sie können an den falschen Stellen stehen. . . oder Sie haben eine schließende und eine öffnende geschweifte Klammer übersehen . . so dass die Zahlen übereinstimmen, aber falsch sind.
 
RaptorUK:

OK, Sie haben diese Funktion deklariert... Ich habe die Einrückung angepasst, damit ich sie leichter lesen kann...

dieser Code . . . diese Funktionsdeklaration . . muss außerhalb jeder anderen Funktion stehen, also auch außerhalb von start, init, deinit, etc.

immer noch derselbe Fehler...


ExistPositions - Ausdruck im globalen Bereich nicht erlaubt

und } - unausgewogene Klammern.

Was sollte ich ändern?

 
albert_lim83:


Wo sollte ich wechseln?

Ich weiß es nicht ... zeigen Sie den vollständigen Code.
 
RaptorUK:
Ich weiß nicht ... zeigen Sie den vollständigen Code.

Einverstanden! Ohne vollständigen Code können wir nicht viel helfen, also erwarten Sie nicht mehr.

Kombiniert mit 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); }
 

Vielleicht sollte das so geschrieben werden.

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