Errori, bug, domande - pagina 2936

 
x572intraday:

Risultato:

Qual è il numero dispari non risolto? Non trovato o cercato su Google in Aiuto. Non sembraEMPTY_VALUE.

Una specie di spazzatura.

Valore impostato

int Arr[1]={0};
 
Vitaly Muzichenko:

Un po' di spazzatura

Impostare il valore.

Non per la pratica, ma per pura curiosità teorica. Un altro numero (9xxx - non ricordo esattamente) assomigliava di più alla spazzatura ed è apparso solo una volta e non sono più riuscito a riprodurlo, mentre il numero sopra era costante e si ripeteva di tanto in tanto. (Mi chiedo se è lo stesso per te e per gli altri?) Non mi interessa, l'importante è che gli altri programmatori non ci inciampino dolorosamente.

 
x572intraday:

Non era per pratica, ma per pura curiosità teorica. Un altro numero (9xxx - non ricordo esattamente) era più simile alla spazzatura e appariva solo una volta e non poteva più essere riprodotto, mentre il numero sopra era costante e si ripeteva di tanto in tanto. (Mi chiedo se è lo stesso per te e per altri?) Non mi interessa, l'importante è che gli altri programmatori non ci inciampino dolorosamente.

Ho "0", l'ho controllato diverse volte

 
Vitaly Muzichenko:

Ho ottenuto uno 0, controllato diverse volte.

Hmm... Non so come una circostanza sia collegata all'altra, ma l'ho eseguito come indicatore su diverse coppie di valute - i numeri salgono in modo diverso (su ogni strumento lo stesso numero è ripetuto ad ogni tick ), c'era persino uno zero. È strano. Ma sembra che senza inizializzare con il proprio numero sia davvero una schifezza.

 
x572intraday:

Hmm... Non so come una circostanza sia collegata all'altra, ma ho eseguito come indicatore su diverse coppie di valute - i numeri salgono in modo diverso (su ogni strumento lo stesso numero è ripetuto ad ogni tick ), c'era persino uno zero. È strano. Ma sembra che senza inizializzare con il proprio numero sia davvero una schifezza.

Ricontrollato di nuovo inserendo il codice per zecche

in mt4 è sempre 0.

in mt5 sì, 0 è estremamente raro, il numero è 511026368

 
x572intraday:

Hmm... Non so come una circostanza sia collegata all'altra, ma l'ho eseguito come indicatore su diverse coppie di valute - i numeri salgono in modo diverso (su ogni strumento lo stesso numero è ripetuto ad ogni tick), c'era persino uno zero. È strano. Ma sembra che senza inizializzazione con il proprio numero sia davvero una schifezza.

L'array (e tutte le altre variabili) vengono allocate in memoria al momento della creazione. Se l'array non è inizializzato, qualsiasi cosa sia rimasta lì dagli usi passati=trash.

Se non cambiate i valori dal programma, non succede niente a questa memoria, la spazzatura mantiene il suo valore.

In MT4, tutte le variabili e gli array sono forzati ad essere inizializzati con zero.

 

CExpert.TradeEventOrderTriggered() non chiamato

Quando si lavora con il mercato FORTS, server BCS-Demo, è apparsa una certa instabilità della chiamata CExpert.TradeEventOrderTriggered() quando vengono attivati gli ordini pendenti.
Il codice del metodo CExpert::CheckTradeState della libreria standard MQL5 non tiene conto della possibile ricezione asincrona di informazioni su posizioni, ordini, operazioni e storia.

