Donnerstag, 18. April 2024, 21:41 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Lieber Besucher, herzlich willkommen bei: INVESTOX-Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Tony

unregistriert

1

Mittwoch, 29. Juni 2011, 11:21

Verarbeitung von Werten der Kapitalkurve

Guten Tag,

ich habe ein trendfolgendes Handelssystem erstellt:




Nun möchte ich folgendes realisieren: Im Handelszeitraum (nach dem Kontrollzeitraum) sollen nur Trades eingegangen werden, die größer-gleich dem letzten Kapitalwert des Kontrollzeitraums sind. Wenn die Kapitalkurve unter diesem Wert fällt, soll die Position geschlossen werden. Trades die generell unter diesem Wert eröffnen und schließen sollen nicht beachtet werden.

Ich hatte folgende Idee:

Enter:

Signal1 (Beispiel)

and

#_Kapital XY(Beispiel)# >= 15916 (letzter Wert der Kapitalkurve)

Exit:

Signal2

or

#_Kapital XY# < 15916

Doch leider funktioniert es nicht so. Wie kann ich das Ganze realisieren?
Vielen Dank für eure Hilfe.

Grüße

Wiwu Weiblich

Experte

Registrierungsdatum: 4. September 2002

Beiträge: 1 752

Wohnort: Neuenhagen b. Berlin

2

Mittwoch, 29. Juni 2011, 11:47

Hallo Tony,

probier mal, ob folgende Alternative funktioniert:

Master = Dein Basis-Handelssystem "XY"

Slave = Dupliziertes Basis- Handelssystem

Definitionsbereich des Slave:

global calc KK: #_Kapital XY\?#;
global calc position: #_Position XY\?#;
global calc StartLong: ValueWhen(kk,position<>1,1,V);
global calc StartShort: ValueWhen(kk,position<>-1,1,V);

Handelsregeln des Slave

Enter Long:

..... and KK>=Startlong

Exit Long:

KK < Startlong

Enter Short:

... and KK >= Startshort

Exit Short:

KK < Startshort
Viele Grüße von Anke

http://www.ascunia.de

Tony

unregistriert

3

Mittwoch, 29. Juni 2011, 12:34

Hallo Anke,

danke für die schnelle Antwort!

Hintergrund: Mein Master rechnet die Signale von 3 Slaves einfach zusammen:

global calc PositionOverall: #_Position N3# + #_Position N4# + #_Position N5#;

global calc EnterLong: PositionOverall > 0;
global calc ExitLong: PositionOverall < 0;
global calc EnterShort: PositionOverall < 0;
global calc ExitShort: PositionOverall > 0;


Ich habe deine Vorschläge bei allen drei Slaves eingefügt. Es hat sich auch etwas verändert. Doch leider weiß ich jetzt nicht, wie ich die richtige Funktion am besten überprüfe. Wenn ich im Master den Kontrollzeitraum verschiebe bleibt alles gleich. Was genau besagt deine Programmierung?

Muss das ValueWhen noch per Ref -1 verschoben werden?

Auch kommen jetzt immer Fehlermeldungen: "Abbruch der Kapitalkurvenberechnung in System 'Master' wegen zirkulärem Zugriff von Systemen aufeinander."

Grüße

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tony« (29. Juni 2011, 13:34)


Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 051

Wohnort: Giessen

4

Mittwoch, 29. Juni 2011, 13:47

verstehe ich Dich richtig: Du willst die Kapitalkurve vom Master als Tradefilter verwenden?

Wenn ja, musst Du über den Master einen weiteren Master setzen.
If you think it´s expensive to hire a professional, wait until you hire an amateur.

Wiwu Weiblich

Experte

Registrierungsdatum: 4. September 2002

Beiträge: 1 752

Wohnort: Neuenhagen b. Berlin

5

Mittwoch, 29. Juni 2011, 13:47

Hallo Tony,

Zitat

Doch leider weiß ich jetzt nicht, wie ich die richtige Funktion am besten überprüfe.


Nach meiner Erfahrung prüft man die richtige Funktion am einfachsten, indem man sich mehrere Trades in Tradeliste anschaut und prüft, ob sie korrekt eröffnet, geschlossen und abgerechnet wurden.

Zitat

Was genau besagt deine Programmierung?


