NSDT HAMA Candles + SSL Channel

sam4cok

Member
tried to copy the strategy as seen on YouTube. You may paper trade it or you can use HAMA candles as indicator.


Code:
#study("NSDT HAMA Candles", overlay=true)

#//The follow gradient code is taken from the Pinecoders Gradient Framework example.

#//https://www.tradingview.com/script/hqH4YIFa-Color-Gradient-Framework-PineCoders/

#https://www.tradingview.com/script/k7nrF2oI-NSDT-HAMA-Candles/

#Converted by Sam4Cok @ 07/2022

# included SSL Channel https://www.tradingview.com/script/6y9SkpnV-SSL-Channel/

# Youtube strategy [MEDIA=youtube]YJrELewfIrU[/MEDIA]



#//INPUTS



input TrendSource = close;

input TrendLength  = 55;

input TrendType = {default WMA, SMA, EMA, HMA};

input show_ma    = yes;

input ColorBar   = no;



def na = Double.NaN;

########## Colors ########

DefineGlobalColor("Bull"        , CreateColor(38,166,154));

DefineGlobalColor("WeakBull"    , CreateColor(204,204,0));   

DefineGlobalColor("Bear"        , CreateColor(239,83,80));

DefineGlobalColor("WeakBear"    , CreateColor(255,128,0));   

DefineGlobalColor("Neutral"     , CreateColor(255,255,0));



DefineGlobalColor("BullBar"     , CreateColor(0,255,0));

DefineGlobalColor("WeakBullBar" , CreateColor(0,128,0));

DefineGlobalColor("BearBar"     , CreateColor(255,0,0));

DefineGlobalColor("WeakBearBar" , CreateColor(128,0,0));

DefineGlobalColor("NeutralBar"  , CreateColor(255,255,0));



#////////////////////////////////////////////////////////////////////////////////

#mat(source, length, type) =>

script mat {

    input source = close;

    input length = 0;

    input type   = "WMA";

    def mat;

    mat =

    if type == "SMA" then SimpleMovingAvg(source, length) else

    if type == "EMA" then ExpAverage(source, length) else

    if type == "WMA" then WMA(source, length) else

    if type == "HMA" then WMA(2 * WMA(source, length / 2) - WMA(source, length), Round(Sqrt(length)))

       else Double.nan;

    plot result = mat;

}



def ma = mat(TrendSource, TrendLength, TrendType);



#//GRADIENT AREA

def center  = ExpAverage(ma, 3);

def xUp     = ma Crosses Above center;

def xDn     = ma Crosses Below center;

def chg     = ma - ma[1];

def up      = chg > 0;

def dn      = chg < 0;

def srcBull = ma > center;

def srcBear = ma < center;



#### TREND####

def StrongUP = srcBull and up;

def WeakUp   = srcBull and dn;

def StrongDN = srcBear and dn;

def WeakDN   = srcBear and up;

def Neutral  = xUp or xDn or !StrongUP and !StrongDN and !WeakUp and !WeakDN;



#//MA INFO

input MALength    = 100;                      #"MA Line Length"

input MAType      = {default EMA, SMA, WMA}; #"MA Info"

input MASource    = close; #"MA Source")

input OpenLength  = 25;                      #"Length Open"

input OpenType    = {default EMA, SMA, WMA}; #"Type Open"

input HighLength  = 20;                      #"Length High"

input HighType    = {default EMA, SMA, WMA}; #"Type High"

input LowLength   = 20;                      #"Low"

input LowType     = {default EMA, SMA, WMA}; #"Type Low"

input CloseLength = 20;                     #"Length Close"

input CloseType   = {default EMA, SMA, WMA}; #"Close"



def SourceOpen = (open[1] + close[1]) / 2;

def LengthOpen = OpenLength;



#def TypeHigh   = HighType;

def SourceHigh = Max(high, close);

def LengthHigh = HighLength;



#def TypeLow   = LowType;

def SourceLow = Min(low, close);

def LengthLow = LowLength;



#def TypeClose   = CloseType;

def SourceClose = (open + high + low + close) / 4;

def LengthClose = CloseLength;



#funcCalcMA1(type1, src1, len1) =>

script funcCalcMA1 {

    input type1 = "WMA";

    input src1  = close;

    input len1  = 0;

    def funcCalcMA1;

    funcCalcMA1 = if type1 == "SMA" then SimpleMovingAvg(src1, len1) else

                  if type1 == "EMA" then ExpAverage(src1, len1) else WMA(src1, len1);

    plot result = funcCalcMA1;

}

#funcCalcOpen(TypeOpen, SourceOpen, LengthOpen) =>