1446://--- check triggering of a pending order
1447:   if(hist_ord_tot==m_hist_ord_tot+1 && ord_tot==m_ord_tot-1)
1448:     {
1449:      //--- triggering of a pending order
1450:      if(deal_tot==m_deal_tot+1)

Quando il codice viene eseguito su dati storici, le condizioni funzionano correttamente. Quando si lavora con dati reali, ci possono essere situazioni in cui le informazioni sui cambiamenti di posizioni, accordi, ordini e storia non sono ottenute allo stesso tempo, e l'ordine in cui le informazioni sono ottenute è casuale.

Log delle chiamate del metodo bool CExpert::CheckTradeState(void). Una chiamata diCheckTradeState() corrisponde a 2 righe " CheckTradeState: .....".

//Сработал отложенный ордер открытия позиции
CheckTradeState: hist_ord_tot = 613 ord_tot = 0 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 613 m_ord_tot = 1 m_deal_tot = 543 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 614 ord_tot = 1 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 614 m_ord_tot = 1 m_deal_tot = 544 m_pos_tot = 1

//Сработал отложенный ордер открытия позиции 
CheckTradeState: hist_ord_tot = 615 ord_tot = 1 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 545 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 615 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 546 m_pos_tot = 1
CheckTradeState: hist_ord_tot = 616 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 616 m_ord_tot = 0 m_deal_tot = 546 m_pos_tot = 1

Si può vedere dal log:
1. Quando un ordine pendente si innesca, la lunghezza della storia viene aggiornata più tardi rispetto alle informazioni sulle operazioni, gli ordini e le posizioni, il che porta al mancato rispetto della prima condizione nel codice.
2. Possibile non sincronizzazione della ricezione delle informazioni sui cambiamenti del numero di ordini, operazioni e posizioni, il che porta all'impossibilità di soddisfare la seconda condizione nel codice (se si può in qualche modo aggirare il primo problema ed eseguire il primo if). Forse questa desincronizzazione si è verificata quando un ordine è stato eseguito in 2 passi (in parti: 1 lotto+1 lotto), ma in quel caso perché il numero di operazioni +1, e non +2.

Sono rimasto bloccato con questo codice:

//--- establishment of the checkpoint history of the trade
   bool isSyncMode = MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_VISUAL_MODE);
   if(!isSyncMode)
      HistorySelect(m_beg_date,TimeCurrent());
   else
      HistoryPoint(true);
//---
   return(res);

Il punto del blocco: se in modalità asincrona siamo arrivati alla fine della procedura, ciò è possibile quando la storia non è caricata, recuperiamo la storia, ma non memorizziamo i valori delle quantità degli ordini, ecc.

P.S. Sembra che questa parte della libreria standard sia poco sviluppata. Particolarmente sconcertante è un frammento di codice scritto 3 volte di seguito.

1458: res=TradeEventOrderTriggered();
1459: //--- establishment of the checkpoint history of the trade
1460: HistoryPoint(true);
1461: return(res);

Scrivo qui sperando che il problema venga notato e che qualcosa venga corretto da qualche parte.

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ha guardato la dimensione dei file EX5 EA nel Mercato. Tutti quelli che ho guardato sono sotto i 200 Kb. Cosa vi fa raggiungere dimensioni così piccole? Un semplice codice?
 
fxsaber:
Ho guardato le dimensioni dei file EX5 Expert Advisor nel mercato. Tutti sono più piccoli di 200 KB. Cosa vi permette di ottenere una dimensione così piccola? Un semplice codice?

Penso che gli autori siano dei geni, il 90% dei migliori venditori non hanno nessuna domanda sulla piattaforma - quindi scrivono i codici con un istinto naturale ))))


Ecco la domanda:

Sto inserendo dei dati:

#resource "Common\\Files\\EURUSD_tick.bin" as const MqlTick HistoryData[]

Ricevo un errore:

file di risorse 'Common\Files\EURUSD_tick.bin' non trovato

impossibile aprire il file risorsa .....\\\\MQL5\Experts\Virtual\common\Files\EURUSD_tick.bin' (3)

Se metto il file nella cartella EA o nella cartella Files, tutto va bene.


È possibile che la risorsa non possa essere montata dalla cartella Common? -O devo specificare un altro percorso?

 
Igor Makanu:

Penso che gli autori siano dei geni, il 90% dei migliori venditori non hanno nessuna domanda sulla piattaforma - quindi scrivono i codici con una conoscenza innata ))))

Per domande altri conti.

Non puoi collegare la risorsa dalla cartella Common? -o hai bisogno di un altro modo di prescrivere?

Non lo so.