Kalman Filter

ebtrader

New member
Anyone try coding the Kalman Filter? EasyLanguage version is out there but I have yet to see someone able to convert it to ThinkScript.
 
Solution
@bp805
Code:
input src = hl2;
input length = 24;
input showcross = yes;
input gain = 10000;
input k = yes;

script hma {
    input _src = 0;
    input _length = 0;
    def avgType = AverageType.WEIGHTED;

    plot return = MovingAverage(avgType, (2 * MovingAverage(avgType, _src, _length /
                  2)) - MovingAverage(avgType, _src, _length), Round(Sqrt(_length)));
}

script hma3 {
    input _length = 0;
    def p = _length / 2;
    def avgType = AverageType.WEIGHTED;

    plot return = MovingAverage(avgType, 3 * MovingAverage(avgType, close, p / 3) -
                  MovingAverage(avgType, close, p / 2) - MovingAverage(avgType,
                  close, p), p);
}

script kahlman {
    input x = 0;
    input g = 0;
    def...

tomsk

Well-known member
VIP
Here's a Kalman that I have from a while back

input n = 21;

plot Kalman = WMA(((WMA(close, 3) * 3) + (WMA(close[1], 2) * 2) + close[2] + Average(close, n)) / 7, n);
 

codydog

Active member
# Simple Kalman Filter Compared to different Averages
# Mobius
# 2.22.2016

input n = 8;
input Kalman = yes;
input SMA = yes;
input EMA = yes;
input Weighted_MA = yes;

plot Data = WMA(((close * 3) + (close[1] * 2) + close[2] + Average(close, n)) / 7, n);
Data.SetDefaultColor(Color.Cyan);
Data.SetHiding(!Kalman);
AddLabel(1, "Kalman Filter", Color.Cyan);

plot avg = Average(close, n);
avg.SetDefaultColor(Color.Yellow);
avg.SetHiding(!SMA);
AddLabel(1, "SMA", Color.Yellow);

plot ExAvg = ExpAverage(close, n);
ExAvg.SetDefaultColor(Color.Red);
ExAvg.SetHiding(!EMA);
AddLabel(1, "EMA", Color.Red);

plot WtAvg = WMA(close, n);
WtAvg.SetDefaultColor(Color.Green);
WtAvg.SetHiding(!Weighted_MA);
AddLabel(1, "Weighted MA", Color.Green);
 

codydog

Active member
Don't know why, but I have Kolmogorov-Feller linked to Kalman - curious cross-overs

declare lower;
input n = 20;
def s = fold i = 1 to n with d = 0 do d+log(i);
def f = fold j = 1 to n with m = 0 do m+log(getvalue(close,j,n))*log(j);
def k = fold g = 1 to n with c = 0 do c+power(log(g),2);
def alpha = ((Sum(log(Close),n)*s) - (n*f))/((s*s)-n*k);
def a = exp(((Sum(Close,n)-alpha*s)/n)/1000);
plot al = a;

al.assignvaluecolor(if al > al[1] then color.blue else if al < al[1] then color.red else color.white);
plot trig = al[1];

#Blackledge "FINANCIAL FORECASTING USING THE
#KOLMOGOROV-FELLER EQUATION"
#growex

plot Data = WMA(((a * 3) + (a[1] * 2) + a[2] + Average(a, n)) / 7, n);
Data.SetDefaultColor(Color.Cyan);
 

tradebook

Member
Hi all, trying to create a cross and having challenges.

original code:

input n = 21;

plot Kalman = WMA(((WMA(close, 3) * 3) + (WMA(close[1], 2) * 2) + close[2] + Average(close, n)) / 7, n);

Trying to do a cross above from kalman to SMA with an arrow alert and sound when it crosses. Below is how far i got and keeps giving me error. Can someone help :)

Kalman(100) crosses above SimpleMovingAvg("length" = 200)."SMA"


thank you
 

MerryDay

Administrative
Staff member
Staff
VIP
@tradebook Could you explain how you are using this indicator?
Kalman SMA200 Cross with Arrows, Label, and Alerts
Shared Link: http://tos.mx/r92Iueu
Click here for --> Easiest way to load shared links
Ruby:
# ########################################################
# Kalman SMA200 cross
# by @tradebook 7/2021

input n = 21;
input showLabel = yes ;
DefineGlobalColor("LitePink", CreateColor (225, 220, 180)) ;

plot Kalman = WMA(((WMA(close, 3) * 3) + (WMA(close[1], 2) * 2) + close[2] + Average(close, n)) / 7, n);
plot avg200 = MovingAverage(AverageType.SIMPLE, close, 200);
AddCloud(Kalman, avg200, Color.green, GlobalColor("LitePink"));

