Optimierung mit dem Strategy Tester - Seite 7

 

Kurz gefasst:

  • Angemessen ist, dass sie in ein Suchfeld von 2 hoch 64 passen.
  • Vernünftig ist es, das Suchfeld vorher abzuschätzen, anstatt alle zu durchsuchenden Variablen bis zum Maximum auszuschöpfen

Rashid, es ist unwahrscheinlich, dass jemand es wagen würde, eine einfache Suche durchzuführen. Ein 2^64-genetischer Optimierer kann das leicht überprüfen, aber das bedeutet nicht, dass wir unbegrenzte Suchbereiche freilegen müssen. Schließlich müssen wir für diese Regionen Gene erzeugen und sie dann manipulieren.

 
Rosh:

OK, lassen Sie uns nachrechnen. Ein Durchlauf im Prüfgerät dauert 1 Sekunde, dann teilen wir die Anzahl der Durchläufe 2^64-1 durch 60 und erhalten die Optimierungszeit in Minuten: 18 446 744 073 709 551 615/60.

Anschließend teilen Sie diese Zeit durch 8 (8 Kerne auf dem Computer) und erhalten die Optimierungszeit mit dieser Anzahl von Durchläufen auf einem 8-Kern-Computer. Wie viel wird es in Stunden oder Tagen kosten?

Zählen Sie nicht, ich spreche nicht von einer einfachen Aufzählung. Lassen Sie den genetischen Algorithmus selbst bestimmen, wie viele er braucht.

Wenn man es mit dem menschlichen Gehirn vergleicht, enthält das Gehirn nach Angaben von Wissenschaftlern etwa 10^10 Neuronen, von denen jedes etwa 10^4 synaptische Verbindungen hat.

Das ist es, wonach wir alle streben, indem wir immer fortschrittlichere Programme entwickeln.

Wozu wurde Cloud Computing entwickelt? Dadurch sind die Nutzer nicht auf einen einzigen Computer beschränkt, wofür wir uns sehr bedanken.

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 
Renat:

Um eine lange Geschichte kurz zu machen:

  • Angemessen ist, dass sie in ein Suchfeld von 2 hoch 64 passen.
  • Vernünftig ist es, das Suchfeld vorher abzuschätzen, anstatt alle zu durchsuchenden Variablen bis zum Maximum auszuschöpfen

Rashid, es ist unwahrscheinlich, dass irgendjemand es wagen würde, eine einfache Überschreitung vorzunehmen. Ein 2^64-genetischer Optimierer kann das leicht überprüfen, aber das bedeutet nicht, dass man unbegrenzte Suchdomänen aufdecken muss. Schließlich müssen wir für diese Regionen Gene erzeugen und sie dann manipulieren.

Was ist 2 in 64 ist ein weit hergeholtes Problem.

Bei einem genetischen Algorithmus müssen Sie die schlechtesten Ergebnisse nicht behalten?

Was hindert Sie daran, alle Variablen bis zum Maximum zu verdrehen?

Ich kann nicht herausfinden, was der Zusammenhang zwischen Genen und 2^64 ist?

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 

Dennoch kann es sich als nützlich erweisen, viele Variablen zu durchsuchen (z. B. Neuronales Netz), und diese Einschränkung ist nicht gut.

So hoffe ich auf Freiheit von Zwängen))

 

Der Strategietester scheint GA mit binärer Chromosomencodierung zu verwenden.

Hier ist ein Zitat:

"Die binäre Darstellung von Chromosomen bringt jedoch gewisse Schwierigkeiten bei der Suche in kontinuierlichen Räumen mit großer Dimensionalität mit sich, und wenn eine hohe Genauigkeit erforderlich ist, wird eine spezielle Technik verwendet, die darauf beruht, dass das gesamte Intervall der zulässigen Werte eines Merkmals [ai,bi] in Abschnitte mit der erforderlichen Genauigkeit unterteilt wird. Die erforderliche Genauigkeit p wird durch den Ausdruck definiert:


wobei N die Anzahl der Bits zur Kodierung einer Bitfolge ist.

Diese Formel zeigt, dass p stark von N abhängt, d. h. die Darstellungsgenauigkeit wird durch die Anzahl der Bits bestimmt, die zur Codierung eines Chromosoms verwendet werden. Daher wird der Suchraum mit zunehmendem N immer größer und umfangreicher. Ein bekanntes Beispiel aus dem Buch: Für 100 Variablen, die im Intervall [-500; 500] variieren, muss ein Extremwert mit einer Genauigkeit von sechs Dezimalstellen gefunden werden. In diesem Fall beträgt die Stringlänge bei GA mit binärer Kodierung 3000 Elemente und der Suchraum etwa101000 Chromosomen."

