Here is version of picture of post #2
// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
// developer: @KivancOzbilgic
// author: @KivancOzbilgic
// https://in.tradingview.com/script/sU9molfV/
// AFL conversion by fxshrat@gmail.com
// https://forum.amibroker.com/t/pmax-indicator-in-amibroker/30028/12
function getMA(src, length) {
global mav, VAR, WWMA, ZLEMA;
result = 0;
if (mav == "SMA") result = MA(src, length);
if (mav == "EMA") result = EMA(src, length);
if (mav == "WMA") result = WMA(src, length);
if (mav == "TMA") result = MA(MA(src, ceil(length / 2)), floor(length / 2) + 1);
if (mav == "VAR") result = VAR;
if (mav == "WWMA") result = WWMA;
if (mav == "ZLEMA") result = ZLEMA;
if (mav == "TSF") result = TSF(src,length);
return result;
}
src = (H+L)/2;
Periods = Param("ATR Length", 10);
Multiplier = Param("ATR Multiplier", 3, 1, 5, 0.1);
mav = ParamList("MovingAverageType","EMA,SMA,EMA,WMA,TMA,VAR,WWMA,ZLEMA", 4);
length = Param("Moving Average Length", 10, 1, 100, 1);
changeATR = ParamToggle("Change ATR Calculation Method ?", "ON|OFF", true);
Normalize = ParamToggle("Normalize ATR ?", "ON|OFF",false);
showsupport = ParamToggle("Show Moving Average?", "ON|OFF",true);
showsignalsk = ParamToggle("Show Crossing Signals?", "ON|OFF",true);
showsignalsc = ParamToggle("Show Price/Pmax Crossing Signals?", "ON|OFF",false);
highlighting = ParamToggle("Highlighter On/Off ?", "ON|OFF",true);
tr = ATR(1);
my_atr = IIf(changeATR, ATR(Periods), MA(tr, Periods));
vud1 = Max(0,src-Ref(src,-1));
vdd1 = Max(0,Ref(src,-1)-src);
vUD = Sum(vud1,9);
vDD = Sum(vdd1,9);
vCMO = Nz((vUD-vDD)/(vUD+vDD));
valpha = 2/(length+1);
VAR = AMA(src,valpha*Abs(vCMO));
wwalpha = 1/ length;
WWMA = AMA(src, wwalpha);
zxLag = IIf(length/2==round(length/2), length/2, (length - 1) / 2);
zxEMAData = 2*src - Ref(src,-zxLag);
ZLEMA = EMA(zxEMAData, length);
MAvg = getMA( src, length );
div = IIf(Normalize, C, 1);
longStop = MAvg - Multiplier*my_atr/div;
shortStop = MAvg + Multiplier*my_atr/div;
dir = dir_arr = 1;
longStop_arr = longStop;
shortStop_arr = shortStop;
for( i = 1; i < BarCount; i++ ) {
longStopPrev = longStop_arr[i-1];
longStop_arr[i] = IIf(MAvg[i] > longStopPrev, Max(longStop_arr[i], longStopPrev), longStop_arr[i]);
shortStopPrev = shortStop_arr[i-1];
shortStop_arr[i] = IIf(MAvg[i] < shortStopPrev, Min(shortStop_arr[i], shortStopPrev), shortStop_arr[i]);
dir = IIf(dir == -1 AND MAvg[i] > shortStopPrev, 1, IIf(dir == 1 and MAvg[i] < longStopPrev, -1, dir));
dir_arr[i] = dir;
}
PMax = IIf(dir_arr == 1, longStop_arr, shortStop_arr);
Plot( C, "Price", colorDefault, styleCandle );
Plot(IIf(showsupport, MAvg, Null), "Moving Avg Line", ColorRGB(5,133,225), styleLine, Null, Null, 0, 0, 2);
Plot(PMax, "PMax", colorred, styleLine, Null, Null, 0, 0, 2);
if ( showsignalsk ) {
buySignalk = Cross(MAvg, PMax);
sellSignallk = Cross(PMax, MAvg);
PlotShapes(buySignalk*shapeUpArrow, colorGreen, 0, PMax*0.995 );
PlotShapes(sellSignallk *shapedownArrow, colorRed, 0, PMax*1.005 );
}
if ( showsignalsc ) {
buySignalc = Cross(src, PMax);
sellSignallc = Cross(PMax, src);
PlotShapes(buySignalc*shapeUpArrow, colorBlue, 0, PMax*0.995);
PlotShapes(sellSignallc *shapedownArrow, colorBlue, 0, PMax*1.005);
}