Meine Programmierung fragt für Enter-Long und Exit-Long den Wert der Kapitalkurve zu dem Zeitpunkt ab, als zuletzt noch keine Long-Position im Master-System bestand ( Master war "Short" oder "Out"= KK Wert vor Beginn des aktuellen Long-Trades).
Für Enter-Short und Exit-Short wird der Wert der Kapitalkurve zu dem Zeitpunkt abgefragt, als zuletzt noch keine Short-Position bestand (Master war "Long" oder "Out" = KK Wert vor Beginn des aktuellen Short-Trades).

Falls das nicht der Wert ist, den Du suchst, müsstest Du bitte Dein

Zitat

Doch leider funktioniert es nicht so.


aus dem 1. Posting noch weiter spezifizieren.
Viele Grüße von Anke

http://www.ascunia.de

Tony

unregistriert

6

Donnerstag, 30. Juni 2011, 11:52

Danke für den Hinweis @ Lanzelott

An Anke: Ich glaube ich habe mich noch nicht richtig ausgedrückt. Ich hoffe mit dem folgenden Bild wird es klarer.



Der letzte Wert der Kapitalkurve des Kontrollzeitraums beträgt 11000. Jetzt soll dieser Wert eine imaginäre Grenze für den folgenden Handelszeitraum darstellen (nicht früher!). Alle kommenden Trades die unter dieser Linie stattfinden, sollen nicht berücksichtigt werden.

Wenn jetzt zum Beispiel die Kapitalkurve am 13.06 unter diese Linie fallen würden, müsste das Handelssystem seine Position schließen. Wenn dann aber am 20.06 die Kapitalkurve wieder über diese Linie steigt, sollen diese Trades dann wieder ausgeführt werden.

Hattest du es so verstanden?

Wiwu Weiblich

Experte

Registrierungsdatum: 4. September 2002

Beiträge: 1 752

Wohnort: Neuenhagen b. Berlin

7

Donnerstag, 30. Juni 2011, 12:46

Hallo Tony,

nein, ich hatte es bisher nicht so verstanden.

Du musst es für diesen Fall so machen, wie Lenzelott vorgeschlagen hat- also zuerst das HS nochmals duplizieren und dann vom letzten HS aus z.B.


global calc KK: #_Kapital System1\?#;
global calc kk1: #_Kapital System2\?#;
global calc Start: ValueWhen(kk,#_HS_Zeitraum KE#,1,V);

und in den Enter-Regeln:

kk1 >= Start

und den Exit-Regeln:

kk1< Start
Viele Grüße von Anke

http://www.ascunia.de

Tony

unregistriert

8

Donnerstag, 30. Juni 2011, 13:49

Vielen Dank für die Hilfe. Es funktioniert so, wie ich es mir vorgestellt habe :-)

Tony

unregistriert

9

Donnerstag, 30. Juni 2011, 18:03

Hallo Anke,

mir ist jetzt noch folgendes eingefallen:

Ich will, dass das System nicht den letzten Wert des Konrollzeitraums als Handelsgrenze nimmt, sondern immer den aktuell letzten Wert der Kapitalkurve. Es soll eine stetige "Kapitalkurventreppe" nach oben entstehen.

Ich habe zu diesem Zweck die Programmierung folgendermaßen abgeändert:

global calc KK: #_Kapital System1\?#;
global calc kk1: #_Kapital System2\?#;
global calc Start: ValueWhen(kk,1,2,V);

Es sieht so aus als ob es klappt, allerdings gibt es einige unverständliche Trades:
Bild 1 zeigt den normalen Master. Bild 2 zeigt den Master mit der Programmierung. Das schwarze Kreuz zeigt den Einstieg des selben Trades. Im normalen Master ist ersichtlich, dass kein neues Kapitalniveau erreicht wird. Allderings interpretiert der programmierte Master den Wert als neues Kapitalniveau und steigt in den Trade ein. Warum ist das so?






Selbst wenn ich um das "ValueWhen" ein Ref -1 klammere, verändert sich die angesprochene Problematik nicht. Muss ich überhaupt Ref -1 bei dieser Bedingung brücksichtigen? Nochmals vielen Dank für deine kompetente Hilfe!

Grüße

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Tony« (30. Juni 2011, 19:57)


Wiwu Weiblich

Experte

