Rajandran R Telecom Engineer turned Full-time Derivative Trader. Mostly Trading Nifty, Banknifty, USDINR and High Liquid Stock Derivatives. Trading the Markets Since 2006 onwards. Using Market Profile and Orderflow for more than a decade. Designed and published 100+ open source trading systems on various trading tools. Strongly believe that market understanding and robust trading frameworks are the key to the trading success. Writing about Markets, Trading System Design, Market Sentiment, Trading Softwares & Trading Nuances since 2007 onwards. Author of Marketcalls.in)

Supertrend Composite Indicator for Nifty EOD Timeframe

45 sec read

Supertrend Composite Indicator provides the information about the overall net performance of the Supertrend strategy with Nifty 50 stocks. This composite indicator adds the value “1” to the indicator if the any of the stocks are in buy mode and subracts “1” from the indicator if the stock turns to sell mode. And the computed values are plotted in Histogram format.

[wp_ad_camp_5]

 

Rules
If the Histogram turns green from red then it means bulls are dominating the market
If the Historgram turns Red from green then it means bears are dominating the marekt.
only Change of Colors indicates who is dominating the market. Its not a everyday signal.

So overall this indicator computes and indicates the breath of the Nifty 50 stocks. It shows the net buy or sell signals generated by supertrend on the whole i.e who is more dominant a bull or a bear? For Example The Breath Value of “0” indicates 25 stocks are in Buy mode and 25 Stocks are in sell mode. The Current value of the supertend indicator as per the above chart is 34. 34+8=42 stocks are in buy mode and 8 stocks are in sell mode currently resulting in the breadth value of 34.

This indicator is currently added to EODSignals (Nifty EOD Charts) and will be autoupdated everyday after 6.00PM.

Rajandran R Telecom Engineer turned Full-time Derivative Trader. Mostly Trading Nifty, Banknifty, USDINR and High Liquid Stock Derivatives. Trading the Markets Since 2006 onwards. Using Market Profile and Orderflow for more than a decade. Designed and published 100+ open source trading systems on various trading tools. Strongly believe that market understanding and robust trading frameworks are the key to the trading success. Writing about Markets, Trading System Design, Market Sentiment, Trading Softwares & Trading Nuances since 2007 onwards. Author of Marketcalls.in)

[Live Coding Webinar] Build Your First Trading Bridge for…

In this course, you will be learning to build your own trading bridge using Python. This 60-minute session is perfect for traders, Python enthusiasts,...
Rajandran R
1 min read

[Webinar] Understanding and Mitigating Curve Fitting in System Trading

"Understanding and Mitigating Curve Fitting in System Trading"! This dynamic session aims to equip novice to intermediate traders, quantitative analysts, and financial engineers with...
Rajandran R
1 min read

P-Signal Strategy Long Only Strategy – Amibroker AFL Code

This tutorial provides an overview of the P-Signal reversal strategy, a quantitative trading strategy that utilizes statistical parameters and error functions to generate probabilistic...
Rajandran R
2 min read

