Hej!
Har slängt ihop lite kod, kan garanterat göras mer effektiv men den fungerar
Jämförde linjerna på AFRY i Tradingview, period dag och 1 år och är till 97% lika, såg par små avvikelse, men vill inte lägga för mycket tid för att fixa dessa.
/*******************************************
Squeeze Momentum Indicator [LazyBear Version2]
Globala variabler:
mom_series: dataseries
signal_series: dataseries
5 plot:
*******************************************/
local bb_length = 20;
local bb_mult = 2.0;
local kc_length = 20;
local kc_mult = 1.5;
local useTrueRange = true; // true = ATR_TR för KC (bästa approx i HK)
local signal_period = 5;
local linreg_length = 20; // Standard för momentum i LazyBear
// BB: basis = MA1(20), dev = stdDev(20) * mult
local basis = MA1(bb_length)[0];
local bb_dev = Close.stdDev(bb_length) * bb_mult; // Här använder vi .stdDev()!
local upperBB = basis + bb_dev;
local lowerBB = basis - bb_dev;
// KC: ma = MA1(20), range_ma = ATR_TR(20) eller MA på range
local ma_kc = MA1(kc_length)[0];
local range_ma;
if (useTrueRange) {
range_ma = ATR_TR(kc_length)[0];
} else {
// Om ej TR: approx med (High-Low).MA eller liknande, men ATR_TR är standard för squeeze
range_ma = ATR_TR(kc_length)[0];
}
local upperKC = ma_kc + kc_mult * range_ma;
local lowerKC = ma_kc - kc_mult * range_ma;
// Squeeze: BB innanför KC
local squeezeOn = (lowerBB >= lowerKC) && (upperBB <= upperKC);
// Momentum: linreg-approximation på deviation (Close - MA)
local sum_x = 0.00;
local sum_y = 0.00;
local sum_xy = 0.00;
local sum_xx = 0.00;
local ma_linreg = MA1(linreg_length)[0];
for(local i = 0; i < linreg_length; i++) {
local x = i;
local y = Close[-i] - ma_linreg; // deviation
sum_x += x;
sum_y += y;
sum_xy += x * y;
sum_xx += x * x;
}
local denominator = (linreg_length * sum_xx - sum_x * sum_x);
local slope = iff(denominator != 0, (linreg_length * sum_xy - sum_x * sum_y) / denominator, 0);
local intercept = (sum_y - slope * sum_x) / linreg_length;
local mom_raw = intercept + slope * (linreg_length - 1);
// Inversion för korrekt visuell riktning (bull uppåt/positiv, bear nedåt/negativ)
mom_series[0] = -mom_raw; // Ta bort "-" om det inverterat fel
// Signal: EMA(5) på mom (vanligt i Version2)
signal_series[0] = mom_series.ema(signal_period);
// Crossovers
local buy_cross = (mom_series[-1] <= signal_series[-1]) && (mom_series[0] > signal_series[0]);
local sell_cross = (mom_series[-1] >= signal_series[-1]) && (mom_series[0] < signal_series[0]);
// Plotting
plot1[0] = mom_series[0]; // Momentum-linje (blå i original)
plot2[0] = signal_series[0]; // Signal-linje (röd)
plot3[0] = 0; // Zero-linje
if (buy_cross) {
plot4[0] = 3; // Köpsignal (t.ex. grön markör)
} else {
plot4[0] = 0;
}
if (sell_cross) {
plot5[0] = -3; // Säljsignal (t.ex. röd markör)
} else {
plot5[0] = 0;
}