커뮤니티

AI-Weighted RSI 타주기 변환

프로필 이미지
조민철
2026-02-24 07:22:55
51
글번호 230723
답변완료

항상 감사드립니다

1.아래시스템식을 타주기에 적용하도록 변환부탁드립니다


#### AI-Weighted RSI ###


input : rsiLen(14);

input : sigLen(20);

input : learnLen(20);

var : retLog(0),rsiVal(0),alpha(0),ATRV(0),atrPct(0),vol(0),volLogChg(0),y_rsi(0);

var : x_ret(0),x_rsi(0),x_atrp(0),x_vchg(0),x_vol(0);


retLog = log(close / iff(isnan(close[1])==true, close,close[1]));

rsiVal = rsi(rsiLen);

alpha = 1 / 200 ;

ATRV = IFf(IsNan(ATRV[1]) == true, ema(TrueRange,200) , alpha * TrueRange + (1 - alpha) * IFf(isnan(ATRV[1])==true,0,ATRV[1]));

atrPct = ATRV / close;

vol = volume;

volLogChg = log(vol / iff(isnan(vol[1])==true, vol,vol[1]));


y_rsi = rsiVal[1];

x_ret = iff(IsNan(retLog[1])==true,0,retLog[1]);

x_rsi = iff(IsNan(rsiVal[1])==true,0,rsiVal[1]);

x_atrp = iff(IsNan(atrPct[1])==true,0,atrPct[1]);

x_vchg = iff(IsNan(volLogChg[1])==true,0,volLogChg[1]);

x_vol = iff(IsNan(vol[1])==true,0,vol[1]);


var1 = CoefficientR(y_rsi, x_ret, learnLen);

var2 = CoefficientR(y_rsi, x_rsi, learnLen);

var3 = CoefficientR(y_rsi, x_atrp, learnLen);

var4 = CoefficientR(y_rsi, x_vchg, learnLen);

var5 = CoefficientR(y_rsi, x_vol, learnLen);


var : corrs_abs_ret(0),corrs_abs_rsi(0),corrs_abs_atrp(0),corrs_abs_vchg(0),corrs_abs_vol(0);


corrs_abs_ret = abs(iff(IsNan(var1)==true,0,var1));

corrs_abs_rsi = abs(iff(IsNan(var2)==true,0,var2));

corrs_abs_atrp = abs(iff(IsNan(var3)==true,0,var3));

corrs_abs_vchg = abs(iff(IsNan(var4)==true,0,var4));

corrs_abs_vol = abs(iff(IsNan(var5)==true,0,var5));


Array : corrs[5](0);


corrs[0] = corrs_abs_ret;

corrs[1] = corrs_abs_rsi;

corrs[2] = corrs_abs_atrp;

corrs[3] = corrs_abs_vchg;

corrs[4] = corrs_abs_vol;


var : i(0),j(0),n(0);

Array : tmp[5](0),topIdx[5](0);

var : maxI(0),maxV(0),vj(0),take(False);


for i = 0 to 4

{

tmp[i] = iff(IsNan(corrs[i])==true,0,corrs[i]);

topIdx[i] = 0;

}


for n = 0 to 4

{

maxI = 0;

maxV = tmp[0];

for j = 1 to 4

{

vj = tmp[j];

take = isnan(maxV) == true or (IsNan(vj) == False and vj > maxV);

if take Then

{

maxV = vj;

maxI = j;

}

}

topIdx[n] = maxI;

tmp[maxI] = nan;

}


var : xz_ret(0),xz_rsi(0),xz_atrp(0),xz_vchg(0),xz_vol(0);

var : m1(0),s1(0),fz1(0);

var : m2(0),s2(0),fz2(0);

var : m3(0),s3(0),fz3(0);

var : m4(0),s4(0),fz4(0);

var : m5(0),s5(0),fz5(0);

Array : featz[5](0);


m1 = ema(x_ret, learnLen);

s1 = std(x_ret, learnLen);

fz1 = iff(s1 > 0 , (x_ret - m1) / s1 , 0);


m2 = ema(x_rsi, learnLen);

s2 = std(x_rsi, learnLen);

fz2 = iff(s2 > 0 , (x_rsi - m2) / s2 , 0);


m3 = ema(x_atrp, learnLen);

s3 = std(x_atrp, learnLen);

