Amibroker AFL

      Alles um Metatrader 4.0 - Handelsmethoden und Indikatoren

      Quellcode

      1. _SECTION_BEGIN("2bar range");
      2. pv = Param("PIP value",0.0001,0.0001,0.01,0.01);
      3. tbrc = ParamColor("Color 2bar range",colorLightGrey);
      4. tbhc = ParamColor("Color range high",colorPaleGreen);
      5. tblc = ParamColor("Color range low",colorOrange);
      6. tbl = LLV(L,2);
      7. tbh = HHV(H,2);
      8. tbr = Prec((tbh-tbl)/pv,1);
      9. tbh = tbh * (tbh == LastValue(tbh));
      10. tbl = tbl * (tbl == LastValue(tbl));
      11. tbh = IIf(tbh,tbh,Null);
      12. tbl = IIf(tbl,tbl,Null);
      13. Plot(tbh, "", tbhc, styleBar, styleDashed);
      14. Plot(tbl, "", tblc, styleBar, styleDashed);
      15. RangeTitle = EncodeColor(tbrc) + "2Bar Range: " + EncodeColor(tbrc) + tbr;
      16. Title= StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) ",
      17. O, H, L, C, SelectedValue( ROC( C, 1 ) ) ) + "\n"+ RangeTitle;
      18. _SECTION_END();
      Bilder
      • 2barrange.png

        7,1 kB, 1.184×790, 296 mal angesehen
      "I'm a trader, baby. So, why don't you kill me?!"
      Moin, moin

      Nee, nich' janz, Ibelieve.

      Haste bissl falsch verstanden, nicht das Timeframe ist gemeint. Der soll den Zoom, der vor dem Schließen von AB vorhanden war, nach dem neuen Öffnen von AB wieder so einstellen. In den Einstellungen von AB hast du ja diese Einstellung, die global gilt, z.B. hier 250 sichtbare Bars



      Dies wird bei jeden neuen Start von AB wieder abgerufen.

      Der Code von diesem Herman van den Bergen soll aber die Zoomeinstellung von vorher beibehalten. Ich habe nun herausgefunden, dass es zwar funktioniert, aber nur für den ersten Chart und seine Sheets und wenn du es in einem extra Fenster öffnest. Wenn ich die #include Funktion und Restorelastusedrange(); in einen beliebigen vorhandenen Code (auch eines anderen default oder blank Charts) einfüge, dann tut er garnichts.
      "I'm a trader, baby. So, why don't you kill me?!"

      trash schrieb:

      Danke, damit wäre die Fehlermeldung weg. Leider bringt es keinen Erfolg in Sachen die vor dem Schließen von AB individuell vorgefundene Chart Rangeeinstellung beim nächsten Start von AB wieder vorzufinden.

      Moin,
      Was soll das den genau heisen?
      So weit wie ich es mit meinem Englsich verstehe soll nach dem schliessen und neuen öffnen der Chart in der Zeiteinstellung wieder da stehen wie vor dem schliessen.
      Das hat er bei mir gemacht.
      Wo bei ich den Sinn der Ganzen Aktion auch noch nicht so genau verstehe.
      Die Wissenden reden nicht viel,die Redenden wissen nicht viel.

      klaus-m.blogspot.com/
      so habe jetzt zumindest was was läuft,
      weis aber nicht ob es das richtige ist.
      muss aber jetzt den Rechner für das Kind zum chatten räumen.

      habe den langen Code im Include Verzeichnis und habe den dann mit Include in den kurzen eingefügt.
      dann ist die Fehlermeldung weg und es erscheint ein Chart.
      Habe es jetzt aber nicht weiter verfolgt ob auch das richtige passiert.

      Edit,
      wenn ich die Aufgabe des Programms richtig verstehe sollte es sogar das machen :)

      Quellcode

      1. #include "C:\Programme\AmiBroker\Formulas\Include\PersistentVariables.afl"
      2. Plot( C, "", 1, 128 );
      3. RestoreLastUsedRange();
      4. Title = "\n" +
      5. "ChartIDStr: " + NumToStr( GetChartID(), 1.0, False ) + "\n" +
      6. "FirstIndex: " + Status( "firstvisiblebarindex" ) + "\n" +
      7. " LastIndex: " + Status( "Lastvisiblebarindex" );
      Die Wissenden reden nicht viel,die Redenden wissen nicht viel.

      klaus-m.blogspot.com/
      Hallo Ibelieve,

      So wie es das steht, musst du im AB Verzeichnis nur einen Ordner namens PersistentVariables anlegen, zusätzlich den längeren Code als AFl im Include Ordner (beliebiger Name?) abspeichern (Pfad zu diesem Persistent Ordner nicht vergessen zu editieren im Include File). Danach braucht man nur noch durch den Aufruf des AB Editors über das Chart Kontextmenü nur die Funktion RestoreLastUsedRange(); oben im jeweiligen eigenen Code einfügen. Aber das bringt bei mir eben diese Syntax Error Meldung. Ist das bei dir auch der Fall?
      "I'm a trader, baby. So, why don't you kill me?!"
      Ich blicke im Moment überhaupt nicht durch.
      Aber bevor Du
      RestoreLastUsedRange();
      aufrufen kannst musst Du doch erstmal mit Include den Entsprechenden Pfad zur Datei eingeben.

      Ich verstehe auch noch nicht die Verbindung vom Oberen zum unteren Code.
      Auch da müsste doch einer auf den Anderen zugreifen oder nicht?

      Tut mir also wirklich leid, aber helfen kann ich nicht.
      Die Wissenden reden nicht viel,die Redenden wissen nicht viel.

      klaus-m.blogspot.com/
      Kann das mal bitte jemand von den anderen AB Usern ausprobieren amibroker.org/userkb/2008/02/18/restore-last-used-range/ Ich bekomme da immer eine Syntax Error Meldung im Editor, wenn ich diesen Call

      RestoreLastUsedRange();

      ausführen lassen will. Der untere Code dort auf der Seite muss in den Include Ordner.
      Auch der Pfad im Code muss stimmen, also z.B. "C:\\Programme\\AmiBroker\\PersistentVariables\\". Ordner PersistentVariables muss dort noch angelegt werden. Abgespeichert habe ich den Include File unter dem Namen RestoreLastUsedRange. Ist der Name der Fehler? Denke nicht, oder?

      Jemand ne Ahnung wo der Fehler liegt? Thx
      "I'm a trader, baby. So, why don't you kill me?!"
      Wer die kostenlose Windows Notepad Alternative Notepad++ notepad-plus-plus.org/ verwendet, kann damit auch sehr schön AFLs schreiben, ohne den AB Editor verwenden zu müssen. Dafür müßt ihr untere XML Datei in Notepad++ importieren, wie im Bild erklärt. Diese Datei enthält nichst Anderes als Folgendes.

      Autor amibroker.com/library/detail.php?id=790

      Quellcode

      1. <NotepadPlus>
      2. <UserLang name="AFL" ext="afl AFL">
      3. <Settings>
      4. <Global caseIgnored="yes" />
      5. <TreatAsSymbol comment="yes" commentLine="yes" />
      6. <Prefix words1="no" words2="no" words3="no" words4="no" />
      7. </Settings>
      8. <KeywordLists>
      9. <Keywords name="Delimiters">&quot;00&quot;00</Keywords>
      10. <Keywords name="Folder+">{</Keywords>
      11. <Keywords name="Folder-">}</Keywords>
      12. <Keywords name="Operators">- ! % &amp; ( ) , . : ; ? [ ] ^ | + &lt; = &gt;</Keywords>
      13. <Keywords name="Comment">1/* 2*/ 0//</Keywords>
      14. <Keywords name="Words1">AND False NOT Null OR True Avg BarCount Buy BuyPrice C Close Column0 Column0Format Column0Name Column1 Column1Format Column1Name Column2 Column2Format Column2Name Column3 Column3Format Column3Name Column4 Column4Format Column4Name Column5 Column5Format Column5Name Column6 Column6Format Column6Name Column7 Column7Format Column7Name Column8 Column8Format Column8Name Column9 Column9Format Column9Name Cover CoverPrice Exclude Filter Graph0 Graph0BarColor Graph0Color Graph0High Graph0Low Graph0Name Graph0Open Graph0Style Graph1 Graph1BarColor Graph1Color Graph1High Graph1Low Graph1Name Graph1Open Graph1Style Graph2 Graph2BarColor Graph2Color Graph2High Graph2Low Graph2Name Graph2Open Graph2Style Graph3 Graph3BarColor Graph3Color Graph3High Graph3Low Graph3Name Graph3Open Graph3Style Graph4 Graph4BarColor Graph4Color Graph4High Graph4Low Graph4Name Graph4Open Graph4Style Graph5 Graph5BarColor Graph5Color Graph5High Graph5Low Graph5Name Graph5Open Graph5Style Graph6 Graph6BarColor Graph6Color Graph6High Graph6Low Graph6Name Graph6Open Graph6Style Graph7 Graph7BarColor Graph7Color Graph7High Graph7Low Graph7Name Graph7Open Graph7Style Graph8 Graph8BarColor Graph8Color Graph8High Graph8Low Graph8Name Graph8Open Graph8Style Graph9 Graph9BarColor Graph9Color Graph9High Graph9Low Graph9Name Graph9Open Graph9Style GraphXSpace GraphZOrder H High L Low MarginDeposit MaxGraph NumColumns O OI Open OpenInt PointValue PositionScore PositionSize RoundLotSize Sell SellPrice Short ShortPrice TickSize Title V Volume actionBacktest actionCommentary actionExplore actionIndicator actionOptimize actionPortfolio actionScan chartShowArrows chartShowDates colorAqua colorBlack colorBlue colorBlueGrey colorBrightGreen colorBrown colorCustom1 colorCustom10 colorCustom11 colorCustom12 colorCustom13 colorCustom14 colorCustom15 colorCustom16 colorCustom2 colorCustom3 colorCustom4 colorCustom5 colorCustom6 colorCustom7 colorCustom8 colorCycle colorDarkBlue colorDarkGreen colorDarkGrey colorDarkOliveGreen colorDarkRed colorDarkTeal colorDarkYellow colorDefault colorGold colorGreen colorGrey40 colorGrey50 colorIndigo colorLavender colorLightBlue colorLightGrey colorLightOrange colorLightYellow colorLime colorOrange colorPaleBlue colorPaleGreen colorPaleTurquoise colorPink colorPlum colorRed colorRose colorSeaGreen colorSkyblue colorTan colorTeal colorTurquoise colorViolet colorWhite colorYellow compressHigh compressLast compressLow compressOpen compressVolume expandFirst expandLast expandPoint in15Minute in1Minute in5Minute inDaily inHourly inMonthly inWeekly maskHistogram scoreNoRotate shapeCircle shapeDigit0 shapeDigit1 shapeDigit2 shapeDigit3 shapeDigit4 shapeDigit5 shapeDigit6 shapeDigit7 shapeDigit8 shapeDigit9 shapeDownArrow shapeDownTriangle shapeHollowCircle shapeHollowDownArrow shapeHollowDownTriangle shapeHollowSmallCircle shapeHollowSmallDownTriangle shapeHollowSmallSquare shapeHollowSmallUpTriangle shapeHollowSquare shapeHollowStar shapeHollowUpArrow shapeHollowUpTriangle shapeNone shapePositionAbove shapeSmallCircle shapeSmallDownTriangle shapeSmallSquare shapeSmallUpTriangle shapeSquare shapeStar shapeUpArrow shapeUpTriangle styleArea styleBar styleCandle styleDots styleHistogram styleLeftAxisScale styleLine styleNoDraw styleNoLabel styleNoLine styleNoRescale styleNoTitle styleOwnScale stylePointAndFigure styleStaircase styleSwingDots styleThick</Keywords>
      15. <Keywords name="Words2">abs AccDist acos AddColumn AddTextColumn AddToComposite ADLine AdvIssues AdvVolume ADX AlertIf AlmostEqual AMA AMA2 ApplyStop Asc asin atan ATR BarIndex BarsSince BBandBot BBandTop BeginValue CategoryAddSymbol CategoryGetName CategoryGetSymbols CategoryRemoveSymbol CCI ceil Chaikin ClipboardGet ClipboardSet ColorHSB ColorRGB Correlation cos cosh CreateObject CreateStaticObject Cross Cum Date DateNum DateTime DateTimeToStr Day DayOfWeek DayOfYear DecIssues DecVolume DEMA EMA EnableRotationalTrading EnableScript EnableTextOutput EncodeColor EndValue Equity exp ExRem ExRemSpan fclose fdelete feof fgets Flip floor fmkdir fopen Foreign fputs frac frmdir FullName GapDown GapUp GetBaseIndex GetCategorySymbols GetChartID GetCursorMouseButtons GetCursorXPosition GetCursorYPosition GetDatabaseName GetExtraData GetOption GetPriceStyle GetRTData GetRTDataForeign GetScriptObject GetTradingInterface GroupID HHV HHVBars Highest HighestBars HighestSince HighestSinceBars Hold Hour IIf IndustryID Inside int Interval InWatchList IsContinuous IsEmpty IsFavorite IsFinite IsIndex IsNan IsNull IsTrue LastValue LineArray LinearReg LinRegIntercept LinRegSlope LLV LLVBars log log10 Lowest LowestBars LowestSince LowestSinceBars MA MACD MarketID Max MDI Median MFI Min Minute Month Name NoteGet NoteSet Now NumToStr NVI Nz OBV Optimize OscP OscV Outside Param ParamColor ParamDate ParamField ParamList ParamStr ParamStyle ParamTime ParamToggle ParamTrigger PDI Peak PeakBars Percentile Plot PlotForeign PlotGrid PlotOHLC PlotShapes PlotText PlotVAPOverlay Prec Prefs printf PVI Random Ref RelStrength RestorePriceArrays RMI ROC round RSI RWI RWIHi RWILo SAR Second SectorID SelectedValue SetBarsRequired SetChartBkColor SetChartOptions SetCustomBacktestProc SetForeign SetFormulaName SetOption SetPositionSize SetTradeDelays sign Signal sin sinh sqrt StaticVarGet StaticVarGetText StaticVarRemove StaticVarSet StaticVarSetText Status StdErr StDev StochD StochK StrExtract StrFind StrFormat StrLeft StrLen StrMid StrRight StrToDateTime StrToLower StrToNum StrToUpper Study Sum tan tanh TEMA TimeFrameCompress TimeFrameExpand TimeFrameGetPrice TimeFrameMode TimeFrameRestore TimeFrameSet TimeNum Trin Trix Trough TroughBars TSF Ultimate UncIssues UncVolume ValueWhen VarGet VarGetText VarSet VarSetText Version Wilders WMA WriteIf WriteVal Year Zig _N _TRACE</Keywords>
      16. <Keywords name="Words3">#include #include_once #pragma do else for function global if local procedure return while</Keywords>
      17. <Keywords name="Words4">_DEFAULT_NAME _PARAM_VALUES _SECTION_BEGIN _SECTION_END _SECTION_NAME</Keywords>
      18. </KeywordLists>
      19. <Styles>
      20. <WordsStyle name="DEFAULT" styleID="11" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" />
      21. <WordsStyle name="FOLDEROPEN" styleID="12" fgColor="800040" bgColor="FFFFFF" fontName="" fontStyle="1" />
      22. <WordsStyle name="FOLDERCLOSE" styleID="13" fgColor="800040" bgColor="FFFFFF" fontName="" fontStyle="1" />
      23. <WordsStyle name="KEYWORD1" styleID="5" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" />
      24. <WordsStyle name="KEYWORD2" styleID="6" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="0" />
      25. <WordsStyle name="KEYWORD3" styleID="7" fgColor="800040" bgColor="FFFFFF" fontName="" fontStyle="1" />
      26. <WordsStyle name="KEYWORD4" styleID="8" fgColor="C0C0C0" bgColor="FFFFFF" fontName="" fontStyle="0" />
      27. <WordsStyle name="COMMENT" styleID="1" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" />
      28. <WordsStyle name="COMMENT LINE" styleID="2" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" />
      29. <WordsStyle name="NUMBER" styleID="4" fgColor="FF00FF" bgColor="FFFFFF" fontName="" fontStyle="0" />
      30. <WordsStyle name="OPERATOR" styleID="10" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" />
      31. <WordsStyle name="DELIMINER1" styleID="14" fgColor="FF00FF" bgColor="FFFFFF" fontName="" fontStyle="0" />
      32. <WordsStyle name="DELIMINER2" styleID="15" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" />
      33. <WordsStyle name="DELIMINER3" styleID="16" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" />
      34. </Styles>
      35. </UserLang>
      36. </NotepadPlus>



      Ihr könnt also auch Oberes kopieren und euch eine userDefineLang.xml Datei erstellen. Lustig wie ich bin, habe ich das aber schon gemacht und ihr könnt somit auch alternativ diese Datei einfach herunterladen. Je nachdem, wie lustig ihr seit. Wenn ihr die selbe Darstellung haben wollt, wie in den Bidlern zu sehen, dann einfach mit Notepadd++ eine leere Datei mit der Endung .afl erstellen und drauflosschreiben und "staunen".
      Bilder
      • np++.png

        33,53 kB, 945×900, 321 mal angesehen
      • np++2.png

        21,5 kB, 906×890, 315 mal angesehen
      Dateien
      "I'm a trader, baby. So, why don't you kill me?!"
      Sweet Spots Hervorhebung bzw automatische Einzeichnung. Wer's braucht. Länge, Farbe der Linie sowie Pip Value (0.01/0.0001) einstellbar.

      Quellcode

      1. _SECTION_BEGIN("sweet spots");
      2. //by trash
      3. TicDiv= Param("Tic or PIP value",0.0001,0.0001,0.01,0.01);
      4. spColor=ParamColor("SP Color", ColorRGB(100,100,0));
      5. SPlgth = ParamToggle("Length of SP Line (Hourly|Daily)", "Hourly|Daily");
      6. if(SPlgth == 0){
      7. TimeFrameSet( inHourly);
      8. }
      9. else if (SPlgth == 1){
      10. TimeFrameSet( inDaily);
      11. }
      12. ssp1= C / ticdiv;
      13. ssp1= ssp1 - ssp1%50;
      14. ssp2= ssp1 + 50;
      15. ds1= ssp1*ticdiv;
      16. ds2= ssp2*ticdiv;
      17. TimeFrameRestore();
      18. if(SPlgth == 0){
      19. sp1 = TimeFrameExpand(ds1,inHourly);
      20. sp2 = TimeFrameExpand(ds2,inHourly);
      21. sp1 = sp1 * (Hour() == LastValue(Hour()));
      22. sp2 = sp2 * (Hour() == LastValue(Hour()));
      23. }
      24. else if (SPlgth == 1){
      25. sp1 = TimeFrameExpand(ds1,inDaily);
      26. sp2 = TimeFrameExpand(ds2,inDaily);
      27. sp1 = sp1 * (Day() == LastValue(Day()));
      28. sp2 = sp2 * (Day() == LastValue(Day()));
      29. }
      30. sp1 = IIf(sp1,sp1,Null);
      31. sp2 = IIf(sp2,sp2,Null);
      32. if (ticdiv == 0.01) {
      33. p1 = StrRight( NumToStr( sp1*ticdiv, 4.4 ), 2);
      34. p2 = StrRight( NumToStr( sp2*ticdiv, 4.4 ), 2);
      35. }
      36. else if (ticdiv == 0.0001){
      37. p1 = StrRight( NumToStr( sp1, 4.4 ), 2);
      38. p2 = StrRight( NumToStr( sp2, 4.4 ), 2);
      39. }
      40. PlotText( p1, BarCount+10, LastValue(sp1)-ticdiv, spcolor);
      41. PlotText( p2, BarCount+10, LastValue(sp2)-ticdiv, spcolor);
      42. Plot(sp1,"", spColor ,styleBar | styleDashed | styleNoLabel);
      43. Plot(sp2,"", spColor , styleBar | styleDashed | styleNoLabel);
      44. _SECTION_END();
      Bilder
      • sp1.png

        13,14 kB, 1.085×814, 300 mal angesehen
      • sp2.png

        20,65 kB, 1.087×812, 313 mal angesehen
      "I'm a trader, baby. So, why don't you kill me?!"
      Ging doch recht simple und fix trotz anfänglichem Brett vorm Kopf. Zu betrachtende Tagesperiode, Rückschau und Wochentag lassen sich über das Einstellfenster auswählen. Kleiner Schönheitsfehler ist, dass in Timframes kleiner H1 die jeweiligen Werte doppelt angezeigt werden. im Moment keine Ahnung, woran das liegt.
      Bilder
      • avg periodic range.png

        20,96 kB, 1.198×805, 314 mal angesehen
      "I'm a trader, baby. So, why don't you kill me?!"
      Problem: Wie könnte man die Durchschnittsrange einer Tagesperiode der selben Wochentage sichtbar machen, so wie es automatisch für die Stundenrange sowie die Tagesrange gemacht wird (siehe Chart). Die gestrichelten Linien zeigen die automatisch einzeichnenden Bereiche oder theoretische Potenziale (u.a. für den jeweiligen Wochentag). Das rote Rechteck stellt das anhand der aktuellen Periodenhochs, -tiefs theoretisch mögliche Potenzial für die Bsp.Tagesperiode 18-24h f. Donnerstags dar. Nur ist es manuell, nicht automatisch erzeugt. Ich laufe da gegen eine Wand, wie man das am Besten coden könnte.
      Bilder
      • avg period.png

        19,66 kB, 1.200×805, 358 mal angesehen
      "I'm a trader, baby. So, why don't you kill me?!"
      Ich habe mal hier noch einen AFL, der den derzeitigen Preis, die Veränderung zum Vortagesschluss, die durchschnittl 20 Tage-Range (ADR(20)), die Stundenrange (H1), die Tagesrange (D1) sowie RoomUp und Room Down anzeigt (siehe Chartbsp.).

      RoomUp und RoomDn beziehen sich auf akt.Tagesrange im Verhältnis zu ADR(20), geben also an, wieviel Luft theoretisch nach oben oder unten noch Platz wäre bezogen auf die durchschnittl. Tagesrange. Wird einer der beiden Werte negativ, ist ADR erreicht (überschritten).

      Läßt sich wieder überall hin auf dem Chart verschieben. Bei Paaren wie z.B. USDJPY muss auf 0.01 und bei Paaren wie EURUSD muss auf 0.0001 mit dem Schieberegler in den Parameters (Chart rechtsklick) gestellt werden.

      Noch was? Nö.

      _SECTION_BEGIN("Market Infos Forex");
      //by trash
      TicDiv= Param("Tic or PIP value",0.0001,0.0001,0.01,0.01);

      GfxSelectFont("Arial", 14, 700, italic = False, underline = False, True );//Current Price
      GfxSetBkMode( colorWhite );
      GfxSetTextColor( ParamColor("Color",colorGrey50) );
      Hor=Param("Horizontal Position",980,1,1200,1);
      Ver=Param("Vertical Position",1,1,1200,1);
      GfxTextOut("Price: "+C,Hor+5 , Ver );

      YC=TimeFrameGetPrice("C",inDaily,-1); //Daily Change
      X = C - YC;
      PP = IIf(TicDiv == 0.0001, Prec(X*10000,0), Prec(X*100,0));
      Chg =Prec((X/YC)*100,2);
      GfxSelectFont("Arial", 12, 700, italic = False, underline = False, True );
      GfxSetBkMode( colorWhite );
      textcolor = IIf(LastValue( X )> 0, colorGreen, colorRed);
      GfxSetTextColor( textcolor );
      GfxTextOut("Chg. : "+PP+" ("+Chg+"%)", Hor+5, Ver+21);

      TimeFrameSet( inDaily); //Ranges
      R= H-L;
      R1=Prec(Ref(R,1)/TicDiv,0);
      CL=Ref(C-L,1);
      HC=Ref(H-C,1);
      ADR20 = Prec((MA(R,5)+MA(R,10)+MA(R,20))/3/TicDiv,0);
      RmUp = Prec((ADR20-CL/TicDiv),0);
      RmDn = Prec((ADR20-HC/TicDiv),0);
      TimeFrameRestore();

      Hihour= TimeFrameGetPrice("H", inHourly);
      LoHour= TimeFrameGetPrice("L", inHourly);
      RangeH1 = StrToNum(NumToStr(round((Hihour - Lohour)/TicDiv), 4.4));

      GfxSelectFont("Arial", 10, 700, italic = False, underline = False, True );//ADR20
      GfxSetBkMode( colorWhite );
      GfxSetTextColor( ParamColor("Color Ranges",colorLightGrey) );
      GfxTextOut("ADR(20) : "+TimeFrameExpand( ADR20,inDaily), Hor+5, Ver+40 );
      GfxTextOut("H1 Range: "+RangeH1, Hor+5, Ver+55 ); //H1
      GfxTextOut("D1 Range: "+TimeFrameExpand( R1,inDaily), Hor+5, Ver+70 ); //D1
      GfxSetTextColor( ParamColor("Color RmUp",colorGreen) ); //"Room Up" Label
      GfxTextOut("RoomUp : "+TimeFrameExpand( RmUp,inDaily), Hor+5, Ver+85 );
      GfxSetTextColor( ParamColor("Color RmDn",colorRed) ); //"Room Down" Label
      GfxTextOut("RoomDn : "+TimeFrameExpand( RmDn,inDaily), Hor+5, Ver+100 );
      _SECTION_END();
      Bilder
      • adr.png

        27,04 kB, 1.197×811, 349 mal angesehen
      "I'm a trader, baby. So, why don't you kill me?!"
      Und hier noch der Rechner für einen $ Account plus Chart mit Vergleich anhand USDJPY.

      Quellcode

      1. _SECTION_BEGIN("Forex Position Size Calculator ver.1.1 ($ Accounts)");
      2. //by trash
      3. BaseCurr = ParamList("Base Currency of Pair", "EURXXX,AUDXXX,GBPXXX,USDXXX" );
      4. Bal = Param("Balance", 10000, 500, 500000, 100 );
      5. Risk = Param("Max Risk in %", 1, 0.1, 100, 0.1 );
      6. Mode = ParamToggle("Mode", "Buy|Sell" );
      7. Stop = Param("Stop in Pips",20,5,500,1);
      8. SR = Param("Spread in Pips",1,0,50,0.1);
      9. MLev = Param("Max Leverage",50,5,50,1);
      10. NoP=Param("No.of.Positions.@.same.Time",1,1,10,1);
      11. //The above values are easily changable using the Parameter Feature which is accessed by right clicking
      12. //the Price Graph and choosing Parameters or you may use (Ctrl+R).
      13. AUDUSD = Foreign ("AUDUSD", "Close");
      14. GBPUSD = Foreign ("GBPUSD", "Close");
      15. EURUSD = Foreign ("EURUSD", "Close");
      16. MaxPos=IIf(BaseCurr == "EURXXX",MLev*Bal/EURUSD,IIf(BaseCurr == "AUDXXX", MLev*Bal/AUDUSD,IIf(BaseCurr == "GBPXXX", MLev*Bal/GBPUSD, MLev*Bal)));
      17. NR=Bal/NoP*Risk;
      18. PosB5=Stop/(C-Stop/10000);
      19. PosB3=Stop/(C-Stop/100);
      20. PosS5=Stop/(C+(Stop+SR)/10000);
      21. PosS3=Stop/(C+(Stop+SR)/100);
      22. PV=IIf(LastValue(C)<10,10/LastValue(C),1000/LastValue(C));
      23. ////////////////////////////////////////////////////////////////////////////////////
      24. if( BaseCurr == "EURXXX" ) // EUR
      25. {
      26. PosB=IIf(C<10,Prec(NR/(PosB5*EURUSD)*100,0),Prec(NR/(PosB3*EURUSD),0));
      27. PosS=IIf(C<10,Prec(NR/(PosB5*EURUSD)*100,0),Prec(NR/(PosB3*EURUSD),0));
      28. if( Mode == 0 ) // Buy
      29. {
      30. Pos=IIf(PosB>MaxPos,MaxPos,PosB);
      31. }
      32. else // Sell
      33. {
      34. Pos=IIf(PosS>MaxPos,MaxPos,PosS);
      35. }
      36. PipVal=Prec(Pos*PV/100000*EURUSD,2);
      37. Lev=Prec(Pos/Bal*EURUSD,2);
      38. MU=Prec(Pos/MLev*EURUSD,2);
      39. UA=Prec((Bal-MU)*MLev/EURUSD,0);
      40. }
      41. ////////////////////////////////////////////////////////////////////////////////////
      42. else if( BaseCurr == "AUDXXX" ) // AUD
      43. {
      44. PosB=IIf(C<10,Prec(NR/(PosB5*AUDUSD)*100,0),Prec(NR/(PosB3*AUDUSD),0));
      45. PosS=IIf(C<10,Prec(NR/(PosS5*AUDUSD)*100,0),Prec(NR/(PosS3*AUDUSD),0));
      46. if( Mode == 0 ) // Buy
      47. {
      48. Pos=IIf(PosB>MaxPos,MaxPos,PosB);
      49. }
      50. else // Sell
      51. {
      52. Pos=IIf(PosS>MaxPos,MaxPos,PosS);
      53. }
      54. PipVal=Prec(Pos*PV/100000*AUDUSD,2);
      55. Lev=Prec(Pos/Bal*AUDUSD,2);
      56. MU=Prec(Pos/MLev*AUDUSD,2);
      57. UA=Prec((Bal-MU)*MLev/AUDUSD,0);
      58. }
      59. ////////////////////////////////////////////////////////////////////////////////////
      60. else if( BaseCurr == "GBPXXX" ) // GBP
      61. {
      62. PosB=IIf(C<10,Prec(NR/(PosB5*GBPUSD)*100,0),Prec(NR/(PosB3*GBPUSD),0));
      63. PosS=IIf(C<10,Prec(NR/(PosS5*GBPUSD)*100,0),Prec(NR/(PosS3*GBPUSD),0));
      64. if( Mode == 0 ) // Buy
      65. {
      66. Pos=IIf(PosB>MaxPos,MaxPos,PosB);
      67. }
      68. else // Sell
      69. {
      70. Pos=IIf(PosS>MaxPos,MaxPos,PosS);
      71. }
      72. PipVal=Prec(Pos*PV/100000*GBPUSD,2);
      73. Lev=Prec(Pos/Bal*GBPUSD,2);
      74. MU=Prec(Pos/MLev*GBPUSD,2);
      75. UA=Prec((Bal-MU)*MLev/GBPUSD,0);
      76. }
      77. ////////////////////////////////////////////////////////////////////////////////////
      78. else if( BaseCurr == "USDXXX" ) // USD
      79. {
      80. PosB=IIf(C<10,Prec(NR/(PosB5)*100,0),Prec(NR/(PosB3),0));
      81. PosS=IIf(C<10,Prec(NR/(PosS5)*100,0),Prec(NR/(PosS3),0));
      82. if( Mode == 0 ) // Buy
      83. {
      84. Pos=IIf(PosB>MaxPos,MaxPos,PosB);
      85. }
      86. else // Sell
      87. {
      88. Pos=IIf(PosS>MaxPos,MaxPos,PosS);
      89. }
      90. PipVal=Prec(Pos*PV/100000,2);
      91. Lev=Prec(Pos/Bal,2);
      92. MU=Prec(Pos/MLev,2);
      93. UA=Prec((Bal-MU)*MLev,0);
      94. }
      95. ////////////////////////////////////////////////////////////////////////////////////
      96. x=Param("xposn",5,5,1200,1);
      97. y=Param("yposn",185,0,1200,1);
      98. BoxX=Param("BoxX",170,170,500,1);
      99. BoxY=Param("BoxY",205,205,600,1);
      100. //GfxSelectSolidBrush( ParamColor("ColorBrush",ColorBlack) );
      101. //GfxSelectPen( ParamColor("ColorPen",ColorBlack), 2 );
      102. //GfxRoundRect( x+BoxX, y+BoxY, x-4, y-2, 0, 0 );
      103. GfxSetBkMode(1);
      104. FS1=Param("Font Size 1",12,10,14,1);
      105. GfxSelectFont( "Arial",FS1, 700, italic = False, underline = True, True );
      106. GfxSetTextColor( ParamColor("Font Color 2",colorGrey40) );
      107. GfxTextOut( "Position Size Calculator", x, y );
      108. GfxSelectFont("Arial", 8, 700, italic = False, underline = False, True );
      109. GfxTextOut( "($ Accounts) by trash", x, y+18 );
      110. FS2=Param("Font Size 2",10,8,14,1);
      111. GfxSelectFont( "Arial",FS2, 700, italic = False, underline = False, True );
      112. GfxTextOut( "Balance: "+"$"+Bal , x, y+34 );
      113. GfxTextOut( "Max Risk: "+Risk +"%", x, y+50 );
      114. GfxTextOut( "Max Leverage: "+MLev+":1" , x, y+66 );
      115. GfxTextOut( "Stop Loss: "+Stop +" Pips", x, y+82 );
      116. GfxSetTextColor( ParamColor("Font Color 1",colorRed) );
      117. GfxTextOut( "Position Size: "+Pos , x, y+98 );
      118. GfxSetTextColor( ParamColor("Font Color 2",colorGrey40) );
      119. GfxTextOut( "Pip Value: "+"$"+PipVal, x, y+114 );
      120. GfxTextOut( "Leverage: "+Lev, x, y+130 );
      121. GfxTextOut( "Margin Used: "+"$"+MU, x, y+146 );
      122. GfxTextOut( "Units /A: "+UA, x, y+162 );
      123. _SECTION_END();
      Bilder
      • $ Konten Pos.rechner.png

        18,06 kB, 1.206×695, 281 mal angesehen
      "I'm a trader, baby. So, why don't you kill me?!"
      Ich habe mal für Amibroker einen Positionsgrößenrechner für den Forex erstellt. Der Rechner unten ist nur für € Konten.
      Als auswählbare Basiswährungen eines Paares habe ich nur EUR, AUD, GBP und USD gewählt,
      also kein CHF (z.b. f. CHFJPY) oder CAD oder Exoten. Aber läßt sich ja einfach hinzufügen. Soll ja nur 'ne Anregung sein.
      Der Code läßt sich bestimmt vereinfachen, aber er funktioniert und kein Excel notwendig. Falls jemand doch einen Rechenfehler findet, dann ...

      Erklärungen im Chart

      Units /A heißt Units available (noch zur Verfügung stehende Handelseinheiten), da N/A not available bedeutet. ;)

      Quellcode

      1. _SECTION_BEGIN("Forex Position Size Calculator ver.1.1 (€ Accounts)");
      2. //by trash
      3. BaseCurr = ParamList("Base Currency of Pair", "EURXXX,AUDXXX,GBPXXX,USDXXX" );
      4. Bal = Param("Balance", 10000, 500, 500000, 100 );
      5. Risk = Param("Max Risk in %", 1, 0.1, 100, 0.1 );
      6. Mode = ParamToggle("Mode", "Buy|Sell" );
      7. Stop = Param("Stop in Pips",20,5,500,1);
      8. SR = Param("Spread in Pips",1,0,50,0.1);
      9. MLev = Param("Max Leverage",50,5,50,1);
      10. NoP=Param("No.of.Positions.@.same.Time",1,1,10,1);
      11. //The above values are easily changable using the Parameter Feature which is accessed by right clicking
      12. //the Price Graph and choosing Parameters or you may use (Ctrl+R).
      13. EURAUD = Foreign ("EURAUD", "Close");
      14. EURGBP = Foreign ("EURGBP", "Close");
      15. EURUSD = Foreign ("EURUSD", "Close");
      16. MaxPos=IIf(BaseCurr == "EURXXX",MLev*Bal,IIf(BaseCurr == "AUDXXX", MLev*Bal*EURAUD,IIf(BaseCurr == "GBPXXX", MLev*Bal*EURGBP, MLev*Bal*EURUSD)));
      17. NR=Bal/NoP*Risk;
      18. PosB5=Stop/(C-Stop/10000);
      19. PosB3=Stop/(C-Stop/100);
      20. PosS5=Stop/(C+(Stop+SR)/10000);
      21. PosS3=Stop/(C+(Stop+SR)/100);
      22. PV=IIf(LastValue(C)<10,10/LastValue(C),1000/LastValue(C));
      23. ////////////////////////////////////////////////////////////////////////////////////
      24. if( BaseCurr == "EURXXX" ) // EURXXX
      25. {
      26. PosB=IIf(C<10,Prec(NR/PosB5*100,0),Prec(NR/PosB3,0));
      27. PosS=IIf(C<10,Prec(NR/PosS5*100,0),Prec(NR/PosS3,0));
      28. if( Mode == 0 ) // Buy
      29. {
      30. Pos=IIf(PosB>MaxPos,MaxPos,PosB);
      31. }
      32. else // Sell
      33. {
      34. Pos=IIf(PosS>MaxPos,MaxPos,PosS);
      35. }
      36. PipVal=Prec(Pos*PV/100000,2);
      37. Lev=Prec(Pos/Bal,2);
      38. MU=Prec(Pos/MLev,2);
      39. UA=Prec((Bal-MU)*MLev,0);
      40. }
      41. ////////////////////////////////////////////////////////////////////////////////////
      42. else if( BaseCurr == "AUDXXX" ) // AUDXXX
      43. {
      44. PosB=IIf(C<10,Prec(NR/(PosB5/EURAUD)*100,0),Prec(NR/(PosB3/EURAUD),0));
      45. PosS=IIf(C<10,Prec(NR/(PosS5/EURAUD)*100,0),Prec(NR/(PosS3/EURAUD),0));
      46. if( Mode == 0 ) // Buy
      47. {
      48. Pos=IIf(PosB>MaxPos,MaxPos,PosB);
      49. }
      50. else // Sell
      51. {
      52. Pos=IIf(PosS>MaxPos,MaxPos,PosS);
      53. }
      54. PipVal=Prec(Pos*PV/100000/EURAUD,2);
      55. Lev=Prec(Pos/Bal/EURAUD,2);
      56. MU=Prec(Pos/MLev/EURAUD,2);
      57. UA=Prec((Bal-MU)*MLev*EURAUD,0);
      58. }
      59. ////////////////////////////////////////////////////////////////////////////////////
      60. else if( BaseCurr == "GBPXXX" ) // GBPXXX
      61. {
      62. PosB=IIf(C<10,Prec(NR/(PosB5/EURGBP)*100,0),Prec(NR/(PosB3/EURGBP),0));
      63. PosS=IIf(C<10,Prec(NR/(PosS5/EURGBP)*100,0),Prec(NR/(PosS3/EURGBP),0));
      64. if( Mode == 0 ) // Buy
      65. {
      66. Pos=IIf(PosB>MaxPos,MaxPos,PosB);
      67. }
      68. else // Sell
      69. {
      70. Pos=IIf(PosS>MaxPos,MaxPos,PosS);
      71. }
      72. PipVal=Prec(Pos*PV/100000/EURGBP,2);
      73. Lev=Prec(Pos/Bal/EURGBP,2);
      74. MU=Prec(Pos/MLev/EURGBP,2);
      75. UA=Prec((Bal-MU)*MLev*EURGBP,0);
      76. }
      77. ////////////////////////////////////////////////////////////////////////////////////
      78. else if( BaseCurr == "USDXXX" ) // USDXXX
      79. {
      80. PosB=IIf(C<10,Prec(NR/(PosB5/EURUSD)*100,0),Prec(NR/(PosB3/EURUSD),0));
      81. PosS=IIf(C<10,Prec(NR/(PosS5/EURUSD)*100,0),Prec(NR/(PosS3/EURUSD),0));
      82. if( Mode == 0 ) // Buy
      83. {
      84. Pos=IIf(PosB>MaxPos,MaxPos,PosB);
      85. }
      86. else // Sell
      87. {
      88. Pos=IIf(PosS>MaxPos,MaxPos,PosS);
      89. }
      90. PipVal=Prec(Pos*PV/100000/EURUSD,2);
      91. Lev=Prec(Pos/Bal/EURUSD,2);
      92. MU=Prec(Pos/MLev/EURUSD,2);
      93. UA=Prec((Bal-MU)*MLev*EURUSD,0);
      94. }
      95. ////////////////////////////////////////////////////////////////////////////////////
      96. x=Param("xposn",5,5,1200,1);
      97. y=Param("yposn",185,0,1200,1);
      98. BoxX=Param("BoxX",170,170,500,1);
      99. BoxY=Param("BoxY",205,205,600,1);
      100. //GfxSelectSolidBrush( ParamColor("ColorBrush",ColorBlack) );
      101. //GfxSelectPen( ParamColor("ColorPen",ColorBlack), 2 );
      102. //GfxRoundRect( x+BoxX, y+BoxY, x-4, y-2, 0, 0 );
      103. GfxSetBkMode(1);
      104. FS1=Param("Font Size 1",12,10,14,1);
      105. GfxSelectFont( "Arial",FS1, 700, italic = False, underline = True, True );
      106. GfxSetTextColor( ParamColor("Font Color 2",colorGrey40) );
      107. GfxTextOut( "Position Size Calculator", x, y );
      108. GfxSelectFont("Arial", 8, 700, italic = False, underline = False, True );
      109. GfxTextOut( "(€ Accounts) by trash", x, y+18 );
      110. FS2=Param("Font Size 2",10,8,14,1);
      111. GfxSelectFont( "Arial",FS2, 700, italic = False, underline = False, True );
      112. GfxTextOut( "Balance: "+Bal +"€", x, y+34 );
      113. GfxTextOut( "Max Risk: "+Risk +"%", x, y+50 );
      114. GfxTextOut( "Max Leverage: "+MLev+":1" , x, y+66 );
      115. GfxTextOut( "Stop Loss: "+Stop +" Pips", x, y+82 );
      116. GfxSetTextColor( ParamColor("Font Color 1",colorRed) );
      117. GfxTextOut( "Position Size: "+Pos , x, y+98 );
      118. GfxSetTextColor( ParamColor("Font Color 2",colorGrey40) );
      119. GfxTextOut( "Pip Value: "+PipVal +"€", x, y+114 );
      120. GfxTextOut( "Leverage: "+Lev, x, y+130 );
      121. GfxTextOut( "Margin Used: "+MU+"€", x, y+146 );
      122. GfxTextOut( "Units /A: "+UA, x, y+162 );
      123. _SECTION_END();
      Bilder
      • € Konten Pos.rechner.png

        85,79 kB, 1.204×742, 281 mal angesehen
      "I'm a trader, baby. So, why don't you kill me?!"
      Durch Zufall habe ich einen AFL Code im WWW entdeckt, mit dem man die Verteilung z.B. der erzielte Tagesrenditen mit Amibroker darstellen lassen kann. Als Beispiel habe ich mal die Daten vom Forexmillionär (Bis Anfang Juli 2010), die Perfect Trader bereit gestellt hatte, zur Hand genommen (siehe untere Grafik). x-Achse hier die Tagesrenditen, y-Achse die Häufigkeit. AFL Datei ist im zip Archiv. Entpacken nach C:\...\Amibroker\Formulas\Custom
      Bilder
      • FM.png

        86,01 kB, 1.175×1.460, 342 mal angesehen
      Dateien
      "I'm a trader, baby. So, why don't you kill me?!"