#// by kyle algo v1
#// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
#indicator("kyle algo v1", overlay=true, precision=0, explicit_plot_zorder=true, max_labels_count=500)
# Converted by Sam4Cok@Samer800 - 12/2023
#// Get user input
input colorBars = no;
input matype = {"SMA", default "EMA", "DEMA", "TEMA", "HMA", "RMA", "WMA", "VWMA", "LSMA"};
input steps = 3;
input sensitivity = 2.8;#, "??Sensitivity (0.5 - 10)", 0.5, 10, step=0.1)
input emaEnergy = yes;#(true, "EMA Energy")
input keltner_length = 10;#, "Keltner Channel Length")
input atrPeriod = 10;#, "ATR Length")
input factor = 3.5;#, "Factor", step = 0.01)
input KaufmanFast = 0.666;#, "Kaufman Fast", group = "MA Settings")
input KaufmanSlow = 0.0645;#, "Kaufman Slow", group = "MA Settings")
input almaOffset = 0.85;#, "ALMA Offset", group = "MA Settings")
input almaSigma = 6;#, "ALMA Sigma", group = "MA Settings")
def na = Double.NaN;
def kamaf = KaufmanFast;
def kamas = KaufmanSlow;
def Offset = almaOffset;
def sigma = almaSigma;
DefineGlobalColor("up", CreateColor(25, 118, 248));
DefineGlobalColor("dn", CreateColor(116, 13, 111));
DefineGlobalColor("green", CreateColor(102, 255, 0));
DefineGlobalColor("red", Color.RED);
#// Modified Supertrend function using Keltner Channel
script supertrend {
input _src = close;
input factor = 3.5;
input atrLen = 10;
input kel_length = 10;
def lowerBand;
def upperBand;
def ma = Average(_src, kel_length);
def rangeK = high - low;
def upperKeltner = ma + rangeK;
def lowerKeltner = ma - rangeK;
def rangec = upperKeltner - lowerKeltner;
def upper = _src + factor * rangec;
def lower = _src - factor * rangec;
def prevLowerBand = if lowerBand[1] then lowerBand[1] else lower;
def prevUpperBand = if upperBand[1] then upperBand[1] else upper;
lowerBand = if lower > prevLowerBand or close[1] < prevLowerBand then lower else prevLowerBand;
upperBand = if upper < prevUpperBand or close[1] > prevUpperBand then upper else prevUpperBand;
def direction;
def superTrend;# = na
def prevSuperTrend = superTrend[1];
if !rangec[1] {
direction = 1;
} else if prevSuperTrend == prevUpperBand {
direction = if close > upperBand then -1 else 1;
} else {
direction = if close < lowerBand then 1 else -1;
}
superTrend = if direction == -1 then lowerBand else upperBand;
plot ST = superTrend;
plot trend = direction;
}
#vwma(source, length)
script VWMA {
input src = close;
input len = 14;
input vol = volume;
def nom = Average(src * vol, len);
def den = Average(vol, len);
def VWMA = nom / den;
plot result = VWMA;
}
#f_ma(src, len, type, kamaf, kamas, offset, sigma) =>
script f_ma {
input src = close;
input len = 14;
input type = "EMA";
input kamaf = 0.666;
input kamas = 0.0645;
input offset = 0.85;
input sigma = 6;
def x =
if type == "SMA" then Average(src, len) else
if type == "EMA" then ExpAverage(src, len) else
if type == "HMA" then HullMovingAvg(src, len) else
if type == "RMA" then WildersAverage(src, len) else
if type == "WMA" then WMA(src, len) else
if type == "VWMA" then vwma(src, len) else
if type == "DEMA" then DEMA(src, len) else
if type == "TEMA" then TEMA(src, len) else
if type == "LSMA" then Inertia(src, len) else ExpAverage(src, len);
def f_ma = x;
plot out = f_ma;
}
#// Get Components
def len1 = steps * (steps + 0);
def len2 = steps * (steps + 1);
def len3 = steps * (steps + 2);
def len4 = steps * (steps + 3);
def len5 = steps * (steps + 4);
def len6 = steps * (steps + 5);
def len7 = steps * (steps + 6);
def len8 = steps * (steps + 7);
def len9 = steps * (steps + 8);
def len10 = steps * (steps + 9);
def len11 = steps * (steps + 10);
def len12 = steps * (steps + 11);
def len13 = steps * (steps + 12);
def len14 = steps * (steps + 13);
def len15 = steps * (steps + 14);
def movAvgSrc = high;
def ema1 = f_ma(movAvgSrc, len1, matype, kamaf, kamas, offset, sigma);
def ema2 = f_ma(movAvgSrc, len2, matype, kamaf, kamas, offset, sigma);
def ema3 = f_ma(movAvgSrc, len3, matype, kamaf, kamas, offset, sigma);
def ema4 = f_ma(movAvgSrc, len4, matype, kamaf, kamas, offset, sigma);
def ema5 = f_ma(movAvgSrc, len5, matype, kamaf, kamas, offset, sigma);
def ema6 = f_ma(movAvgSrc, len6, matype, kamaf, kamas, offset, sigma);
def ema7 = f_ma(movAvgSrc, len7, matype, kamaf, kamas, offset, sigma);
def ema8 = f_ma(movAvgSrc, len8, matype, kamaf, kamas, offset, sigma);
def ema9 = f_ma(movAvgSrc, len9, matype, kamaf, kamas, offset, sigma);
def ema10 = f_ma(movAvgSrc, len10, matype, kamaf, kamas, offset, sigma);
def ema11 = f_ma(movAvgSrc, len11, matype, kamaf, kamas, offset, sigma);
def ema12 = f_ma(movAvgSrc, len12, matype, kamaf, kamas, offset, sigma);
def ema13 = f_ma(movAvgSrc, len13, matype, kamaf, kamas, offset, sigma);
def ema14 = f_ma(movAvgSrc, len14, matype, kamaf, kamas, offset, sigma);
def ema15 = f_ma(movAvgSrc, len15, matype, kamaf, kamas, offset, sigma);
#// Plots
plot mov1 = if emaEnergy then ema1 else na;
plot mov2 = if emaEnergy then ema2 else na;
plot mov3 = if emaEnergy then ema3 else na;
plot mov4 = if emaEnergy then ema4 else na;
plot mov5 = if emaEnergy then ema5 else na;
plot mov6 = if emaEnergy then ema6 else na;
plot mov7 = if emaEnergy then ema7 else na;
plot mov8 = if emaEnergy then ema8 else na;
plot mov9 = if emaEnergy then ema9 else na;
plot mov10 = if emaEnergy then ema10 else na;
plot mov11 = if emaEnergy then ema11 else na;
plot mov12 = if emaEnergy then ema12 else na;
plot mov13 = if emaEnergy then ema13 else na;
plot mov14 = if emaEnergy then ema14 else na;
plot mov15 = if emaEnergy then ema15 else na;
mov1.AssignValueColor(if close >= ema1 then GlobalColor("up") else GlobalColor("dn"));
mov2.AssignValueColor(if close >= ema2 then GlobalColor("up") else GlobalColor("dn"));
mov3.AssignValueColor(if close >= ema3 then GlobalColor("up") else GlobalColor("dn"));
mov4.AssignValueColor(if close >= ema4 then GlobalColor("up") else GlobalColor("dn"));
mov5.AssignValueColor(if close >= ema5 then GlobalColor("up") else GlobalColor("dn"));
mov6.AssignValueColor(if close >= ema6 then GlobalColor("up") else GlobalColor("dn"));
mov7.AssignValueColor(if close >= ema7 then GlobalColor("up") else GlobalColor("dn"));
mov8.AssignValueColor(if close >= ema8 then GlobalColor("up") else GlobalColor("dn"));
mov9.AssignValueColor(if close >= ema9 then GlobalColor("up") else GlobalColor("dn"));
mov10.AssignValueColor(if close >= ema10 then GlobalColor("up") else GlobalColor("dn"));
mov11.AssignValueColor(if close >= ema11 then GlobalColor("up") else GlobalColor("dn"));
mov12.AssignValueColor(if close >= ema12 then GlobalColor("up") else GlobalColor("dn"));
mov13.AssignValueColor(if close >= ema13 then GlobalColor("up") else GlobalColor("dn"));
mov14.AssignValueColor(if close >= ema14 then GlobalColor("up") else GlobalColor("dn"));
mov15.AssignValueColor(if close >= ema15 then GlobalColor("up") else GlobalColor("dn"));
def supertrend = supertrend(close, sensitivity, atrPeriod, keltner_length).st;
def trend = supertrend(close, sensitivity, atrPeriod, keltner_length).trend;
def bull = (close crosses above supertrend);
def bear = (close crosses below supertrend);
plot stUp = if trend > 0 then supertrend else na;
plot stDn = if trend < 0 then supertrend else na;
stUp.SetDefaultColor(GlobalColor("red"));
stDn.SetDefaultColor(GlobalColor("green"));
AddChartBubble(bull, supertrend, "BUY", Color.GREEN, no);
AddChartBubble(bear, supertrend, "SELL", Color.RED);
def supertrends = supertrend(hl2, factor, atrPeriod, atrPeriod);
#// Trend Catcher Indicator (Example)
def ema100 = f_ma(close, 20, matype, kamaf, kamas, offset, sigma);#ta.ema(close, 10)
def ema200 = f_ma(close, 50, matype, kamaf, kamas, offset, sigma);#ta.ema(close, 20)
def mov12Up = (ema100 Crosses Above ema200);
def mov12Dn = (ema100 Crosses Below ema200);
def trendCatcher = if mov12Up then 1 else if mov12Dn then -1 else 0;
plot trendStartUp = if trendCatcher>0 then low else na;
plot trendStartDn = if trendCatcher<0 then high else na;
trendStartUp.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_DOWN);
trendStartDn.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_UP);
trendStartUp.SetDefaultColor(Color.CYAN);
trendStartDn.SetDefaultColor(Color.MAGENTA);
AssignPriceColor(if !colorBars then Color.CURRENT else
if close > supertrends then GlobalColor("green") else
if close < supertrends then GlobalColor("red") else Color.GRAY);
#-- END of CODE