fz3 = iff(s3 > 0 , (x_atrp - m3) / s3 , 0);


m4 = ema(x_vchg, learnLen);

s4 = std(x_vchg, learnLen);

fz4 = iff(s4 > 0 , (x_vchg - m4) / s4 , 0);


m5 = ema(x_vol, learnLen);

s5 = std(x_vol, learnLen);

fz5 = iff(s5 > 0 , (x_vol - m5) / s5 , 0);



xz_ret = iff(isnan(fz1) ==true,0,fz1);

xz_rsi = iff(isnan(fz2) ==true,0,fz2);

xz_atrp = iff(isnan(fz3) ==true,0,fz3);

xz_vchg = iff(isnan(fz4) ==true,0,fz4);

xz_vol = iff(isnan(fz5) ==true,0,fz5);


featZ[0] = xz_ret;

featZ[1] = xz_rsi;

featZ[2] = xz_atrp;

featZ[3] = xz_vchg;

featZ[4] = xz_vol;


value1 = CoefficientR(y_rsi, x_ret, learnLen);

value3 = CoefficientR(y_rsi, x_atrp, learnLen);

value4 = CoefficientR(y_rsi, x_vchg, learnLen);

value5 = CoefficientR(y_rsi, x_vol, learnLen);


var : coef_ret(0),coef_rsi(0),coef_atrp(0),coef_vchg(0),coef_vol(0);


coef_ret = iff(IsNan(value1)==true,0,value1);

coef_rsi = 1.0; // Hardcoded: always 1, since x_rsi == y_rsi

coef_atrp = iff(IsNan(value3)==true,0,value3);

coef_vchg = iff(IsNan(value4)==true,0,value4);

coef_vol = iff(IsNan(value5)==true,0,value5);


Array : coef[5](0);


coef[0] = coef_ret;

coef[1] = coef_rsi;

coef[2] = coef_atrp;

coef[3] = coef_vchg;

coef[4] = coef_vol;


var : s(0),idx(0),g(0),z(0),pred_rsi_z(0);


s = 0.0;

pred_rsi_z = 0;

for i = 0 to 4

{

idx = topIdx[i];

g = coef[idx];

z = featZ[idx];

pred_rsi_z = pred_rsi_z + (iff(isnan(g)==true,0,g) * IFf(IsNan(z)==true,0,z));

}


var : rsi_mean(0),rsi_std(0),pred_rsi(0);

var : rsiWeight(0),ema_rsi(0);


rsi_mean = ema(y_rsi, learnLen);

rsi_std = std(y_rsi, learnLen);

pred_rsi = iff(isnan(rsi_mean)==true,0,rsi_mean) + iff(isnan(rsi_std)==true,0,rsi_std) * pred_rsi_z;

rsiWeight = max(-2, min(2, (50 - iff(isnan(pred_rsi)==true,0,pred_rsi)) / 50)) * -1;

ema_rsi = ema(rsiWeight,sigLen);


//종목검색

IF (rsiWeight[1]<=-0.5 OR rsiWeight<=-0.5) && CrossUP(rsiWeight,-0.5) && C>O TheN

Find(1);

//지표식

if CrossUp(rsiWeight,ema_rsi) Then

var91=0.5 ;


if CrossDown(rsiWeight,ema_rsi) Then

var91=-0.5 ;

시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-02-24 12:29:28

