예스스탁
예스스탁 답변
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();
}