script funcCalcOpen {

    input TypeOpen   = "WMA";

    input SourceOpen = close;

    input LengthOpen = 0;

    def funcCalcOpen;

    funcCalcOpen = if TypeOpen == "SMA" then SimpleMovingAvg(SourceOpen, LengthOpen) else

                   if TypeOpen == "EMA" then ExpAverage(SourceOpen, LengthOpen) else WMA(SourceOpen, LengthOpen);

    plot result = funcCalcOpen;

}

#funcCalcHigh(TypeHigh, SourceHigh, LengthHigh) =>

script funcCalcHigh {

    input TypeHigh   = "WMA";

    input SourceHigh = close;

    input LengthHigh = 0;

    def funcCalcHigh;

    funcCalcHigh = if TypeHigh == "SMA" then SimpleMovingAvg(SourceHigh, LengthHigh) else

                   if TypeHigh == "EMA" then ExpAverage(SourceHigh, LengthHigh) else WMA(SourceHigh, LengthHigh);

    plot result = funcCalcHigh;

}

#funcCalcLow(TypeLow, SourceLow, LengthLow) =>

script funcCalcLow {

    input TypeLow   = "WMA";

    input SourceLow = close;

    input LengthLow = 0;

    def funcCalcLow;

    funcCalcLow = if TypeLow == "SMA" then SimpleMovingAvg(SourceLow, LengthLow) else

                  if TypeLow == "EMA" then ExpAverage(SourceLow, LengthLow) else WMA(SourceLow, LengthLow);

    plot result = funcCalcLow;

}

#funcCalcClose(TypeClose, SourceClose, LengthClose) =>

script funcCalcClose {

    input TypeClose   = "WMA";

    input SourceClose = close;

    input LengthClose = 0;

    def funcCalcClose;

    funcCalcClose = if TypeClose == "SMA" then SimpleMovingAvg(SourceClose, LengthClose) else

                    if TypeClose == "EMA" then ExpAverage(SourceClose, LengthClose) else WMA(SourceClose, LengthClose);

    plot result = funcCalcClose;

}



# Plot the new Chart

def CandleOpen  = funcCalcOpen(OpenType, SourceOpen, LengthOpen);

def CandleHigh  = funcCalcHigh(HighType, SourceHigh, LengthHigh);

def CandleLow   = funcCalcLow(LowType, SourceLow, LengthLow);

def CandleClose = funcCalcClose(CloseType, SourceClose, LengthClose);



##### Price Color

AssignPriceColor(if ColorBar then

                  if Neutral then GlobalColor("NeutralBar")     else

                  if StrongUp   then GlobalColor("BullBar") else

                  if StrongDn then GlobalColor("BearBar")     else

                  if WeakUp   then GlobalColor("WeakBullBar") else GlobalColor("WeakBearBar") else color.current);



#AssignPriceColor(if ColorBar then

#                  if StrongUp then GlobalColor("BullBar")     else

#                  if WeakUp   then GlobalColor("WeakBullBar") else

#                  if StrongDn then GlobalColor("BearBar")     else

#                  if WeakDN   then GlobalColor("WeakBearBar") else GlobalColor("NeutralBar") else color.current);





plot MAmain = if show_ma then funcCalcMA1(MAType, MASource, MALength) else na;

MAmain.AssignValueColor( if StrongUp then GlobalColor("Bull")     else

                  if WeakUp   then GlobalColor("WeakBull") else

                  if StrongDn then GlobalColor("Bear") else

                  if WeakDN   then GlobalColor("WeakBear") else GlobalColor("Neutral"));

MAmain.SetLineWeight(1);



# Plot UP candle with isBull only

def UpO1;

def UpH1;

def UpL1;

def UpC1;



if StrongUP

then {

    UPO1 = if CandleOpen < CandleClose then CandleClose else CandleOpen; ;

    UpH1 = if CandleHigh > CandleClose then CandleClose else CandleHigh;

    UpL1 = if CandleLow  < CandleOpen then CandleOpen else CandleLow;

    UpC1 = if CandleOpen < CandleClose then CandleOpen else CandleClose;

} else

{

    UpO1 = na;

    UpH1 = na;

    UpL1 = na;

    UpC1 = na;

}

# Plot UP candle with isBull and isExp

def UpO;

def UpH;

def UpL;

def UpC;

if WeakUp

then {

    UPO = if CandleOpen < CandleClose then CandleClose else CandleOpen; ;

    UpH = if CandleHigh > CandleClose then CandleClose else CandleHigh;

    UpL = if CandleLow  < CandleOpen  then CandleOpen else CandleLow;

    UpC = if CandleOpen < CandleClose then CandleOpen else CandleClose;

} else

{

    UpO = na;

    UpH = na;

    UpL = na;

    UpC = na;

}

# Plot DOWN candle

def DnO;

def DnH;

def DnL;

def DnC;

if WeakDN

