Cari amici, vi propongo di creare qui un archivio di versioni MT. A volte con gli aggiornamenti possono verificarsi errori inaspettati e bisogna tornare a una versione precedente...
Ho bisogno di costruire 2007 ora. Ce l'hai? Condividetelo, per favore.
C'è un uomo che sta costruendo una collezione. Ma per quanto mi ricordo, i suoi post con i link agli archivi delle versioni MT vengono talvolta cancellati per non rallentare il progresso. ))
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Nuova versione di MetaTrader 5 build 2007: Calendario economico, MQL5-programmi come servizio
Andrey Khatimlianskii, 2019.03.15 23:03
Mi sono spostato su un altro account Google. Nuovo link qui.
Se avete bisogno di altre costruzioni, parlate, ce ne sono molte.
il mio link è stato ucciso qui,
gli sviluppatori suggeriscono di scaricare solo da fonti verificate
Se vuoi rischiare la mia costruzione, fammi un fischio.
si dovrebbe continuare a lavorare stabilmente nel portale o nell'archivio e aggiornare consapevolmente alle build di test
dovreste essere molto consapevoli di aggiornare alle ultime build.
il mio link è stato ucciso qui,
gli sviluppatori suggeriscono di scaricare solo da fonti verificate
Se vuoi rischiare la mia costruzione, fammi un fischio.
si dovrebbe continuare a lavorare stabilmente nel portale o nell'archivio e aggiornare consapevolmente alle build di test
si dovrebbe mantenere stabile il lavoro nel portatile o nell'archivio e in generale essere consapevoli di aggiornare le build di prova. la build 2007 può farlo in DC
Hanno ragione a rimuovere le vecchie versioni.
Dovete scrivere programmi normali. Non ignorare gli avvertimenti. Inizializzare le variabili e non usare quelle globali il più possibile. Evitare frammenti potenzialmente pericolosi nel codice.
Ho decine di migliaia di linee di codice - non un solo avvertimento in strict-mode. La metà dei miei progetti di base di codice hanno avvertimenti anche senza strict, anche se non contengono nemmeno migliaia di linee. E poi cominciate a lamentarvi che "tutto funzionava nella vecchia build e ha smesso di funzionare in quella nuova"...
Hanno ragione a rimuovere le vecchie versioni.
Bisogna scrivere i programmi in modo corretto. Non ignorare gli avvertimenti. Inizializzare le variabili e non usare quelle globali il più possibile. Evitare frammenti di codice potenzialmente non sicuri.
Non ho un solo avvertimentoin decine di migliaia di linee di codice in strict-mode. Metà dei miei progetti di base di codice riportano avvertimenti anche senza strict, anche se non contengono nemmeno un migliaio di stringhe. E poi cominciate a lamentarvi che "tutto funzionava nella vecchia build e ha smesso di funzionare in quella nuova"...
È il programma Mars Rover? Cosa si può descrivere in così tante righe?
C'è una persona qui che sta costruendo una collezione. Ma per quanto mi ricordo i suoi post con i link agli archivi della versione MT sono a volte cancellati per non far rallentare il progresso. ))
Grazie. Scaricato.
il link ha ucciso il mio link qui,
Gli sviluppatori suggeriscono di scaricare solo da fonti verificate.
Se volete rischiare la mia costruzione, basta che mi scriviate.
si dovrebbe continuare a lavorare stabilmente nel portale o nell'archivio e aggiornare consapevolmente alle build di test
Sono a DC ora con il 2007 costruire forse.
Non sto aggiornando sulle build di prova. Ma ora salverò))).
Hanno ragione a rimuovere le vecchie versioni.
Bisogna scrivere i programmi in modo corretto. Non ignorare gli avvertimenti. Inizializzare le variabili e non usare quelle globali il più possibile. Evitare frammenti di codice potenzialmente non sicuri.
Ho decine di migliaia di linee di codice e non un solo avvertimento sul strict-mode. La metà dei miei manichini di base del codice mostra avvertimenti anche senza strict, sebbene non contengano nemmeno mille stringhe. E poi cominciate a lamentarvi che "tutto funzionava nella vecchia build e ha smesso di funzionare in quella nuova"...
George, leggi il mio ultimo post nel thread. Ho trovato la fonte del problema. Non è nel mio codice.
Grazie. Scaricato.
Non aggiorno a quelli di prova. Ma ora lo salverò ))))
George, leggi il mio ultimo post nel thread. Ho trovato la fonte del problema. Non è nel mio codice.
L'ho letto.
La fonte del problema è che gli sviluppatori e voi avete affrontato la situazione in modo leggermente diverso. Ecco perché insisto sul fatto che il codice deve essere sempre molto semplice e chiaro, tranne i punti in cui ci possono essere ambiguità.
Mi ricordo, ai tempi in cui MT5 si stava appena facendo strada - ero stupito, la gente usava le variabili senza inizializzazione, pensando che avrebbero contenuto zero.
Non si può fare a meno di ricordare una barzelletta:
Pinocchio diede a Pinocchio tre mele. Ne ha mangiati due. Quante mele sono rimaste?
Programmatore N1:
- Non sai quanti sono. Nessuno sa quante mele aveva prima!
Morale: cancellare le variabili iniziali.
Programmatore N2
- Non è chiaro quanti. Forse mentre Malvina regalava le mele, anche Pierrot le mangiava?
Morale: non usate variabili globali.
Programmatore N3
- Non si sa quanti siano. Non dice che Pinocchio ha mangiato esattamente delle mele, dice che ne ha mangiate due, ma non è chiaro quali. Inoltre, dato che il nome "Pinocchio" non è declinato - Pinocchio e Pinocchio sono variabili diverse.
Morale: attenzione alla sintassi
Grazie. Scaricato.
Non aggiorno a quelli di prova. Ma ora lo salverò ))))
George, leggi il mio ultimo post nel thread. Ho trovato la fonte del problema. Non è nel mio codice.
E la fonte del problema era "non aver letto la documentazione", non la nuova build. Quindi fai il furbo dicendo che non è il tuo codice.
1:
Forum sul trading, sistemi di trading automatico e strategie di trading di prova
Sergey Tabolin, 2019.06.16 00:17
Ho trovato la ragione di questa indignazione.
Il fatto è questo:
//--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) TesterStop(); if(period_HMA7C == 0 && move_stop) TesterStop(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) TesterStop(); if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0) TesterStop(); if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0) TesterStop(); if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700)) TesterStop(); check_init = true; } //*/
Si scopre che dopo TesterStop(), OnTester() viene lanciato anche nella nuova versione, anche se non dovrebbe essere lanciato.
Naturalmente, nessun dato viene preparato e questo è ciò che otteniamo.
Questa è la colpa di MT 2085.
2:
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Sergey Tabolin, 2019.06.16 09:02
Scuse. La descrizione dice solo che OnTester() viene chiamato dopo. (((
Devo fare dei controlli anche lì. Proverò a sostituirlo con ExpertRemove()...
E poi "proverò" di nuovo. E poi, se i vostri tentativi non hanno successo, allora è di nuovo colpa di MQ?
Non ricordo, ma credo che ci sia una funzione speciale per saltare i passaggi "cattivi". E proprio quello che vuoi provare, gli sviluppatori non hanno raccomandato di usare - di nuovo - se la memoria non mi inganna.
Ma ciò che è importante nel mio messaggio - prima di scaricare la colpa sugli sviluppatori, devi prima leggere la documentazione, chiedere una soluzione sul forum, e solo allora, e solo se l'errore è davvero trovato, scrivere un bug report con un codice minimo che lo riproduca. Sarebbe una cosa seria, ma per il resto...
E la fonte del problema era "non aver letto la documentazione", non la nuova build. Quindi stai mentendo sul fatto che il codice non è tuo.
1:
2:
E poi vai avanti a "provare" di nuovo... E poi, se i vostri tentativi non hanno successo, allora è di nuovo colpa di MQ?
Non ricordo, ma credo che ci sia una funzione speciale per saltare i passaggi "cattivi". E proprio quello che vuoi provare, gli sviluppatori non hanno raccomandato di usare - di nuovo - se la memoria non mi inganna.
Ma ciò che è importante nel mio messaggio - prima di spingere la colpa sugli sviluppatori, si dovrebbe prima leggere la documentazione, chiedere una soluzione sul forum, e solo allora, e solo nel caso di un bug veramente trovato - scrivere un bug report con la riproduzione con codice minimo. Sarebbe una cosa seria, ma per il resto...
Artyom, il problema è nella nuova costruzione!
Ditemi, qui avete scritto un codice che funziona senza errori. Funziona per molto tempo. E improvvisamente, dopo la nuova release di MT si blocca con un mucchio di errori. Di chi è la colpa? Tanto più che la documentazione, come molti sanno, non sta sempre al passo con le innovazioni.
Quindi, il mio codice ha funzionato senza errori.
Ho usato questo:
Forum sul trading, sistemi di trading automatico e test di strategia
Con cosa sostituire INIT_PARAMETERS_INCORRECT? Soluzione trovata )))
Sergey Tabolin, 2019.04.24 08:48
Ho trovato la risposta alla mia stessa domanda nel thread:
Si è rivelato abbastanza semplice. È sufficiente spostare il controllo dei parametri non validi da OnInit() a OnTick()
bool check_init = false; // флаг проверки входных параметров .......... //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) ExpertRemove(); if(period_HMA7C == 0 && move_stop) ExpertRemove(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) ExpertRemove(); check_init = true; } //*/ //+------------------------------------------------------------------+
Controllato! Funziona. La genetica non fallisce ))))
Ora, dopo che sono apparsi dei problemi, ho aggiunto un paio di righe in più:
bool check_init = false; // флаг проверки входных параметров bool tester_stop = true; // флаг проверки выхода по TesterStop ............. void OnTick() { //--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) TesterStop(); if(period_HMA7C == 0 && move_stop) TesterStop(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) TesterStop(); if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0) TesterStop(); if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0) TesterStop(); if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700)) { Print("Результат в OnTester() должен быть -99999999999.99"); TesterStop(); } check_init = true; tester_stop = false; } //*/ ......... }
Вызов TesterStop() считается нормальным завершением тестирования, и поэтому будет вызвана функция OnTester() с отдачей тестеру стратегий всей накопленной торговой статистики и значения критерия оптимизации.
Si suppone, ragionando, che il trasferimento debba essere eseguito immediatamente, senza eseguire il resto del codice. Giusto?
E infatti TesterStop() non ferma affatto il test!
double OnTester() { if(tester_stop) return(-99999999999.99); double equity_dd_percent = TesterStatistics(STAT_EQUITY_DDREL_PERCENT); if(equity_dd_percent > 0.0) { equity_dd_percent = 100.0 / equity_dd_percent; } else equity_dd_percent = 1.0; double param = 0.0; double profit = TesterStatistics(STAT_PROFIT); double stability = 0.0; int balance_arr_size = ArraySize(balance_arr) - 1; int alpha_size = balance_arr_size - 1; int beta_size = alpha_size - 1; double trade2time = ratioTrades2Time(TesterStatistics(STAT_TRADES)); double max_balance = balance_arr[0]; //+------------------- if(balance_arr[balance_arr_size-1] - balance_arr[0] == 0.0) return(-99999999999.88); //+-------------------
Ho inserito un parametro "non valido" e ho ottenuto questo risultato:
LL 0 11:30:20.816 Core 1 2016.10.01 00:00:00 Советник получил MAGIC = 153128312914612747. QN 0 11:30:20.816 Core 1 2016.10.03 00:00:00 Результат в OnTester() должен быть -99999999999.99 NJ 3 11:30:20.816 Core 1 TesterStop() called on 0% of testing interval CD 0 11:30:20.816 Core 1 final balance 10000.00 USD QF 0 11:30:20.816 Core 1 OnTester result -99999999999.88
Quindi questo è un bug! E questo è esattamente il bug di MQ.
Credo che TesterStop() eExpertRemove() dovrebbero restituire true se non possono passare immediatamente il controllo a OnTester(). Permetterà di reagire in qualche modo, per esempio, così:
bool tester_stop = false; // флаг проверки выхода по TesterStop ....... void OnTick() { //--- пропустить бесполезные проходы оптимизации if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(недопустимый параметр) tester_stop = TesterStop(); ........ } double OnTester() { if(tester_stop) return(-99999999999.99);
In questo caso possiamo ottenere esattamente il risultato che ci si aspetta logicamente, invece di ballare e prevedere tutti gli errori che potrebbero teoricamente verificarsi come risultato dell'arresto del test.
Artyom, il problema è nella nuova costruzione!
Ditemi, qui avete scritto un codice che funziona senza errori. Funziona per molto tempo. E improvvisamente, dopo la nuova release di MT si blocca con un mucchio di errori. Di chi è la colpa? Tanto più che la documentazione, come molti sanno, non sta sempre al passo con le innovazioni.
Quindi, il mio codice ha funzionato senza errori.
Ho usato questo:
Ora, dopo alcuni problemi, ho aggiunto un paio di righe in più:
Si suppone, intelligentemente, che il trasferimento venga fatto immediatamente, senza eseguire il resto del codice. Giusto?
Ma in realtà TesterStop() non ferma affatto il test!
Ho inserito un parametro "non valido" e ho ottenuto questo risultato:
Quindi questo è un bug! E questo è esattamente il bug di MQ.
Credo che TesterStop() eExpertRemove() dovrebbero restituire true se non possono passare immediatamente il controllo a OnTester(). In tal caso, sarà possibile reagire in qualche modo, ad esempio così:
In questo caso, possiamo ottenere esattamente il risultato che ci si aspetta logicamente, invece di ballare e prevedere tutti gli errori che potrebbero teoricamente verificarsi come risultato dell'arresto del test.
Tutti i vostri calcoli e test non devono essere mostrati a me, e non con una certa dose di sarcasmo e irritazione, ma in modo secco e conciso nel thread"Errori, bug, domande". A meno che, ovviamente, non vogliate essere ascoltati e ottenere una risposta.
ZS. E dimenticate preferibilmente parole come "bug", "difetto", "ballare con il tamburello" e altri "shitcodes" nei rapporti di bug - tutti gli umani, e voi non siete senza errori. E le dichiarazioni "psicotiche" non sembrano molto serie o costruttive.
Tutti i vostri calcoli e test non devono essere mostrati a me, e non con una certa dose di sarcasmo e irritazione, ma in modo secco e conciso nel thread"bugs, bugs, questions". A meno che, ovviamente, non vogliate essere ascoltati e ottenere una risposta.
Mi dispiace che tu ti senta così. C'è irritazione, naturalmente, ma come potrebbe non esserci quando i problemi sorgono all'improvviso? E il sarcasmo... - Sono più perplesso da quelli che considero dei bloopers evidenti. ))
Per quanto riguarda l'argomento in questione, mi sembra che la domanda potrebbe facilmente "perdersi" lì. Quindi penso che un nuovo argomento con un problema specifico sia più efficace? O non lo è?
In ogni caso, tu, come moderatore, puoi piuttosto attirare l'attenzione degli sviluppatori su alcuni problemi, se tu stesso sei convinto della loro esistenza )))
Cercherò di aggiungere una domanda lì...

- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Cari amici, vi propongo di creare qui un archivio di versioni MT. A volte con gli aggiornamenti possono verificarsi errori inaspettati e bisogna tornare a una versione precedente...
Ho bisogno di costruire 2007 ora. Ce l'hai? Condividetelo per favore.