Amibroker AFL

      Trage im Symbol "Information" Fenster von EURGBP im Feld "Currency" mal GBP ein und dann play it again, Sam.

      BTW, du brauchst nicht extra EOD und Intraday Symbole getrennt erstellen. Du kannst EOD und intraday Historie im selben Symbol haben, siehe File-Database settings-Intraday Settings-Allow mixed EOD/intraday data aktivieren.

      Allow mixed EOD/Intraday data - it allows to work with database that has a mixture of intraday and EOD data in one data file. If this is turned on then in intraday modes EOD bars are removed on-the-fly and in daily mode EOD bars are displayed instead of time compressed intraday or if there is no EOD bar for corresponding day then intraday bars are compressed as usual.


      IQFeed plugin, eSignal plugin machen das automatisch. Wenn du EOD intraday ASCII Daten von der Festplatte importierst, musst du darauf achten, dass die EOD Daten keine Zeitspalte haben oder wenn sie eine haben (bei manchen EOD Dateien z.B. 00:00:00), dann musst du diese Zeitspalte im Import Wizard bzw. in deiner erstellten Import Format Datei überspringen (Skip command). Wieso? Weil, wenn du es nicht tust, EOD dann als intraday betrachtet wird. Das Programm kann ja nicht wissen, dass es sich um EOD handelt. Steht ja nicht auf dem "Einkaufzettel" drauf. Wenn du es richtig machst, dann siehst du im "Quote Editor" in der Spalte EOD die Markierung EOD mit EOD Quotes in der Zeile, wo ein Tag endet.
      Ein Problem hab ich aber noch:

      Ich hab meine Strategie bis jetzt nur auf einzelne Währungspaare getestet, jetzt möchte ich sie aber gerne zusammen testen.

      Ich habe ein Bild angefügt indem man erkennt, dass mein SL erreicht wurde, und sich der Verlust auf ca. 350GBP beläuft. Wären es USD dann würde alles passen, denn mein Risikobetrag sind 3,5% des Kapitals.
      Aber da es sich um GBP handelt und der Wechselkurs zu USD zu der Zeit ca. bei 1,6500 lag, entspechen diese 350GBP ca. 580$ .........Also hat sich mein Risiko erhöht, was ich aber nicht möchte.

      Ich habe unter "Symbol" schon alles richtig eingetragen (Round Lot Size, Margin Deposit, usw.), und auch unter "Tools"->"Preferences" -> "Currencies" passt. m.W. nach alles (siehe Bild).


      Meine Lösung wäre: " SetPositonSize(aktuelle Positionsgröße / (GBPUSD), spsPerformanceofEquity);"

      Nur darf er das Fettgedruckte bei EURUSD nicht machen und z.b bei EURCHF müsste er " *(USDCHF) " schreiben ......

      Da gibt es doch sicher wieder ein viel einfachere und elegantere Lösung :P ?
      Bilder
      • 11112.png

        84,47 kB, 1.152×648, 448 mal angesehen
      • 1111.png

        47,27 kB, 1.209×648, 440 mal angesehen

      Position Sizing

      Hier mal noch 'ne weiterführende Version mit Bar delay und Short Einbeziehung.


      Quellcode

      1. // van Tharp position sizing
      2. // by trash
      3. tradedelay = 1; // entry bar delay
      4. if( tradedelay > 0 )
      5. price = Open;
      6. else
      7. price = Close;
      8. BuyPrice = ShortPrice = price;
      9. Buy = Ref( Cross( Signal(), MACD() ), -tradedelay );
      10. Short = 0; // Ref( Cross( MACD(), Signal() ), -tradedelay );
      11. Sell = 0; // selling only by stop
      12. Cover = 0; // covering only by stop
      13. Risk = 1; // percentage
      14. StopAmount = 2 * ATR( 20 );
      15. Stop = StopAmount / IIf( Buy, BuyPrice, ShortPrice );
      16. SetPositionSize( Risk / Stop, spsPercentOfEquity );
      17. ApplyStop( stopTypeTrailing, stopModePoint, StopAmount, exitatstop = 1, volatile = False, reentrydelay = 0 );
      Weil mal die Frage auftauchte, wie man ODBC in Windows aktiviert, hier eine Nachbereitung zum letzten Posting #610 und bezugnehmend zum Bsp.code dort.

      Der rot markierte "Hinzufügen" Button ist der Alternativweg für komplett Neuerstellung. Den Datenquellenname kann man beliebig wählen. Dieser Name muss halt auch in odbcOpendatabase( "DSN=blahblahblubb") des Skripts eingefügt werden.

      Der ODBC Datenquellen Administrator befindet sich in der Systemsteuerung - Verwaltung. Falls es immernoch nicht gefunden wird, dann bspw. hier webcyclus.de/windows-7-odbc-einrichten/ noch mal nachlesen.



      Der_Jimmy schrieb:

      Hallo Community,
      ich suche AFL-Code bzw Untersützung zu dem Thema "Informationen aus externer Excel-Tabelle/Access-DB einlesen
      und im Chart mit anzeigen".
      Zur Veranschaulichung habe ich ein Beispiel erstellt.

      candletalk.de/attachment/21435…f91014483d7895ce4f37c26ef

      Frage:
      Ist dies grundsätzlich möglich?

      Bitte:
      Ich suche AFL-Code der dieses oder ein ähnliches Thema umsetzt.
      Über Unterstützung würde ich mich sehr freuen.

      Für Infos vielen Dank im Voraus.
      Jimmy


      Ja, ist grundsätzlich möglich, da alles möglich ist, das man dank Vorstellungskraft zur Verfügung gestellt bekommt. "The only limit is your imagination". Das Ankoppeln and Excel/Access kannst du dir auch sparen, da man solche Infos auch importieren und via GetFnData/GetExtraData abrufen kann.

      Aber da du nun mal auf externe Dateien Datenbanken zugreifen willst, stünde zum Bsp. das ODBC Plugin zur Verfügung. amibroker.com/odbc.html Dieses Plugin beinhaltet ODBC Data und ODBC AFL. Für deine Zwecke wird nur ODBC AFL benötigt. Bsp. angehängt.

      Die unten verwendete Access DB im Bild hat veraltete Werte. Nicht wundern.
      Bilder
      • 5.png

        34,93 kB, 1.224×338, 451 mal angesehen
      • 6.png

        10,13 kB, 848×474, 477 mal angesehen
      • 7.png

        35,72 kB, 926×1.406, 540 mal angesehen

      Quellcode

      1. // to pass values from 1st phase to 2nd phase we need to use Static Variables
      2. // CBT is 2nd phase
      3. StaticVarSet( Name() + "ATR", ATR( 15 ) * 1.5 );
      4. // 2nd phase
      5. SetCustomBacktestProc( "" );
      6. if ( Status( "action" ) == actionPortfolio )
      7. {
      8. bo = GetBacktesterObject();
      9. bo.Backtest( True );
      10. for ( trade = bo.GetFirstTrade( ); trade; trade = bo.GetNextTrade( ) )
      11. {
      12. foreignATR = StaticVarGet( trade.Symbol + "ATR" );
      13. trade.AddCustomMetric( "ATR@Entry", Lookup( foreignATR, trade.EntryDateTime ), decplaces = 4 );
      14. }
      15. bo.ListTrades( );
      16. }
      Bsp CBT Code, um Equity Spalten in der Analysis Result List auszugeben.

      Quellcode

      1. // 2nd Phase - start CBT ################################
      2. SetCustomBacktestProc( "" );
      3. if ( Status( "actionex" ) == actionPortfolio )
      4. {
      5. bo = GetBacktesterObject();
      6. bo.Backtest( 1 );
      7. eq = bo.EquityArray;
      8. // Output Equity at exit column in backtest result list
      9. for ( trade = bo.GetFirstTrade(); trade; trade = bo.GetNextTrade() )
      10. {
      11. EquityAtExit = Lookup( eq, trade.ExitDateTime );
      12. trade.AddCustomMetric( "Equity at exit", EquityAtExit );
      13. }
      14. // iterate through open trades and add same info
      15. for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos() )
      16. {
      17. EquityAtExit = Lookup( eq, pos.ExitDateTime );
      18. pos.AddCustomMetric( "Equity at exit", EquityAtExit );
      19. }
      20. bo.ListTrades();
      21. }


      Custom backtest links

      amibroker.org/userkb/2008/03/1…m-backtester-interface-2/
      amibroker.com/guide/a_custombacktest.html
      amibroker.com/docs/Houston2.pdf
      http:/www.amibroker.com/guide/a_custommetrics.html
      amibroker.com/kb/2006/03/11/ho…copy-of-portfolio-equity/
      amibroker.com/kb/category/afl/custom-backtest/

      etc., etc.

      trash schrieb:

      Um auf die "bar by bar" Equity zuzugreifen, musst du den sogenannten "Custom backtester" nutzen.


      Bsp um über CBT auf bar by bar Equity zuzugreifen und die Positionsgröße an die Equitygröße anzupassen.


      Quellcode

      1. SetOption( "MaxOpenPositions", 1 );
      2. SetOption( "InitialEquity", 40000 );
      3. SetOption( "FuturesMode", 1 );
      4. SetPositionSize( 30, spsPercentOfEquity );
      5. SetOption( "UsePrevBarEquityForPosSizing", 1 );
      6. // 2nd Phase - custom backtest
      7. SetOption( "UseCustomBacktestProc", True );
      8. if( Status("actionex") == actionPortfolio )
      9. {
      10. // retrieve the interface to portfolio backtester
      11. bo = GetBacktesterObject();
      12. bo.PreProcess();
      13. for( bar = 0; bar < BarCount; bar++ )
      14. {
      15. // this retrieves current value of portfolio-level equity
      16. CurrentPortfolioEquity = bo.Equity;
      17. // this for loop iterates through all trade signals and adjust pos size
      18. for( sig = bo.GetFirstSignal( bar ); sig; sig = bo.GetNextSignal( bar ) )
      19. {
      20. // when our equity grows to $50000 decrease pos size to 20%
      21. if( CurrentPortfolioEquity > 50000 ) sig.PosSize = -20;
      22. // if above $60K then decrease to 15%
      23. if( CurrentPortfolioEquity > 60000 ) sig.PosSize = -15;
      24. // if above $80K then decrease to 10%
      25. if( CurrentPortfolioEquity > 80000 ) sig.PosSize = -10;
      26. }
      27. bo.ProcessTradeSignals( bar );
      28. }
      29. bo.PostProcess();
      30. }
      31. // 1st Phase - standard backtest
      32. Buy = ...;
      33. Sell = ...;
      34. Short = Cover = 0;

      Christoph123 schrieb:

      Ich habe gerade ein kleines Problem beim Programmieren mit Amibroker.
      Ich würde die Positionsgröße gerne über einen Prozentsatz meines jetzigen Kapitals definieren. Ich habe den Code soweit, dass er einigermaßen funktioniert, jedoch tritt immer folgendes Problem auf:
      drücke ich das erstemal auf Backtest, dann gibt er mir z.B. eine Performance von 7% p.a. zurück, drücke ich dann nochmal dann sind es aufeinmal 10%..........das ganze wiederhole ich, und der Wert pendelt sich dann bei ca. 11,36% ein ?! - > Warum??

      hier mal der Code: (funktioniert nur für Eur/Usd mit Usd Konto richtig)

      //Pos Size Berechnung
      EQ=IIf(Foreign("~~~EQUITY", "C" )==0,10000,Foreign("~~~EQUITY", "C" ));

      Lots= (Ref(EQ,-1)*Risiko)/((Stopbuy+StopLossATR)*10000)/10;

      SetPositionSize(Lots,spsShares);


      EDIT:
      Legende
      EQ=Equity
      Risiko= Prozentsatz meines Kapitals (z.b. 0,02)
      StopBuy= Abstand von gestrigen Close zu Stobbuy order (NICHT in Pips)
      StopLossATR= Abstand von gestrigen Close zu StopLoss order (NICHT in Pips)



      Danke schonmal im Voraus


      Warum?

      Weil das, was du machst falsch ist. Ist nicht schlimm, aber nur ein Fakt.

      ~~~Equity Symbol ist ein Array, das erst nach einem Backtest gefüllt zur Verfügung steht. Um auf die "bar by bar" Equity zuzugreifen, musst du den sogenannten "Custom backtester" nutzen. Brauchst du für deine Angelegenheit aber nicht.


      EDIT: habe zu früh auf "Absenden" gedrückt, bzw mich verklickt

      Bsp. für van Tharp's percent volatility position sizing.

      Quellcode

      1. Risk = 1; // percentage
      2. StopAmount = 2 * ATR( 20 );
      3. Stop = StopAmount / BuyPrice;
      4. SetPositionSize( Risk / Stop, spsPercentOfEquity );
      5. Buy = Cross( Signal(), MACD() );
      6. Sell = 0; // selling only by stop
      7. Short = Cover = 0;
      8. ApplyStop( 2, 2, StopAmount, 1 );
      Bilder
      • 1.png

        21,09 kB, 776×614, 411 mal angesehen
      • 2.png

        6,57 kB, 773×173, 395 mal angesehen
      • 3.png

        6,71 kB, 771×189, 408 mal angesehen

      Informationen aus externer Excel-Tabelle/Access-DB einlesen und im Chart mit anzeigen

      Hallo Community,
      ich suche AFL-Code bzw Untersützung zu dem Thema "Informationen aus externer Excel-Tabelle/Access-DB einlesen
      und im Chart mit anzeigen".
      Zur Veranschaulichung habe ich ein Beispiel erstellt.



      Frage:
      Ist dies grundsätzlich möglich?

      Bitte:
      Ich suche AFL-Code der dieses oder ein ähnliches Thema umsetzt.
      Über Unterstützung würde ich mich sehr freuen.

      Für Infos vielen Dank im Voraus.
      Jimmy
      VG
      Jimmy
      Ich habe gerade ein kleines Problem beim Programmieren mit Amibroker.
      Ich würde die Positionsgröße gerne über einen Prozentsatz meines jetzigen Kapitals definieren. Ich habe den Code soweit, dass er einigermaßen funktioniert, jedoch tritt immer folgendes Problem auf:
      drücke ich das erstemal auf Backtest, dann gibt er mir z.B. eine Performance von 7% p.a. zurück, drücke ich dann nochmal dann sind es aufeinmal 10%..........das ganze wiederhole ich, und der Wert pendelt sich dann bei ca. 11,36% ein ?! - > Warum??

      hier mal der Code: (funktioniert nur für Eur/Usd mit Usd Konto richtig)

      //Pos Size Berechnung
      EQ=IIf(Foreign("~~~EQUITY", "C" )==0,10000,Foreign("~~~EQUITY", "C" ));

      Lots= (Ref(EQ,-1)*Risiko)/((Stopbuy+StopLossATR)*10000)/10;

      SetPositionSize(Lots,spsShares);


      EDIT:
      Legende
      EQ=Equity
      Risiko= Prozentsatz meines Kapitals (z.b. 0,02)
      StopBuy= Abstand von gestrigen Close zu Stobbuy order (NICHT in Pips)
      StopLossATR= Abstand von gestrigen Close zu StopLoss order (NICHT in Pips)



      Danke schonmal im Voraus
      Hatte mit Tomasz letzte Woche noch gesprochen. Zurzeit ist er auf Geschäftsreise. Kommt morgen wieder (wie er meinte). Aber Marcin ist ja auf jeden Fall erreichbar zu Europäischen Geschäftszeiten. Wenn du 64-bit OS hast, dann auf jeden Fall 64-bit AB installieren! Ansonsten limitierst du dich ja selber. Neben zig anderen Vorteilen ist 64-bit AB zudem noch mal ca 25% - 30% flotter.
      Hi trash,

      danke für die Antwort. Habe die professional-version und System läuft auf 64bit. Gestern hatte ich noch das Team von Tomasz angeschrieben zwecks Klärung. Der von Dir beschriebene Grund wird's aber sein. Der Email-Server meinte es gut mit mir und hatte mir 27x ne Eingangsmail zugeschickt.... :)

      Gibs ne FAQ-Liste die ich hier mal vermerke. Vielleicht für den einen oder anderen hilfreich...

      FREQUENTLY ASKED QUESTIONS / PROBLEMS
      =====================================


      1. I can not login to members' zone
      2. I lost my key file ! Please resend it
      3. I am now getting "INVALID SYMBOL" error with Interactive Brokers as a data source
      4. When running setup I get "DeleteFile failed" error
      5. Can I use single license on both desktop and laptop?
      6. The volume on my charts is 100 smaller than it should
      7. Why can't I download data for the Dow Jones Index using Yahoo Historical (AmiQuote)?
      8. My charts are slow
      9. I want to move AmiBroker to new computer
      10. Do you supply the data / What is the price of data ?
      11. What information is needed to resolve my issue?
      12. Where can I find more information about new releases / betas ?
      13. I have problem with eSignal feed
      14. I have problem with IQFeed data feed
      Dateien
      • amibroker_faq.txt

        (7,24 kB, 1.173 mal heruntergeladen, zuletzt: )
      ich raube, also bin ich....
      Ich habe gerade nochmal nachgeschaut. Hast du die Standard oder Professional License?
      Wenn du Standard hast, dann brauchst du die Reg-Datei garnicht anfordern, weil nur die Professional License eine Reg-Datei für 64-bit beinhaltet. Müsstest du zuerst von Standard auf Professional upgraden.

      32-bit und 64-bit Registrierungsdateien sind separat. Für AmiBroker 64-bit benötigst du einen extra Keyfile. Den muss du beim AB Support anfordern. Steht auf deren Internetseite.

      Falls du kein English kannst, dann copy&paste das Untere:

      "Hello AmiBroker,

      I have upgraded my OS to 64-bit and have upgraded to AmiBroker 5.80.2 64-bit. Please send me the keyfile to activate 64-Bit AmiBroker.

      Thank you very much in advance!

      Best Regards
      Mr. Moon
      sent from Earth"



      PS:
      Man kann übrigens 32-bit AB und 64-bit AB im selben 64-bit Betriebssystem installieren.
      64-bit installiert nach C:\Program Files.
      32-bit installiert nach C:\Program Files (x86)
      Hallo,

      vielleicht kennt das jemand von euch: Ich habe im November 2012 eine Amibrokerlizenz erworben. Laut Internetseite kann ich die aktuelle Version 5.8 damit freischalten. Wenn ich dieses Aktivierungstool ausführe und die Amibroker-Version verifiziere, wird das auch mit OK quittiert. Starte ich jedoch Amibroker, steht im Startbildschirm, dass ich immer noch eine Demoversion nutze. Liegt es an Windows 8.1? Vielleicht funktioniert dieser Key nicht mit diesem Betriebssystem.

      Gruß

      Hr. Moon
      ich raube, also bin ich....