then {

    DnO = if CandleOpen < CandleClose then CandleClose else CandleOpen; ;

    DnH = if CandleHigh > CandleOpen then CandleOpen else CandleHigh;

    DnL = if CandleLow  < CandleClose then CandleClose else CandleLow;

    Dnc = if CandleOpen < CandleClose then CandleOpen else CandleClose;

} else

{

    DnO = na;

    DnH = na;

    DnL = na;

    DnC = na;

}

### Weak DNC ###

# Plot DOWN candle

def DnO1;

def DnH1;

def DnL1;

def DnC1;

if StrongDN

then {

    DnO1 = if CandleOpen < CandleClose then CandleClose else CandleOpen; ;

    DnH1 = if CandleHigh > CandleOpen then CandleOpen else CandleHigh;

    DnL1 = if CandleLow  < CandleClose then CandleClose else CandleLow;

    DnC1 = if CandleOpen < CandleClose then CandleOpen else CandleClose;

} else

{

    DnO1 = na;

    DnH1 = na;

    DnL1 = na;

    DnC1 = na;

}

### Neutral

def NuO;

def NuH;

def NuL;

def NuC;

if Neutral

then {

    NuO = if CandleOpen < CandleClose then CandleClose else CandleOpen;

    NuH = if CandleHigh > CandleOpen then CandleOpen else CandleHigh;

    NuL = if CandleLow  < CandleClose then CandleClose else CandleLow;;

    NuC = if CandleOpen < CandleClose then CandleOpen else CandleClose;

} else

{

    NuO = na;

    NuH = na;

    NuL = na;

    NuC = na;

}



# Plot the new Chart



AddChart(high = UpH1, low = UpL1, open = UpO1, close = UpC1,

         type = ChartType.CANDLE, growcolor =  GlobalColor("Bull"));

AddChart(high = UpH , low = UpL , open = UpC,  close = UpO,

         type = ChartType.CANDLE, growcolor =  GlobalColor("WeakBull"));



AddChart(high = DnH1, low = DnL1, open = DnO1, close = DnC1,

         type = ChartType.CANDLE, growcolor =  GlobalColor("Bear"));

AddChart(high = DnH , low = DnL , open = DnO,  close = DnC,

         type = ChartType.CANDLE, growcolor =  GlobalColor("WeakBear"));



AddChart(high = NuH , low = NuL , open = NuO,  close = NuC,

         type = ChartType.CANDLE, growcolor =  GlobalColor("Neutral"));

########

#indicator("SSL Channel", shorttitle="SSL Channel", overlay=true, timeframe="", timeframe_gaps=false)



input ShowSSL = yes; #(true, "Highlight State ?")

input SSLWicks = no;#(false, "Take Wicks into Account ?")

input showArrow  = yes;



input SSL1Type    = {WMA, default SMA, EMA, HMA};

input SSL1Source = high;

input ma1_length = 200; #"MA #1", minval=1, group="Channel №1")



input SSL2Type   = {WMA,default SMA, EMA, HMA};

input SSL2Source = low; #"MA #2", group="Channel №1")

input ma2_length = 200; #"MA #2", minval=1, group="Channel №1")



def ma1 = mat(SSL1Source, ma1_length, SSL1Type);

def ma2 = mat(SSL2Source, ma2_length, SSL2Type);



def Hlv1 = if (if SSLWicks then high else close) >  ma1 then 1 else

           if (if SSLWicks then low  else close) <  ma2 then -1 else Hlv1[1];

def Hlv = Hlv1;



def sslUp   = if Hlv < 0 then ma2 else ma1;

def sslDown = if Hlv < 0 then ma1 else ma2;



plot highLine = if ShowSSL then sslUp else na; #, title="UP", linewidth=2, color = Color1)

plot lowLine  = if ShowSSL then sslDown else na; #, title="DOWN", linewidth=2, color = Color1)



highLine.AssignValueColor(if Hlv > 0 then Color.GREEN else color.RED);

lowLine.AssignValueColor(if Hlv > 0 then Color.GREEN else color.RED);



addcloud (highLine, lowLine, color.dark_green, Color.dark_RED, no);



### Signal###



def SignalUp = Hlv > 0 and Hlv[1] < 0 and close > MAmain and close > UpH1;

def SignalDN = Hlv < 0 and Hlv[1] > 0 and close < MAmain and close < DnL1;



Plot Arrow_Up = if showArrow and SignalUp then low  else na;

plot Arrow_Dn = if showArrow and SignalDn then high else na;



ARROW_UP.SetPaintingStrategy(PaintingStrategy.ARROW_UP);

ARROW_UP.SetDefaultColor(Color.WHITE);

ARROW_UP.SetLineWeight(3);



ARROW_Dn.SetPaintingStrategy(PaintingStrategy.ARROW_DoWN);

ARROW_Dn.SetDefaultColor(Color.Yellow);

ARROW_Dn.SetLineWeight(3);



### ENd ####
 
Last edited by a moderator:

sam4cok

Member
Top