25 Replies to “Supertrend Composite Indicator for Nifty EOD Timeframe”

  1. Hi Raj,

    Good Job. A small suggestion. Instead of giving a value of 1 to each stock, consider giving the actual weightage of each stock in nifty. For eg., Infy has a weightage of 9.5 versus 0.28 of Rpower… So i think this will give more clear picture…

    Thanks
    Vinod D

  2. super trend giving good signal but scaling has some problem. actual size of candle is not displaying and it is contracted in small area . how to configure properly

  3. Can you assist me on the “tweaked”/modified parameters of SuperTrend to make it useful for EOD?

  4. Pls provide ur custom version of supertrend………….. I’m not able to make using the link.

  5. @Kalyan

    I havent faced any such issues. May be the chart you are using could be due to the target lines which affects the scaling.

    @Dexter and Samartha

    The Custom version of supertrend is not opensource and not even for sale as some people are misusing the free stuff.

  6. [email protected]……….my mail id. pls provide it to my mail……. may this is the afl which I needed …. we had some discussion with other afl’s earlier., may for this type I want. I knew tht type ppl r ther. I hv super trend but hw to add second part.

  7. K… sir. hw can i make tht Super Trend Breadth the below chart……..pls assist me in this over to mail atleast.

  8. Ok Sir……. Pls guide me atleast how make tht below chart Super Trend Breadth……..atleast to my mail if not here. I tried lot with tht given link……but I’m nt able too.

  9. I am getting an error and blank screen after logging for super trend live at the market hours.Pl. help

  10. @hrishikes

    Which version of Amibroker you are using? And where you had downloaded as my site has multiple version of supertrend it is recommended to download ” Non Repainting Supertrend optimized version” if you are using 5.4 or above version. For lower version it is advisable to download older version of supertrend

  11. Respected sir Sir,
    attatched AMI afl NAME is HURST BAND, can we add BUY / SELL signal in this afl ?

  12. [B]Buy — When price above the upper band or line
    Sell — When price below the lower band or line[/B]

    [B][COLOR=”Red”]1st code……both works good. Enjoy ur trade.[/COLOR][/B]

    _SECTION_BEGIN(“SAM”);
    /*Gann HiLo*/
    per=Optimize(“Per”,Param(“Per”,42,1,55,1),1,55,1);

    Hld = IIf(C > Ref(MA(H, per), -1), 1, IIf(C Hilo, colorCustom9, colorCustom5);
    Plot(C,””,1,128);
    Plot(Hilo, _DEFAULT_NAME(), Trigger, styleStaircase);
    SetPositionSize( 50, spsShares );
    Buy=Cross(C,Hilo);
    Sell=Cross(Hilo,C);
    PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorGreen, 0,L, Offset=-25);
    PlotShapes(IIf(Sell, shapeDownArrow, shapeNone),colorRed, 0,H, Offset=-25);
    _SECTION_END();

    _SECTION_BEGIN(“SAM”);
    P = ParamField(“Price field”,-1);
    Periods = Param(“Periods”, 19, 2, 300, 1 );
    Width = Param(“Width”, 2.1, 0, 10, 0.05 );
    Color = ParamColor(“Color”, colorBlue );
    Style = ParamStyle(“Style”, styleLine | styleNoLabel);

    CenterLine = MA( P, Periods );
    KTop = CenterLine + Width * ATR( Periods );
    KBot = CenterLine – Width * ATR( Periods );

    Plot( KTop, “KBTop” + _PARAM_VALUES(), Color, Style );
    Plot( KBot, “KBBot” + _PARAM_VALUES(), Color, Style );
    _SECTION_END();

    [B][COLOR=”Red”]And my second code
    [/COLOR][/B]
    _SECTION_BEGIN(“Background_Setting”);
    SetChartBkGradientFill( ParamColor(“BgTop”, colorWhite),

    ParamColor(“BgBottom”, colorAqua),ParamColor(“titleblock”,colorYellow ));

    _SECTION_BEGIN(“SAM”);
    //——————————————————————————
    // Both indicator and exploration code for combination of fibonacci
    // retracements identified in “Fibonacci for the Active Trader” by Derrik
    // Hobbes. Determines pivots, draws retracements, and explores for them.
    //——————————————————————————

    // **************************
    // BEING EXPLORATION CODE
    // **************************

    // — what will be our lookback range for the hh and ll?
    nBars = Param(“Number of bars”, 20, 5, 40);
    bTrace = Param(“Include trace output”, 1, 0, 1);
    nNoPivsInSetup = Param(“No. Pivs in Setup”, 4, 3, 4, 1);
    bShowTCZ = Param(“Show TCZ”, 1, 0, 1);
    nMinBarsBtwPivs = Param(“Min. number of bars btw. pivots”, 1, 1, 10, 1);
    nMinPctBtwPivs = Param(“Min. percent diff. btw. pivots”, .05, .04, .2, .01);
    bLastBarCanBePiv = Param(“Last bar can be a pivot”, 1, 0, 1);
    retrcTolerance = .01;
    tczTolerance = .005;
    nNumBarsToScan = 120;

    // — added from exploration version 20040204
    nExploreBarIdx = 0;
    nExploreDate = 0;
    nCurDateNum = 0;
    DN = DateNum();
    DT = DateTime();

    // — key exploration variables
    bTCZLong = False;
    bTCZShort = False;
    nAnchorPivIdx = 0;

    ADX8 = ADX(8);

    // 1 – INDICATOR, 2 – COMMENTARY, 3 – SCAN,
    // 4 – EXPLORATION, 5 – BACKTEST / Optimize
    if(Status(“action”)==1) {
    bDraw = True;
    bUseLastVis = Param(“Use last visible bar”, 1, 0, 1);
    } else {
    bDraw = False;
    bUseLastVis = False;
    bTrace = False;
    nExploreDate = Status(“rangetodate”);
    for (i=LastValue(BarIndex());i>=0;i–) {
    nCurDateNum = DN[i];
    if (nCurDateNum == nExploreDate) {
    nExploreBarIdx = i;
    }
    }
    // — if(Status(“action”)==1…
    }

    GraphXSpace=7;

    // — basic candle chart
    // — if this appears inside if block, strange
    // drawing results!
    PlotOHLC(Open, High, Low, Close,
    “BIdx = ” + BarIndex() +

    ” + “O = ” + O + ”
    “+”H = “+ H + ”
    “+”L = ” + L
    + ”
    “+”C “,
    colorBlack, styleCandle);

    if (bDraw) {
    Plot(MA(C, 15), “15 bar MA”, colorRed,
    styleLine+styleNoRescale+styleNoLabel);
    Plot(MA(C, 55), “55 bar MA”, colorBlack,
    styleLine+styleNoRescale+styleNoLabel);
    //Plot(MA(C, 233), “233 bar MA”, colorDarkRed,
    // styleLine+styleNoRescale+styleNoLabel);
    }

    // — Create 0-initialized arrays the size of barcount
    aHPivs = H – H;
    aLPivs = L – L;
    aHPivHighs = H – H;
    aLPivLows = L – L;
    aHPivIdxs = H – H;
    aLPivIdxs = L – L;
    aAddedHPivs = H – H;
    aAddedLPivs = L – L;
    aLegVol = H – H;
    aRetrcVol = H – H;

    nHPivs = 0;
    nLPivs = 0;

    lastHPIdx = 0;
    lastLPIdx = 0;
    lastHPH = 0;
    lastLPL = 0;
    curPivBarIdx = 0;

    // — looking back from the current bar, how many bars
    // back were the hhv and llv values of the previous
    // n bars, etc.?
    aHHVBars = HHVBars(H, nBars);
    aLLVBars = LLVBars(L, nBars);
    aHHV = HHV(H, nBars);
    aLLV = LLV(L, nBars);

    // — Initialize value of curTrend
    nLastVisBar = LastValue(
    Highest(IIf(Status(“barvisible”), BarIndex(), 0)));

    curBar = IIf(nlastVisBar > 0 AND bUseLastVis, nlastVisBar,
    IIf(Status(“action”)==4 AND nExploreBarIdx > 0, nExploreBarIdx,
    LastValue(BarIndex())));

    curTrend = “”;
    if (aLLVBars[curBar] = nNumBarsToScan) {
    for (i=0; i 0 AND bUseLastVis,
    nlastVisBar-i,
    IIf(Status(“action”)==4 AND nExploreBarIdx > 0,
    nExploreBarIdx-i,
    LastValue(BarIndex())-i));

    // — Have we identified a pivot? If trend is down…
    if (aLLVBars[curBar] 0 AND bUseLastVis,
    nlastVisBar,
    IIf(Status(“action”)==4 AND nExploreBarIdx > 0,
    nExploreBarIdx,
    LastValue(BarIndex()))
    );

    // — Make sure I found at least two of each above.
    if (nHPivs >= 2 AND nLPivs >= 2) {

    lastLPIdx = aLPivIdxs[0];
    lastLPL = aLPivLows[0];

    lastHPIdx = aHPivIdxs[0];
    lastHPH = aHPivHighs[0];

    nLastHOrLPivIdx = Max(lastLPIdx, lastHPIdx);

    nAddPivsRng = curBar – nLastHOrLPivIdx;
    aLLVAfterLastPiv = LLV(L, nAddPivsRng);
    nLLVAfterLastPiv = aLLVAfterLastPiv[curBar];
    aLLVIdxAfterLastPiv = LLVBars(L, nAddPivsRng);
    nLLVIdxAfterLastPiv = curBar – aLLVIdxAfterLastPiv[curBar];
    aHHVAfterLastPiv = HHV(H, nAddPivsRng);
    nHHVAfterLastPiv = aHHVAfterLastPiv[curBar];
    aHHVIdxAfterLastPiv = HHVBars(H, nAddPivsRng);
    nHHVIdxAfterLastPiv = curBar – aHHVIdxAfterLastPiv[curBar];

    // — Later want to add last high pivot only if
    // not in buy mode from last and still in trade

    /*
    Note – I’m only interested in adding pivots if I’m in
    a higher-highs or lower-lows scenario
    */

    // — OK, let’s start where the last high pivot occurs after the
    // last Low pivot
    if (lastHPIdx > lastLPIdx) {

    /* There are at least two possibilities here. One is that
    the previous high was higher, indicating that this is a
    possible short retracement or one in the making.
    The other is that the previous high was lower, indicating
    that this is a possible long retracement in the working.
    However, both depend on opposing pivots. E.g., if I find
    higher highs, what if I have lower lows?

    If the highs are descending, then I can consider:
    – a lower low, and leave it at that
    – a higher high and higher low
    – a lower low and another lower high
    */
    if (aHPivHighs[0] < aHPivHighs[1]) {

    if (nLLVAfterLastPiv = nMinBarsBtwPivs
    AND nLLVIdxAfterLastPiv != curBar ) {

    // — OK, we’ll add this as a pivot.
    // Mark it for plotting…
    aLPivs[nLLVIdxAfterLastPiv] = 1;
    aAddedLPivs[nLLVIdxAfterLastPiv] = 1;

    // …and then rearrange elements in the
    // pivot information arrays
    for (j=0; j aLPivLows[0] AND
    (nLLVIdxAfterLastPiv – lastHPIdx – 1) >= nMinBarsBtwPivs
    AND nLLVIdxAfterLastPiv != curBar ) {

    // — OK, we’ll add this as a pivot.
    // Mark it for plotting…
    aLPivs[nLLVIdxAfterLastPiv] = 1;
    aAddedLPivs[nLLVIdxAfterLastPiv] = 1;

    // …and then rearrange elements in the
    // pivot information arrays
    for (j=0; j<nLPivs; j++) {
    aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)];
    aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+1)];
    }
    aLPivLows[0] = nLLVAfterLastPiv;
    aLPivIdxs[0] = nLLVIdxAfterLastPiv;
    nLPivs++;

    // — Test whether to add piv given last piv is high
    // AND we have lower highs
    }
    // — The last piv is a high and we have higher highs
    // OR lower highs
    }

    /* ****************************************************************
    Still finding missed pivot(s). Here, the last piv is a low piv.
    **************************************************************** */
    } else {

    // — First case, lower highs
    if (aHPivHighs[0] < aHPivHighs[1]) {

    if (nHHVAfterLastPiv = nMinBarsBtwPivs
    AND nHHVIdxAfterLastPiv != curBar ) {

    // — OK, we’ll add this as a pivot.
    // Mark that for plotting
    aHPivs[nHHVIdxAfterLastPiv] = 1;
    aAddedHPivs[nHHVIdxAfterLastPiv] = 1;

    // …and then rearrange elements in the
    // pivot information arrays
    for (j=0; j aHPivHighs[0] AND
    (nHHVIdxAfterLastPiv – lastLPIdx – 1) >= nMinBarsBtwPivs
    AND nHHVIdxAfterLastPiv != curBar ) {

    // — OK, we’ll add this as a pivot.
    // Mark it for plotting…
    aHPivs[nHHVIdxAfterLastPiv] = 1;
    aAddedHPivs[nHHVIdxAfterLastPiv] = 1;

    // …and then rearrange elements in the
    // pivot information arrays
    for (j=0; j= 2 AND
    nLPivs >=2 AND
    aHPivHighs[0] > aHPivHighs[1] AND
    aLPivLows[0] > aLPivLows[1]) {

    tcz500 =
    (aHPivHighs[0] –
    (.5 * (aHPivHighs[0] – aLPivLows[1])));

    tcz618 =
    (aHPivHighs[0] –
    (.618 * (aHPivHighs[0] – aLPivLows[1])));

    tcz786 =
    (aHPivHighs[0] –
    (.786 * (aHPivHighs[0] – aLPivLows[0])));

    retrcRng = curBar – aHPivIdxs[0];
    aRetrcPrc = LLV(L, retrcRng);
    retrcPrc = aRetrcPrc[curBar];
    aRetrcPrcBars = LLVBars(L, retrcRng);
    retrcBarIdx = curBar – aRetrcPrcBars[curBar];
    retrcClose = aRetrcClose[retrcBarIdx];

    // — bTCZLong setup?
    bTCZLong = (

    // — Are retracement levels arranged in
    // tcz order?
    tcz500 >= (tcz786 * (1 – tczTolerance))
    AND
    // .681 is below .786 for long setups
    tcz618 = low of tcz range
    // and low = ((1 – retrcTolerance) * tcz618)
    AND
    retrcPrc = 2 AND nLPivs >=2
    AND aHPivHighs[0] < aHPivHighs[1]
    AND aLPivLows[0] < aLPivLows[1]) {

    tcz500 =
    (aHPivHighs[1] –
    (.5 * (aHPivHighs[1] – aLPivLows[0])));

    tcz618 =
    (aHPivHighs[0] –
    (.618 * (aHPivHighs[1] – aLPivLows[0])));

    tcz786 =
    (aHPivHighs[0] –
    (.786 * (aHPivHighs[0] – aLPivLows[0])));

    retrcRng = curBar – aLPivIdxs[0];
    aRetrcPrc = HHV(H, retrcRng);
    retrcPrc = aRetrcPrc[curBar];
    aRetrcPrcBars = HHVBars(H, retrcRng);
    retrcBarIdx = curBar – aRetrcPrcBars[curBar];
    retrcClose = aRetrcClose[retrcBarIdx];

    bTCZShort = (
    // — Are retracement levels arranged in
    // tcz order?

    // .500 is below .786 for short setups
    tcz500 = (tcz786 * (1 – tczTolerance))
    AND

    // — Is the close = low of tcz range
    retrcClose = ((1 – retrcTolerance) * tcz500)
    );

    // — Risk would be top of zone – low of signal bar
    //risk = 0;
    }

    Filter = (bTCZShort OR bTCZLong);
    AddColumn(C, “Close”);
    AddColumn(IIf(bTCZLong, 76, 83), “L/S”, formatChar);

    // **************************
    // END EXPLORATION CODE
    // **************************

    // **************************
    // BEGIN INDICATOR CODE
    // **************************

    // — what will be our lookback range for the hh and ll?
    nBars = Param(“Number of bars”, 20, 5, 40);
    bTrace = Param(“Include trace output”, 1, 0, 1);
    nNoPivsInSetup = Param(“No. Pivs in Setup”, 4, 3, 4, 1);
    bShowTCZ = Param(“Show TCZ”, 1, 0, 1);
    nMinBarsBtwPivs = Param(“Min. number of bars btw. pivots”, 1, 1, 10, 1);
    nMinPctBtwPivs = Param(“Min. percent diff. btw. pivots”, .05, .04, .2, .01);
    bLastBarCanBePiv = Param(“Last bar can be a pivot”, 1, 0, 1);
    retrcTolerance = .01;
    tczTolerance = .005;
    nNumBarsToScan = 120;

    // — added from exploration version 20040204
    nExploreBarIdx = 0;
    nExploreDate = 0;
    nCurDateNum = 0;
    DN = DateNum();
    DT = DateTime();

    // — key exploration variables
    bTCZLong = False;
    bTCZShort = False;
    nAnchorPivIdx = 0;

    ADX8 = ADX(8);

    // 1 – INDICATOR, 2 – COMMENTARY, 3 – SCAN,
    // 4 – EXPLORATION, 5 – BACKTEST / Optimize
    if(Status(“action”)==1) {
    bDraw = True;
    bUseLastVis = Param(“Use last visible bar”, 1, 0, 1);
    } else {
    bDraw = False;
    bUseLastVis = False;
    bTrace = False;
    nExploreDate = Status(“rangetodate”);
    for (i=LastValue(BarIndex());i>=0;i–) {
    nCurDateNum = DN[i];
    if (nCurDateNum == nExploreDate) {
    nExploreBarIdx = i;
    }
    }
    // — if(Status(“action”)==1…
    }

    GraphXSpace=7;

    // — basic candle chart
    // — if this appears inside if block, strange
    // drawing results!
    PlotOHLC(Open, High, Low, Close,
    “BIdx = ” + BarIndex() +

    ” + “O = ” + O + ”
    “+”H = “+ H + ”
    “+”L = ” + L
    + ”
    “+”C “,
    colorBlack, styleCandle);

    if (bDraw) {
    Plot(MA(C, 15), “15 bar MA”, colorRed,
    styleLine+styleNoRescale+styleNoLabel);
    Plot(MA(C, 55), “55 bar MA”, colorBlack,
    styleLine+styleNoRescale+styleNoLabel);
    //Plot(MA(C, 233), “233 bar MA”, colorDarkRed,
    // styleLine+styleNoRescale+styleNoLabel);
    }

    // — Create 0-initialized arrays the size of barcount
    aHPivs = H – H;
    aLPivs = L – L;
    aHPivHighs = H – H;
    aLPivLows = L – L;
    aHPivIdxs = H – H;
    aLPivIdxs = L – L;
    aAddedHPivs = H – H;
    aAddedLPivs = L – L;
    aLegVol = H – H;
    aRetrcVol = H – H;

    nHPivs = 0;
    nLPivs = 0;

    lastHPIdx = 0;
    lastLPIdx = 0;
    lastHPH = 0;
    lastLPL = 0;
    curPivBarIdx = 0;

    // — looking back from the current bar, how many bars
    // back were the hhv and llv values of the previous
    // n bars, etc.?
    aHHVBars = HHVBars(H, nBars);
    aLLVBars = LLVBars(L, nBars);
    aHHV = HHV(H, nBars);
    aLLV = LLV(L, nBars);

    // — Initialize value of curTrend
    nLastVisBar = LastValue(
    Highest(IIf(Status(“barvisible”), BarIndex(), 0)));

    curBar = IIf(nlastVisBar > 0 AND bUseLastVis, nlastVisBar,
    IIf(Status(“action”)==4 AND nExploreBarIdx > 0, nExploreBarIdx,
    LastValue(BarIndex())));

    curTrend = “”;
    if (aLLVBars[curBar] = nNumBarsToScan) {
    for (i=0; i 0 AND bUseLastVis,
    nlastVisBar-i,
    IIf(Status(“action”)==4 AND nExploreBarIdx > 0,
    nExploreBarIdx-i,
    LastValue(BarIndex())-i));

    // — Have we identified a pivot? If trend is down…
    if (aLLVBars[curBar] 0 AND bUseLastVis,
    nlastVisBar,
    IIf(Status(“action”)==4 AND nExploreBarIdx > 0,
    nExploreBarIdx,
    LastValue(BarIndex()))
    );

    // — Make sure I found at least two of each above.
    if (nHPivs >= 2 AND nLPivs >= 2) {

    lastLPIdx = aLPivIdxs[0];
    lastLPL = aLPivLows[0];

    lastHPIdx = aHPivIdxs[0];
    lastHPH = aHPivHighs[0];

    nLastHOrLPivIdx = Max(lastLPIdx, lastHPIdx);

    nAddPivsRng = curBar – nLastHOrLPivIdx;
    aLLVAfterLastPiv = LLV(L, nAddPivsRng);
    nLLVAfterLastPiv = aLLVAfterLastPiv[curBar];
    aLLVIdxAfterLastPiv = LLVBars(L, nAddPivsRng);
    nLLVIdxAfterLastPiv = curBar – aLLVIdxAfterLastPiv[curBar];
    aHHVAfterLastPiv = HHV(H, nAddPivsRng);
    nHHVAfterLastPiv = aHHVAfterLastPiv[curBar];
    aHHVIdxAfterLastPiv = HHVBars(H, nAddPivsRng);
    nHHVIdxAfterLastPiv = curBar – aHHVIdxAfterLastPiv[curBar];

    // — Later want to add last high pivot only if
    // not in buy mode from last and still in trade

    /*
    Note – I’m only interested in adding pivots if I’m in
    a higher-highs or lower-lows scenario
    */

    // — OK, let’s start where the last high pivot occurs after the
    // last Low pivot
    if (lastHPIdx > lastLPIdx) {

    /* There are at least two possibilities here. One is that
    the previous high was higher, indicating that this is a
    possible short retracement or one in the making.
    The other is that the previous high was lower, indicating
    that this is a possible long retracement in the working.
    However, both depend on opposing pivots. E.g., if I find
    higher highs, what if I have lower lows?

    If the highs are descending, then I can consider:
    – a lower low, and leave it at that
    – a higher high and higher low
    – a lower low and another lower high
    */
    if (aHPivHighs[0] < aHPivHighs[1]) {

    if (nLLVAfterLastPiv = nMinBarsBtwPivs
    AND nLLVIdxAfterLastPiv != curBar ) {

    // — OK, we’ll add this as a pivot.
    // Mark it for plotting…
    aLPivs[nLLVIdxAfterLastPiv] = 1;
    aAddedLPivs[nLLVIdxAfterLastPiv] = 1;

    // …and then rearrange elements in the
    // pivot information arrays
    for (j=0; j aLPivLows[0] AND
    (nLLVIdxAfterLastPiv – lastHPIdx – 1) >= nMinBarsBtwPivs
    AND nLLVIdxAfterLastPiv != curBar ) {

    // — OK, we’ll add this as a pivot.
    // Mark it for plotting…
    aLPivs[nLLVIdxAfterLastPiv] = 1;
    aAddedLPivs[nLLVIdxAfterLastPiv] = 1;

    // …and then rearrange elements in the
    // pivot information arrays
    for (j=0; j<nLPivs; j++) {
    aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)];
    aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+1)];
    }
    aLPivLows[0] = nLLVAfterLastPiv;
    aLPivIdxs[0] = nLLVIdxAfterLastPiv;
    nLPivs++;

    // — Test whether to add piv given last piv is high
    // AND we have lower highs
    }
    // — The last piv is a high and we have higher highs
    // OR lower highs
    }

    /* ****************************************************************
    Still finding missed pivot(s). Here, the last piv is a low piv.
    **************************************************************** */
    } else {

    // — First case, lower highs
    if (aHPivHighs[0] < aHPivHighs[1]) {

    if (nHHVAfterLastPiv = nMinBarsBtwPivs
    AND nHHVIdxAfterLastPiv != curBar ) {

    // — OK, we’ll add this as a pivot.
    // Mark that for plotting
    aHPivs[nHHVIdxAfterLastPiv] = 1;
    aAddedHPivs[nHHVIdxAfterLastPiv] = 1;

    // …and then rearrange elements in the
    // pivot information arrays
    for (j=0; j aHPivHighs[0] AND
    (nHHVIdxAfterLastPiv – lastLPIdx – 1) >= nMinBarsBtwPivs
    AND nHHVIdxAfterLastPiv != curBar ) {

    // — OK, we’ll add this as a pivot.
    // Mark it for plotting…
    aHPivs[nHHVIdxAfterLastPiv] = 1;
    aAddedHPivs[nHHVIdxAfterLastPiv] = 1;

    // …and then rearrange elements in the
    // pivot information arrays
    for (j=0; j= 2 AND
    nLPivs >=2 AND
    aHPivHighs[0] > aHPivHighs[1] AND
    aLPivLows[0] > aLPivLows[1]) {

    tcz500 =
    (aHPivHighs[0] –
    (.5 * (aHPivHighs[0] – aLPivLows[1])));

    tcz618 =
    (aHPivHighs[0] –
    (.618 * (aHPivHighs[0] – aLPivLows[1])));

    tcz786 =
    (aHPivHighs[0] –
    (.786 * (aHPivHighs[0] – aLPivLows[0])));

    retrcRng = curBar – aHPivIdxs[0];
    aRetrcPrc = LLV(L, retrcRng);
    aRetrcPrcBars = LLVBars(L, retrcRng);

    retrcPrc = aRetrcPrc[curBar];
    retrcBarIdx = curBar – aRetrcPrcBars[curBar];
    retrcClose = aRetrcClose[retrcBarIdx];

    // — bTCZLong setup?
    bTCZLong = (

    // — Are retracement levels arranged in
    // tcz order?

    // .500 is above .786 for long setups
    tcz500 >= (tcz786 * (1 – tczTolerance))
    AND
    // .681 is below .786 for long setups
    tcz618 = low of tcz range
    // and low = ((1 – retrcTolerance) * tcz618)
    AND
    retrcPrc = 2 AND nLPivs >=2
    AND aHPivHighs[0] < aHPivHighs[1]
    AND aLPivLows[0] < aLPivLows[1]) {

    tcz500 =
    (aHPivHighs[1] –
    (.5 * (aHPivHighs[1] – aLPivLows[0])));

    tcz618 =
    (aHPivHighs[0] –
    (.618 * (aHPivHighs[1] – aLPivLows[0])));

    tcz786 =
    (aHPivHighs[0] –
    (.786 * (aHPivHighs[0] – aLPivLows[0])));

    retrcRng = curBar – aLPivIdxs[0];
    aRetrcPrc = HHV(H, retrcRng);
    retrcPrc = aRetrcPrc[curBar];
    aRetrcPrcBars = HHVBars(H, retrcRng);
    retrcBarIdx = curBar – aRetrcPrcBars[curBar];
    retrcClose = aRetrcClose[retrcBarIdx];

    bTCZShort = (
    // — Are retracement levels arranged in
    // tcz order?

    // .500 is below .786 for short setups
    tcz500 = (tcz786 * (1 – tczTolerance))
    AND

    // — Is the close = low of tcz range
    retrcClose = ((1 – retrcTolerance) * tcz500)
    );

    // — Risk would be top of zone – low of signal bar
    //risk = 0;
    }

    // — Show zone if present
    if (bTCZShort OR bTCZLong) {

    // — Be prepared to see symmetry
    if (bTCZShort) {
    if (aLPivIdxs[0] > aHPivIdxs[0]) {
    // — Valuable, useful symmetry information
    nRtrc0Pts = aHPivHighs[0] – aLPivLows[1];
    nRtrc0Bars = aHPivIdxs[0] – aLPivIdxs[1] + 1;
    nRtrc1Pts = retrcPrc – aLPivLows[0];
    nRtrc1Bars = retrcBarIdx – aLPivIdxs[0] + 1;
    } else {
    nRtrc0Pts = aHPivHighs[1] – aLPivLows[1];
    nRtrc0Bars = aHPivIdxs[1] – aLPivIdxs[1] + 1;
    nRtrc1Pts = aHPivHighs[0] – aLPivLows[0];
    nRtrc1Bars = aHPivIdxs[0] – aLPivIdxs[0] + 1;
    }
    } else { // bLongSetup
    if (aLPivIdxs[0] > aHPivIdxs[0]) {
    nRtrc0Pts = aHPivHighs[0] – aLPivLows[1];
    nRtrc0Bars = aHPivIdxs[0] – aLPivIdxs[1] + 1;
    nRtrc1Pts = retrcPrc – aLPivLows[0];
    nRtrc1Bars = retrcBarIdx – aLPivIdxs[0] + 1;
    } else {
    nRtrc0Pts = aHPivHighs[1] – aLPivLows[0];
    nRtrc0Bars = aLPivIdxs[0] – aHPivIdxs[1] + 1;
    nRtrc1Pts = aHPivHighs[0] – aLPivLows[0];
    nRtrc1Bars = aLPivIdxs[0] – aHPivIdxs[0] + 1;
    }
    }

    if (bShowTCZ) {
    Plot(
    LineArray( IIf(bTCZLong, aHPivIdxs[0], aLPivIdxs[0]),
    tcz500, curBar, tcz500 , 0),
    “tcz500”, colorPaleBlue, styleLine);
    Plot(
    LineArray( IIf(bTCZLong, aHPivIdxs[0], aLPivIdxs[0]),
    tcz618, curBar, tcz618, 0),
    “tcz618”, colorPaleBlue, styleLine);
    Plot(
    LineArray( IIf(bTCZLong, aHPivIdxs[0], aLPivIdxs[0]),
    tcz786, curBar, tcz786, 0),
    “tcz786″, colorTurquoise, styleLine);
    }

    // — if (bShowTCZ)
    }

    if (bDraw) {
    Title = Name() + ” (” + StrLeft(FullName(), 10) +
    “) ATR: ” + NumToStr(ATR(1), 4.2) + ” ( ” +
    NumToStr((C – Ref(C, -1)), 4.2) + ” / ” +
    NumToStr((((C – Ref(C, -1)) / Ref(C, -1)) * 100), 2.1) + “% ) ” +
    WriteVal( SelectedValue( DateTime() ), formatDateTime) +

    O: ” + Open +
    “,
    H: ” + High +
    “,
    L: ” + Low +
    “,
    C: ” + Close + “,
    ” +
    // “Risk: ” + WriteVal(risk, 2.1) + “%
    ” +
    “Rtrc 0/1 Pts: ” + WriteVal(nRtrc0Pts, 2.1) + “/” +
    WriteVal(nRtrc1Pts, 2.1) + ”
    ” +
    “Rtrc 0/1 Bars: ” + WriteVal(nRtrc0Bars, 2.0) + “/” +
    WriteVal(nRtrc1Bars, 2.0);
    }

    // **************************
    // END INDICATOR CODE
    // **************************

    _SECTION_END();

    _SECTION_BEGIN(“SAM”);
    P = ParamField(“Price field”,-1);
    Periods = Param(“Periods”, 19, 2, 300, 1 );
    Width = Param(“Width”, 2.1, 0, 10, 0.05 );
    Color = ParamColor(“Color”, colorBlue );
    Style = ParamStyle(“Style”, styleLine | styleNoLabel);

    CenterLine = MA( P, Periods );
    KTop = CenterLine + Width * ATR( Periods );
    KBot = CenterLine – Width * ATR( Periods );

    Plot( KTop, “KBTop” + _PARAM_VALUES(), Color, Style );
    Plot( KBot, “KBBot” + _PARAM_VALUES(), Color, Style );
    _SECTION_END();

  13. hi sir i am new to this post and would like to know more about supertrend and how it works

    thanks in advance

  14. Hi Rajandran,
    Thanx for all the knowlege u impart. Would like to know the basic concept of supertrend please

Leave a Reply

Get Notifications, Alerts on Market Updates, Trading Tools, Automation & More