Stock Portfolio Organizer

The ultimate porfolio management solution.

Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
For Portfolio Manager Click Here

WiseTrader Toolbox

#1 Selling Amibroker Plugin featuring:

Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Find Out More Here

Stops Implementation in AFS for Amibroker (AFL)
kaiji
about 14 years ago
Amibroker (AFL)

Rating:
3 / 5 (Votes 2)
Tags:

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

Copy & Paste Friendly
// 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