Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 911

 
Viktorline14:
Ragazzi aiuto per favore!!!

È più facile fare uno screenshot e postarlo qui che copiare il testo dell'EA? Pensi che qualcuno lo digiti manualmente nel suo ME da uno screenshot e cerchi di capirlo?

Se il compilatore dice che deve controllare il risultato della funzione, deve essere controllato. Non è 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);

Grazie. Giusto o sbagliato, però? L'avvertimento viene ancora fuori

 
Avete lo stoploss e il takeprofit in valori assoluti, e ne avete bisogno in valori relativi, come Bid - Sl*Point.
 
abeiks:

Ciao!

Nel mio Expert Advisor, viene controllata la candela precedente e se le condizioni lo permettono, la posizione viene aperta, altrimenti non viene aperta. Il problema è che la posizione viene aperta prima che venga controllata la condizione della candela precedente. Poi vedo l'apertura della posizione nel log e poi vedo che non dovrebbe essere aperta. Come risolvere il problema?

Grazie, l'ho capito da solo. Ho messo la funzione che controlla la candela precedente sopra la funzione che apre una posizione.
 
Mi scuso per la sciatteria
 
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("Opening Buy error #", GetLastError());}
else 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; }

else Sleep(2);

E con i relativi dà la stessa cosa (

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

Grazie. Giusto o sbagliato, però? L'avvertimento viene ancora fuori

Sbagliato, non è necessario chiamare OrderSend due volte. E dovremmo calcolare SL e TP rispetto al prezzo, non in pip. E dovremmo normalizzare non i prezzi aperti Ask e Bid, ma il risultato dei calcoli SL e TP.

In generale, "imparare, imparare e ancora imparare" ))))

 
evillive:

Sbagliato, non c'è bisogno di chiamare OrderSend due volte. E SL e TP dovrebbero essere calcolati rispetto al prezzo, non in punti. E dovremmo normalizzare non i prezzi di apertura Ask e Bid, ma il risultato dei calcoli SL e TP.

In generale, "imparare, imparare e ancora imparare" ))))

Grazie mille))) Mi avete aiutato molto, ora tutto funziona:3
 

Grazie mille ancora!

Ora c'è un problema, l'EA apre diversi ordini in fila, non uno solo come volevo (

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

 

Ho visto un comportamento strano nel tester di strategia. Il mio EA imposta e pesca gli ordini di stop pendenti. Succede quanto segue. L'Expert Advisor imposta un Buy Stop e un Sell Stop a 30 pip dal prezzo corrente (simbolo - GbpUsd. Quattro cifre. Livello minimo = 3 pip). Dopo un po' li tira su seguendo il mercato, se non si sono attivati. Così quello che vedo. la modifica ha successo, la modifica ha successo, e poi ad un certo punto nel tempo sbatte e l'errore #1 salta fuori. Cioè, tutto andava bene, l'EA stava facendo le stesse azioni e improvvisamente è apparso questo errore. Tutti i prezzi sono stati normalizzati in cifre. In generale, tutti i valori che vengono passati all'input della funzione OrderModify() sono normalizzati!

Quale può essere la ragione di tale comportamento dell'EA nel tester?