// Downloaded From https://www.WiseStockTrader.com
//  Cole Trading Method
//
//  Rally, Reaction, Inside, Outside and Rally with Volume, Reaction with
//  Volume formulas
//
//------------------------------------------------------------------------------

/* COLE.AFL v 1.00 17/10/2001
/* Cole Trading Method
/* Developed by Roger Cole
/* From Technical Analysis of Stocks and Commodities, V8:12 (460-463), by Alan Friedman
/* Indicator developed and coded by Marek Chlopek, October 2001
/* Support from Tomasz Janeczko and Amibroker Mailing List members - THANKS!!! */

/* ************************************************************************** */
/* Cole Trading Method description
/* A up signal is formed when a stock makes three Rally Days in a row with larger volume on each day
/* A down signal is formed when a stock makes three Reaction Days in a row with larger volume on each day
/* Inside and Outside Days are ignored */

/* ************************************************************************** */
/* Cole Trading Method Indicator development description
/* Cole Trading Method measures two independent signals: day status (Rally, Reaction, Inside, Outside) and volume,
/* therefore two independent sub-indicators have been implemented:
/* ColeDay - counts number of days in a row when Rally (positive) or Reaction (negative)
/* ColeVolume - counts number of days with higher volume, always positive */

/* ************************************************************************** */
/* Cole's Trading Day Status definition */
RY  = H >  Ref(H, -1) AND L >= Ref(L, -1); // Rally Day
RX  = H <= Ref(H, -1) AND L <  Ref(L, -1); // Reaction Day
IN  = H <= Ref(H, -1) AND L >= Ref(L, -1); // Inside Day
OUT = H >  Ref(H, -1) AND L <  Ref(L, -1); // Outside Day

VolRY = Ref(V, - BarsSince(RY));
VolRX = Ref(V, - BarsSince(RX));
RYwithVol  = RY  AND V > IIF(RY, Ref(VolRY, -1), VolRY);  // Rally Day with Volume
RXwithVol  = RX  AND V > IIF(RX, Ref(VolRX, -1), VolRX);  // Reaction Day with Volume

/* ************************************************************************** */
/* ColeDay - counts number of Rally Days in a row (positive) or Reaction Days in a row (negative)
/* When Rally ColeDay increases by 1 unless the first Rally Day then ColeDay = 1
/* When Reaction ColeDay decreases by 1 unless the first Reaction Day then ColeDay = -1
/* When Inside Day or Outside Day then ColeDay stays unchanged */
PeriodRY = BarsSince(NOT RY);
PeriodRX = BarsSince(NOT RX);
ColeDay  = ValueWhen(RX or RY, Sum(RY, PeriodRY) - Sum(RX, PeriodRX));

/* ************************************************************************** */
/* ColeVolume - counts number of days with higher volume, always positive
/* When volume higher than previous day volume ColeVolume increases by 1
/* When volume lower previous day volume then ColeVolume = 1
/* When Inside Day or Outside Day then ColeVolume stays unchanged */
PeriodV    = BarsSince(V < Ref(V, -1) AND (RX or RY));
ColeVolume = ValueWhen(RX or RY, Sum (RX+RY, PeriodV) +1);

/* ************************************************************************** */
/* Trading Signals in Cole Trading Method
/* Buy Signal  - when a stock makes three Rally Days in a row with larger volume on each day
/* Sell Signal - when a stock makes three Reaction Days in a row with larger volume on each day */
Buy   = ColeDay >= 3  AND ColeVolume >= 3;
Sell  = ColeDay <= -3 AND ColeVolume >= 3;
Cover = Buy;
Short = Sell;

/* ************************************************************************** */
/* Graphic presentation in Amibroker */
maxgraph = 2;
graph0 = ColeDay;
graph1 = ColeVolume;
title = name() + " - ColeDay = " + WriteVal(graph0, 1.0) + "; ColeVolume = " + WriteVal(graph1, 1.0);

/* ************************************************************************** */
/* Exploration in Amibroker */
filter = 1;
numcolumns = 9;
column0 = H;		column0name = "H";		column0format = 1.2;
column1 = L;		column1name = "L";		column1format = 1.2;
column2 = V;		column2name = "V";		column2format = 1.0;
column3 = RY;		column3name = "RY";		column3format = 1.0;
column4 = RX;		column4name = "RX";		column4format = 1.0;
column5 = IN;		column5name = "IN";		column5format = 1.0;
column6 = OUT;		column6name = "OUT";		column6format = 1.0;
column7 = ColeDay;	column7name = "ColeDay";	column7format = 1.0;
column8 = ColeVolume;	column8name = "ColeVolume";	column8format = 1.0;

/* ************************************************************************** */
/* END COLE Indicator Formula */