Autor |
|
guidoh
Member TUG
Dabei seit: 09 2005
Herkunft:
Beiträge: 9
|
|
Hi,
habe folgende Idee :
ab 9:00 beginnt das system, jede candle wird geschaut, ob sich ein neues hoch bildet. wenn die differenz zum hoch gross genug ist (bestimmt durch puffer) wird verkauft. desweiteren soll es möglich sein, abermals nachzukaufen.
hier mein code :
input : puffer1(0),puffer2(0),puffer3(0),puffer4(0),anz1(0 ),anz2(0),anz3(0),anz4(0),time_begin(0);
vars : array_counter(0),counter(-1),highest_d(0),i(0);
array : multi[5](true);
if marketposition <> -1 then begin
for array_counter = 0 to 5 begin
multi[array_counter] = false;
end;
end;
if time = time_begin then counter = 0;
if counter <> -1 then counter = counter + 1;
for i = 0 to counter begin
highest_d = highest(high,i);
end;
if marketposition = 0 and multi[0] = false then begin
sell ("first") anz1 contracts at (highest_d-puffer1)limit;
multi[0] = true;
end;
if marketposition = -1 then begin
if multi[1] = false and multi[0] = true then begin
sell ("second") anz2 contracts at (highest_d-puffer1-puffer2)limit;
multi[1] = true;
end;
if multi[1] = true and multi[2] = false then begin
sell ("third") anz3 contracts at (highest_d-puffer1-puffer2-puffer3)limit;
multi[2] = true;
end;
if multi[3] = false then begin
sell ("fourth") anz4 contracts at (highest_d-puffer1-puffer2-puffer3-puffer4)limit;
multi[3] = true;
end;
end;
-------------------------------------------
das ist erstmals nur für das shortsignal gedacht.
Problem : er hält den puffer nicht ein, und kauft beim nachkauf auch nicht so wie er soll.
danke für die antworten.
guidoh7
|
|
06.09.2005, 20:54 |
|
Klaus
Administrator
Dabei seit: 12 2001
Herkunft: Herdecke
Beiträge: 1088
|
|
Hallo Guidoh7,
erst mal willkommen im Forum! Deine Frage bezieht sich auf die Programmierung und sollte daher im richtigen Unterforum ("Easy Language") gestellt werden. Dazu musst Du Dich jedoch mit Deiner TradeStation-ID erst freischalten lassen - das solltest Du anstossen!
Zu Deinem Code:- diese Schleife zur Berechnung von highest_d ist falsch. Verwende entweder Highest(High, x) ohne Schleife oder die Funktion HighD(0) (ebenfalls ohne eine Schleife).
- Um zu höheren Preisen zu Verkaufen musst Du den Puffer zum High addieren anstatt ihn abzuziehen (es sei denn Du willst mit negativen Puffern abeiten).
- Das Nachkaufen hast Du Dir mit den Arrays viel zu schwer gemacht. Verwende CurrentEntries um festzustellen wieviele Teilpositionen offen sind und generiere darauf basierend die weiteren Verkäufe.
Erklärungen zu den hier aufgeführten Funktionen bzw. Schlüsselwörtern findest Du in der Online-Hilfe.
Viel Erfolg!
Gruss
-Klaus
|
|
07.09.2005, 11:58 |
|
guidoh
Member TUG
Dabei seit: 09 2005
Herkunft:
Beiträge: 9
|
|
Hi,
ist mit Tradestation-ID meine Seriennummer gemeint? Wenn nicht, dann bitte Bescheid sagen was sonst, Rechnung liegt ja vor.
zum Signal : hab es nochmal umgeschrieben, wie folgt :
input : puffer01(0),puffer02(0),puffer03(0),puffer04(0),puffer05(0),puffer06(0);
input : anz01(0),anz02(0),anz03(0),anz04(0),anz05(0),anz06(0);
input : day_begin(0),day_end(0),long_possible(false),short_possible(false);
if short_possible = true and time >= day_begin then begin
if marketposition = 0 and time < day_end and currententries = 0 then sell ("first_sell") anz01 contracts at (highd(0)-puffer01) stop;
if marketposition = -1 and time < day_end and currententries = 1 then sell ("second_sell") anz02 contracts at (entryprice(1)-puffer02) limit;
if marketposition = -1 and time < day_end and currententries = 2 then sell ("third_sell") anz03 contracts at (entryprice(2)-puffer03) limit;
if marketposition = -1 and time < day_end and currententries = 3 then sell ("fourth_sell") anz04 contracts at (entryprice(3)-puffer04) limit;
if marketposition = -1 and time < day_end and currententries = 4 then sell ("fifth_sell") anz05 contracts at (entryprice(4)-puffer05) limit;
if marketposition = -1 and time < day_end and currententries = 5 then sell ("sixth_sell") anz06 contracts at (entryprice(5)-puffer06) limit;
if marketposition = -1 and time = day_end then exitshort all contracts on close;
end;
if long_possible = true and time >= day_begin then begin
if marketposition = 0 and time < day_end and currententries = 0 then buy ("first_buy") anz01 contracts at (lowd(0)+puffer01) stop;
if marketposition = 1 and currententries = 1 and time < day_end then buy ("second_buy") anz02 contracts at (entryprice(1)+puffer02) stop;
if marketposition = 1 and currententries = 2 and time < day_end then buy ("third_buy") anz03 contracts at (entryprice(2)+puffer03) stop;
if marketposition = 1 and currententries = 3 and time < day_end then buy ("fourth_buy") anz04 contracts at (entryprice(3)+puffer04) stop;
if marketposition = 1 and currententries = 4 and time < day_end then buy ("fifth_buy") anz05 contracts at (entryprice(4)+puffer05) stop;
if marketposition = 1 and currententries = 5 and time < day_end then buy ("sixth_buy") anz06 contracts at (entryprice(5)+puffer06) stop;
if marketposition = 1 and time = day_end then exitlong;
end;
Also das Short Signal funktioniert einwandfrei.
Beim longsignal gibt es ein problem :
Wie im Bild zu sehen, führt er den ersten Trade falsch aus. (als puufer 1 sind es hier 50 Punkte). der 2. trade klappt dann. wenn ich maxbarsettings von 50 zurücknehme, führt er den 1. falschen trade auch eher aus. woran kann das liegen?
danke nochmal für die Tipps.
guidoh
fischer.GIF (9 KB, 621 mal heruntergeladen)
|
|
13.09.2005, 18:14 |
|
Klaus
Administrator
Dabei seit: 12 2001
Herkunft: Herdecke
Beiträge: 1088
|
|
Hallo Guido,Zitat: Original von guidoh ...Also das Short Signal funktioniert einwandfrei.
Beim longsignal gibt es ein problem...
Das sieht alles schon viel besser aus, aber ich bezweifel, dass es so schon so funktioniert wie Du Dir das vorstellst?! Nur um das nochmal klarzustellen, Du verwendest die TS2000i, nicht die TS 8 (bei letzterer hat der Sell-Befehl eine andere Bedeutung), d.h. Du möchtest Short und Long gehen, ja?
Du bist da ganz offensichtlich mit Stop- und Limit-Orders ein wenig durcheinander gekommen?! Also bitte beschreibe doch mal (verbal) genau, unter welcher Bedingung Du den ersten Entry machen willst und wie Du dann die Position weiter aufbauen möchtest? Willst Du beim Nachkaufen verbilligen oder zu schlechteren Preisen aufstocken? Abhängig davon muss der Puffer subtrahiert oder addiert werden und es muss mit Limit- oder Stop-Order gearbeitet werden (sowohl für die Long- als auch die Short-Seite).
Gruss
-Klaus
|
|
13.09.2005, 18:51 |
|
guidoh
Member TUG
Dabei seit: 09 2005
Herkunft:
Beiträge: 9
|
|
Hallo,
ja, ich möchte short und long gehen.
also ich habe mir das so vorgestellt :
bsp : long-setup
open bei 4000 punkten, fällt in 1 stunde bis auf 3980, dann steigt er wieder
puffer01 ist 20 punkte -> er müsste bei 4010 kaufen (müsste ja eine stop order sein).
puffer02 ist 10 punkte dann sollte der nächste kauf bei 4020 erfolgen (entryprice+puffer02).
short-setup
open bei 4000, steigt bis auf 4010 (highd ist 4010) und short-entry erfolgt bei 4010-20(puffer02) bei 3990, puffer03 ist bei 10, dann weiterer nachkauf bei 3980. (müssten ja auch stop orders sein, da er beim nachkauf ja nicht über 3980 verkaufen soll, sondern nur darunter)
Danke.
guidoh
p.s. was ist die tradestation-id? soll ich mich mit der seriennummer dort eintragen?
|
|
13.09.2005, 20:42 |
|
Klaus
Administrator
Dabei seit: 12 2001
Herkunft: Herdecke
Beiträge: 1088
|
|
Hallo Guido,Zitat: Original von guidoh p.s. was ist die tradestation-id? soll ich mich mit der seriennummer dort eintragen?
Das ist die Customer Number welche bei File -> Desktop Options -> User Information angezeigt wird.
Zu Deiner Strategie: So wie Du das beschreibst musst Du dann überall ausschliesslich mit Stop-Orders arbeiten. Warum der Long-Entry in Deinem Beispiel vorher an dieser Stelle stattfindet kann ich Dir natürlich nicht erklären. Generell ist es jedoch sinnvoll, bei solchen Problemen Debug-Ausgaben (z.B. mit CommentaryCL) in den Code einzubauen und dort die relevanten Variablen (z.B. aktuellen Stop-Preis etc.) auszugeben...
Wichtig ist, dass der Chart genügend Historie hat (wegen MaxBarsBack) und die Kerzenlänge zu den Puffern passt (also evtl. auf 10- oder 5min Charts heruntergehen) da Du momentan nur einen Nachkauf pro Kerze machst.
Viel Erfolg!
Gruss
-Klaus
|
|
14.09.2005, 11:56 |
|
guidoh
Member TUG
Dabei seit: 09 2005
Herkunft:
Beiträge: 9
|
|
Hallo,
hier nochmal der fertige code :
input : puffer01(0),puffer02(0),puffer03(0),puffer04(0),puffer05(0),puffer06(0);
input : anz01(0),anz02(0),anz03(0),anz04(0),anz05(0),anz06(0);
input : day_begin(0),day_end(0),long_possible(false),short_possible(false);
if short_possible = true and time >= day_begin then begin
if marketposition = 0 and time < day_end and currententries = 0 then sell ("first_sell") anz01 contracts at (lowd(0)+puffer01) limit;
if marketposition = -1 and time < day_end and currententries = 1 then sell ("second_sell") anz02 contracts at (entryprice+puffer02) limit;
if marketposition = -1 and time < day_end and currententries = 2 then sell ("third_sell") anz03 contracts at (entryprice+puffer03) limit;
if marketposition = -1 and time < day_end and currententries = 3 then sell ("fourth_sell") anz04 contracts at (entryprice+puffer04) limit;
if marketposition = -1 and time < day_end and currententries = 4 then sell ("fifth_sell") anz05 contracts at (entryprice+puffer05) limit;
if marketposition = -1 and time < day_end and currententries = 5 then sell ("sixth_sell") anz06 contracts at (entryprice+puffer06) limit;
if marketposition = -1 and time = day_end then exitshort all contracts on close;
end;
if long_possible = true and time >= day_begin then begin
if marketposition = 0 and time < day_end and currententries = 0 then buy ("first_buy") anz01 contracts at (highd(0)-puffer01) stop;
if marketposition = 1 and time < day_end and currententries = 1 then buy ("second_buy") anz02 contracts at (entryprice-puffer02) stop;
if marketposition = 1 and currententries = 2 and time < day_end then buy ("third_buy") anz03 contracts at (entryprice-puffer03) stop;
if marketposition = 1 and currententries = 3 and time < day_end then buy ("fourth_buy") anz04 contracts at (entryprice-puffer04) stop;
if marketposition = 1 and currententries = 4 and time < day_end then buy ("fifth_buy") anz05 contracts at (entryprice-puffer05) stop;
if marketposition = 1 and currententries = 5 and time < day_end then buy ("sixth_buy") anz06 contracts at (entryprice-puffer06) stop;
if marketposition = 1 and time = day_end then exitlong all contracts on close;
end;
also beim dem signal funktioniert die short-variante problemlos(siehe short.gif).
es ist so gewollt das der erste short entry bei lowd(0)+puffer01 erfolgt. (habe mich da nochmal umentschieden)
im chart kauft er auch an den gewünschten positionen.
allerdings macht das long signal probleme (bild long.gif) hier kauft er jeweisl nur zum open, und der puffer01 ist da auch
noch nicht erreicht. eine stop oder sollte es sein (und highd(0)-puffer01 ist auch richtig). wieso funktioniert das signal nicht?
guidoh7
short.GIF (32 KB, 618 mal heruntergeladen)
Dieser Beitrag wurde von guidoh am 14.09.2005, 14:33 Uhr editiert.
|
|
14.09.2005, 14:31 |
|
guidoh
Member TUG
Dabei seit: 09 2005
Herkunft:
Beiträge: 9
|
|
Hi,
und hier das long.gif
guidoh
long.GIF (31 KB, 617 mal heruntergeladen)
|
|
14.09.2005, 14:34 |
|
Klaus
Administrator
Dabei seit: 12 2001
Herkunft: Herdecke
Beiträge: 1088
|
|
Zitat: Original von guidoh ...allerdings macht das long signal probleme (bild long.gif) hier kauft er jeweisl nur zum open, und der puffer01 ist da auch noch nicht erreicht. eine stop oder sollte es sein (und highd(0)-puffer01 ist auch richtig). wieso funktioniert das signal nicht?
Unter der Annahme dass das Signal symetrisch arbeiten soll musst Du entweder nur mit Stop oder nur mit Limit-Orders arbeiten. Aktuell hast Du auf der Short-Seite Limit und auf der Long-Seite eine Stop Order - das verursacht Deine Probleme.
Allerdings bin ich auch verwundert über die neuen Level - die Eiinstiegsbedingung jetzt (Short = LowD + Puffer Limit) ist eine ganz andere als in Deinem ersten Signal (Short = HighD - Puffer Stop)? Mir ist das natürlich egal, aber Du solltest nicht zu viele Dinge auf einmal ändern, das verwirrt dann nicht nur mich...
Ich vermute auch, Du hast die Wirkungsweise von Stop und Limit noch nicht ganz verinnerlicht? Stop oder Limit ist immer eine Frage des aktuellen Kurses und des Preises zu dem gehandelt werden soll:- Buy / Long zu einem niedrigeren Preis als aktuelles Close => Limit
- Buy / Long zu einem höheren Preis als aktuelles Close => Stop
- Sell / Short zu einem höheren Preis als aktuelles Close => Limit
- Sell / Short zu einem niedrigeren Preis als aktuelles Close => Stop.
Damit solltest Du jetzt eigentlich weiterkommen...
Gruss
-Klaus
|
|
14.09.2005, 17:09 |
|
guidoh
Member TUG
Dabei seit: 09 2005
Herkunft:
Beiträge: 9
|
|
Hi,
die Funktionsweise von Limit/stop habe ich mir nochmal deutlich gemacht. und wie in dem letzten signal sollten sie sein.
Das short und long setup in einem signal sind, ist nur der einfachhalt halber (kann man ja auswählen durch long_possible = true, short_possible = true) im test habe ich immer nur einen wert auf true, und trotzdem kommen beim long-setup solche ergebinsse raus.
es ist gewollt, das das short signal nur mit limit-orders, und das long signal nur mit stop oders arbeiten soll.
sorry nochmal für die erste fehlerhate beschreibung.
guidoh
|
|
14.09.2005, 20:34 |
|
Klaus
Administrator
Dabei seit: 12 2001
Herkunft: Herdecke
Beiträge: 1088
|
|
Guido, Dein Signal (die Long Seite) verhält sich exakt so, wie Du es programmiert hast. Wenn Du auf der Long Seite mit Stop-Order arbeiten willst dann solltest Du sicherstellen (siehe Liste in meinem vorigen Posting), dass der Stop-Preis höher als der Close der aktuellen Kerze ist. Ist dies nicht der Fall (wie in Deinem Beispielchart) dann ist die Stop-Bedingung sofort erfüllt und der Trade wird zum nächsten Kurs (= Open der nächsten Kerze) sofort ausgeführt....
Also was willst Du?
Gruss
-Klaus
|
|
15.09.2005, 08:48 |
|
|