plot UpArrow = if  Kalman crosses above avg200  then low else double.NaN ;
UpArrow.SetPaintingStrategy(PaintingStrategy.ARROW_up);
UpArrow.SetDefaultColor(color.blue) ;

plot DownArrow = if  Kalman crosses below avg200 then high else double.NaN ;
DownArrow.SetPaintingStrategy(PaintingStrategy.ARROW_down);
DownArrow.SetDefaultColor(color.magenta) ;

AddLabel(showLabel,
      if Kalman crosses above avg200 then "Buy"  else
      if Kalman crosses below avg200 then "Sell" else "Kalman: " +round(Kalman,1),
      if Kalman crosses above avg200 then color.green else
      if Kalman crosses below avg200 then color.red   else color.gray);

Alert(Kalman crosses above avg200, "Buy" , Alert.Bar, Sound.Bell);
Alert(Kalman crosses below avg200, "Sell" , Alert.Bar, Sound.Bell);
znJXGoh.png
 

bp805

New member
I have been playing with the below indicator in Trading View and looks interesting, but I primarily use TOS. I know some skilled folks have converted indicators from Trading View to Thinkscript before. Is anyone able to give this a shot at converting? Its way over my head. Thanks for any help that can be provided.

https://www.tradingview.com/script/0p99baTO-hull-trend-with-kahlman/

UoyxGCu.jpg


Code:
//@version=4
study("Hull Trend with Kahlman", shorttitle="HMA-Kahlman Trend", overlay=true)

src       = input(hl2,   "Price Data")
length    = input(24,    "Lookback")
showcross = input(true,  "Show cross over/under")
gain      = input(10000, "Gain")
k         = input(true,  "Use Kahlman")

hma(_src, _length) =>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
   
hma3(_src, _length) =>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

kahlman(x, g) =>
    kf = 0.0
    dk = x - nz(kf[1], x)
    smooth = nz(kf[1],x)+dk*sqrt((g/10000)*2)
    velo = 0.0
    velo := nz(velo[1],0) + ((g/10000)*dk)
    kf := smooth+velo
 
a = k ? kahlman(hma(src, length), gain) : hma(src, length)
b = k ? kahlman(hma3(src, length), gain) : hma3(src, length)
c = b > a ? color.lime : color.red
crossdn = a > b and a[1] < b[1]
crossup = b > a and b[1] < a[1]

p1 = plot(a,color=c,linewidth=1,transp=75)
p2 = plot(b,color=c,linewidth=1,transp=75)
fill(p1,p2,color=c,transp=55)
plotshape(showcross and crossdn ? a : na, location=location.absolute, style=shape.labeldown, color=color.red, size=size.tiny, text="S", textcolor=color.white, transp=0, offset=-1)
plotshape(showcross and crossup ? a : na, location=location.absolute, style=shape.labelup, color=color.green, size=size.tiny, text="B", textcolor=color.white, transp=0, offset=-1)
 
Last edited by a moderator:

generic

Active member
@bp805
Code:
input src = hl2;
input length = 24;
input showcross = yes;
input gain = 10000;
input k = yes;

script hma {
    input _src = 0;
    input _length = 0;
    def avgType = AverageType.WEIGHTED;

    plot return = MovingAverage(avgType, (2 * MovingAverage(avgType, _src, _length /
                  2)) - MovingAverage(avgType, _src, _length), Round(Sqrt(_length)));
}

script hma3 {
    input _length = 0;
    def p = _length / 2;
    def avgType = AverageType.WEIGHTED;

    plot return = MovingAverage(avgType, 3 * MovingAverage(avgType, close, p / 3) -
                  MovingAverage(avgType, close, p / 2) - MovingAverage(avgType,
                  close, p), p);
}

script kahlman {
    input x = 0;
    input g = 0;
    def kf;
    def dk = x - if IsNaN(kf[1]) then x else kf[1];
    def smooth = if IsNan(kf[1]) then x else kf[1] + dk * Sqrt((g / 10000) * 2);
    def velo = if IsNaN(velo[1]) then 0 else velo[1] + ((g / 10000) * dk);
    kf = smooth + velo;

    plot return = kf;
}

plot a = if k then kahlman(hma(src, length), gain) else hma(src, length);
plot b = if k then kahlman(hma3(length), gain) else hma3(length);

AddCloud(b, a, color.GREEN, color.RED);
AddChartBubble(b crosses above a, low, "B", color.GREEN, No);
AddChartBubble(b crosses below a, high, "S", color.RED);
 
Solution

Similar threads

Top