예스스탁
예스스탁 답변
2025-05-30 10:40:57
안녕하세요
예스스탁입니다.
사용자함수 먼저 만드신 후에
지표식 작성해 적용하시면 됩니다.
1 사용자함수
함수명 : jurik_filt
반환값형 : 숫자형
input : src(Numeric),len(Numeric),phase(Numeric);
var : volty(0),avolty(0),vsum(0),bsmax(0),bsmin(0);
var : len1(0),len2(0),pow1(0),beta(0),div(0),phaseRatio(0),bet(0);
var : del1(0),del2(0),dVolty(0),pow2(0),kv(0),alpha(0);
var : jrkout(0);
volty = 0.0;
avolty = 0.0;
vsum = 0.0;
bsmax = src;
bsmin = src;
len1 = max(log(sqrt(0.5 * (len-1))) / log(2.0) + 2.0, 0);
len2 = sqrt(0.5 * (len - 1)) * len1;
pow1 = max(len1 - 2.0, 0.5);
beta = 0.45 * (len - 1) / (0.45 * (len - 1) + 2);
div = 1.0 / (10.0 + 10.0 * (min(max(len-10, 0), 100)) / 100);
phaseRatio = iff(phase < -100 , 0.5 , IFf( phase > 100 , 2.5 , 1.5 + phase * 0.01));
bet = len2 / (len2 + 1);
//Price volatility
del1 = src - IFf(IsNan(bsmax[1]) == true,0,bsmax[1]);
del2 = src - IFf(IsNan(bsmin[1]) == true,0,bsmin[1]);
volty = iff(abs(del1) > abs(del2) , abs(del1) , abs(del2));
//Relative price volatility factor
#IFF(IsNan(volty[10])==true,0,volty[10])
vsum = IFF(IsNan(vsum[1])==true,0,vsum[1]) + div * (volty - IFF(IsNan(volty[10])==true,0,volty[10]));
avolty = IFF(IsNan(avolty[1])==true,0,avolty[1]) + (2.0 / (max(4.0 * len, 30) + 1.0)) * (vsum - IFF(IsNan(avolty[1])==true,0,avolty[1]));
dVolty = iff(avolty > 0 , volty / avolty , 0);
dVolty = max(1, min(pow(len1, 1.0/pow1), dVolty));
//Jurik volatility bands
pow2 = pow(dVolty, pow1);
Kv = pow(bet, sqrt(pow2));
bsmax = iff(del1 > 0 , src , src - Kv * del1);
bsmin = iff(del2 < 0 , src , src - Kv * del2);
//Jurik Dynamic Factor
alpha = pow(beta, pow2);
var : ma1(0),det0(0),e2(0),ma2(0);
//1st stage - prelimimary smoothing by adaptive EMA
jrkout = 0.0;
ma1 = 0.0;
det0 = 0.0;
e2 = 0.0;
ma1 = (1 - alpha) * src + alpha * IFF(IsNan(ma1[1])==true,0,ma1[1]);
//2nd stage - one more prelimimary smoothing by Kalman filter
det0 = (src - ma1) * (1 - beta) + beta * IFF(IsNan(det0[1])==true,0,det0[1]);
ma2 = ma1 + phaseRatio * det0;
//3rd stage - final smoothing by unique Jurik adaptive filter
e2 = (ma2 - IFF(IsNan(jrkout[1])==true,0,jrkout[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * IFF(IsNan(e2[1])==true,0,e2[1]);
jrkout = e2 + IFF(IsNan(e2[1])==true,0,jrkout[1]);
jurik_filt = jrkout;
2 지표식
var : Greencolor(Green),RedColor(Red);
input : pstLength(9);
input : pstX(5);
input : pstSmooth(3);
input : smoothPeriod(10);
input : jphs(0);
input : colorbars(true);
input : showSigs(true);
var : lookBackPeriod(0),alpha(0),TripleK(0);
var : TripleDF(0),TripleDS(0),TripleDSs(0),TripleDFs(0);
var : fmin(0),fmax(0),pssBuffer(0),pstBuffer(0),trend(0);
lookBackPeriod = pstLength * pstX;
alpha = 2.0 / (1.0 + pstSmooth);
TripleK = 0;
TripleDF = 0;
TripleDS = 0;
TripleDSs = 0;
TripleDFs = 0;
fmin = lowest(low, lookBackPeriod) ;
fmax = highest(high, lookBackPeriod) - fmin;
if (fmax > 0) Then
TripleK = 100.0 * (close - fmin) / fmax;
else
TripleK = 0.0;
TripleDF = IFf(IsNaN(TripleDF[pstX]) == true,0,TripleDF[pstX])+ alpha * (TripleK - IFf(IsNaN(TripleDF[pstX]) == true,0,TripleDF[pstX]));
TripleDS = (IFf(IsNaN(TripleDS[pstX]) == true,0,TripleDS[pstX]) * 2.0 + TripleDF) / 3.0;
TripleDSs = ma(TripleDS, 3);
pssBuffer = jurik_filt(TripleDSs, smoothPeriod, jphs) ;
TripleDFs = ma(TripleDF, 3);
pstBuffer = jurik_filt(TripleDFs, smoothPeriod, jphs) ;
trend = 0;
trend = IFF(IsNaN(trend[1])==true,0,trend[1]);
if (pstBuffer > pssBuffer) Then
trend = 1;
if (pstBuffer < pssBuffer) Then
trend = -1;
var : colorout(0),goLong(False),goShort(False),tx(0);
colorout = iff(trend == 1 , greencolor , iff(trend == -1 , redcolor , gray));
plot1(pssBuffer,"pssBuffer",colorout);
plot2(pstBuffer,"pstBuffer",colorout);
goLong = CrossUp(pstBuffer, pssBuffer);
goShort = CrossDown(pstBuffer, pssBuffer);
if showSigs == true && goLong == true Then
{
tx = Text_New_Self(sdate,sTime,pssBuffer,"▲");
Text_SetColor(tx,Yellow);
Text_SetStyle(tx,2,0);
}
if showSigs == true && goShort == true Then
{
tx = Text_New_Self(sdate,sTime,pssBuffer,"▼");
Text_SetColor(tx,Magenta);
Text_SetStyle(tx,2,1);
}
즐거운 하루되세요
> 사노소이 님이 쓴 글입니다.
> 제목 : 수식 부탁드립니다
> 지표식 부탁드립니다.
//@version=5
indicator("JFKPS",
shorttitle="JFKPS",
overlay = false,
timeframe="",
timeframe_gaps = true)
import loxx/loxxjuriktools/1 as jf
greencolor = #2DD204
redcolor = #D2042D
pstLength = input.int(9, "Period", group = "Basic Settings")
pstX = input.int(5, "Synthetic Multiplier", group = "Basic Settings")
pstSmooth = input.int(3, "Stochasitc Smoothing Period", group = "Basic Settings")
smoothPeriod = input.int(10, "Jurik Smoothing Period", group = "Basic Settings")
jphs = input.float(0., "Jurik Phase", group = "Basic Settings")
colorbars = input.bool(true, "Color bars?", group = "UI Options")
showSigs = input.bool(true, "Show signals?", group = "UI Options")
lookBackPeriod = pstLength * pstX
alpha = 2.0 / (1.0 + pstSmooth)
TripleK = 0., TripleDF = 0., TripleDS = 0., TripleDSs = 0., TripleDFs = 0.
fmin = ta.lowest(low, lookBackPeriod)
fmax = ta.highest(high, lookBackPeriod) - fmin
if (fmax > 0)
TripleK := 100.0 * (close - fmin) / fmax
else
TripleK := 0.0
TripleDF := nz(TripleDF[pstX]) + alpha * (TripleK - nz(TripleDF[pstX]))
TripleDS := (nz(TripleDS[pstX]) * 2.0 + TripleDF) / 3.0
TripleDSs := ta.sma(TripleDS, 3)
pssBuffer = jf.jurik_filt(TripleDSs, smoothPeriod, jphs)
TripleDFs := ta.sma(TripleDF, 3)
pstBuffer = jf.jurik_filt(TripleDFs, smoothPeriod, jphs)
trend = 0
trend := nz(trend[1])
if (pstBuffer > pssBuffer)
trend := 1
if (pstBuffer < pssBuffer)
trend := -1
colorout = trend == 1 ? greencolor : trend == -1 ? redcolor : color.gray
plot(pssBuffer, color = color.white, linewidth = 1)
plot(pstBuffer, color = colorout, linewidth = 3)
barcolor(colorbars ? colorout : na)
goLong = ta.crossover(pstBuffer, pssBuffer)
goShort = ta.crossunder(pstBuffer, pssBuffer)
plotshape(showSigs and goLong, title = "Long", color = color.yellow, textcolor = color.yellow, text = "UP", style = shape.triangleup, location = location.bottom, size = size.tiny)
plotshape(showSigs and goShort, title = "Short", color = color.fuchsia, textcolor = color.fuchsia, text = "DW", style = shape.triangledown, location = location.top, size = size.tiny)
alertcondition(goLong, title = "Long", message = "Jurik-Filtered Kase Permission Stochastic [Loxx]: Long₩nSymbol: {{ticker}}₩nPrice: {{close}}")
alertcondition(goShort, title = "Short", message = "Jurik-Filtered Kase Permission Stochastic [Loxx]: Short₩nSymbol: {{ticker}}₩nPrice: {{close}}")