Autor |
|
_klaus
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 61
|
|
möchte folgende idee in meiner ts2000i als SIGNAL umsetzen, um historische prüfungen vorzunehmen - komme aber nicht weiter:
"kaufe / verkaufe den ausbruch aus einem 1 std-chart"
charteinstellung = 1 Std
input: price(close); vars: highd(0), lowd(0);
if price > highd then buy highd + 1 point stop; if price < openpositionprofit -20 points then exitlong,
if price < lowd then sell lowd - 1 point stop; if price > openpositionprofit +20 points then exitshort,
setexitonclose;
Problem: .. der einstieg berechnet sich auf den vortagsbalken, es sollte aber der balken der 1. std. sein.
wer hat eine idee und kann helfen ??? klaus
|
|
27.11.2000, 10:10 |
|
_Robert UEberbacher
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 15
|
|
Hallo Klaus, Versuchs mal mit folgendem Code auf Stundenchart. Bei kürzeren Charts + StundenBreakOut wirds etwas komplizierter.
Vars: FirstHigh(-999999), FirstLow(+999999); If (Time = Sess1FirstBarTime) or Date[0] > Date[1] or Time < Time[1]then begin {Tagesanfang} FirstHigh = High; FirstLow = Low; end; IF FirstHigh < 999999 then Buy ("Le_") at FirstHigh + 1 point stop;
IF FirstLow > -999999then sell ("Se_") at FirstLow - 1 point stop;
Rest wie gehabt. Dein Problem ist daß highd als Funktion nur das Hoch des Vortages zurückgibt.
Gruß Robert
|
|
27.11.2000, 16:10 |
|
_Uwe
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 313
|
|
Hallo Klaus!
Deinen Vorstellungen kann ich leider nicht entnehmen, ob Du jede Stunde das Kriterium prüfen möchtest oder nur die die Extremkurse der erten Handelsstunde als Referenz herangezongen werden sollen. Ich nehme im folgenden an, daß Du die zweite Variante meinst.
Mit den von Dir deklarierten Variablennamen HighD und LowD verweißt Du auf Funktionen, die, wie Du richtig bemerkst, Dir das Vortageshoch bzw. das Vortagestief liefen (allgemein: refHigh=High(xBarsAgo) bzw. refLow=LowD(xBarsAgo), also die Extremkurse am Bar vor xBarsAgo vom aktuellen Bar gesehen).
Um die Extremerte der erten Stunde zu erhalten, wäre folgender Ansatz denkbar:
inputs: Price(close); vars: refHigh(0), refLow(0);
if MarketPosition(0)<>0 then begin if Price < (EntryPrice - 20 points) then ExitLong; if Price > (EntryPrice + 20 points) then ExitShort; end;
if time <= Sess1FirstBarTime then begin refHigh=0; end else begin if refHigh=0 then begin refHigh=High[1]; refLow=Low[1]; end;
if Price > refHigh then buy refHigh + 1 point stop else if Price < refLow then sell refLow - 1 point stop; end;
In der vordefinierten Variablen Sess1FirstBarTime sollte die Zeit enthalten sein, die, einen Stundenchart vorausgesetzt, die den Enpunkt des ersten Bars des Tages bezeichnet. Voraussetzung ist, daß in den Symboleinstellungen die Session korrekt definiert ist.
Zu beachten ist, daß für die Ausführungsmethoden mit Stop-/Limitorder nur zum nächsten Bar ausgeführt werden können!
Gruß Uwe
P.S. Deine Logik der Schwellwerte auf der Basis der Points und die Ausstiegslogik habe ich von Dir übernommen, obwohl ich nicht weiß, ob Du diese so wirklich gemeint hast (OpenPostionProfit +/-x points je nach long oder short-Positionierung?)
|
|
27.11.2000, 16:10 |
|
_Uwe
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 313
|
|
|
27.11.2000, 16:10 |
|
_klaus
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 61
|
|
openstrategie ...und kein ende | |
hallo robert, hallo uwe, erst einmal ganz vielen dank für eure mithilfe. jedoch ist das von mir erhoffte ergebnis "noch" nicht erreicht.
vermutlich lang es ja auch daran, das ich mein probl. nicht ausführlich genug beschrieben hatte. ich möchte es hiermit nachholen.
ziel : testen eines breakoutsytems.
referenzbalken = i.diesem fall - die erste std. (balkenchart= 1. balken), kauf / verkauf kann erst aktiv werden, wenn der erste std-balken abgeschloßen wurde. bedingung....... kauf = high[1] + z.b. 1 point, oder verkauf = low[1] - z.b. 1 point - also jedesmal ein breakout.
setexitonclose ist bedingung,
----------------------------------
variante 1 sollte die eingegangene position durch trs oder %stp oder... flat sein, sollte kein weiterer handel mehr möglich sein. ( bsp.I, 10:15 = 1 punkt höher als der erste referenzbalken, also buy .... )
variante 2 sollte die eingegangene position durch trs oder %stp oder... flat sein, sollte nur noch ein weiterer handel mehr möglich sein - diese position sollte aber wiederum auf den ersten balken ( referenzbalken) bezogen sein. nachdem bsp. I = ausgestoppt, folgt ein 2ter versuch, ( bsp.II, 15:17 = 1 punkt niedriger als das low des ersten referenzbalken, also sell....)
ich weiß, das ist sicherlich ein dicker broken, aber das ist es, was ich gerne testen möchte, könnte ich hier nochmals auf eure mithilfe hoffen, viele grüße und wie auch immer - danke, klaus
|
|
27.11.2000, 22:10 |
|
_Uwe
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 313
|
|
RE: openstrategie ...und kein ende | |
Hallo Klaus!
Prinzipiell müßte Dein Problem wie folgt zu lösen sein:
.... vars: ....., xTradePerDay(0), ,,,,;
if Date>xDate[1] then xTradePerDay=0; {neuer Tag, neues Glück}
{Überprüfung ob eine neue Position eingegangen wurde} if Marketposition(0)<>Marketpostion(1) and Marketpostion(0)<>0 then xTradePerDay = xTradePerDay+1;
.... EXIT-Bedingungen.....
{nachfolgender IF-Block wird nur durchlaufen, wenn am Tag noch KEINE zwei Positionen eingegangen wurden.} if xTradePerDay<2 then begin ................ ..Prüfen auf Ausbruchkriterium und buy/sell-Aktion.............. ................ end;
Du könntest natürlich die Sache auch noch so erweitern, daß pro Tag nur bei zwei Versuchen in eine Richtung, die hintereinander liegen, kein weiterer Handelsversuch unternommen würde. Du müßtes dan nur ...xTradePerDay = xTradePerDay+Marketposition(0); schreiben und die Abfrage von xTradePerDay auf den Absolutwert beziehen: if AbsValue(xTradePerDay)<2 then....
Um zwei Orderrichtungen je Tag zuzulassen, muß Du jedoch eine zusätzliche Abfragevariable (Flag) einführen, die in Abhängigkeit von der Richtung hochgezählt werden und die IF-Abrage muß um einen OR-Term erweitert werden.
Wenn Du Erfahrungen mit diesem System gewonnen hast, so bin ich sicher, daß nicht nur mich Deine Ergebnisse interessieren werden, welcher Art sie auch immer sein werden.
Gutes Gelingen Uwe
|
|
28.11.2000, 07:10 |
|
_klaus
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 61
|
|
|
28.11.2000, 13:10 |
|
_klaus
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 61
|
|
inputs: Price(close); vars: refHigh(0), refLow(0), xTradePerDay(0); if date > date[1] then xTradePerDay=0;
if MarketPosition(0)<> MarketPosition(1) and MarketPosition(0)<>0 then xTradePerDay = xTradePerDay+1; if Price < (EntryPrice - 20 points) then ExitLong; if Price > (EntryPrice + 20 points) then ExitShort; if xTradePerDay<2 then begin if time <= Sess1FirstBarTime then begin refHigh=0; end else begin if refHigh=0 then begin refHigh=High[1]; refLow=Low[1]; end; end; if Price > refHigh then buy refHigh + 1 point stop else if Price < refLow then sell refLow - 1 point stop; end;
SetExitOnClose;
hi uwe, dank deiner hilfe sieht das ergebnis gar nicht so schlecht aus, aber irgendwo scheint noch ein fehler zu sein.
kannst du dir nochmal die formel anschauen??
1. die sache mit dem referenz(stab) scheint zu funktionieren.
2. der einstieg bei kauf / verkauf setzt jedoch nicht wie gewünscht am high[1] / low[1] +/- 1 point ein, sondern es ist immer der openkurs.
3. die begrenzung auf max. 2 einstiege p/day funktioniert noch nicht, z.zt. wird an einem tag bis zu 4 mal eine position eingegangen.
gruß klaus
|
|
28.11.2000, 15:10 |
|
_Uwe
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 313
|
|
Rohgerüst....openstrategie / Frage an Robert Ueberbacher | |
Hallo Klaus!
Soweit ich feststellen konnte, steht die zweite end-Anweisung im Block: ....refHigh=High[1]; refLow=Low[1]; end; end; if Price > refHigh then.... falsch, da die zweite Endanweisung die IF xTradePerDay...-Abfrage abschließt. Die Doppelendanweisung gehört ans Ende.
Bei dieser gelegenheit habe ich den Code noch einmal etwas umgestrick :
inputs: Price(close); vars: refHigh(0), refLow(0), xTradePerDay(0);
if date > date[1] then begin xTradePerDay=0; refHigh=High; refLow=Low; end;
if (BarsSinceEntry=0)and (MarketPosition(0)<>0) then xTradePerDay = xTradePerDay+1;
if Price < (EntryPrice - 2000 points) then ExitLong; if Price > (EntryPrice + 2000 points) then ExitShort;
if (xTradePerDay < 2) and (Time > Sess1FirstBarTime+1) then begin if close > refHigh then buy refHigh + 1 point stop else if close < refLow then sell refLow - 1 point stop; end;
print(Date:8:0, time:6:0, xTradePerDay:2:0, refHigh:12:2, refLow:12:2, EntryPrice:12:0);
SetExitOnClose;
Die Daten habe ich mit dem DAX-Futur getestet (tolerierbare Verlustpunkte sind nach Einstellung für das Symbol und nach eingenen Einschätzungen abzuändern (Welche Werte Untersuchst Du?)
Doch was nun kommt, stellt mich momentan auch vor ein Rätsel, den ich kann mir die Eigenwilligkeit der Orders noch nicht erklären. Ob dies an der TS2000i liegt oder meinen Fähigkeiten weiß ich noch nicht.
Doch daß das Programmr in der ersten Stunde eine Order plaziert, geht nun nach dem Programmzeilen m.E nicht. Auch sind die Ausführungskurse nicht die erwarteten. Die zum Schluß eingeführte print-Zeile ermöglicht eine Betrachtung der Werte, die bei der Ausführung des Programmes anden einzelnen Bars entstanden sind.
Da es noch etwas dauern kann, bis ich mich damit intensiver auseinandersetzen kann, hier als vorab die Programmzeilen als Grundgerüst.
Gruß Uwe
P.S. An Robert: Hattest Du Deine Programmteil getestet (ich muß leider gestehen ich hatte es bis vorhin noch nicht)? Setzt Du die TS4 oder die TS2000i ein?
|
|
28.11.2000, 22:10 |
|
_klaus
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 61
|
|
|
28.11.2000, 23:10 |
|
_Robert UEberbacher
Administrator
Dabei seit: 12 2001
Herkunft: User altes Forum
Beiträge: 15
|
|
|
30.11.2000, 10:10 |
|
|