커뮤니티

수식확인 부탁드립니다

프로필 이미지
뎅이요
2025-09-22 11:36:02.0
47
글번호 194184
답변완료
(data1는 주식 개별 종목, data2는 종합주가지수) data2 종가가 superTrend 위에 있는경우만 data1(조건만족시)매수진입이 되도록 수식 원합니다. 아래수식중 data2를 지표로 설정하면 Plot1(supertrend);는 챠트상 잘 나타나며 오류 없습니다. 시스템에서 매수진입에 superTrend < data2(C) 조건사용시 data2 종가가 superTrend 위에 있는경우만 매수진입이되어야되는데 시스템에서 data2 종가가 superTrend 아래에 있는겨우도 진입이되고 있습니다. 확인 수정 부탁 드립니다. # Data1 Input : shortPeriod(5), longPeriod(20); value1 = ema(C, shortPeriod); value2 = ema(C, longPeriod); # Data2 input : ntime(5),factor(3), AtrPeriod(10); var : zS1(0,Data2),zD1(0,Data2),zTM(0,Data2),zTF(0,Data2),zHH(0,Data2),zLL(0,Data2),zC1(0,Data2); var : zsrc(0,Data2), AtrV(0,Data2),ATRv1(0,Data2),upperBand(0,Data2),lowerBand(0,Data2), prevLowerBand(0,Data2), prevUpperBand(0,Data2); var : prevSuperTrend(0,Data2), superTrend(0,Data2), direction(0,Data2),alpha(0,Data2),source(0,Data2); if data2(Bdate != Bdate[1]) Then { zS1 = data2(TimeToMinutes(stime)); zD1 = data2(sdate); } if zD1 > 0 then { if data2(sdate) == zD1 Then zTM = data2(TimeToMinutes(stime))-zS1; Else zTM = data2(TimeToMinutes(stime))+1440-zS1; zTF = zTM%ntime; if Bdate != Bdate[1] or (Bdate == Bdate[1] and ntime > 1 and zTF < zTF[1]) or (Bdate == Bdate[1] and ntime > 1 and zTM >= zTM[1]+ntime) or (Bdate == Bdate[1] and ntime == 1 and zTM > zTM[1]) Then { zHH = data2(H); zLL = data2(L); zC1 = data2(C[1]); ATRV1 = ATRV[1]; prevSuperTrend = superTrend[1]; prevLowerBand = lowerBand[1]; prevUpperBand = upperBand[1]; } if data2(H) > zHH Then zHH = data2(H); if data2(L) < zLL Then zLL = data2(L); zsrc = (zHH+zLL)/2; if zC1 > 0 Then { alpha = 1 / AtrPeriod ; source = max(zHH - zLL, abs(zHH - zC1), abs(zLL - zC1)); ATrV = alpha * source + (1 - alpha) * ATrV1; upperBand = zsrc + factor * AtrV; lowerBand = zsrc - factor * AtrV; if lowerBand > prevLowerBand or zC1 < prevLowerBand Then lowerBand = lowerBand; Else lowerBand = prevLowerBand; if upperBand < prevUpperBand or zC1 > prevUpperBand Then upperBand = upperBand; Else upperBand = prevUpperBand; if prevSuperTrend == prevUpperBand Then { if C > upperBand Then direction = -1; Else direction = 1; } Else { if C < lowerBand Then direction = 1; Else direction = -1; } if direction == -1 Then superTrend = lowerBand; Else superTrend = upperBand; } } # 매수 If superTrend < data2(C) and CrossUP(value1, value2) Then { Buy(); } # 매수청산 If CrossDown(value1, value2) Then { Exitlong(); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-09-22 13:18:26.0