Registrierungsdatum: 4. September 2002

Beiträge: 1 752

Wohnort: Neuenhagen b. Berlin

10

Donnerstag, 30. Juni 2011, 20:02

Hallo Tony,

Zitat

sondern immer den aktuell letzten Wert der Kapitalkurve. Es soll eine stetige "Kapitalkurventreppe" nach oben entstehen.


Jetzt bin ich wieder nicht ganz sicher, ob ich es richtig verstehe:

Meinst Du das letzte Hoch der Kapitalkurve oder wirklich den aktuell letzten Wert ? Der aktuell letzte Wert könnte ja auch niedriger sein als der vorletzte - das gäbe dann keine stetige Treppe nach oben ?

Das letzte (=höchste) Hoch der Kapitalkurve könntest Du wie folgt abfragen:

global calc Start: AlltimeHV(KK);

Deine Formel:

Zitat

global calc Start: ValueWhen(kk,1,2,V);


liefert Dir den Wert der Kapitalkurve von System 1 vor 2 Perioden.

Zitat

Im normalen Master ist ersichtlich, dass kein neues Kapitalniveau erreicht wird. Allderings interpretiert der programmierte Master den Wert als neues Kapitalniveau und steigt in den Trade ein. Warum ist das so?


Das ist so, weil Du bisher nur den letzten bzw. vorletzten Wert der KK abfragst, nicht aber den bisher höchsten Wert.
Viele Grüße von Anke

http://www.ascunia.de

Tony

unregistriert

11

Donnerstag, 30. Juni 2011, 21:44

Danke, das mit dem Kapitalkurvenhoch meinte ich auch :-)

Tony

unregistriert

12

Dienstag, 5. Juli 2011, 22:42

Hallo Anke,

in der Programmierung ist irgendwo noch ein Haken. Es gibt Probleme, wenn ich das Ganze live über einen Paperaccount teste.

Grundsätzlich sei gesagt, dass mein HS in der Grundfunktion fehlerfrei läuft.
Enter und Exit Basis ist Open Delay Null; Signalberechnung nur bei ... ist deaktiviert; Signale können auch bei unvollendeten Perioden berechnet werden. Die Komprimierung ist Renko (ohne Gapverteilung).

Folgender Fehler ist passiert:
Der Master mit der Programmierung steigt richtig in den Trade ein. Plötzlich gibt er aber mehrere Signale wie auf dem folgendem Bild:



Nun ist er einfach aus dem Verlusttrade ausgestiegen (out ohne vorher exit), hat nochmal eine EnterOrder aufgegeben und hat somit den ganzen Verlust übersprungen! Nach Beendigung und Neustart von Investox wurde der ganzen Trade überhaupt nicht mehr angezeigt. Zudem gab es bei einem anderen Test ein ExitSignal, was in kurzen Abständen immer angezeigt und wieder revidiert wurde.

Die Kapitalkurve sieht wie eine Treppe aus und wenn ich Trades im Einzelnen vergleiche sieht alles stimmig aus. Ich denke nicht, dass das Problem gelöst ist, wenn ich einfach nur "Signalberechnung bei neuer Periode" aktiviere. Sollte ich es vorsichtshalber aktivieren?

Wenn ich um das AllTimeHV(KK) ein Ref, -1 schreibe passiert an dem Backtestergebnis nichts. Kann es aber sein, dass es daran liegt? Wenn ich die Kapitalwerte vergleiche, will ich doch wissen ob der aktuelle Wert über dem LETZTEN liegt. Das akuelle Hoch bildet sich doch immer erst aus und unterliegt somit Änderungen oder?

Hast du zu diesem Problem eine Idee? Vielen Dank.

Grüße

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tony« (5. Juli 2011, 23:48)


Wiwu Weiblich

Experte

Registrierungsdatum: 4. September 2002

Beiträge: 1 752

Wohnort: Neuenhagen b. Berlin

13

Mittwoch, 6. Juli 2011, 11:56

Hallo Tony,

das ist ein schönes Flattersignal. :)
Die wahrscheinlichste Ursache ist, dass ein Ref(...,-1) vergessen wurde bzw. dass die Enter-Delay unpassend gewählt ist.
Bei Renko-Handelssystemen gibt es allerdings noch zusätzliche Fallstricke - in bestimmten Konstellationen darf z.B. der erste Brick eines Handelstages nicht für die Signalgebung verwendet werden.