안녕하세요 예스스탁입니다. 1 올려주신 수식을 수식으로 타주기를 구현하는 수식으로 작성하는 것은 시간이 많이 걸리는 내용입니다. 업무상 일정이상 시간이 요구되는 내용은 저희가 처리해 드리기 어렵습니다. 2 참조데이터를 이용하는 식으로 수정해 드립니다. 차트 왼쪽 상단의 종목선택 버튼 중 오른쪽 버튼을 클릭하면 차트에 참조데이터를 추가할 수 있습니다. 참조데이터는 기본차트와 동일종목을 다른주기로 셋팅이 가능합니다 참조데이터는 추가하는 순서로 data2부터 번호가 자동부여 되고 수식은 이 데이터번호를 이용해 값을 가져와 계산합니다. 올리신 수식을 data2을 참조하는 내용으로 수정해 드립니다. 중간에 종목검색 내용은 삭제했습니다. 종목검색은 참조데이터 사용이 가능하지 않고 최대 제공봉수도 500봉이라 타주기로 구현도 가능하지 않습니다. input : rsiLen(14); input : sigLen(20); input : learnLen(20); var : retLog(0,Data2),rsiVal(0,Data2),alpha(0,Data2),ATRV(0,Data2),atrPct(0,Data2),vol(0,Data2),volLogChg(0,Data2),y_rsi(0,Data2); var : x_ret(0,Data2),x_rsi(0,Data2),x_atrp(0,Data2),x_vchg(0,Data2),x_vol(0,Data2); var : v1(0,Data2),v2(0,Data2),v3(0,Data2),v4(0,Data2),v5(0,Data2); var : val1(0,Data2),val3(0,Data2),val4(0,Data2),val5(0,Data2),v91(0,Data2); retLog = data2(log(close / iff(isnan(close[1])==true, close,close[1]))); rsiVal = data2(rsi(rsiLen)); alpha = 1 / 200 ; ATRV = data2(IFf(IsNan(ATRV[1]) == true, ema(TrueRange,200) , alpha * TrueRange + (1 - alpha) * IFf(isnan(ATRV[1])==true,0,ATRV[1]))); atrPct = data2(ATRV / close); vol = data2(volume); volLogChg = data2(log(vol / iff(isnan(vol[1])==true, vol,vol[1]))); y_rsi = rsiVal[1]; x_ret = data2(iff(IsNan(retLog[1])==true,0,retLog[1])); x_rsi = data2(iff(IsNan(rsiVal[1])==true,0,rsiVal[1])); x_atrp = data2(iff(IsNan(atrPct[1])==true,0,atrPct[1])); x_vchg = data2(iff(IsNan(volLogChg[1])==true,0,volLogChg[1])); x_vol = data2(iff(IsNan(vol[1])==true,0,vol[1])); v1 = data2(CoefficientR(y_rsi, x_ret, learnLen)); v2 = data2(CoefficientR(y_rsi, x_rsi, learnLen)); v3 = data2(CoefficientR(y_rsi, x_atrp, learnLen)); v4 = data2(CoefficientR(y_rsi, x_vchg, learnLen)); v5 = data2(CoefficientR(y_rsi, x_vol, learnLen)); var : corrs_abs_ret(0,Data2),corrs_abs_rsi(0,Data2),corrs_abs_atrp(0,Data2),corrs_abs_vchg(0,Data2),corrs_abs_vol(0,Data2); corrs_abs_ret = data2(abs(iff(IsNan(v1)==true,0,v1))); corrs_abs_rsi = data2(abs(iff(IsNan(v2)==true,0,v2))); corrs_abs_atrp = data2(abs(iff(IsNan(v3)==true,0,v3))); corrs_abs_vchg = data2(abs(iff(IsNan(v4)==true,0,v4))); corrs_abs_vol = data2(abs(iff(IsNan(v5)==true,0,v5))); Array : corrs[5](0,Data2); corrs[0] = corrs_abs_ret; corrs[1] = corrs_abs_rsi; corrs[2] = corrs_abs_atrp; corrs[3] = corrs_abs_vchg; corrs[4] = corrs_abs_vol; var : i(0,Data2),j(0,Data2),n(0,Data2); Array : tmp[5](0,Data2),topIdx[5](0,Data2); var : maxI(0,Data2),maxV(0,Data2),vj(0,Data2),take(False,Data2); for i = 0 to 4 { tmp[i] = data2(iff(IsNan(corrs[i])==true,0,corrs[i])); topIdx[i] = 0; } for n = 0 to 4 { maxI = 0; maxV = tmp[0]; for j = 1 to 4 { vj = tmp[j]; take = isnan(maxV) == true or (IsNan(vj) == False and vj > maxV); if take Then { maxV = vj; maxI = j; } } topIdx[n] = maxI; tmp[maxI] = nan; } var : xz_ret(0,Data2),xz_rsi(0,Data2),xz_atrp(0,Data2),xz_vchg(0,Data2),xz_vol(0,Data2); var : m1(0,Data2),s1(0,Data2),fz1(0,Data2); var : m2(0,Data2),s2(0,Data2),fz2(0,Data2); var : m3(0,Data2),s3(0,Data2),fz3(0,Data2); var : m4(0,Data2),s4(0,Data2),fz4(0,Data2); var : m5(0,Data2),s5(0,Data2),fz5(0,Data2); Array : featz[5](0,Data2); m1 = data2(ema(x_ret, learnLen)); s1 = data2(std(x_ret, learnLen)); fz1 = data2(iff(s1 > 0 , (x_ret - m1) / s1 , 0)); m2 = data2(ema(x_rsi, learnLen)); s2 = data2(std(x_rsi, learnLen)); fz2 = data2(iff(s2 > 0 , (x_rsi - m2) / s2 , 0)); m3 = data2(ema(x_atrp, learnLen)); s3 = data2(std(x_atrp, learnLen)); fz3 = data2(iff(s3 > 0 , (x_atrp - m3) / s3 , 0)); m4 = data2(ema(x_vchg, learnLen)); s4 = data2(std(x_vchg, learnLen)); fz4 = data2(iff(s4 > 0 , (x_vchg - m4) / s4 , 0)); m5 = data2(ema(x_vol, learnLen)); s5 = data2(std(x_vol, learnLen)); fz5 = data2(iff(s5 > 0 , (x_vol - m5) / s5 , 0)); xz_ret = data2(iff(isnan(fz1) ==true,0,fz1)); xz_rsi = data2(iff(isnan(fz2) ==true,0,fz2)); xz_atrp = data2(iff(isnan(fz3) ==true,0,fz3)); xz_vchg = data2(iff(isnan(fz4) ==true,0,fz4)); xz_vol = data2(iff(isnan(fz5) ==true,0,fz5)); featZ[0] = xz_ret; featZ[1] = xz_rsi; featZ[2] = xz_atrp; featZ[3] = xz_vchg; featZ[4] = xz_vol; val1 = data2(CoefficientR(y_rsi, x_ret, learnLen)); val3 = data2(CoefficientR(y_rsi, x_atrp, learnLen)); val4 = data2(CoefficientR(y_rsi, x_vchg, learnLen)); val5 = data2(CoefficientR(y_rsi, x_vol, learnLen)); var : coef_ret(0,Data2),coef_rsi(0,Data2),coef_atrp(0,Data2),coef_vchg(0,Data2),coef_vol(0,Data2); coef_ret = data2(iff(IsNan(val1)==true,0,val1)); coef_rsi = 1.0; // Hardcoded: always 1, since x_rsi == y_rsi coef_atrp = data2(iff(IsNan(val3)==true,0,val3)); coef_vchg = data2(iff(IsNan(val4)==true,0,val4)); coef_vol = data2(iff(IsNan(val5)==true,0,val5)); Array : coef[5](0,Data2); coef[0] = coef_ret; coef[1] = coef_rsi; coef[2] = coef_atrp; coef[3] = coef_vchg; coef[4] = coef_vol; var : s(0,Data2),idx(0,Data2),g(0,Data2),z(0,Data2),pred_rsi_z(0,Data2); s = 0.0; pred_rsi_z = 0; for i = 0 to 4 { idx = topIdx[i]; g = coef[idx]; z = featZ[idx]; pred_rsi_z = pred_rsi_z + Data2((iff(isnan(g)==true,0,g) * IFf(IsNan(z)==true,0,z))); } var : rsi_mean(0,Data2),rsi_std(0,Data2),pred_rsi(0,Data2); var : rsiWeight(0,Data2),ema_rsi(0,Data2); rsi_mean = data2(ema(y_rsi, learnLen)); rsi_std = data2(std(y_rsi, learnLen)); pred_rsi = data2(iff(isnan(rsi_mean)==true,0,rsi_mean) + iff(isnan(rsi_std)==true,0,rsi_std) * pred_rsi_z); rsiWeight = data2(max(-2, min(2, (50 - iff(isnan(pred_rsi)==true,0,pred_rsi)) / 50)) * -1); ema_rsi = data2(ema(rsiWeight,sigLen)); //종목검색 #IF Data2((rsiWeight[1]<=-0.5 OR rsiWeight<=-0.5) && CrossUP(rsiWeight,-0.5) && C>O) TheN # Find(1); //지표식 if CrossUp(rsiWeight,ema_rsi) Then v91=0.5 ; if CrossDown(rsiWeight,ema_rsi) Then v91=-0.5 ; 즐거운 하루되세요