예스스탁
예스스탁 답변
2025-04-14 17:39:35
안녕하세요
예스스탁입니다.
이전 답변에 사용자함수에 대한 설명이 빠져있었습니다.
아래 내용으로 사용자함수를 만드시고 지표와 시스템 적용하시면 됩니다.
사용자함수명 : gaussian_filter
반환값형 : 숫자형
input : src(Numeric),length(Numeric),sigma(Numeric);
var : total(0),pi(0),sum(0),i(0),weight(0);
Array : weights[100](0);
total = 0;
pi = pie;
for i = 0 to length - 1
{
weight = exp(-0.5 * pow((i - length / 2) / sigma, 2.0)) / sqrt(sigma * 2.0 * pi);
weights[i] = weight;
total = total + weight;
}
// Normalize weights
for i = 0 to length - 1
{
weights[i] = weights[i] / total;
}
// Apply Gaussian filter to the source series
sum = 0;
for i = 0 to length - 1
{
sum = sum + close[i] * weights[i];
}
gaussian_filter = sum;
즐거운 하루되세요
> 사노소이 님이 쓴 글입니다.
> 제목 : 오류 수정 부탁드립니다
> 오류창에 이렇게 나오네요. 수정 부탁드릴께요.
"18줄에 선언되지 않은 이름 gaussian_filter 가 사용되었습니다."
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 수식 부탁드립니다
>
안녕하세요
예스스탁입니다.
화면 중앙에 표시되는 내용은 작성이 되지 않습니다.
1 지표
input : len(30);
input : mode("AVG");#["AVG", "MEADIAN", "MODE"]
input : distance(3);
input : show_retest(false);
input : up(rgb(40, 218, 150));
input : dn(Blue);
Array : g_value[100](0);
var : volatility(0),lower_band(0),upper_band(0),trend_line(0),trend(False);
var : stp(0),gf(0),i(0),g_f(0),value(0);
var : coeff(0),score(0),color(0),tx(0);
volatility = ma(H-L,100);
#multi_trend(src, period) =>
for stp = 0 to 20 step 1
{
gf = gaussian_filter(close, (len + stp), 10);
g_value[stp] = gf;
}
coeff = 0.05;
score = 0.0;
for i = 0 to 21 - 1
{
g_f = g_value[i];
if g_f > g_value[0] Then
score = score+coeff;
}
color = iff(score > 0.5,dn,up);
if mode == "AVG" Then
value = AverageArray(g_value,21);
if mode == "MEADIAN" Then
value = MedianArray(g_value,21);
if mode == "MODE" Then
value = ModeArray(g_value,21,-1);
lower_band = value - volatility * distance;
upper_band = value + volatility * distance;
if CrossUp(C,upper_band) Then
trend = true;
if CrossDown(close, lower_band) Then
trend = false;
trend_line = IFF(trend , lower_band,iff(Trend == False,upper_band,Nan));
plot1(value,"avg",color,Def,6);
if trend == trend[1] Then
plot2(trend_line,"trend_line",iff(close > trend_line,up,dn),Def,6);
Else
NoPlot(2);
plot3(trend_line,"trend_line2",IFf(close > trend_line , up , dn),Def,1);
if CrossDown(close, trend_line) Then
{
tx = text_new(sDate,sTime,trend_line,"▼");
Text_SetStyle(tx,2,1);
Text_SetColor(tx, dn);
Text_SetSize(tx,20);
}
if CrossUp(close, trend_line) Then
{
tx = text_new(sDate,sTime,trend_line,"▲");
Text_SetStyle(tx,2,0);
Text_SetColor(tx,up);
Text_SetSize(tx,20);
}