Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 911

 
Viktorline14:
Leute, helft bitte!!!

Ist es einfacher, einen Screenshot zu machen und ihn hier zu posten, als den Text des EA zu kopieren? Glauben Sie, dass jemand den Namen anhand eines Screenshots manuell in sein ME eingeben und versuchen wird, ihn herauszufinden?

Wenn der Compiler sagt, dass das Ergebnis der Funktion geprüft werden soll, muss es auch geprüft werden. Das ist nicht schwer:

if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) Print("Opening Buy error #", GetLastError()); //ну и другие действия по усмотрению, в случае ошибки
 

 if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, SL, TP, NULL, 0, 0,clrBlue);

     MyOrderStateB = 1; 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 

   Print("Opening Buy error #", GetLastError());}

   else Sleep(2);

Ich danke Ihnen. Richtig oder falsch? Die Warnung wird trotzdem angezeigt.

 
Sie haben den Stoploss und Takeprofit in absoluten Werten, und Sie brauchen sie in relativen Werten, wie Bid - Sl*Point.
 
abeiks:

Hallo!

In meinem Expert Advisor wird die vorherige Kerze geprüft, und wenn die Bedingungen es zulassen, wird die Position eröffnet, wenn nicht, wird sie nicht eröffnet. Das Problem besteht darin, dass die Position eröffnet wird, bevor der Zustand der vorherigen Kerze überprüft wurde. Dann sehe ich im Protokoll, dass die Position geöffnet wurde, und dann sehe ich, dass sie nicht geöffnet werden sollte. Wie kann man das beheben?

Danke, ich habe es selbst herausgefunden. Ich habe die Funktion zur Überprüfung der vorherigen Kerze über die Funktion zur Eröffnung einer Position gestellt.
 
Ich entschuldige mich für die Schlamperei
 
if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )
{OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, Bid - SL * Point, Ask + TP * Point, NULL, 0, 0,clrBlue);
MyOrderStateB = 1;
if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue))
Print("Fehler beim Öffnen des Kaufs #", GetLastError());}
sonst Sleep(2);

if(S1a == S1b && S1a>80.0000 && S1b>80.0000 )

{OrderSend(Symbol(), OP_SELL, OrderValue, NormalizeDouble(Bid, Digits), Slippage, Ask + SL * Point, Bid - TP * Point , NULL, 0, 0,clrRed);
MyOrderStateS = 1; }

sonst Sleep(2);

Und bei "relativ" gibt es das gleiche Ergebnis(

 
Viktorline14:

 if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, SL, TP, NULL, 0, 0,clrBlue);

     MyOrderStateB = 1; 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 

   Print("Opening Buy error #", GetLastError());}

   else Sleep(2);

Ich danke Ihnen. Richtig oder falsch? Die Warnung wird trotzdem angezeigt.

Falsch, Sie müssen OrderSend nicht zweimal aufrufen. Und wir sollten SL und TP relativ zum Preis berechnen, nicht in Pips. Und wir sollten nicht die offenen Ask- und Bid-Preise normalisieren, sondern das Ergebnis der SL- und TP-Berechnungen.

Im Allgemeinen gilt: "Lernen, lernen und nochmals lernen" ))))

 
evillive:

Falsch, Sie müssen OrderSend nicht zweimal aufrufen. Und SL und TP sollten relativ zum Preis berechnet werden, nicht in Punkten. Und wir sollten nicht die offenen Ask- und Bid-Preise normalisieren, sondern das Ergebnis der SL- und TP-Berechnungen.

Im Allgemeinen gilt: "Lernen, lernen und nochmals lernen" ))))

Vielen Dank))) Sie haben mir sehr geholfen, jetzt funktioniert alles:3
 

Nochmals herzlichen Dank!

Jetzt gibt es ein Problem, die EA öffnet mehrere Aufträge in einer Reihe, nicht eine, wie ich wollte(

int start()



  { S1a = NormalizeDouble(iStochastic(NULL, 0, S1_period, 3, S1_slowing, MODE_SMA, 1, MODE_MAIN, 1), 0);

   S1b = NormalizeDouble(iStochastic(NULL, 0, S1_period, 3, S1_slowing, MODE_SMA, 1, MODE_SIGNAL, 1), 0);

   

   if(MyOrderStateB == 1)Sleep(300000);

    else MyOrderStateB = 0;

   if(MyOrderStateS == 1)Sleep(300000);

    else MyOrderStateS = 0;

    

 

     

   if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, Bid - SL * Point, Ask + TP * Point, NULL, 0, 0,clrBlue))

   Print("Opening Buy error #", GetLastError());  

     else Sleep(2);

   MyOrderStateB = 1;

  

   


      

   if(S1a == S1b && S1a>80.0000 && S1b>80.0000 )


    

    

       if(!OrderSend(Symbol(), OP_SELL, OrderValue, NormalizeDouble(Bid, Digits), Slippage, Ask + SL * Point, Bid - TP * Point , NULL, 0, 0,clrRed))

       Print("Opening Sell error #", GetLastError()); 

       else Sleep(2);

       MyOrderStateS = 1;

       

      

       

       

       

   return(0);}

 

Ich habe ein seltsames Verhalten im Strategietester festgestellt. Mein EA setzt und verfolgt ausstehende Stop-Orders. Es geschieht Folgendes. Der Expert Advisor setzt einen Kauf- und Verkaufsstopp bei 30 Pips vom aktuellen Kurs (Symbol - GbpUsd. Vier Ziffern. Minimales Niveau = 3 Pips). Nach einer gewissen Zeit zieht er sie nach oben, wenn sie nicht ausgelöst wurden. Also, was ich sehe. die Änderung ist erfolgreich, die Änderung ist erfolgreich, und dann an einem gewissen Punkt in der Zeit knallt und Fehler #1 pops up. Das heißt, alles war in Ordnung, der EA hat die gleichen Aktionen durchgeführt und plötzlich taucht dieser Fehler auf. Alle Preise sind auf Ziffern normalisiert. Im Allgemeinen werden alle Werte, die an die Eingabe der Funktion OrderModify() übergeben werden, normalisiert!

Was kann der Grund für ein solches Verhalten des EA im Tester sein?