|
Gruppen: Kunde
Beiträge: 38
|
Hallo Taxus,
Wie stellt man denn hier ein Bild rein, wollte das lezthin mal machen ging aber leider nicht.
Danke
|
|
Gruppen: Kunde
Beiträge: 371
|
Hallo René,
von L+P gibt es keinen Speicherplatz für uns. Man muß sich also der Dienste eines Dritten bedienen. Du klickst am besten mit der rechten Maustaste in ein im Formum hochgeladenes Bild eines Mitgliedes, nicht aber von L+P MA´s, und überlegst danach sorgfältig, ob Du über diesen Anbieter gehen möchtest.
Nachteil: Die Bilder verschwinden, wenn dieser Anbieter Deine Bilder löscht, weil ... 1000 Gründe. Ich habe einen Ami und einen deutschen Anbieter entdeckt, aber nicht im Kopf.
Gruß
|
|
Gruppen: Kunde
Beiträge: 371
|
Hallo René,
zu Deinem AmiBroker - Programm "Forums-Beitrag vom Sonntag, 6. Mai 2012 21:35:52" in diesem Thema hier.
Das ist ein kleines Handelssystem und kein reines Trailing-Stop-Programm.
Bisher habe ich folgendes erledigt, um mir ein Bild machen zu können:
1. Layout mit Candlesticks-Chart und SMA 25 2. Signalgeber für das Kaufsignal:
ref(Cross(C,SMA(C, 25)), -1)and O >= Ref(O, -1)
Daraus wird das AB-Programm die überflüssigen Kaufsignale entfernen und nach Trailing-Stop-Auslösung verkaufen.
Vielleicht kann noch jemand mithelfen. Die Punkte 1. und 2. könnt Ihr schon mal erledigen und ggf. nachfragen.
Vielleicht könntest Du das mit dem Trailing Stop schon erklären. Was haben den die geschweiften Klammern für eine Bedutung?
Grüße
|
|
Gruppen: Kunde
Beiträge: 38
|
Hallo,
Hier das Kleine Handelssystem nochmals mit den Erklärungen der einzelnen Teile,
// Formel für TrailStop Linie zeichnen
Buy = Ref(Cross(Close, SMA(Close, 25)), - 1) AND Open >= Ref(Open, -1); Sell = 0;
StopLevel = 0.04; ........ // Stop Limit 4% trailARRAY = Null; ......// Das TrailARRAY muss auf Null gesetzt sein, sonst gehts in der for Schlaufe nicht trailstop = 0; .............// auch den trailstop auf Null setzen, damit die Anfangbedingung erfüllt ist
for( i = 1; i < BarCount; i++ ) ..........// Normale For Schlaufe am Anfang { ................................................. // Klammer für eusere Schlaufe
if( trailstop == 0 AND Buy[ i ] ) ............// erste if Schlaufe, " trailstop = 0 und Buy = true" ? { .....................................................// wenn trailstop = 0 und Buy true, wird der teil ausgeführt trailstop = High[ i ] * (1-stoplevel); ..// trailstop erhält wert vom High mal stoplevel = ............................................................... ( z.b. 10.00 -1* 0.04 = 9.60) } else Buy[ i ] = 0; ........................... // Entfernt die überschüssigen Kauf-Signale
if( trailstop > 0 ) ............................// zweite if Schleife, "wenn trailstop > 0 ist wird neuer wert zugewiesen { trailstop = Max( High[ i ] * (1-stoplevel), trailstop ); ........... // Neue Wertzuweisung trailARRAY[ i ] = trailstop; ..............................................// trailARRAY erhält hier den trailstopwert ........................................................................................... zum Zeichnen der Linie }
if( trailstop > 0 AND Low[ i ] < trailstop ) ................ // dritte Schleife mit bedingung ................................................................................"trailstop >0 und tief kleiner als trailstop { Sell[ i ] = 1; ................................................. // wenn das so ist haben wir die Stoplinie erreicht und Verkaufen SellPrice[ i ] = trailstop; ................................ // hier weisen wir den verkaufspreis zu ........................................................................... ( brauche ich zur Auswertung im Backtest) trailstop=0; ........................................... // hier wird dann der trailstop wieder auf null gesetzt ........................................................................damit wir wieder von vorne anfangen können } } ...........................// dies ist das ende der for Schleife, genaugenommen ist die Auswertung hier zu Ende
PlotShapes(Buy*shapeUpArrow,colorBlue,0,Low); ......// Dies zeichnet mir den Kaufpunkt im blauen Pfeil ein PlotShapes(Sell*shapeDownArrow,colorRed,0,High); .... // und hier den Verkaufspunkt in Rot
Plot( trailARRAY, " Stop Limit Line ", colorRed); .....// Hiernmit zeichne ich die Trailllingstop Linie im Chart ein.
Der Traillingstop kann auch nur mit den Schleifen 2 und 3 gemacht werden wenn man dem trailstop den Kaufpreis zuweist und anstelle der 2 Schleife das else Statment nimmt ( else sell[i] =0, trailstop = 0; End)
Ich stelle später dann noch ein Bild zur Verdeutlichung wie das bei mir aussieht rein.
Gruss
|
|
Gruppen: Kunde
Beiträge: 371
|
Guten Morgen,
ich wollte gerade schreiben, daß die Klammern für Begin und End in Tai Pan stehen.
Nun habe ich noch folgende Fragen:
trailARRAY = Null; // Was macht das trailARRAY? i++ // Wofür steht das i++? Was bedeuten die beiden ++? Sind das nur Zeichen? Ist das eine Variable?
for( i = 1; i < BarCount; i++ ) Übersetze bitte mal diesen Ausdruck.
if( trailstop == 0 AND Buy[ i ] ) Was bedeuten die == ?
trailARRAY[ i ] = trailstop; // siehe Frage von oben zum trailARRAY // In Tai Pan wäre das ein trailARRAY-Element "i". Ist das hier auch so?
( else sell[i] =0, trailstop = 0; End) // Übersetze bitte auch diesen Ausdruck.
Das wär´s erst einmal. Danke vorab René.
Grüße
|
|
Gruppen: Kunde
Beiträge: 20
|
Hallo Michael,
recht herzlichen Dank für Deine Lösung, es klappt. Ich hatte schon gedacht, man müsste wie folgt programmieren.
Wenn das heutige High größer ist als das gestrige, dann nimm das heutige, sonst das gestrige.
Geht so was mit der Formelsprache von Tai-Pan?
Grüße mitho
|
|
Gruppen: Kunde
Beiträge: 38
|
Hallo Taxus,
Wenn Du die Formel mal aufmerksam durchliest wird Dir schon eine frage beantwortet.
Das trailARRAY wird mit den Werten des Stop gefüllt, siehe "TrailARRAY[i] = trailstop" oder anders gesagt das trailARRAY erhält die Werte welche zum Zeichnen der Triggerlinie nötig sind.
trailARRAY = NULL / damit deklariere ich das ARRAY, wenn ich nur trailARRAY = 0 schreiben würde wäre es kein ARRAY sondern nur ein Wert.
for( i = 1; i < BarCount; i++ ) Dies ist ganz einfach / for (i =1; heisst die for Schleife fängt mit 1 an, und / i < Barcount; / bedeutet das die Schleife solange durchlaufen wird bis i gleich wie Barcount ist, Barcount steht hier für die einzelnen Kurse ( Kurs = engl. Bar) und das / i++ / heisst nichts anderes als das i bei jedem Schleifendurchlauf um 1 erhöht wird, also so wie in TP inc(I).
if( trailstop == 0 AND Buy[ i ] ) die == 0 heisst wenn trailstop den wert 0 enthält, das muss so sein weil trailstop kein ARRAY ist.
" ( else sell[i] =0, trailstop = 0; End) // Übersetze bitte auch diesen Ausdruck. " Entschuldige mal aber so steht das nirgens in der Formel, aber nur zum besseren Verständnis wenn es in der Formel wäre würde das so aussehen:
else sell[i] = 0; // damit wird das Verkaufssignal gelöscht oder eben auf 0 gesetzt. trailstop = 0; // hier genau das selbe wie bei sell End; // dies gibt es nicht im Script sondern nur die Klammer " } " und damit verlässt man dann die for Schlaufe.
Hoffe ich konnte damit die noch offenen Fragen genügend beantworten.
Grüsse
|
|
Gruppen: Kunde
Beiträge: 104
|
Hallo Mitho,
freut mich zunächst mal, daß es bei dir hinhaut.
Zu deiner Frage:
Wenn das heutige High größer ist als das gestrige, dann nimm das heutige, sonst das gestrige.
Geht so was mit der Formelsprache von Tai-Pan?
Ja, das geht und ist nicht schwer umzusetzen.
Z.B.
High1 := Ref(High,-1); // das gestrige Hoch
Result := If(High > High1,High,High1);
Damit kannst du z.B. in einer Liste das höhere der beiden Highs ausgeben, oder den Wert im Chartmodul für Berechnungen hernehmen.
Falls du es für den Trailing-Stop nutzen willst: Brauchst du nicht, das macht die HHV-Funktion schon automatisch...
Michael
|
|
Gruppen: Kunde
Beiträge: 38
|
Hier noch der Chart wie das bei mir Aussieht in AmiBroker Gruss
|
|
Gruppen: Kunde
Beiträge: 20
|
Hallo Michael,
danke für die schnelle Antwort, wieder was gelernt.
Grüße mitho
|
|
Gruppen: Kunde
Beiträge: 20
|
Guten Tag,
ich benötige wieder einmal die Hilfe des Forums um den Trailing-Stop weiter zu entwickeln. Ich möchte mir gerne die Schnittpunkte zweier Linien z.B. sma(100) und sma(40) im Chart durch Pfeile von oben anzeigen lassen. Die Schnittpunkte erhalte ich über
wcross:=cross(sma(c,100),sma(c,40)); aber dann nur als 0 oder 1 unter dem Chart
den Pfeil im Endpunkt über
Enum eArrow (Down = 200); Function DrawArrow (AArrow: eArrow; ADateTime: DateTime; AKurs: Double; ATextColor: ColorRef = Black): Text; Begin tArrow := DrawText ("" + AArrow, ADateTime, AKurs, ATextColor, Leer, 14); tArrow.FaceName := "Wingdings 3"; Case AArrow Of eArrow.Down: tArrow.Format := TextFormat.Center Or TextFormat.Top; End; Result := tArrow; End;
Result3 := DrawArrow (eArrow.Down, LastDate(H).ToDateTime(), LastValue(H), Red);
Wie verbinde ich jetzt die beiden Formeln, um den oben beschriebenen Sachverhalt zu erhalten oder funktioniert das so nicht?
Danke und Grüße mitho
|
|
Gruppen: Kunde
Beiträge: 104
|
Hallo mitho,
hast du schon dran gedacht, einfach ein Signal zu erstellen, z.B.
wcross:=cross(sma(c,100),sma(c,40));
Result:= wcross
Unter "Darstellung" kannst du dann den "Verkaufspfeil" wählen und in Größe, Farbe und Lage (unter oder über Kurs) bequem einstellen (allerdings nicht genau auf den Schnittpunkt). Der Pfeil erscheint dann mit wenig Aufwand jeweils über der Kursreihe (nicht über den SMAs), sofern der 40er unter den 100er SMA kreuzt.
Oder soll die Pfeilspitze genau auf den Schnittpunkt der SMAs zeigen?
Schönen Abend,
Michael
|
|
Gruppen: Kunde
Beiträge: 20
|
Guten Tag,
anbei der Formeltext für alle Interessierten an einem Trailing-Stopp. Die Formel gibt im Chart an.
1. Per Pfeil den Einstiegskurs am Kauftag 2. Einen frei wählbaren Stoppkurs „Halt_1“ 3. Einen TrailingStopp „Halt_2“ der x% unter den Höchstkurs gelegt werden kann.
Die Formel funktioniert bei mir auch im Stundenchart
Leider ist es mir bis jetzt nicht gelungen, das Kreuzen der Linien im Chart (nicht im Signalgeber) auch per Pfeil darzustellen. Bedanken möchte ich mich bei Taxus, der mir den Mut gegeben hat auch als Anfänger einfach einmal anzufangen. Auch bei Michael, der immer schnell eine Antwort parat hatte.
Für die, die wie ich kaum Ahnung von der Taipan-Formelsprache haben helfe ich gerne auch mit ganz banalen Fragen zur Anwendung dieser Formel.
Man kann mich auch persönlich per Mail ansprechen. Grüße mitho
//Trailing-Stop long.
KaufDatum := Para1;//Typ auf Datum einstellen KaufKurs := Para2;//Typ auf Double einstellen Prozentzahl:=Para3;//Typ auf Double einstellen Halt_1:=Para4;//Stopp am Einstieg Typ Double
heute:=SystemDate(); aktuelles Datum
Bereich:= IndexofDateTime(C,heute) - IndexofDateTime(C,KaufDatum-1); // Anzahl Kurstage im Bereich Hoch:=LastValue(HHV(H,Bereich)); // höchster Schlußkurs im Bereich
Abstand1 := Hoch*para3/100; // Para3-% unter neuem Hoch
wHalt_1 := Line (Para1,Para4,Para1,Para4,True,False,True); wHalt_2 := Line (Para1,Hoch-Abstand1,Para1,Hoch-Abstand1,True,False,True);
Result1 := wHalt_1;wHalt_2;
Enum eArrow (Left = 198 ); //gibt den Einstieg mit einem Pfeil an
Function DrawArrow (AArrow: eArrow; ADateTime: DateTime; AKurs: Double; ATextColor: ColorRef = Black): Text; Begin tArrow := DrawText ("" + AArrow, ADateTime, AKurs, ATextColor, Leer, 14); tArrow.FaceName := "Wingdings 3"; Case AArrow Of eArrow.Left: tArrow.Format := TextFormat.Left Or TextFormat.VCenter; End; Result := tArrow; End;
Result3 := DrawArrow (eArrow.Left, Para1.ToDateTime(), Para2, Red);
//Jetzt müsste noch per Pfeil der mögliche Schnittpunkt //von wHalt_1 oder wHalt_2 mit dem Chart angegeben werden.
//wcross:= cross(close,wHalt_2); //wResult3:=wcross
//color 1:= if(wResult3,Cyan,Black)
|
|
Gruppen: Kunde
Beiträge: 371
|
Hallo mitho,
zum Setzen von Pfeilen am Kreuzungspunkt von Linien:
Wenn ich das so richtig verstanden habe, dann gibt es dafür eine einfache Erklärung. Die ist mir auch erst später aufgegangen mitho.
Nimm doch bitte mal ein Chartbeispiel mit der Kreuzung von zwei Linien. Der Chart sollte den ganzen Bildschirm einnehmen. Stelle nun eine ganz niedrige Kursanzahl um die Kreuzung der Linien herum ein, also etwa 5-10 Tage vor und 5-10 Tage nach der Kreuzung. Nun scanne die Kreuzungsstelle mit einer vertikalen Linie.
Was kann man daraus ablesen?
Kleine Hilfe: Die Kreuzungen ergeben ein Array.
Deine Frage finde ich sehr gut, weil sie ganz wichtig für die Ergebnisse ist. Deshalb sollte man sie auch mal gut durchdenken und seine Schlußfolgerungen daraus ziehen. Danke mitho.
Schöne Grüße
|
|
Gruppen: Kunde
Beiträge: 39
|
Hallo an Alle, seid ihr in dem Thema weiter gekommen und könnte mir jemand die Formel zur Verfügung stellen? Vielen Dank im voraus! Jürgen Gerdes juergengerdes@gmx.de
|
|
Guest |