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

 

Buon pomeriggio!

Sto imparando a scrivere Expert Advisor sull'esempio di questo articolo e ho riscontrato il seguente problema: quando cerco di inviare una richiesta per un trade ottengo l'errore 10014 - volume errato. Ho controllato il volume massimo consentito per la transazione SYMBOL_VOLUME_MAX - e mi viene restituito 0. Ma allo stesso tempo le operazioni manuali vengono aperte normalmente.

Potete dirmi cosa sto sbagliando o dove guardare? Utilizzo il codice dell'Expert Advisor, che è allegato all'articolo.

Grazie.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
grazie per il tuo articolo.
 

Ciao,

il codice sembra perfetto, ma quando lo provo ottengo questo errore

2011.11.13 23:39:58 2011.11.01 14:20:00 Avviso: Non è stato possibile completare la richiesta di ordine di vendita -errore:4756
2011.11.13 23:39:58 2011.11.01 14:20:00 fallita la vendita istantanea di 1,00 EURUSD a 1,36833 sl: 1,37133 tp: 1,35833 [Richiesta non valida].

Nessuna operazione è stata eseguita.

Qualcuno potrebbe aiutarmi a risolvere il problema?

Grazie

F

[Eliminato]  
Financialabs:

Ciao,

il codice sembra perfetto, ma quando lo provo ottengo questo errore

2011.11.13 23:39:58 2011.11.01 14:20:00 Avviso: Non è stato possibile completare la richiesta di ordine di vendita -errore:4756
2011.11.13 23:39:58 2011.11.01 14:20:00 fallita la vendita istantanea di 1,00 EURUSD a 1,36833 sl: 1,37133 tp: 1,35833 [Richiesta non valida]

Non viene eseguita alcuna operazione.

Qualcuno potrebbe aiutarmi a risolvere il problema?

Grazie

F

Ho fatto la stessa domanda e nessuno mi ha risposto.

L'ho trovato.

Si tratta di un bug. È necessario aggiungere una riga di codice

ZeroMemory(mrequest);

Questa riga dovrebbe essere prima delle righe mrequest.action=... mrequest.price=... ecc.

 

Salve.

Grazie mille per la guida dettagliata e chiara.

Ho un problema. Il programma si compila, ma al primo tentativo di creare una richiesta compare il seguente errore: "Request to set Sell order failed - error code:4756".

Non ho trovato nulla nella documentazione. Potete dirmi cosa posso fare o dove posso trovare informazioni?

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 
Alfff:

Ho un problema. Il programma si compila, ma al primo tentativo di creare una richiesta appare il seguente errore: "Request to set Sell order failed - error code:4756".

Non ho trovato nulla nella documentazione. Potete dirmi cosa si può fare per risolvere questo problema o dove trovare informazioni?

Risolto, scaricare la versione aggiornata dell'Expert Advisor.

Il problema era nella struttura mrequest, che deve essere azzerata prima con la funzione ZeroMemory. Prima delle righe con "mrequest.action=TRADE_ACTION_DEAL;" (pag. 199 e 245) è necessario aggiungere "ZeroMemory(mrequest);".

 
senerzen:

Ho posto la stessa domanda e nessuno ha risposto.

L'ho trovato.

Si tratta di un bug. È necessario aggiungere una riga di codice

ZeroMemory(mrequest);

Questa riga dovrebbe essere prima delle righe mrequest.action=... mrequest.price=... ecc.

Grazie, il bug è stato risolto.
Get in touch with developers using Service Desk!
  • www.mql5.com
We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them.
 
papaklass:
È sempre necessario farlo, cioè azzerare la struttura di richiesta prima della richiesta?
Prima di inviare una richiesta, tutti i campi della struttura devono essere inizializzati (in questo caso si usa la funzione ZeroMemory, anche se è possibile farlo elemento per elemento), l'inizializzazione deve essere fatta dopo la dichiarazione della struttura.
 
Automated-Trading:
Prima di inviare una richiesta, tutti i campi della struttura devono essere inizializzati (in questo caso si usa la funzione ZeroMemory, anche se si può fare elemento per elemento), l'inizializzazione deve essere fatta dopo la dichiarazione della struttura.

È scritto così nel Manuale di riferimento? (Non ho la possibilità di controllare ora).

Risulta che è sufficiente dichiarare una variabile di tipo struttura una volta a livello globale del programma, inizializzarla una volta e non tornare più sulla questione dell'utilizzo della funzione ZeroMemory ?

 
Yedelkin:

Il manuale dice qualcosa al riguardo? (Non ho la possibilità di controllarlo ora)

Qualsiasi variabile non è obbligata ad essere azzerata quando viene dichiarata. È il programmatore che deve pulire/assegnare tutte le variabili prima di utilizzarle.

L'uso di variabili (soprattutto strutture) non inizializzate (o incomplete) è un errore molto comune nella programmazione.

Si scopre che è sufficiente dichiarare una variabile di tipo struttura una volta a livello globale del programma, inizializzarla una volta e non tornare più sulla questione dell'uso della funzione ZeroMemory ?

È meglio inizializzare correttamente le variabili invece di combattere (inutilmente e in modo più pericoloso) con l'inizializzazione portandola a livello globale.

È così facile porsi la domanda "perché penso che qualcuno inizializzerà le variabili e soprattutto le strutture complesse per me"?

È molto comodo azzerare le strutture senza lo scomodo ZeroMemory quando lo si dichiara:

   MqlTick my={0};