Errori, bug, domande - pagina 221

 
vikulin:

questo è lo stesso risultato! i parametri di input per questi punti sono gli stessi!

Si prega di spiegare. Non capisco "i parametri di ingresso per questi punti sono gli stessi". Per quanto ho capito come funziona l'ottimizzatore, ogni passaggio corrisponde a un unico insieme di parametri di input. O vuoi dire che quando si usa l 'algoritmo genetico ci possono essere situazioni in cui un unico insieme di parametri di input può essere elaborato dall'ottimizzatore più volte?

...Beh, sì, è esattamente quello che stai dicendo. Poi si scopre che tutti i punti successivi "dalla cache" sono solo una finzione, distorcendo la percezione visiva dei risultati di ottimizzazione?

 
sultanm:

Strano. Questa è la terza volta. Ci sono due punti sul grafico che sono vicini come valore, ma ce n'è solo uno nei risultati.

Suggerimento: ordinate per il valore richiesto, e non dimenticate di mostrare la barra di scorrimento verticale della tabella.

 

Questo problema sarà mai risolto?

È la terza volta che ne parlo e non c'è nessuna reazione!


 
vikulin:


A proposito, mi sembra che se la modellazione di requotes è selezionata, allora questa cache non dovrebbe essere usata. cosa ne pensano gli sviluppatori?

e un altro bug: quando il mio algoritmo genetico è andato oltre 10496, il grafico ha iniziato a visualizzare in modo errato - verticalmente è scalato correttamente, si poteva capire che venivano trovati risultati più alti, ma orizzontalmente non veniva aggiornato. punti come se fossero aggiunti da qualche parte sulla destra, già fuori dal grafico.

Si prega di scrivere a servicedesk. E al punto 2 è interessato all'informazione completa. EA, costruzione del terminale, impostazioni di ottimizzazione...
 
Codice:
int symbols = SymbolsTotal(false);
for (int i=0; i<symbols; i++) {
   Print("Символ №"+i+" значение="+SymbolName(i,false));
}

Nel terminale il risultato

2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №11 значение=GBPJPY
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №10 значение=GBPCHF
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №9 значение=EURJPY
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №8 значение=EURCHF
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №7 значение=EURAUD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №6 значение=EURGBP
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №5 значение=AUDUSD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №4 значение=USDCAD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №3 значение=USDJPY
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №2 значение=USDCHF
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №1 значение=GBPUSD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №0 значение=EURUSD

Risultato nel tester:

2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №11 значение=USDJPY
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №10 значение=USDCHF
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №9 значение=USDCAD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №8 значение=GBPUSD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №7 значение=GBPJPY
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №6 значение=GBPCHF
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №5 значение=EURUSD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №4 значение=EURJPY
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №3 значение=EURGBP
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №2 значение=EURCHF
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №1 значение=EURAUD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №0 значение=AUDUSD

Tutta la bellezza della funzione SymbolName(i) è persa

 
vyv:

Una richiesta agli sviluppatori. Mentre il lavoro su MT5 è in ebollizione e i cambiamenti sono ancora in corso, sarebbe molto bello espandere il numero di passaggi di ottimizzazione.

Per quanto ho capito la soluzione per tanti compiti si trova per circa 10 000 varianti può essere un po' più o un po' meno. Qualche ora di ricerca su un processore e le migliori varianti sono state trovate.

La versatilità dei test MQL5+OP+Multicore ci permette di guardare a nuovi orizzonti di compiti (ad esempio la ricerca di modelli) che possono essere risolti utilizzando gli strumenti MT5.

Ma ecco il problema:

L'articolo pubblicato sul tuo sito ha un esempio di algoritmo genetico https://www.mql5.com/ru/articles/55 dove ci sono voluti 3^100 forward brute force per risolvere un problema di ricerca su 100 barre - beh questo è un po' più di LongInt :) mentre la soluzione è stata trovata in 17 000 iterazioni. L'algoritmo genetico può trovare soluzioni per molte più varianti di LongInt. E questa limitazione è completamente infondata e obsoleta. Beh, tranne che in questa fase finale di MT5 sarà difficile farlo.

Una richiesta molto grande agli sviluppatori, se non è troppo difficile, per favore rendete il numero di passaggi almeno 2^LongInt (2 alla potenza).

Qualcuno mi darà una risposta?
 

Codice:

