// Downloaded From https://www.WiseStockTrader.com
// 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 */