Daher kann selbst ein relativ kleines neuronales Netz im Standardoptimierer nicht trainiert werden, wenn es auf 64 zu optimierende Parameter beschränkt ist. Es gibt noch einen weiteren Nachteil - es ist sehr zeitaufwendig, die Parameter der optimierbaren Variablen manuell einzugeben, wenn es sehr viele davon gibt. Aus diesem Grund habe ich bereits vorgeschlagen, dass Sie Arrays mit optimierbaren Parametern programmatisch angeben können.

Aber es gibt auch eine gute Nachricht. Alles, was im Tester und im Terminal fehlt, kann mit den nativen MQL5-Mitteln implementiert werden. Später werde ich die Ergebnisse einiger Optimierungstests unter Verwendung des Testers und des Programmcodes veröffentlichen.

 

Allerdings habe ich nie auf die Ergebnisse des Testers bei der Testaufgabe gewartet (ich meine, warten ist faul).

Aber jeder kann die Tests selbst durchführen. Hierfür können Sie das erste Beispiel aus dem Artikel heranziehen. Vergessen Sie nicht, den Optimierungsmodus - Suche nach Maxima - einzustellen (zum Vergleich mit dem Standardoptimierer, bei dem nur Maxima verfügbar sind).

Lassen Sie uns einen einfachen Expert Advisor schreiben, der noch einfacher ist als eine grüne Rübe und nichts anderes tut, als die Testfunktion des Benutzers zu berechnen:

//+------------------------------------------------------------------+
//|                                                  Test expert.mq5 |
//|                                      Copyright 2010, JQS aka Joo |
//|                              https://www.mql5.com/ru/users/joo |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, JQS aka Joo"
#property link      "https://www.mql5.com/ru/users/joo"
#property version   "1.00"
//--- input parameters
input double   x1=0.0;
input double   x2=0.0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+

double OnTester()
  {
   return
   (
    pow(cos((double)(2*x1*x1))-0.11 e1,0.2 e1)+
    pow(sin(0.5 e0 *(double) x1)-0.12 e1,0.2 e1) -
    pow(cos((double)(2*x2*x2))-0.11 e1,0.2 e1)+
    pow(sin(0.5 e0 *(double) x2)-0.12 e1,0.2 e1)
    );
  }
//+------------------------------------------------------------------+

Die Einstellungen im Fenster des Testers sind wie folgt:


Auf der Registerkarte "Eingabeparameter" gehen Sie wie folgt vor:


Und los.

Die ungefähren Schlussfolgerungen lauten wie folgt:

1) Der Optimierer im Tester ist 10-100 mal langsamer (bei mir hat es funktioniert, obwohl die Optimierung im Tester auf zwei Prozessorkernen durchgeführt wurde, während die Softwareoptimierung auf einem Kern erfolgte). Höchstwahrscheinlich ist dieser gewaltige Unterschied auf die Tatsache zurückzuführen, dass der Tester neben der direkten Berechnung der FF auch Protokolle schreiben und Informationen auf dem Bildschirm anzeigen muss, d. h. er hat eine "Zwangsbremsung" im Gegensatz zur Softwareoptimierung.

2) Es ist nicht möglich, mehr als 64 optimierbare Parameter im Tester zu verwenden (und im Assistenten für die Erstellung von Expert Advisors ist die Anzahl der Parameter auf 60 begrenzt), daher ist es nicht möglich, neuronale Netze von nennenswerter Größe zu trainieren.

Entweder Sie schreiben selbst Testersatz (MQL5 erlaubt das, es ist eine ausgezeichnete "Angel", aber kein "Fisch"), oder Sie warten, bis der binäre genetische Algorithmus des Testers durch einen kontinuierlichen Algorithmus ersetzt wird und die Beschränkung der Anzahl der optimierten Parameter aufgehoben wird. Die zweite ist nicht konstruktiv, also bleibt die erste. :)

Allgemeine Schlussfolgerung: Lernen Sie MQL5.