//+------------------------------------------------------------------+
//|                                                      testInd.mq5 |
//|                                                                  |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
   int handle1 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //
   int handle2 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //абсолютно идентичные параметры
   if(handle1 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle1 ="+handle1);
        }
        if(handle2 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle2 ="+handle2);
        }
        
   IndicatorRelease(handle2);
   handle2 = INVALID_HANDLE; //добавил для "надежности"
   handle2 = iMA(NULL,0,33,0,MODE_LWMA, PRICE_CLOSE); //другой период
        if(handle2 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Измененный? Handle2 ="+handle2); //все обращения к данным handle2 возвращают данные с handle1
        }
   
   
//---
   return(0);
  }

Diario:

2010.12.06 18:07:52:52 testInd (EURUSD,H1) Modificato? Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle1 =10

Pertanto, tutte le chiamate di dati a handle2 sono equivalenti alle chiamate a handle1, nonostante il periodo cambiato.

Quando l'Expert Advisor è in funzione, è possibile creare indicatori con le stesse caratteristiche e tale ottimizzazione per un handle è ragionevole, ma tale "incollaggio" di un handle a una variabile è molto fastidioso.

P.S. Ho scoperto il motivo. Questo bug è una conseguenza dell'ottimizzazione a un solo numero di maniglia.

IndicatorRelease(handle2); //уменьшает счетчик хендлов на единицу и в итоге следующий созданный хэндл(с любой переменной) - опять 10
 
Vigor:

Codice:

Diario:

2010.12.06 18:07:52 testInd (EURUSD,H1) Modificato? Maniglia2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle1 =10

Di conseguenza, tutte le chiamate a handle2 sono uguali alle chiamate a handle1, anche se il periodo è cambiato.

Durante il funzionamento di un EA, non possiamo escludere la creazione di indicatori con le stesse caratteristiche, e tale ottimizzazione per un handle è ragionevole, ma tale "incollaggio" di un handle a una variabile è molto fastidioso.

P.S. Ho scoperto il motivo. Si tratta di un bug - la conseguenza dell'ottimizzazione a un numero di maniglia.

Cosa ti fa pensare che sia un bug?

 
alexvd:

Cosa ti fa pensare che sia un bug?

Bene. È una caratteristica. Ma uno che dovrebbe conoscere meglio.

Se un utente inserisce valori di periodo per MA dall'interfaccia, crea maniglie per gli indicatori e utilizza i valori dei buffer degli indicatori, allora avendo creato (per esempio, ho impostazioni predefinite in questo modulo) 2 indicatori con le stesse caratteristiche (le loro maniglie sono memorizzate nel wrapper dell'oggetto), riceve il numero di maniglia del primo indicatore, a causa di questa caratteristica.

La seguente è una possibile catena di eventi.

Situazione 1. cancella il primo indicatore (e il programma esegue IndicatorRelease); di conseguenza, il secondo indicatore non funziona automaticamente - errore di copia del buffer.

Situazione 2. Rimuove il secondo indicatore (e il programma fa IndicatorRelease), il contatore del volantino diminuisce. Il primo sta andando bene. Crea un terzo indicatore con un periodo diverso. Riceve il conteggio dell'handle+1, cioè il numero dell'handle dell'indicatore appena cancellato. Alla fine, la cosa peggiore è che il terzo indicatore con un periodo diverso, creato con successo, dà i valori del primo indicatore, ancora non cancellato, al buffer.

La funzione di incollaggio dei numeri di maniglia, porta a situazioni ambigue quando si cancella uno dei due incollati e poi se ne creano di nuovi.

//+------------------------------------------------------------------+
//|                                                      testInd.mq5 |
//|                                                                  |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
   int handle1 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //
   int handle2 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //абсолютно идентичные параметры
   if(handle1 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle1 ="+handle1);
        }
        if(handle2 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle2 ="+handle2);
        }
        
   IndicatorRelease(handle2);

   handle3 = iMA(NULL,0,33,0,MODE_LWMA, PRICE_CLOSE); //другой период
        if(handle3 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Новый handle3 ="+handle3); //все обращения к данным handle3 возвращают данные с handle1
        }
   
   
//---
   return(0);
  }
 
vyv:
Qualcuno può rispondere per me?

Se ne è parlato qui.https://www.mql5.com/ru/forum/1997/page6/#comment_31644

Forse sarebbe meglio spostare la domanda lì - un suggerimento.

Оптимизация в Тестере стратегий
Оптимизация в Тестере стратегий
  • www.mql5.com
из которых ТОЛЬКО 546 ms было затрачено именно на тестирование эксперта.