Jump to content
Tom Next - Daytrading Community

Parameterdurchläufe programmieren


Forex1+

Recommended Posts

Hallo,

 

ich suche nach einer programmiertechnischen Idee verschiedene Variablen in allen Kombinationsmöglichkeiten durchlaufen zu lassen.

Es gibt eine Liste an Variablen, diese sollen variabel anwählbar sein und dazu kommt Startwert Schrittgröße und Stopwert.

Eigentlich suche ich den Code wie er in jeder Tradingplattform beim Strategietester anwendet wird. Man macht im GUI ein Häckchen an die zu durchlaufenden Variablen und definiert Start Schritt und Stop.

Für eine einmalige Sache könnte man verschachtelte Schleifen machen dies ist allerdings nicht möglich wenn die Auswahl der Variablen und dessen Parameter Start Schritt Stop variabel steuerbar sind.

 

Ich würde mich über Ideen sehr freuen, wie man das programmiertechnisch angehen würde bzw wie Ihr denkt wie dies in den Plattformen umgesetzt wurde. Als Sprache nutze ich Cpp.

 

Grüße

Link to comment
Share on other sites

Könnte mir vorstellen, dass Backtest mit multiblen Parametern in Trading-/ Chartprogrammen - die es hergeben - deutlich einfacher zu gestallten sind, als in CPP.

 

Sowas in der Richtung wäre möglich:

ttps://www.amibroker.com/guide/h_optimization.html

 

Oder MultiCharts (easylanguage/powerlanguage), oder Ninjatrader (C++), die üblichen Verdächtigen. Metatrader kann das ja auch.

Ist vielleicht einfacher, als das Rad neu zu erfinden?

Oder gibt es einen bestimmten Grund um es in CPP zu programmieren=

Link to comment
Share on other sites

Es geht mir nicht direkt darum eine Plattform mit Backtestoptimierung zu bauen sondern nur diese Logik zum Iterieren zu verwenden, also die Durchläufe aller Kombinationsmöglichkeiten von Variablen. Diese soll dann in einer internen Logik stattfinden. Der Grund für CPP kommt daher, da ich inzwischen zum Großteil meine Codes in dlls ausgelagert habe, vor allem zur Nutzung komplexerer Datenstrukturen, es gibt da quasi kaum Limits. Es geht also eher um die Adaption der Logik der Backtestoptimierung aus dem Grund des Iterierens aller Kombinationsmöglichkeiten.

 

Im Prinzip ähnelt das Amibrokerbeispiel von Oldschuren einer meiner Ideen die ich hatte und zwar, wie dort zu sehen ist, wird für jede anfallende Variable eine Funktion aufgerufen, die dann die Variable für die Kombinationsdurchläufe definiert und Start Schritt Stop als Parameter übergibt. Man müsste also vielleicht durch eine solche Funktion eine Liste oder Map anlegen die dann von einer anderen Funktion anhand der Parameter durchgeführt wird. Oder eine Logik schafft es die Kombinationen direkt ohne voriges erstellen einer Liste zu durchlaufen (wie eine verschachtelte Schleife aber flexibel). Das Erstellen einer Map oder das Zuweisen der Parameter ist schon machbar aber das was mir Kopfzerbrechen bereitet ist die Logik die die Kombination aller gewählten Variablen durchführt. Denn es muss damit umgehen können, dass es unterschiedlich viele Variablen geben kann und zudem müssen Start, Schritt, Stop korrekt durchlaufen werden.

Link to comment
Share on other sites

  • 3 weeks later...
Hallo Forex1+,
Amibroker kann ich für eine solche Optimierung uneingeschränkt empfehlen, auch Wealth-Lab bietet sich hier an. Alle anderen Programme, die ich kenne, sind m.E. zu langsam und stoßen bei entsprechenden Datenmengen an ihre Grenzen.
Ich denke, die Logik ist gar nicht so schwierig. Wichtiger ist die Frage, wie viele Durchläufe das Programm in endlicher Zeit mit mutiplen Instrumenten schafft. Ohne jetzt auf genaue Berechnungen und Laufzeiten einzugehen, würde ich da erstmal ganz simpel mit Schleifen arbeiten. Wenn du nur wenige Parameter hast, sollte das sehr gut funktionieren. Die Schrittbreite kann du ja vorerst so groß
wählen, dass kein Abbruch aus Laufzeit- oder Speichersicht des Programmes möglich ist.
Hier ein simples Beispiel mit drei variablen Periodenlängen, wobei der Startwert, der Endwert und die Schrittbreite definiert werden:

 

per1: 1, 10, 1
per2: 2, 20, 2
....
perN: X, Y, N


for (int i=per1; i<=10, i++)
{
  for (int j=per2; j<=20, j+=2)
  {
    for (int k=X; k<=Y; k+=N)
    {
      // Alle Durchläufe kommen hier zusammen,
      // da du von allen Parametern die Werte benötigst:
      // Ca. i-Mal * j-Mal * k-Mal

      // Ergebnisse 1 - N für aktuelle Werte i/j/k
      // Ergebnisse 1 - N für aktuelle Werte i/j/k
      // Ergebnisse 1 - N für aktuelle Werte i/j/k

      // Verwaltung der Ergebnisse in Listen
      // Filterung durch Objective-Funktion wie bspw. Max-Drawdown oder CAR
    }
  }
}
 
Es stellt sich mir eher die Frage, warum du so etwas selbst programmieren möchtest, wenn doch andere das Problem bereits effektiv gelöst haben?
Wealth-Lab kann bspw. auch mit externen DLLs arbeiten, evtl. passt das gut zu deinem eigenen Ansatz.
Beste Grüße
  • Upvote 1
Link to comment
Share on other sites

Danke für das Beispiel, ich hatte es schon ruhen gelassen aber seit dem Beitrag wieder motiviert angegangen. Früher oder später wäre es fällig gewesen good2.gif

Ich habe jetzt eine ganz ähnliche für mich zufriedenstellende Lösung gefunden und das Verschachtelungsprinzip beibehalten. Da es im Programm schon existierende Variablen gibt, die durchgeschleift werden sollen, habe ich jetzt mit internen Zeigern auf diese gearbeitet. Das heißt die Verschachtelung bietet so Basis für unterschiedliche Variablen und Datentypen. Vor der Verschachtelung werden die Referenzen auf die zu nutzenden Variablen erstellt und dann wie gehabt Start/Schritt/Stop dazu definiert. Mehr als 5 kombinierte Parameter wird es beim mir in der Praxis wahrscheinlich sowieso nicht geben, sonst beschränkt man so stark die Freiheitsgrade und die Iterationsanzahl wird zu hoch, daher hält sich das Definieren und die Verschachtelung platzmäßig in Grenzen.

 

Grüße

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...