Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 911

 
Viktorline14:
Les gars, aidez-moi s'il vous plaît ! !!

Est-il plus facile de faire une capture d'écran et de la poster ici que de copier le texte de l'EA ? Pensez-vous que quelqu'un va le saisir manuellement dans son ME à partir d'une capture d'écran et essayer de le comprendre ?

Si le compilateur indique qu'il faut vérifier le résultat de la fonction, il faut le vérifier. Ce n'est pas difficile :

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

Merci. Vrai ou faux, cependant ? L'avertissement s'affiche toujours.

 
Vous avez le stoploss et le takeprofit en valeurs absolues, et vous en avez besoin en valeurs relatives, comme Bid - Sl*Point.
 
abeiks:

Bonjour !

Dans mon Expert Advisor, le chandelier précédent est vérifié et si les conditions le permettent, la position est ouverte, sinon, elle ne l'est pas. Le problème est que la position est ouverte avant que la condition de la bougie précédente ne soit vérifiée. Ensuite, je vois la position s'ouvrir dans le journal, puis je vois qu'elle ne devrait pas être ouverte. Comment le réparer ?

Merci, je l'ai compris moi-même. J'ai placé la fonction vérifiant la bougie précédente au-dessus de la fonction ouvrant une position.
 
Je m'excuse pour le laisser-aller
 
si(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) ;
Mon état de commande B = 1 ;
if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue))
Print("Erreur d'ouverture d'achat #", GetLastError());}
autre 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 ; }

autre Sleep(2) ;

Et avec relative il donne la même chose(

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

Merci. Vrai ou faux, cependant ? L'avertissement s'affiche toujours.

Faux, vous n'avez pas besoin d'appeler OrderSend deux fois. Et nous devrions calculer le SL et le TP par rapport au prix, et non en pips. Et nous devrions normaliser non pas les prix Ask et Bid ouverts, mais le résultat des calculs SL et TP.

En général, "apprendre, apprendre et encore apprendre" ))))

 
evillive:

Faux, pas besoin d'appeler OrderSend deux fois. Et les SL et TP doivent être calculés par rapport au prix, et non en points. Et nous devons normaliser non pas les prix d'ouverture Ask et Bid, mais le résultat des calculs SL et TP.

En général, "apprendre, apprendre et encore apprendre" ))))

Merci beaucoup)))) Vous m'avez beaucoup aidé, maintenant tout fonctionne :3
 

Encore une fois, merci beaucoup !

Maintenant il y a un problème, l'EA ouvre plusieurs ordres à la suite, et non un seul comme je le voulais(

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

 

J'ai constaté un comportement étrange dans le testeur de stratégie. Mon EA fixe et traque les ordres stop en attente. Il se passe ce qui suit. Le conseiller expert fixe un Stop d'achat et un Stop de vente à 30 pips du prix actuel (symbole - GbpUsd. Quatre chiffres. Niveau minimal = 3 pips). Au bout d'un moment, il les fait remonter en suivant le marché, s'ils ne se sont pas déclenchés. Donc ce que je vois. la modification est réussie, la modification est réussie, et puis à un moment donné les claquements et l'erreur #1 apparaissent. C'est-à-dire que tout allait bien, l'EA faisait les mêmes actions et soudain cette erreur apparaît. Tous les prix ont été normalisés en chiffres. En général, toutes les valeurs qui sont transmises à l'entrée de la fonction OrderModify() sont normalisées !

Quelle peut être la raison d'un tel comportement de l'EA dans le testeur ?