Amibroker AFL

      ibelieve schrieb:

      ibelieve schrieb:

      dann würde ich gerne im Code noch ein Glattstellen nach X Tagen einfügen.


      habe ich über

      Quellcode

      1. /* N-bar stop */
      2. ApplyStop( stopTypeNBar, stopModeBars, 5 );


      gelöst


      Quellcode

      1. Cond3 = C*V ;// money flow >= $50,000,000 for stocks//Long
      2. Volumen = MA(Cond3,10) >= 500000 ;
      3. ATRWert = 10;
      4. ATR_ = ATR(ATRwert);
      5. //such Bedingungen
      6. groesse = H - L < ATR_ * 0.8 ;
      7. richtunglong = O < C ;
      8. richtungshort = O > C ;
      9. longtiefervortag = H < Ref(H,-1) ;
      10. shorthoehervortag = L > Ref(L, -1) ;
      11. //heute oder gestern muss ein neues hoch/tief gegen trend-richtung sein
      12. neuestief = L < Ref(L,-1) OR Ref(L,-1) < Ref(L,-2); //für Long
      13. neueshoch = H > Ref(H,-1) OR Ref(H,-1) > Ref(H,-2); //für short
      14. //close in dem drittel von handelsrichtung, geändert in obere hälfte
      15. handellong = C > H - ((H-L)/2);
      16. handelshort = C < L + ((H-L)/2);
      17. //kein neues hoch-tief
      18. tieflong = LLV(L,2) > LLV(L,15);
      19. hochshort = HHV(H,2) < HHV(H,15);
      20. bedingungenlong = groesse AND richtunglong AND longtiefervortag AND Volumen AND neuestief AND handellong AND tieflong;
      21. bedingungenshort = groesse AND richtungshort AND shorthoehervortag AND Volumen AND neueshoch AND handelshort AND hochshort;
      22. Buy = H > Ref(H, -1) + 0.05 AND Ref(bedingungenlong,-1);
      23. Buystop = Ref (H, -1) + 0.05;
      24. BuyPrice = Max (Buystop,Open); // kaufpreis
      25. Short = L < Ref(L, -1) - 0.05 AND Ref(bedingungenshort,-1);
      26. Shortstop = Ref (L, -1) - 0.05;
      27. ShortPrice = Min (Shortstop, Open);
      28. StopLevel = Param("N-bars", 5, 1, 100, 1 );
      29. Sell = Cover = 0;
      30. ApplyStop( stopTypeNBar, stopModeBars, StopLevel );
      31. //Plot
      32. Plot( Close, "Price", colorBlack, GetPriceStyle());
      33. PlotShapes(IIf(Buy, shapeSmallUpTriangle, shapeNone), colorGreen, 0, Low, -15);
      34. PlotShapes(IIf(Short, shapeSmallDownTriangle, shapeNone), colorRed, 0, High, -15);
      35. /*
      36. 1 - regular exit
      37. 2 - max. loss
      38. 3 - profit target
      39. 4 - trailing
      40. 5 - n-bar stop
      41. 6 - ruin stop
      42. */
      43. Equity( 1 );
      44. appstopS = Sell == 5;
      45. appstopC = Cover == 5;
      46. PlotShapes(IIf(appstopS, shapeSmallDownTriangle, shapeNone), colorRed, 0, H, -15);
      47. PlotShapes(IIf(appstopC, shapeSmallUpTriangle, shapeNone), colorGreen, 0, L, -15);
      48. dist = 1.5 * ATR_;
      49. dist2 = 1.5 * ATR_;
      50. for ( i = 0; i < BarCount; i++ )
      51. {
      52. if ( Buy[i] )
      53. PlotText( "Buy\n@" + BuyPrice[ i ], i, L[ i ] - dist[i], colorGreen, colorYellow );
      54. if ( appstopS[i] )
      55. PlotText( "Sell\n@" + SellPrice[ i ], i, H[ i ] + dist[i], colorRed, colorYellow );
      56. if ( appstopC[i] )
      57. PlotText( "cover\n@" + CoverPrice[ i ], i, L[ i ] - dist[i], colorGreen, colorLightGrey );
      58. if ( Short[i] )
      59. PlotText( "Short\n@" + ShortPrice[ i ], i, H[ i ] + dist[i], colorRed, colorLightGrey );
      60. }
      Gefunden

      Frage
      Allowsamebarexit of Setoption

      Hello,

      is this only referring to e.g. buyprice and sellprice at same bar or is it also referring to e.g. buyprice and sell signal at same bar?

      Best regards


      Antwort
      Hello,

      This does not change the trading prices - it only allows or disallows certain trades to be taken - there are 4 cases:

      When it is ON, then single bar trades are allowed.
      When
      a) the flag is ON and
      b) Buy and Sell occur at the same bar
      c) and there is NO already open LONG trade
      then new long position will be open
      and then closed the same day

      When
      a) the flag is OFF and
      b) Buy and Sell occur at the same bar
      c) and there is NO already open LONG trade
      then new long position will be open
      and will NOT be closed the same day - but rather on NEXT sell signal.

      When
      a) the flag is OFF and
      b) Buy and Sell occur at the same bar
      c) and there IS already open LONG trade
      then already open long position will be closed and new position will NOT be open

      When
      a) the flag is ON and
      b) Buy and Sell occur at the same bar
      c) and there IS already open LONG trade
      then already open long position will be closed and new position will be open

      trading prices are used respectively (BuyPrice for BUY trade, SellPrice for SELL trade and so on).

      Best regards

      Marcin Gorzynski
      Amibroker.com Technical Support

      ibelieve schrieb:



      Jetzt ergibt es etwas mehr Sinn als open Short. Sind aber noch ein paar Sachen drinnen auszumerzen.

      weis ich jetzt nicht was du meinst.

      ich sehe jetzt das es der TP also Ziel Kurs wäre, aber verstehe nicht warum er da Glattstellt.


      Du hast doch den ATR reingenommen in die Exit rules und nicht ich. 1388,89 sind 1.8 * ATR vom Shortpreis entfernt. Alles klaro? Und glattgestellt ist da garnichts. Es ist ja ein open Short.

      ibelieve schrieb:


      Und bzgl AllowSameBarExit hat Goso schon recht.

      bringt aber ja leider nicht das gewünschte Ergebnis, wo bei ich aber damit leben kann.


      Nimm's mir nicht übel, aber manchmal machst du mich echt wuschig. Es heißt AllowSameBarExit. ABER wenn das Austiegsignal laut deinen Regeln nicht zum selben Bar erscheint, dann kann der Ausstieg auch nicht zum selben Bar erfolgen. Verstehst du, was allow heißt? Es heißt nicht DoItNowBecauseIbelieve. :)

      ibelieve schrieb:


      was mir im Moment auch noch ein Problem bereitet ist das er nicht mehr Glattstellt wenn ein Kauf auf einen Tag fällt wo er gerade Glattgestellt hat.

      ?

      trash schrieb:

      Und bitte auch noch mal an dich der Tip, setze Mehrfachcalls von Funktionen in eine Variable. Sowas fällt schon beim ersten Blick auf. Zum Bsp bei deinem Mehrfachaufruf von ATR() ... da bekomme ich Migräne.


      brachte jetzt eine verbesserung von 46 sek backtest auf 15 sek.

      aber wenn man nur alle paar jahre mal so was macht vergisst man halt schnell kleinigkeiten.

      Jetzt ergibt es etwas mehr Sinn als open Short. Sind aber noch ein paar Sachen drinnen auszumerzen.

      weis ich jetzt nicht was du meinst.

      ich sehe jetzt das es der TP also Ziel Kurs wäre, aber verstehe nicht warum er da Glattstellt.

      Und bzgl AllowSameBarExit hat Goso schon recht.

      bringt aber ja leider nicht das gewünschte Ergebnis, wo bei ich aber damit leben kann.

      was mir im Moment auch noch ein Problem bereitet ist das er nicht mehr Glattstellt wenn ein Kauf auf einen Tag fällt wo er gerade Glattgestellt hat.
      Wo das Problem liegt glaube ich erkannt zu haben, weis nur noch nicht ob ich mit meinem Lösungsweg Richtig liege.
      Die Wissenden reden nicht viel,die Redenden wissen nicht viel.

      klaus-m.blogspot.com/
      Das Problem m.M.n. ist, dass für TP nichts definiert ist außer am Anfang 0. Deswegen kommt da auch so ein Boguswert außerhalb des Bars heraus. Der Loop ist verbuggt.
      Und bzgl AllowSameBarExit hat Goso schon recht. Wenn du same bar exit im Backtester erlauben willst, dann musst du es halt auf True setzen. Es heißt ja nicht umsonst so.

      trash schrieb:

      Dass diese auftauchen liegt an deiner Zeile "Preis=Min(TP,O);" Was willst du da machen? Ergibt für mich keinen Sinn.


      soll der preis sein mit dem gerechnet wird wenn das ziel erreicht ist.
      TP ist ja der Zielpreis,
      sollte der wert jetzt mit einem Gap unter(wir befinden uns ja in einem Short Trade) dem TP eröffnen soll halt das Open genommen werden.

      Die gleichen Sachen sind ja auch bei den Kaufbedingungen um auch bei einer Gap eröffnung über/unter unserem eigentlichen Einstiegspreis Richtig zu rechnen.
      Die Wissenden reden nicht viel,die Redenden wissen nicht viel.

      klaus-m.blogspot.com/

      trash schrieb:


      Ersetze jede weitere ATR() mit ATR_. Das ist erste Klasse Programmierschule. Und Funktionen gehören schon mal garnicht in einen Loop. Noch mal erste Klasse Programmierschule. Ließ dir in der Hilfe durch, was T.J. geschrieben hat in Sachen "Correct" und "Wrong" in Bezug auf Loops. Dieser bad coding Fehler wie hier beim ATR innerhalb von loops ist unter Perfomance Tuningtips zu finden. Auch da ein Bsp zu "wrong" und "correct" aufgeführt. Gib im Suchfeld der Hilfe einfach wrong ein.


      Das meinte ich amibroker.com/guide/x_performance.html
      In der zweiten Hälfte sind zwei Bsp Loops "Wrong" und "Correct".

      Schönen Sonntag noch ...

      ibelieve schrieb:

      trash schrieb:

      @ibelieve, beginnt deine Datenhistorie für ^GSPC zufälligerweise im Bereich 27.10.2006?

      27.7.1990


      Verwende mal diesen Exlorer

      Quellcode

      1. Filter = C == 1388.89 || L == 1388.89 || H == 1388.89 || O == 1388.89;
      2. format = 1.2;
      3. Colfont = colorLightGrey;
      4. Colcell = colorDarkGrey;
      5. width = 65;
      6. SetOption("NoDefaultColumns", True);
      7. //SetSortColumns( 1 );
      8. AddTextColumn(Name(),"Ticker", 1.0, Colfont, Colcell, width);
      9. AddColumn(DateTime(), "Date/Time", formatDateTime, Colfont, Colcell, 120);
      10. AddColumn(O, "Open", format, Colfont, Colcell, width);
      11. AddColumn(H, "High", format, Colfont, Colcell, width);
      12. AddColumn(L, "Low", format, Colfont, Colcell, width);
      13. AddColumn(C, "Close", format, Colfont, Colcell, width);


      1388.89 tauchen bei mir am 27.10.2006 auf.
      Dass diese auftauchen liegt an deiner Zeile "Preis=Min(TP,O);" Was willst du da machen? Ergibt für mich keinen Sinn.
      Es liegt an deinem Code und ganz allein nur an deinem Code.

      Dass im Backtester zum Bsp der Cover Price nicht übereinstimmt, ist ganz einfach.
      Dieser liegt ausserhalb des Bars!



      Aber um zumindest das selbe Ergebnis zu bekommen wie im Chart, musst du halt Price bound check auf False setzen.
      SetOption( "PriceBoundChecking", 0 );

      Dann sieht es so aus

      Habe aber ehrlich gesagt keine Lust, den Fehler im Code zu suchen, der zu diesem Coverprice führt. Schon allein, weil ich nicht weiß, wie die Regeln allg. lauten/was erreicht werden soll. Aber der Fehler ist dort und nur dort zu suchen.

      Etwas Wichtiges noch zu SetOption zum Einprägen:
      !Alle SetOption gelten nur für Auto Analysis nicht für den Chart! Setoption ist nichts anderes als das Setzen der Einstellungen im Backtester Settings Fensters über AFL. Jede SetOption setzt die globalen Einstellungen im Backtest Settings Fensters für den verwendeten AFL außer Kraft bzw ersetzt die jeweilige Einstellung. Wenn also z.B. im Settingsfenster Futures Mode nicht angeklickt ist, aber im Code SetOption("FuturesMode", True) gesetzt ist, dann ist für den AFL, in dem diese Zeile vorhanden ist, FuturesMode aktiviert

      Und bitte auch noch mal an dich der Tip, setze Mehrfachcalls von Funktionen in eine Variable. Sowas fällt schon beim ersten Blick auf. Zum Bsp bei deinem Mehrfachaufruf von ATR() ... da bekomme ich Migräne.

      Mache es so
      ATRWert = 10;
      ATR_ = ATR(ATRwert);

      und die Sonne scheint ein bisschen mehr. :)
      Ersetze jede weitere ATR() mit ATR_. Das ist erste Klasse Programmierschule. Und Funktionen gehören schon mal garnicht in einen Loop. Noch mal erste Klasse Programmierschule. Ließ dir in der Hilfe durch, was T.J. geschrieben hat in Sachen "Correct" und "Wrong" in Bezug auf Loops. Dieser bad coding Fehler wie hier beim ATR innerhalb von loops ist unter Perfomance Tuningtips zu finden. Auch da ein Bsp zu "wrong" und "correct" aufgeführt. Gib im Suchfeld der Hilfe einfach wrong ein.

      Sowas muss man sich gleich am Anfang einprägen, sonst setzt sich der Schlendrian über jeden weiteren Code fort. Ich meine, du kannst ja machen, was du willst, aber wundere dich nicht, wenn bei Hilfegesuch auf der Gegenseite gestreikt wird aus Angst vor Augenkrebs und der Code ansonsten auch ein reines Wirrwarr ist.

      Verstehe das alles nicht fasch und nimm es nicht persönlich. Es klingt auch nicht böse, da es nicht böse gemeint ist. Es ist einfach so.

      Wenn du es totsicher hinbekommen willst, dann engagiere halt einen Profi und schreibe allg was erreicht werden soll, Punkt für Punkt und möglichst eindeutig und verständlich. Amibroker selbst bietet sowas an (glaube für $60/Stunde). Es gibt auch 3rd party Anbieter wie z.B. coding4ab.com/home Robert Dunbar heißt der und ist auch im AB Forum unterwegs. Dein Problem ist aber wieder, dass du nicht fit in Englisch bist, wie du selbst mal erwähntest. Ansonsten weiß ich jetzt auch nicht, wie ich dir noch weiterhelfen könnte. Vielleicht kommt ja noch die Lust bei mir oder jemand Anderen, deinen Code genauer anzuschauen.

      goso schrieb:

      Ich habe von AFL keine Ahnung, aber in dem Code, den du hier veröffentlichst, lese ich

      SetOption("AllowSameBarExit", False); // Handel inerhalb eines Tages verbieten

      Wie soll da AB am gleichen Tag den Trade schliessen?

      Zum Zeitstop: In EL, PL und Equilla gibt es die Funktion "BarsSinceEntry", für AFL findet goog das: amibroker.com/guide/afl/afl_view.php?id=23

      goso, afl-noob


      True dort rein zu schreiben bringt nicht wirklich eine verbesserung.(hatte ich schon probiert, aber dann wieder zurück geschrieben)

      beim anderen habe ich problem weil ich es in die schleife bauen muss wenn ich nicht irre und sich da alles etwas anders verhält als im "normalen" code.
      Die Wissenden reden nicht viel,die Redenden wissen nicht viel.

      klaus-m.blogspot.com/
      ein paar probleme.

      beim ersten kauf hätte direkt wieder am kauftag verkauft werden müssen.
      wird das ein fehler im Code sein oder ist das eine einstellungssache in den Settigns?

      den ausstieg bei dem Short verstehe ich dann gar nicht.
      warum wurde glattgestellt?
      warum stimmt der cover preis im chart nicht mit dem im Backtester? ( wo bei das das Ziel gewesen wäre, was aber ja nie ereicht wurde)
      warum zeigt mir der BAcktester das Low als glattstellungspreis?

      dann würde ich gerne im Code noch ein Glattstellen nach X Tagen einfügen.
      Hier fehlen mir aber leider die Ideen wie ich das machen müsste. Sollte auch so sein das ich das X nachher durch den Optimizer laufen lassen könnte.



      Quellcode

      1. //Grundeinstellungen
      2. PositionSize = -5; // Positionsgroesse = 1000$
      3. //Backtestregeln
      4. SetOption("AllowSameBarExit", False); // Handel inerhalb eines Tages verbieten
      5. SetOption( "initialequity", 100000 ); // Startkapital
      6. SetOption("MaxOpenPositions",100 ); //maximale offene Positionen
      7. SetOption("MinShares",1 ); //minimale Positionsgröße in Shares
      8. SetOption("MinPosValue",150 ); //minimaler Betrag
      9. SetOption("AllowPositionShrinking", True ); //verkleiner der Positionsgroesse erlauben
      10. SetOption("ActivateStopsImmediately",False); //alle Stopps sollen nicht sofort aktiv sein
      11. RoundLotSize=1; //Positionen sollen immer aus ganzzahligen Shares bestehen(1,2,3,x)
      12. Cond3 = C*V ;// money flow >= $50,000,000 for stocks//Long
      13. Volumen = MA(Cond3,10) >= 500000 ;
      14. ATRWert = 10;
      15. //such Bedingungen
      16. groesse = H - L < ATR(ATRWert)* .8 ;
      17. richtunglong = O < C ;
      18. richtungshort = O > C ;
      19. longtiefervortag = H < Ref(H,-1) ;
      20. shorthoehervortag = L > Ref(L, -1) ;
      21. //heute oder gestern muss ein neues hoch/tief gegen trend-richtung sein
      22. neuestief = L < Ref(L,-1) OR Ref(L,-1) < Ref(L,-2); //für Long
      23. neueshoch = H > Ref(H,-1) OR Ref(H,-1) > Ref(H,-2); //für short
      24. //close in dem drittel von handelsrichtung, geändert in obere hälfte
      25. handellong = C > H-((H-L)/2);
      26. handelshort = C < L + ((H-L)/2);
      27. //kein neues hoch-tief
      28. tieflong = LLV(L,2) > LLV(L,15);
      29. hochshort = HHV(H,2) < HHV(H,15);
      30. bedingungenlong = groesse AND richtunglong AND longtiefervortag AND Volumen AND neuestief AND handellong AND tieflong;
      31. bedingungenshort = groesse AND richtungshort AND shorthoehervortag AND Volumen AND neueshoch AND handelshort AND hochshort;
      32. Buy = H > Ref(H,-1)+ .05 AND Ref(bedingungenlong,-1);
      33. Buystop = Ref (H,-1)+ .05;
      34. BuyPrice = Max (Buystop,Open); // kaufpreis
      35. Short = L < Ref(L,-1)- .05 AND Ref(bedingungenshort,-1);
      36. Shortstop = Ref (L,-1)- .05;
      37. ShortPrice = Min (Shortstop, Open);
      38. Sell=0;
      39. Cover=0;
      40. Limit=0;
      41. TP=0;
      42. Lsflag=0;
      43. LimA=Null;
      44. TPa=Null;
      45. ATRWert1=0;
      46. ATRWert2=0;
      47. Preis=0;
      48. for (i=1;i<BarCount;i++)
      49. {
      50. if (Lsflag>0)
      51. {
      52. if (L[i]<Limit)
      53. {
      54. Preis= Min(Limit,O[i]);
      55. SellPrice[i]=Preis;
      56. Sell[i]=1;
      57. Lsflag=0;
      58. }
      59. else if (H[i]>TP)
      60. {
      61. Preis=Max(TP,O[i]);
      62. SellPrice[i]=Preis;
      63. Sell[i]=1;
      64. LSflag=0;
      65. }
      66. }
      67. else if (Lsflag<0)
      68. {
      69. if (H[i]>Limit)
      70. {
      71. Preis= Max(Limit,O[i]);
      72. CoverPrice[i]=Preis;
      73. Cover[i]=1;
      74. Lsflag=0;
      75. }
      76. else if (L[i]>TP)
      77. {
      78. Preis=Min(TP,O[i]);
      79. CoverPrice[i]=Preis;
      80. Cover[i]=1;
      81. LSflag=0;
      82. }
      83. }
      84. else
      85. {
      86. if (Buy[i])
      87. {
      88. ATRWert1=ATR(10)*.6;
      89. ATRWert2=ATR(10)*1.8;
      90. Price=BuyPrice[i];
      91. Limit=Price-ATRWert1[i];
      92. Risk=abs(Price-Limit);
      93. TP=Price+ATRWert2[i];
      94. Lsflag=1;
      95. }
      96. else if (Short[i])
      97. {
      98. ATRWert1=ATR(10)*.6;
      99. ATRWert2=ATR(10)*1.8;
      100. Price=ShortPrice[i];
      101. Limit=Price+ATRWert1[i];
      102. Risk=abs(Price-Limit);
      103. TP=Price-ATRWert2[i];
      104. Lsflag=-1; // wir sind short
      105. }
      106. }
      107. TPa[i]=TP;
      108. Lima[i]=Limit;
      109. if (Lsflag==0)
      110. {
      111. TPa[i]=Null;
      112. Lima[i]=Null;
      113. }
      114. }
      115. Buy=ExRem(Buy,Sell);
      116. Short=ExRem(Short,Cover);
      117. Plot(LIMa,"Limit",colorYellow);
      118. Plot(TPa,"TP",colorOrange);
      119. dist = 1.9 * ATR( 10 );
      120. dist2 = 2.9 * ATR( 10 );
      121. for ( i = 0; i < BarCount; i++ )
      122. {
      123. if ( Buy[i] )
      124. PlotText( "Buy\n@" + BuyPrice[ i ], i, L[ i ] - dist[i],colorGreen,colorYellow );
      125. if ( Sell[i] )
      126. PlotText( "Sell\n@" + SellPrice[ i ], i, H[ i ] + dist[i],colorRed, colorYellow );
      127. if ( Cover[i] )
      128. PlotText( "cover\n@" + CoverPrice[ i ], i, L[ i ] - dist[i],colorGreen,colorLightGrey );
      129. if ( Short[i] )
      130. PlotText( "Short\n@" + ShortPrice[ i ], i, H[ i ] + dist[i],colorRed, colorLightGrey );
      131. }
      132. PlotShapes( Buy * shapeUpArrow + Sell * shapeDownArrow, IIf( Buy, colorGreen, colorRed ),0,IIf(Buy,L,H),-30);
      133. PlotShapes( Cover * shapeUpArrow + Short * shapeDownArrow, IIf( Cover,colorGreen, colorRed ),0,IIf(Cover,L,H),-30);
      Die Wissenden reden nicht viel,die Redenden wissen nicht viel.

      klaus-m.blogspot.com/
      Zum Thema Amazon EC2 aus diesem Thread #799
      hier ein konkretes Bsp., das die Schritte für einen kostenfreien Einjahrestestzugang zu einer EC2 Micro Instanz etwas näher erläutert sanzprophet.blogspot.de/2012/0…roker-on-amazons-ec2.html

      Free bedeutet aber, dass es kostenfrei ist, solange man unterhalb des Limits bleibt.
      Keep in mind that incoming traffic seems to be free, but you do get charged for outward traffic, after a certain quota is reached.