Jump to content


Photo
- - - - -

Parameterdurchläufe programmieren


Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.

  • Please log in to reply
6 replies to this topic

#1 Forex1+

Forex1+

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 290 posts
  • 1457 thanks

Posted 20 September 2016 - 05:26 PM

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


  • 0
It's a losing game, without passion !

Thanked by 7 Members:
Kleinerbroker , Henrik , whipsaw , oldschuren , Vola , Rumpel , chimbonda

#2 Forex1+

Forex1+

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 290 posts
  • 1457 thanks

Posted 24 September 2016 - 12:43 PM

Hier hat doch jeder schon mal eine Tradingplattform geschrieben das weiß ich doch... biggrin.pngwink.png 

Werde später ein paar Ansätze dazu schreiben, vermutlich aber aus zu prozeduraler Sichtweise, mal sehen obs zu was führt crazy.gifemc2.gif


  • 0
It's a losing game, without passion !

Thanked by 6 Members:
chimbonda , Vola , Kleinerbroker , oldschuren , Henrik , whipsaw

#3 oldschuren

oldschuren

    Floor Broker

  • *_skilled
  • 1,457 posts
  • 7935 thanks
  • Wohnsitz:Brandenburg

Posted 24 September 2016 - 06:02 PM

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


  • 0
ich raube, also bin ich....

Thanked by 7 Members:
chimbonda , Vola , Kleinerbroker , whipsaw , Forex1+ , Henrik , Rumpel

#4 Henrik

Henrik

    Floor Broker

  • Moderatoren
  • 4,976 posts
  • 21566 thanks
  • Wohnsitz:Bbg, GER

Posted 24 September 2016 - 07:40 PM

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= 


  • 0
"Weder die stärkste noch die intelligenteste Spezies überlebt. Sondern jede, die sich am besten dem Wandel anpasst."
Charles Darwin
 
"Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren."
Benjamin Franklin

Thanked by 6 Members:
chimbonda , Vola , oldschuren , Kleinerbroker , whipsaw , Forex1+

#5 Forex1+

Forex1+

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 290 posts
  • 1457 thanks

Posted 24 September 2016 - 08:49 PM

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.


  • 0
It's a losing game, without passion !

Thanked by 7 Members:
whipsaw , chimbonda , DarthTrader , Vola , oldschuren , Kleinerbroker , Rumpel

#6 DarthTrader

DarthTrader

    Floor Broker

  • Developer
  • 366 posts
  • 1661 thanks

Posted 16 October 2016 - 03:41 PM

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, 1per2: 2, 20, 2....perN: X, Y, Nfor (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

  • 1

Thanked by 5 Members:
whipsaw , Vola , Forex1+ , Rumpel , chimbonda

#7 Forex1+

Forex1+

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 290 posts
  • 1457 thanks

Posted 17 October 2016 - 02:15 AM

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


  • 0
It's a losing game, without passion !

Thanked by 3 Members:
chimbonda , whipsaw , Vola

Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users