Discussione sull’articolo "Guida Step-By-Step alla scrittura di un Expert Advisor in MQL5 per Principianti" - pagina 17

 
Molto bello! Grazie!
 

Ho scaricato il file e ho eseguito il debug del codice, e ha mostrato questo avviso qualcuno potrebbe aiutarmi con questo?


il valore di ritorno di'OrderSend' dovrebbe essere controllato


 

Salve, sono un principiante e sto testando il Robot.

Prova questo:

// OrderSend(mrequest,mresult);

bool res=OrderSend(mrequest,mresult);

// ottenere il codice del risultato

if(res && (mresult.retcode==10009 || mresult.retcode==10008)) //Richiesta completata o ordine effettuato

{

Alert("È stato effettuato un ordine di acquisto con Ticket#:",mresult.order,"!");

}

altrimenti

{

Alert("La richiesta di ordine di acquisto non è stata completata -errore:",GetLastError());

ResetLastError();

ritorno;

}

Se mi sbaglio, per favore correggetemi!

Fonte della ricerca: https://www.mql5.com/en/forum/23663

return value of 'OrderSend' should be checked
return value of 'OrderSend' should be checked
  • 2014.05.03
  • www.mql5.com
Hi ! I'm wondering how to do that ...:/ the warning appeared @ the last update...
 

Quando eseguo il debug, ottengo sempre un errore quando invio l'ordine. Ho pensato che fosse il mio codice, ma anche quando provo il file mql5 per il download mi dà un errore.



 
northedan:

Quando eseguo il debug, ottengo sempre un errore quando invio l'ordine. Ho pensato che fosse il mio codice, ma anche quando provo il file mql5 per il download mi dà un errore.



Penso che l'esempio sia in valute, quindi la variabile lotto che è 0,1 non è adatta al vostro test, provate a cambiarla in questo modo (cambiando la variabile mrequest.volume):


double minSymbolLot = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);

mrequest.action = TRADE_ACTION_DEAL; // esecuzione immediata dell'ordine

mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // ultimo prezzo ask

mrequest.sl = NormaliseDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss

mrequest.tp = NormaliseDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit

mrequest.symbol = _Symbol; // coppia di valute

mrequest.volume = minSymbolLot; // numero di lotti da negoziare

mrequest.magic = EA_Magic; // numero magico dell'ordine

mrequest.type = ORDER_TYPE_BUY; // ordine di acquisto

mrequest.type_filling = ORDER_FILLING_FOK; // Tipo di esecuzione dell'ordine

mrequest.deviation=100;

 
Qualcuno sa se posso usare questo EA per i mini-indici o i mini-dollari?
 
Sella170:
Qualcuno sa se posso usare questo EA per i mini-indici o i mini-dollari?

Avete capito la strategia? Siete consapevoli dei rischi? Avete analizzato i livelli di SL e TP? Conoscete gli indicatori tecnici utilizzati? Sapete come parametrizzarli? Sapete come personalizzare le variabili per ogni asset (WIN e WDO)?

Il codice stesso è stato sviluppato per qualsiasi asset e lo si può identificare attraverso il "_Simbolo" e per qualsiasi tempo grafico "_Periodo".

Ora è importante che sappiate cosa state facendo quando eseguite l'EA. Se decidete di farlo, vi suggerisco di lavorare solo su conti demo fino a quando non padroneggiate lo strumento e non avete una migliore comprensione del mercato azionario.

[ ]'s

 

Ragazzi,

Questo è un semplice codice modificato se si verifica un errore con l'apertura di più ordini contemporaneamente.

Sostituite questo codice: dalla riga 167 -177

   if(PositionSelect(_Symbol)==true) // abbiamo una posizione aperta
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //È un acquisto
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // È una vendita
        }
     }

con questo:

   int total= PositionsTotal();
   for(int i=0;i<total;i++)
     {
      if(PositionGetSymbol(i)==_Symbol);
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            Buy_opened=true;  //È un acquisto
           }
         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; // È una vendita
           }
        }
      }

Grazie @Samuel Olowoyo

 
Korobejnik:

Consigliare come risolvere il problema. L'Expert Advisor apre diverse posizioni di fila per l'acquisto, lo stesso per la vendita.

L'Expert Advisor non vede che ci sono già posizioni di acquisto e di vendita aperte e ne apre di nuove, nonostante ci sia un controllo nel codice.

sulle posizioni già aperte. Per qualche motivo il controllo non funziona.

Dato che qui non c'è aiuto da parte dei troll-moderatori, copierò la risposta dal forum inglese:

Ragazzi, questo è un codice semplice e veloce da modificare, se avete un errore con diversi ordini che si aprono nello stesso momento. Sostituite questo codice: dalla riga 167 -177

   if(PositionSelect(_Symbol)==true) // abbiamo una posizione aperta
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //È un acquisto
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // È una vendita
        }
     }

Con questo:

   int total= PositionsTotal();
   for(int i=0;i<total;i++)
     {
      if(PositionGetSymbol(i)==_Symbol);
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            Buy_opened=true;  //È un acquisto
           }
         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; // È una vendita
           }
        }
      }
 
Locus_Neminis:

Dal momento che non posso ottenere alcun aiuto dai troll-moderatori qui, copierò la risposta dal forum inglese:

Ragazzi, questo è un codice semplice e veloce da modificare se avete un errore con l'apertura di più ordini contemporaneamente. Sostituite questo codice: dalla riga 167 -177

con questo:

Questo non aiuterà. Ho una discussione su questo argomento sul mio profilo. Lì ci sono la causa e la soluzione del problema.
Non capisco i troll.