안녕하세요 예스스탁입니다. 1 슈퍼트렌드 계산에 data2의 종가가 사용되어야 하는데 data1의 종가가 사용된 부분이 있어 수정해 드립니다. 2 수식에서 data2가 사용되면 data1을 계산하는 지표도 data1함수로 처리하셔야 합니다. 3 # Data1 Input : shortPeriod(5), longPeriod(20); var : v1(0,Data1),v2(0,Data1); v1 = data1(ema(C, shortPeriod)); v2 = data1(ema(C, longPeriod)); # Data2 input : ntime(5),factor(3), AtrPeriod(10); var : zS1(0,Data2),zD1(0,Data2),zTM(0,Data2),zTF(0,Data2),zHH(0,Data2),zLL(0,Data2),zC1(0,Data2); var : zsrc(0,Data2), AtrV(0,Data2),ATRv1(0,Data2),upperBand(0,Data2),lowerBand(0,Data2), prevLowerBand(0,Data2), prevUpperBand(0,Data2); var : prevSuperTrend(0,Data2), superTrend(0,Data2), direction(0,Data2),alpha(0,Data2),source(0,Data2); if data2(Bdate != Bdate[1]) Then { zS1 = data2(TimeToMinutes(stime)); zD1 = data2(sdate); } if zD1 > 0 then { if data2(sdate) == zD1 Then zTM = data2(TimeToMinutes(stime))-zS1; Else zTM = data2(TimeToMinutes(stime))+1440-zS1; zTF = zTM%ntime; if Bdate != Bdate[1] or (Bdate == Bdate[1] and ntime > 1 and zTF < zTF[1]) or (Bdate == Bdate[1] and ntime > 1 and zTM >= zTM[1]+ntime) or (Bdate == Bdate[1] and ntime == 1 and zTM > zTM[1]) Then { zHH = data2(H); zLL = data2(L); zC1 = data2(C[1]); ATRV1 = ATRV[1]; prevSuperTrend = superTrend[1]; prevLowerBand = lowerBand[1]; prevUpperBand = upperBand[1]; } if data2(H) > zHH Then zHH = data2(H); if data2(L) < zLL Then zLL = data2(L); zsrc = (zHH+zLL)/2; if zC1 > 0 Then { alpha = 1 / AtrPeriod ; source = max(zHH - zLL, abs(zHH - zC1), abs(zLL - zC1)); ATrV = alpha * source + (1 - alpha) * ATrV1; upperBand = zsrc + factor * AtrV; lowerBand = zsrc - factor * AtrV; if lowerBand > prevLowerBand or zC1 < prevLowerBand Then lowerBand = lowerBand; Else lowerBand = prevLowerBand; if upperBand < prevUpperBand or zC1 > prevUpperBand Then upperBand = upperBand; Else upperBand = prevUpperBand; if prevSuperTrend == prevUpperBand Then { if data2(C) > upperBand Then direction = -1; Else direction = 1; } Else { if data2(C) < lowerBand Then direction = 1; Else direction = -1; } if direction == -1 Then superTrend = lowerBand; Else superTrend = upperBand; } } # 매수 If superTrend < data2(C) and CrossUP(v1, v2) Then { Buy(); } # 매수청산 If CrossDown(v1, v2) Then { Exitlong(); } 즐거운 하루되세요 > 뎅이요 님이 쓴 글입니다. > 제목 : 수식확인 부탁드립니다 > (data1는 주식 개별 종목, data2는 종합주가지수) data2 종가가 superTrend 위에 있는경우만 data1(조건만족시)매수진입이 되도록 수식 원합니다. 아래수식중 data2를 지표로 설정하면 Plot1(supertrend);는 챠트상 잘 나타나며 오류 없습니다. 시스템에서 매수진입에 superTrend < data2(C) 조건사용시 data2 종가가 superTrend 위에 있는경우만 매수진입이되어야되는데 시스템에서 data2 종가가 superTrend 아래에 있는겨우도 진입이되고 있습니다. 확인 수정 부탁 드립니다. # Data1 Input : shortPeriod(5), longPeriod(20); value1 = ema(C, shortPeriod); value2 = ema(C, longPeriod); # Data2 input : ntime(5),factor(3), AtrPeriod(10); var : zS1(0,Data2),zD1(0,Data2),zTM(0,Data2),zTF(0,Data2),zHH(0,Data2),zLL(0,Data2),zC1(0,Data2); var : zsrc(0,Data2), AtrV(0,Data2),ATRv1(0,Data2),upperBand(0,Data2),lowerBand(0,Data2), prevLowerBand(0,Data2), prevUpperBand(0,Data2); var : prevSuperTrend(0,Data2), superTrend(0,Data2), direction(0,Data2),alpha(0,Data2),source(0,Data2); if data2(Bdate != Bdate[1]) Then { zS1 = data2(TimeToMinutes(stime)); zD1 = data2(sdate); } if zD1 > 0 then { if data2(sdate) == zD1 Then zTM = data2(TimeToMinutes(stime))-zS1; Else zTM = data2(TimeToMinutes(stime))+1440-zS1; zTF = zTM%ntime; if Bdate != Bdate[1] or (Bdate == Bdate[1] and ntime > 1 and zTF < zTF[1]) or (Bdate == Bdate[1] and ntime > 1 and zTM >= zTM[1]+ntime) or (Bdate == Bdate[1] and ntime == 1 and zTM > zTM[1]) Then { zHH = data2(H); zLL = data2(L); zC1 = data2(C[1]); ATRV1 = ATRV[1]; prevSuperTrend = superTrend[1]; prevLowerBand = lowerBand[1]; prevUpperBand = upperBand[1]; } if data2(H) > zHH Then zHH = data2(H); if data2(L) < zLL Then zLL = data2(L); zsrc = (zHH+zLL)/2; if zC1 > 0 Then { alpha = 1 / AtrPeriod ; source = max(zHH - zLL, abs(zHH - zC1), abs(zLL - zC1)); ATrV = alpha * source + (1 - alpha) * ATrV1; upperBand = zsrc + factor * AtrV; lowerBand = zsrc - factor * AtrV; if lowerBand > prevLowerBand or zC1 < prevLowerBand Then lowerBand = lowerBand; Else lowerBand = prevLowerBand; if upperBand < prevUpperBand or zC1 > prevUpperBand Then upperBand = upperBand; Else upperBand = prevUpperBand; if prevSuperTrend == prevUpperBand Then { if C > upperBand Then direction = -1; Else direction = 1; } Else { if C < lowerBand Then direction = 1; Else direction = -1; } if direction == -1 Then superTrend = lowerBand; Else superTrend = upperBand; } } # 매수 If superTrend < data2(C) and CrossUP(value1, value2) Then { Buy(); } # 매수청산 If CrossDown(value1, value2) Then { Exitlong(); }