Fehler, Irrtümer, Fragen - Seite 221

 
vikulin:

Dies ist das gleiche Ergebnis! Die Eingabeparameter für diese Punkte sind die gleichen!

Bitte erläutern Sie dies. Ich verstehe nicht, warum "die Eingabeparameter für diese Punkte gleich sind". Soweit ich die Funktionsweise des Optimierers verstanden habe, entspricht jeder Durchlauf einem einzigartigen Satz von Eingabeparametern. Oder meinen Sie, dass es bei der Verwendung des genetischen Algorithmus Situationen geben kann, in denen ein einziger Satz von Eingabeparametern vom Optimierer mehrmals verarbeitet werden kann?

...Nun, ja, das ist genau das, was Sie sagen. Dann stellt sich heraus, dass alle nachfolgenden Punkte "aus dem Cache" nur eine Fiktion sind und die visuelle Wahrnehmung der Optimierungsergebnisse verzerren?

 
sultanm:

Seltsam. Dies ist das dritte Mal. Es gibt zwei Punkte im Diagramm, die nahe beieinander liegen, aber es gibt nur einen in den Ergebnissen.

Hinweis: Bitte sortieren Sie nach dem gewünschten Wert, und vergessen Sie nicht, die vertikale Bildlaufleiste der Tabelle anzuzeigen.

 

Wird dieses Problem jemals gelöst werden???

Das ist das dritte Mal, dass ich darüber spreche, und es gibt keine Reaktion!


 
vikulin:


Übrigens scheint es mir, dass dieser Cache nicht verwendet werden sollte, wenn die Modellierung von Requotes gewählt wird. was denken die Entwickler darüber?

ein weiterer Fehler: als mein genetischer Algorithmus über 10496 hinausging, wurde das Diagramm falsch angezeigt - vertikal skalierte es richtig, man konnte verstehen, dass höhere Ergebnisse gefunden wurden, aber horizontal wurde es nicht aktualisiert. Punkte, als ob sie irgendwo rechts hinzugefügt wurden, bereits jenseits der Grenze des Diagramms.

Bitte schreiben Sie an servicedesk. Und in Punkt 2 ist er an vollständigen Informationen interessiert. EA, Terminal-Build, Optimierungseinstellungen...
 
Code:
int symbols = SymbolsTotal(false);
for (int i=0; i<symbols; i++) {
   Print("Символ №"+i+" значение="+SymbolName(i,false));
}

Im Terminal wird das Ergebnis

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

Ergebnis im 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

Die ganze Schönheit der Funktion SymbolName(i) geht verloren

 
vyv:

Eine Bitte an die Entwickler. Während die Arbeit an MT5 in vollem Gange ist und immer noch Änderungen vorgenommen werden, wäre es sehr schön, die Anzahl der Optimierungsdurchläufe zu erweitern.

Soweit ich verstanden habe, wird die Lösung für so viele Aufgaben für etwa 10 000 Varianten gefunden, vielleicht etwas mehr oder etwas weniger. Ein paar Stunden Suche auf einem Prozessor und die besten Varianten sind gefunden.

Die Vielseitigkeit der MQL5+OP+Multicore-Tests ermöglicht es uns, neue Horizonte von Aufgaben (z.B. die Suche nach Mustern) zu betrachten, die mit MT5-Tools gelöst werden können.

Aber hier liegt das Problem:

Der Artikel auf Ihrer Website enthält ein Beispiel für einen genetischen Algorithmus ( https://www.mql5.com/ru/articles/55), bei dem 3^100 Brute-Force-Versuche nötig waren, um ein Suchproblem mit 100 Balken zu lösen - das ist etwas mehr als LongInt :), während die Lösung in 17 000 Iterationen gefunden wurde. Der genetische Algorithmus kann Lösungen für viel mehr Varianten finden als LongInt. Und diese Einschränkung ist völlig unbegründet und überholt. Nun, abgesehen davon, dass es in dieser letzten Phase des MT5 schwierig sein wird, dies zu tun.

Eine große Bitte an die Entwickler: Wenn es nicht zu schwierig ist, bitte die Anzahl der Durchläufe auf mindestens 2^LongInt (2 hoch 2) erhöhen.

Kann mir jemand eine Antwort geben?
 

Code:

//+------------------------------------------------------------------+
//|                                                      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);
  }

Protokoll:

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

Daher sind alle Datenanforderungen an Handle2 trotz des geänderten Zeitraums mit Handle1 identisch.

Wenn der Expert Advisor läuft, ist es möglich , Indikatoren mit denselben Merkmalen zu erstellen, und eine solche Optimierung für ein Handle ist sinnvoll, aber ein solches "Festhalten" eines Handles an einer Variablen ist sehr ärgerlich.

P.S.: Ich habe den Grund dafür herausgefunden. Dieser Fehler ist eine Folge der Optimierung auf eine Handle-Nummer.

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

Code:

Protokoll:

2010.12.06 18:07:52 testInd (EURUSD,H1) Geändert? Handgriff2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle1 =10

Dementsprechend sind alle Aufrufe von handle2 gleichbedeutend mit Aufrufen von handle1, auch wenn der Zeitraum geändert wird.

Während des Betriebs eines EA können wir nicht ausschließen, dass Indikatoren mit denselben Merkmalen erstellt werden, und eine solche Optimierung für ein Handle ist vernünftig, aber ein solches "Festhalten" eines Handles an einer Variablen ist sehr ärgerlich.

P.S.: Ich habe den Grund dafür herausgefunden. Es ist ein Fehler - die Folge der Optimierung auf eine Handle-Nummer.

Wie kommen Sie darauf, dass es ein Fehler ist?

 
alexvd:

Wie kommen Sie darauf, dass es ein Fehler ist?

Gut. Es ist ein Merkmal. Aber eine, die Sie besser kennen sollten.

Wenn ein Benutzer Periodenwerte für MA aus der Schnittstelle eingibt, Handles für Indikatoren erstellt und Werte von Indikatorpuffern verwendet, dann erhält er/sie, nachdem er/sie (z.B. ich habe Standardeinstellungen in diesem Formular) 2 Indikatoren mit denselben Eigenschaften erstellt hat (ihre Handles sind in der Objekthülle gespeichert), aufgrund dieser Funktion die Handle-Nummer des ersten Indikators.

Im Folgenden wird eine mögliche Kette von Ereignissen beschrieben.

Situation 1. der erste Indikator wird gelöscht (und das Programm führt IndicatorRelease aus); infolgedessen funktioniert der zweite Indikator nicht automatisch - Pufferkopierfehler.

Situation 2. Der zweite Indikator wird entfernt (und das Programm führt IndicatorRelease aus), der Handradzähler sinkt. Dem ersten geht es gut. Es wird ein dritter Indikator mit einer anderen Periode erstellt. Er erhält den Handle Count+1, d.h. die Handle-Nummer des gerade gelöschten Indikators. Das Schlimmste ist jedoch, dass der dritte Indikator mit einer anderen Periode, der erfolgreich erstellt wurde, die Werte des ersten Indikators, der noch nicht gelöscht wurde, in den Puffer gibt.

Die Funktion zum Kleben von Handle-Nummern führt zu unklaren Situationen, wenn eine von zwei geklebten Nummern gelöscht und dann eine neue erstellt wird.

//+------------------------------------------------------------------+
//|                                                      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:
Kann mir jemand diese Frage beantworten?

Es wurde hier schon besprochen.https://www.mql5.com/ru/forum/1997/page6/#comment_31644

Vielleicht wäre es besser, die Frage dorthin zu verschieben - eine Anregung.

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