Du schreibst, dass das HS in der Grundfunktion fehlerfrei läuft und schilderst dann das Verhalten des Master.
Unterscheidet sich Deine Namensgebung von meiner aus Posting 2 oder meinst Du mit "Master" ebenfalls das Basis-Handelssystem ?

Zitat

Wenn ich um das AllTimeHV(KK) ein Ref, -1 schreibe passiert an dem Backtestergebnis nichts. Kann es aber sein, dass es daran liegt? Wenn ich die Kapitalwerte vergleiche, will ich doch wissen ob der aktuelle Wert über dem LETZTEN liegt. Das akuelle Hoch bildet sich doch immer erst aus und unterliegt somit Änderungen oder?


Ja, richtig. Wenn Dein "Master" das System mit dem Zugriff auf das Alltime-High der Kapitalkurve ist und Du dort mit Open, Delay 0 arbeitest, musst Du die Handelsregel mit Ref(..,-1) zurücksetzen.
Viele Grüße von Anke

http://www.ascunia.de

Tony

unregistriert

14

Mittwoch, 6. Juli 2011, 13:07

Also meine 3 Slaves besitzen jeweils Die Tickkomprimierungen 6*6; 7*7; 8*8

Meine 3 Mastersysteme besitzen alle die kleinste Komprimierung (6*6).
Die 3 Mastersysteme sind alle identisch und heißen jetzt Master, Master2, Master3. Alle schalten auf Open Delay 0
die um Ref(..., -1) verschobenen Slaves:

global calc PositionOverall: #_Position N3\?# + #_Position N4\?# + #_Position N5\?#;

global calc EnterLong: PositionOverall > 0;
global calc ExitLong: PositionOverall < 0;
global calc EnterShort: PositionOverall < 0;
global calc ExitShort: PositionOverall > 0;

Zusätzlich habe ich jetzt im Master folgende Bedingungen für die besprochene Kapitalauswertung stehen:

global calc KK: #_Kapital Master2\?#;
global calc kk1: #_Kapital Master3\?#;
global calc Start: Ref(AllTimeHV(KK), -1);

sowie die zusätzlichen passenden Enter/Exit Regeln.
Ich habe 3 Master genommen, da Investox sonst meckert wenn ich von einem System auf die eigene Kapitalkurve zugreifen will.

Wenn ich um das #_Kapital Master3\?# noch ein Ref(..., -1) schreibe, sieht das Ganze überhaupt nicht mehr wie eine Treppe aus und das Ergebnis ist wesentlich schlechter als von dem Ursprungsmaster.

Ist das jetzt soweit in Ordnung?
Muss ich einen bestimmten Renko-Fallstrick beachten?

Vielen Dank für deine Geduld :)

Grüße

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tony« (6. Juli 2011, 13:46)


Wiwu Weiblich

Experte

Registrierungsdatum: 4. September 2002

Beiträge: 1 752

Wohnort: Neuenhagen b. Berlin

15

Mittwoch, 6. Juli 2011, 14:55

Hallo Tony,

Zitat

Ist das jetzt soweit in Ordnung? Muss ich einen bestimmten Renko-Fallstrick beachten?


Aufgrund der bisherigen Postings lässt sich ohne Kenntnis der weiteren Systemregeln nicht mit Sicherheit sagen, ob in Deinem System wirklich schon alles passt.

Speziell bei voneinander abhängigen Renko / P&F-Systemen mit unterschiedlichen Reversals gibt es Fallstricke.

Führe deshalb am besten zuerst eine Datenfeedsimulation des Basissystems durch und schalte dann - wenn im Basissystem alles in Ordnung ist- Step by Step die auf das Basissystem zugreifenden
abhängigen Systeme in der Datenfeedsimulation zu.
So wirst Du am schnellsten sehen, ob jetzt alle Trades gemäß Deinen Vorstellungen abgerechnet werden und ob alle Flattersignale durch das Ref(...,-1) eliminiert wurden.
Falls doch noch Flattersignale im System sind, siehst Du durch das Zuschalten welches der Teilsysteme den Fehler verursacht und kannst ihn in diesem Teilsystem gezielt abstellen.
Viele Grüße von Anke

http://www.ascunia.de