Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Stops Implementation in AFS for Amibroker (AFL)
Please find attached afl script with stops implementation directly as a afl code without using ApplyStop formula. This implementation gives possibility to get arrows on the chart. Also please note this stops have been split into two parts – for long and short trades. Also activation level is defined as a level when stop should be activated. By multiplying stop code you can get (a) stop loss, (b) static save profit stop (means: static stop activated when you start getting profit and suddenly market turns around – this stop is used to at least have money for brokerage fee) and © trailing stop.
By Marek Chlopek – mchlopek [at] post.pl
Indicator / Formula
// TEST.AFL v 0.03 28/11/2001
// Testing Stops
// Developed by Marek Chlopek
// Coded Marek Chlopek, November 2001
// Support from Tomasz Janeczko and Amibroker Mailing List members - THANKS!!!
//****************************************************************************************
// STATIC EXPLORATION IN AMIBROKER
//****************************************************************************************
Filter = 1;
NumColumns = 5;
Column0 = O; Column0Name = "O"; Column0Format = 1.2;
Column1 = H; Column1Name = "H"; Column1Format = 1.2;
Column2 = L; Column2Name = "L"; Column2Format = 1.2;
Column3 = C; Column3Name = "C"; Column3Format = 1.2;
Column4 = V; Column4Name = "V"; Column4Format = 1.0;
// END OF "STATIC EXPLORATION IN AMIBROKER" SECTION
//****************************************************************************************
// TRADING SYSTEM GLOBAL ENTRY FORMULA
//****************************************************************************************
Buy = Cross(Close, 115);
Short = Cross(150, Close);
// END OF "TRADING SYSTEM GLOBAL ENTRY FORMULA" SECTION
//****************************************************************************************
// TRADING SYSTEM LONG STOP FORMULA
//****************************************************************************************
BuyStopLoss = 0; // 0 - not a stop loss formula, stop must be activated
// 1 - stop is activated without checking ActiveLevel
// How many bars ago was the last Buy signal?
BuyBarsSince = BarsSince(Buy == 1);
// Setting stop level
// As an example BuyStopLevel depends directly on BuyPrice and a constant
// Could be also: BuyPrice + ATR or any other dynamic formula
BuyStopLevel = Ref(BuyPrice, -BuyBarsSince) + 3;
// Setting the level to activate stop
// BuyActivateLevel depends directly on BuyPrice and a constant
// and I think this is how it should be - BuyActiveLevel should not bedynamically alculated
// NOTE: When BuyStopLoss = 1, BuyActiveLevel is not important
BuyActiveLevel = Ref(BuyPrice, -BuyBarsSince) + 22;
// Active is triggered when the highest price since Buy is higher then
BuyActiveLevel OR
// is always 1 (True) when BuyStopLoss = 1
// NOTE: Cross() returns 0 when HHV = BuyActiveLevel
BuyActive = Cross(BuyActiveLevel, HHV(High, -BuyBarsSince)) OR BuyStopLoss;
// BuyStop is triggered when Low of the session is lower than BuyStopLevel
// NOTE: Cross() returns 0 when BuyStopLevel = Low
BuyStop = Cross(Low, BuyStopLevel);
// BuyActive will be 1 (True) till BuyStop is triggered
// therefore we will know if BuyStop is activated and should be executed
BuyActive = Flip(BuyActive, BuyStop);
// When gap on open - use Open otherwise use BuyStopLevel as a SellPrice
SellPrice = Min(Open, BuyStopLevel);
// Exploration in Amibroker
AddColumn(BuyStopLoss, "BuyStopLoss", format=1.0);
AddColumn(BuyBarsSince, "BuyBarsSince", format=1.0);
AddColumn(BuyStopLevel, "BuyStopLevel", format=1.2);
AddColumn(BuyActiveLevel, "BuyActiveLevel", format=1.2);
AddColumn(BuyStop, "BuyStop", format=1.0);
AddColumn(BuyActive, "BuyActive", format=1.0);
// END OF "TRADING SYSTEM LONG STOP FORMULA" SECTION
//****************************************************************************************
// TRADING SYSTEM SHORT STOP FORMULA
//****************************************************************************************
ShortStopLoss = 0; // 0 - not a stop loss formula, stop must be activated
// 1 - stop is activated without checking ActiveLevel
// How many bars ago was the last Short signal?
ShortBarsSince = BarsSince(Short == 1);
// Setting stop level
// As an example ShortStopLevel depends directly on ShortPrice and a constant
// Could be also: ShortPrice - ATR or any other dynamic formula
ShortStopLevel = Ref(ShortPrice, -ShortBarsSince) - 3;
// Setting the level to activate stop
// ShortActivateLevel depends directly on ShortPrice and a constant
// and I think this is how it should be - ShortActiveLevel should not be dynamically calculated
// NOTE: When ShortStopLoss = 1, ShortActiveLevel is not important
ShortActiveLevel = Ref(ShortPrice, -ShortBarsSince) - 22;
// Active is triggered when the lowest price since Short is lower then ShortActiveLevel OR
// is always 1 (True) when ShortStopLoss = 1
// NOTE: Cross() returns 0 when LLV = ShortActiveLevel
ShortActive = Cross(ShortActiveLevel, LLV(Low, -ShortBarsSince)) OR ShortStopLoss;
// ShortStop is triggered when High of the session is higher than ShortStopLevel
// NOTE: Cross() returns 0 when ShortStopLevel = High
ShortStop = Cross(High, ShortStopLevel);
// ShortActive will be 1 (True) till ShortStop is triggered
// therefore we will know if ShortStop is activated and should be executed
ShortActive = Flip(ShortActive, ShortStop);
// When gap on open - use Open otherwise use ShortStopLevel as a CoverPrice
CoverPrice = Max(Open, ShortStopLevel);
// Exploration in Amibroker
AddColumn(ShortStopLoss, "ShortStopLoss", format=1.0);
AddColumn(ShortBarsSince, "ShortBarsSince", format=1.0);
AddColumn(ShortStopLevel, "ShortStopLevel", format=1.2);
AddColumn(ShortActiveLevel, "ShortActiveLevel", format=1.2);
AddColumn(ShortStop, "ShortStop", format=1.0);
AddColumn(ShortActive, "ShortActive", format=1.0);
// END OF "TRADING SYSTEM SHORT STOP FORMULA" SECTION
//****************************************************************************************
// TRADING SYSTEM GLOBAL EXIT FORMULA
//****************************************************************************************
Sell = BuyStop OR Short;
Cover = ShortStop OR Buy;
// Exploration in Amibroker
AddColumn(Buy, "Buy", format=1.0);
AddColumn(Short, "Short", format=1.0);
AddColumn(Sell, "Sell", format=1.0);
AddColumn(Cover, "Cover", format=1.0);
AddColumn(BuyPrice, "BuyPrice", format=1.2);
AddColumn(ShortPrice, "ShortPrice", format=1.2);
AddColumn(SellPrice, "SellPrice", format=1.2);
AddColumn(CoverPrice, "CoverPrice", format=1.2);
// END OF "TRADING SYSTEM GLOBAL EXIT FORMULA" SECTION
//****************************************************************************************
// GRAPHIC PRESENTATION IN AMIBROKER
//****************************************************************************************
// [code for graphic presentation]
// END OF "GRAPHIC PRESENTATION IN AMIBROKER" SECTION
//****************************************************************************************
// END OF CODE (TEST.AFL)
//****************************************************************************************
/* old style comment - to avoid parser bug */0 comments
Leave Comment
Please login here to leave a comment.
Back