Errori, bug, domande - pagina 123

 

Lasciate che gli sviluppatori lo risolvano. Ecco uno screenshot di 3 esecuzioni di questo script.

Non funziona per me.

 
Prival:

Bug - prima funzionava, ma ora no.

Grazie per il suo messaggio.

Continueremo a cercare.

 

Trovato un piccolo bug nel metodo PrintCheckResult (file Trade.mqh, classi Trade, classe CTrade).

void CTrade::PrintCheckResult(void) const
{
printf("CheckResult");
// printf("%d,%f,%f,%f,%f,%f,%f,'%s'", - il penultimo parametro non è necessario
printf("%d,%f,%f,%f,%f,%f,'%s'",
m_check_result.retcode,m_check_result.balance,m_check_result.equity,
m_check_result.margin,m_check_result.margin_free,m_check_result.margin_level,
m_check_result.comment);
}

Al posto della stringa: printf("%d,%f,%f,%f,%f,%f,%f,'%s'", - commentato da me

ci dovrebbe essere una linea: printf("%d,%f,%f,%f,%f,%f,%f,'%s'",

Ho controllato, la funzione corretta funziona correttamente.

 
Prival:

Bug - prima funzionava, ma ora no.

Grazie per il messaggio. Sarà disponibile nel prossimo aggiornamento. Per farlo funzionare nella versione attuale, usate il casting esplicito per la costante o la moltiplicazione in generale

void OnStart()
  {
  // вот так работает
     Print(TimeCurrent()+2*PeriodSeconds(PERIOD_D1));
  // а вот так нет (а раньше работало)  
     datetime    time_end=0;
     time_end=TimeCurrent()+(long) 2*PeriodSeconds(PERIOD_D1);
     Print(time_end);
  }
 
retired:

Trovato un piccolo bug nel metodo PrintCheckResult (file Trade.mqh, classi Trade, classe CTrade).


Grazie per il messaggio.

Sarà presto risolto.

 
mql5:

Grazie per il suo messaggio. Sarà disponibile nel prossimo aggiornamento. Per farlo funzionare nella versione attuale usate il casting esplicito per la costante o la moltiplicazione in generale

Grazie. Se ho capito bene era dovuto alla conversione dei tipi. Peccato che non ci sia questo messaggio in fase di compilazione, sarebbe stato più facile da trovare
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Prival:
Grazie. Se ho capito bene era dovuto alla conversione del tipo. È un peccato che non ci sia questo messaggio in fase di compilazione, sarebbe più facile da trovare
Il tuo codice è corretto, non c'è nulla di cui lamentarsi. L'errore è davvero nella conversione degli operandi sotto x64 ed è stato risolto. Aspetta un aggiornamento.
 

Gli errori ENUM_TRADE_RETURN_CODES devono essere interpretati correttamente per poterli gestire correttamente. C'è del materiale per descriverli in dettaglio?

In particolare, i seguenti errori non sono completamente compresi:

10008

CODICE COMMERCIALE PIAZZATO

Ordine effettuato

10021

SCONTO_DI_RETROCODICE_COMMERCIALE

Nessun preventivo disponibile per elaborare la richiesta


10028

TRADE_RETCODE_LOCKED

Query bloccata per l'elaborazione

10029

TRADE_RETCODE_FROZEN

Ordine o posizione congelati

Qualcuno può aiutare con questo problema?

 
retired:

Gli errori ENUM_TRADE_RETURN_CODES devono essere interpretati correttamente per poterli gestire correttamente. C'è del materiale per descriverli in dettaglio?

In particolare, i seguenti errori non sono completamente compresi:

10008

CODICE COMMERCIALE PIAZZATO

Ordine effettuato

10021

SCONTO_DI_RETROCODICE_COMMERCIALE

Nessun preventivo disponibile per elaborare la richiesta


10028

TRADE_RETCODE_LOCKED

Query bloccata per l'elaborazione

10029

TRADE_RETCODE_FROZEN

Ordine o posizione congelati

Qualcuno può aiutare con questo problema?

Tutto ciò si riferisce ai codici che vengono restituiti dal server in risposta alla richiesta del terminale. Ecco perché tutto è dato nella sezione "Trade server return codes".

Sarebbe logico supporre che la lista contenga più di semplici errori.

Ora in ordine.

Per quanto riguarda

10008

CODICE COMMERCIALE PIAZZATO

Ordine effettuato


Sarebbe logico supporre che questa risposta non è un errore ma semplicemente informa il cliente (il terminale di trading) che l'ordine è stato piazzato con successo.

In questo caso ci sono tre possibili soluzioni:

1. Non elaborare affatto la risposta;

2. elaborare il piazzamento dell'ordine nel blocco OnTrade() - abbastanza accettabile, ma non molto corretto secondo me;

A mio parere, questo è il modo migliore per elaborare un commercio meccanico.

PS

Preferisco elaborare le risposte del server al posto dell'ordine e catturare il risultato delle azioni di un trader, del server o di altri Expert Advisors in OnTrade().

Per esempio, in OnTrade è possibile catturare le operazioni di trading del trader (impostazione o cancellazione di un ordine così come le operazioni con le posizioni).


Per quanto riguarda


10029

TRADE_RETCODE_FROZEN

L'ordine o la posizione sono congelati


C'è un certo livello al quale una posizione o un ordine sono "congelati" (qualsiasi operazione con essi è proibita).

Questo livello è una distanza dal prezzo corrente al quale il server proibisce qualsiasi azione con l'ordine o la posizione. Questa distanza è misurata in pip e viene impostata per ogni simbolo.

Può essere ottenuto usando SymbolInfoInteger() conil parametro SYMBOL_TRADE_FREEZE_LEVEL.

Se ricevete una tale risposta dal server, dovreste aspettare che succeda una delle due cose:

1. Il prezzo non si è spostato della distanza richiesta (maggiore di quella specificata nelle proprietà del simbolo);

2. l'ordine o la posizione non funzionano nelle condizioni stabilite in essi.


Per quanto riguarda

10021

SCONTO_DI_RETROCODICE_COMMERCIALE

Nessun preventivo per elaborare la richiesta


Probabilmente, quando si ottiene questa risposta, si dovrebbe controllare il nome del simbolo (per sicurezza), assicurarsi che il simbolo sia selezionato (importante per tester e multicast), controllare la disponibilità dello storico, anche sul server (se deve essere scaricato), probabilmente assicurarsi che il mercato sia aperto e il trading sul simbolo sia possibile.

PS

Anche se qui sarà necessario specificare agli sviluppatori


Che dire di

10028

TRADE_RETCODE_LOCKED

Richiesta bloccata per l'elaborazione


Questa è probabilmente la più specifica delle risposte del server elencate sopra... è più probabile che abbia bisogno di un chiarimento da parte degli sviluppatori (supporrò semplicemente che tu debba aspettare un certo periodo di tempo)...

 
Interesting:

Per quanto riguarda


10029

TRADE_RETCODE_FROZEN

Ordine o posizione congelati


C'è un certo livello al di sotto del quale una posizione o un ordine sono "congelati" (qualsiasi azione con essi è vietata).

Questo livello è una distanza dal prezzo corrente al quale il server proibisce qualsiasi azione con l'ordine o la posizione. Questa distanza è misurata in pip ed è impostata per ogni simbolo.

Può essere ottenuto usando SymbolInfoInteger() con ilparametro SYMBOL_TRADE_FREEZE_LEVEL.

Se ricevete una tale risposta dal server, dovreste aspettare che succeda una delle due cose:

1. Il prezzo non si è spostato della distanza richiesta (maggiore di quella specificata nelle proprietà del simbolo);

2. l'ordine o la posizione non ha soddisfatto le condizioni stabilite in essi.


Grazie per la risposta dettagliata, capisco il codice "10029: TRADE_RETCODE_FROZEN: Order or position is frozen".

Ma abbiamo ancora domande sul resto di loro (voglio sapere la risposta esatta e non le congetture):

10008

CODICE COMMERCIALE PIAZZATO

Ordine effettuato

10021

SCONTO_DI_RETROCODICE_COMMERCIALE

Nessun preventivo disponibile per elaborare la richiesta


10028

TRADE_RETCODE_LOCKED

La richiesta è bloccata per l'elaborazione

In particolare, non è molto chiaro cosa significhi "10008: L'ordine è stato piazzato", perché quando l'ordine viene messo in coda sul server, gli viene assegnato un ticket e viene restituito il codice "10009: TRADE_RETCODE_DONE: Request executed".

Motivazione: