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

 

Ciao a tutti,

Sono nuovo di MQL5 (e del FOREX se è per questo) ma programmatore di lunga data. Ho aperto il file My_First_EA.mq5 e l'ho compilato ma non ottengo le funzioni di Debug. Se apro uno qualsiasi dei file di script di esempio, ottengo l'opzione Debug. Ho anche ricevuto un'avvertenza: il valore di ritorno di 'OrderSend' deve essere controllato. Cosa devo fare per ottenere la funzionalità di Debug?

Luigi

 
louisd:

Ciao a tutti,

Sono nuovo di MQL5 (e del FOREX se è per questo) ma programmatore di lunga data. Ho aperto il file My_First_EA.mq5 e l'ho compilato, ma non ottengo le funzioni di Debug. Se apro uno qualsiasi dei file di script di esempio, ottengo l'opzione Debug. Ho anche ricevuto un'avvertenza: il valore di ritorno di 'OrderSend' deve essere controllato. Cosa devo fare per ottenere la funzionalità Debug?

Luigi

Ciao a tutti,

Ho risolto il mio problema. Ho creato un nuovo progetto con l'Expert Advisor Wizard e poi ho copiato il file My_First_EA.mq5 e ho ottenuto la funzionalità di debug.

Luigi

 
louisd:

Ciao a tutti,

Ho risolto il mio problema. Ho creato un nuovo progetto con l'Expert Advisor Wizard e poi ho copiato il file My_First_EA.mq5 e ho ottenuto la funzionalità di debug.

Luigi

Ma hai risolto l'avviso "OrderSend deve essere controllato"?
 
Boobwood:

Ho avuto l'errore 4756, ho visto la soluzione a pagina 2, e ho controllato il codice originale, c'era ZeroMemory(mrequest); nella stessa riga 218. ma ho ancora l'errore 4756.


Ho ancora questo errore anche dopo aver fatto entrambe le correzioni suggerite:

ZeroMemory(mrequest);

e anche

if(Buy_opened || Sell_opened)

Qualcuno può aiutarmi con l'errore 4756? Sembra che non riesca a piazzare un ordine di acquisto.

 
Tchuso:

Salve, ricevo un errore:

Il valore di ritorno di 'OrderSend'deve essere controllato alle righe 213 e 259.


hai risolto?

Buongiorno Tchuso,

Mi è successa la stessa cosa. Ho risolto sostituendo quelle righe in entrambe le operazioni con questa.

if(!OrderSend(mrequest,mresult))
PrintFormat("OrderSend error %d",GetLastError());

Dimmi se hai bisogno di aiuto, sono nuovo anch'io.

Cordiali saluti!

 

Mi piace molto il codice di esempio, anch'io sono alle prime armi, ho sistemato il codice come appare nei commenti e non dà più errori.

Il problema è che il robot non apre i trade, non apre nemmeno un trade.

Qualcuno è riuscito a risolvere questo problema?


Sto usando l'opzione "Unico" del tester della strategia: è un mio errore?


Grazie per il vostro tempo e supporto
 


Ho notato che il robot cerca di aprire gli ordini ma dà sempre un errore:


Esci:

2020.05.06 20:35:16.141 Core 1 2020.04.20 20:25:00 failed market sell 0.10 EURUSD sl: 1.08965 tp: 1.07665 [Invalid request].


Ho cambiato diverse cose nel codice ma non funziona, aggiungo il codice che ho:


Originale: mrequest.type_filling = "L'ho messo nei 3 modi che sono nella documentazione".

 mrequest.action = TRADE_ACTION_DEAL;                                  // esecuzione immediata dell'ordine
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // ultimo prezzo richiesto
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Prendere profitto
         mrequest.symbol = _Symbol;                                            // coppia di valute
         mrequest.volume = Lot;                                                 // 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_RETURN;                             // Tipo di esecuzione dell'ordine
         mrequest.deviation=100;                      
        



Tambien he probado este codigo:

 //-- dichiarazione e inizializzazione della richiesta e del risultato
               MqlTradeRequest request={0};
               MqlTradeResult  result={0};
            //--- parametri dell'applicazione
               request.action   =TRADE_ACTION_DEAL;                     // tipo di attività commerciale
               request.symbol   =Symbol();                              // simbolo
               request.volume   =0.1;                                   // volume di 0,1 lotti
               request.type     =ORDER_TYPE_BUY;                        // tipo di ordine
               request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // prezzo di apertura
               request.deviation=5;                                     // deviazione di prezzo ammissibile
               request.magic    =EA_Magic;                          // Numero magico dell'ordine

               //--- invio della domanda
               if(!OrderSend(request,result))
               PrintFormat("OrderSend error %d",GetLastError());     // se non è stato possibile inviare la richiesta, inserire il codice di errore
               //--- informazioni sull'operazione
               PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
 
Libni Colina:


Ho notato che il Robot cerca di aprire gli ordini ma dà sempre un errore:


Exit:

2020.05.06 20:35:16.141 Core 1 2020.04.20 20:25:00 failed market sell 0.10 EURUSD sl: 1.08965 tp: 1.07665 [Invalid request].


Ho cambiato diverse cose nel codice ma non funziona, aggiungo il codice che ho:


Originale: mrequest.type_filling = "L'ho messo nei 3 modi che sono nella documentazione".


Aggiungere questo all'inizio del codice:

#include <Trade\Trade.mqh>

E poi per aprire un'operazione basta digitare questo:

double volumen= 0.01; // O il volume desiderato

CTrade m_trade;

m_trade.Buy(volumen); // Acquisto

m_trade.Sell(volumen); // Vende
 
Ciao, grazie per il tutorial, è stato molto utile. Ma ho un malinteso, le variabili New_Time dichiarate e inizializzate con la funzione CopyTimes ma Old_Time è stata dichiarata ma non inizializzata all'inizio e poi è stata confrontata con la variabile New_Time per verificare se c'è una nuova barra. Old_Time dovrebbe essere vuoto. Non so se l'ho descritto bene ma grazie per aver letto.
 

Ciao,


Allo stesso modo, ho il codice di errore 4756 durante l'esecuzione di test e ha detto "richiesta di ordine di vendita non può essere completato".

Si prega di informare come risolvere questo problema.


Grazie