PS Eine gute Lösung wäre es, die Ausgabe von Optimierungsinformationen (Protokolle, Optimierungsdiagramm) zu deaktivieren und, noch besser, die Details der Ausgabe anzupassen, um die Leistung des Testers zu erhöhen.

 
joo, es gibt mehr zu tun, neben dem Schreiben eines Testers und Optimierer für solche nicht kleine Berechnungen, müssen Sie einen Verteiler von Berechnungen, die alle Prozessorkerne und möglicherweise verbinden Remote-Agenten (wenn Sie kollektive Berechnungen tun) zu machen würde. Erstens ist die Geschwindigkeit nicht vergleichbar mit dem Standard-Tester - alles wird viel langsamer laufen, und zweitens für das Schreiben all dies müssen Sie eine Menge Zeit und Hunderte von Kilobyte Code zu verbringen, und das alles, weil das, was genau?
 
Mr.FreeMan:
joo, es gibt mehr zu tun, neben dem Schreiben eines Testers und Optimierer für solche nicht kleine Berechnungen, müssen Sie einen Verteiler von Berechnungen, die alle Prozessorkerne und möglicherweise verbinden Remote-Agenten (wenn Sie kollektive Berechnungen tun) zu machen würde. Erstens ist es nicht mit dem Standard-Tester vergleichbar - alles wird viel langsamer sein, und zweitens muss man für das Schreiben all dessen viel Zeit und Hunderte von Kilobytes an Code aufwenden, und was ist der Grund dafür?
GA von joo ist bereits schneller als das Standardprogramm, und durch die Portierung des Codes auf CPP mit Studio 10 (angepasst für Mehrkernprozessoren) ist der Geschwindigkeitszuwachs noch 6-mal höher.
 
Mr.FreeMan:
joo, es gibt mehr zu dem Punkt; zusätzlich zum Schreiben eines Testers und Optimierers für solche kleinen Berechnungen müssen Sie auch einen Verteiler für Berechnungen machen, die alle Prozessorkerne einbeziehen würden und möglicherweise Remote-Agenten verbinden (wenn Sie kollektive Berechnungen halten wollen). Erstens ist die Geschwindigkeit nicht vergleichbar mit dem Standard-Tester - alles wird viel langsamer laufen, und zweitens für das Schreiben all dies müssen Sie eine Menge Zeit und Hunderte von Kilobyte Code zu verbringen, und das alles, weil das, was genau?

Über das Rot antwortete Urain .

Was das Grün betrifft, so geht es natürlich um Geld. Zeit ist Geld. Normalerweise bin ich ein langsamer Starter, aber ein schneller Fahrer (ich habe über ein Jahr gebraucht, um die GA zu entwickeln und zu debuggen), und jetzt bekomme ich ständig Dankesnachrichten in meinem Posteingang, nachdem der Artikel veröffentlicht wurde. :)

Ich kritisiere nicht den internen Prüfer. Ich möchte die Aufmerksamkeit der Entwickler nur auf das lenken, was besonders beachtet werden muss. Denn egal, wie gut der Optimierer ist (der Optimierer, nicht der Tester), wenn er furchtbar langsam ist, verpuffen alle seine Vorteile.

 

Gerade eben kam mir ein kühner Gedanke. Aber warum sollte es das nicht?

Es wird mir eine Ehre sein, meinen UGA im MetaTrader 5 Optimizer von MetaQuotes Software Corp. zu verwenden . Es wird absolut kostenlos sein, obwohl ich natürlich keine Boni ablehnen werde.

UGA ist einfach und effizient. Sehr flexibel in den Einstellungen. Sie können drei Einstellungsvorlagen in den Tester eingeben - "Grob", "Mittel" und "Fein" - und auch die Evans-Einstellungen separat anzeigen lassen mit dem Hinweis "Wenn Sie nicht genau wissen, wofür Sie es brauchen, ändern Sie nichts an diesen Einstellungen". Dann wird es möglich sein, die Optimierung mit dem gewünschten Grad der Detailsuche durchzuführen - von einer sehr schnellen Annäherung bis hin zur exakten endgültigen Suche nach den optimalen Einstellungen von TC. Zurzeit lässt sich der integrierte Optimierer nicht konfigurieren.

Торговая платформа MetaTrader 5 для организации брокерского обслуживания / MetaQuotes Software Corp.
  • www.metaquotes.net
Торговая платформа MetaTrader 5 предназначена для проведения торговых операций на различных финансовый рынках. Терминал обладает большой базой аналитических возможностей и поддерживает более 70 различных инструментов для выполнения технического анализа