커뮤니티

문의드립니다

프로필 이미지
cjfdk
2026-05-11 11:25:51
45
글번호 231974
답변완료

input : 익절틱수(40000),손절틱수(520);


var : Ema100(0);


ema100 = ema(close, 100);


input : atrPeriod(10),factor(3);

var : src(0), alpha(0),ATRV(0),upperBand(0),lowerBand(0),direction(0),SuperTrend(C);


if CurrentBar > 1 Then

{

src = (H+L)/2;

alpha = 1 / atrPeriod ;

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


upperBand = src + factor * AtrV;

lowerBand = src - factor * AtrV;


if lowerBand > lowerBand[1] or close[1] < lowerBand[1] Then

lowerBand = lowerBand;

Else

lowerBand = lowerBand[1];

if upperBand < upperBand[1] or close[1] > upperBand[1] Then

upperBand = upperBand;

Else

upperBand = upperBand[1];

if C > UpperBand Then

direction = 1;

if C < LowerBand Then

direction = -1;

if direction == 1 Then

SuperTrend = lowerband;

Else

SuperTrend = upperband;


}


var : R(0),A(0),longCondition(False),shortCondition(False);


R = rsi(14);

A = adx(14);


longCondition = close > ema100 and direction > 0 and R > 50 and A > 25;

shortCondition = close < ema100 and direction < 0 and R <50 and A > 25;


var : S3(0);



if longCondition == true Then

S3 = 1;


if shortCondition == true Then

S3 = -1;








input : atrMult(4.5);

input : atrlen(12);

input : rsmlen(3);

input : tplen(14);

var : i(0),sum(0),source(0);

var : atrValue1(0),upperLevel(0),lowerLevel(0);

var : previousLowerLevel(0),previousUpperLevel(0);

var : trendDirection(Nan),superTrendValue(Nan);

var : previousTrend(0);

if CurrentBar > 1 Then

{

sum = 0;

for i = 0 to rsmlen-1

{

sum = sum + c[i]*c[i];

}

source = sqrt(sum/rsmlen);

alpha = 1 / atrlen ;

atrValue1 = IFf(IsNan(atrValue1[1]) == true, ma(TrueRange,atrlen) , alpha * TrueRange + (1 - alpha) * IFf(isnan(atrValue1[1])==true,0,atrValue1[1]));

upperLevel = source + atrMult * atrValue1;

lowerLevel = source - atrMult * atrValue1;

previousLowerLevel = iff(isnan(lowerLevel[1])==true,0,lowerLevel[1]);

previousUpperLevel = iff(isnan(upperLevel[1])==true,0,upperLevel[1]);

// Ensure continuity of lower and upper bands

lowerLevel = iff(lowerLevel > previousLowerLevel or source[1] < previousLowerLevel , lowerLevel , previousLowerLevel);

upperLevel = iff(upperLevel < previousUpperLevel or source[1] > previousUpperLevel , upperLevel , previousUpperLevel);

// Determine direction and SuperTrend

previousTrend = superTrendValue[1];

// Initialize direction

if IsNan(atrValue1[1]) == true Then

trendDirection = 1;

else if previousTrend == previousUpperLevel Then

trendDirection = iff(source > upperLevel , -1 , 1);

else

trendDirection = iff(source < lowerLevel , 1 , -1);

// Set SuperTrend value based on direction

superTrendValue = iff(trendDirection == -1 , lowerLevel , upperLevel);

}

var : dist(0),chg(0),lvlCol(0);

var : tp1(0),tp2(0),tp3(0),tp4(0),tp5(0),tp6(0),tp7(0);

var : printedtp1(0),printedtp2(0),printedtp3(0),printedtp4(0),printedtp5(0),printedtp6(0),printedtp7(0);

dist = abs(close-superTrendValue);

lvlCol = iff(trendDirection > 0 , red , green);

var : key1(0);

var : key2(0);

var : key3(0);

var : key4(0);

var : key5(0);

var : key6(0);

var : key7(0);

if CrossUp(trendDirection, 0) or CrossDown(trendDirection, 0) Then

{

//TL_Delete(keys);

printedtp1 = 0;

printedtp2 = 0;

printedtp3 = 0;

printedtp4 = 0;

printedtp5 = 0;

printedtp6 = 0;

printedtp7 = 0;

chg = abs(superTrendValue-superTrendValue[1]);

tp1 = superTrendValue[1] + IFF(trendDirection > 0 , -chg , chg);

tp2 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 2 , chg * 2);

tp3 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 3 , chg * 3);

tp4 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 4 , chg * 4);

tp5 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 5 , chg * 5);

tp6 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 6 , chg * 6);

tp7 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 7 , chg * 7);

key1 = TL_new(sdate[1],stime[1],tp1, sDate,sTime, tp1);

TL_SetColor(Key1,lvlCol);

TL_SetSize(Key1,2);

printedtp1 = 1;

}

Else

TL_SetEnd(key1,sDate,sTime,TP1);

var : u(0),d(0),alp(0),ur(0),dr(0),rs(0),tp(False);

u = max(dist - dist[1], 0);

d = max(dist[1] - dist, 0);

alp = 1/tplen;

ur = IFf(IsNan(ur[1]) == true, ma(u,tplen) , alp * u + (1 - alp) * IFf(isnan(ur[1])==true,0,ur[1]));

dr = IFf(IsNan(dr[1]) == true, ma(d,tplen) , alp * d + (1 - alp) * IFf(isnan(dr[1])==true,0,dr[1]));

rs = ur / dr;

R = 100 - 100 / (1 + rs);

tp = CrossDown(R, 60);

var : extreme(0);

var : extreme_tp1_dist(0);

var : extreme_tp2_dist(0);

var : extreme_tp3_dist(0);

var : extreme_tp4_dist(0);

var : extreme_tp5_dist(0);

var : extreme_tp6_dist(0);

var : extreme_tp7_dist(0);

extreme = iff(trendDirection > 0 , low , high);

extreme_tp1_dist = abs(extreme - tp1);

extreme_tp2_dist = abs(extreme - tp2);

extreme_tp3_dist = abs(extreme - tp3);

extreme_tp4_dist = abs(extreme - tp4);

extreme_tp5_dist = abs(extreme - tp5);

extreme_tp6_dist = abs(extreme - tp6);

extreme_tp7_dist = abs(extreme - tp7);

var : tx(0),S2(0);


if tp and trendDirection > 0 Then

// ==========================================

// 2. S2 슈퍼트렌드 & RSI 구간 점수 (수정본)

// ==========================================

// 기존의 CrossDown(R, 60) 대신 '구간' 점수로 변경하여

// 다른 지표(S1, S3)와 합산 점수를 맞추기 쉽게 만들었습니다.


if trendDirection > 0 Then // 슈퍼트렌드 상승 구간

{

if R > 50 Then

S2 = 1; // RSI가 50 위면 매수 힘 우세 (+1점)

Else

S2 = 0;

}

else if trendDirection < 0 Then // 슈퍼트렌드 하락 구간

{

if R < 50 Then

S2 = -1; // RSI가 50 아래면 매도 힘 우세 (-1점)

Else

S2 = 0;

}

else

{

S2 = 0;

}


// 차트 시각화용 (기존 X 표시는 그대로 둡니다)

if tp and trendDirection > 0 Then

{

tx = Text_New(sDate,sTime,L,"X");

Text_SetStyle(tx,2,0);

Text_SetColor(tx,Red);

Text_SetSize(tx,20);

Text_SetBold(tx,1);

}

if tp and trendDirection < 0 Then

{

tx = Text_New(sDate,sTime,H,"X");

Text_SetStyle(tx,2,1);

Text_SetColor(tx,Green);

Text_SetSize(tx,20);

Text_SetBold(tx,1);

}


if printedtp2 == 0 and extreme_tp2_dist < extreme_tp1_dist Then

{

key2 = TL_new(sdate[1],stime[1],tp2, sDate,sTime, tp2);

TL_SetColor(Key2,lvlCol);

TL_SetSize(Key2,2);

printedtp2 = 1;

}

Else

{

if printedtp2 == 1 Then

TL_SetEnd(key2,sDate,sTime,TP2);

}

if printedtp3 == 0 and extreme_tp3_dist < extreme_tp2_dist Then

{

key3 = TL_new(sdate[1],stime[1],tp3, sDate,sTime, tp3);

TL_SetColor(Key3,lvlCol);

TL_SetSize(Key3,2);

printedtp3 = 1;

}

Else

{

if printedtp3 == 1 Then

TL_SetEnd(key3,sDate,sTime,TP3);

}

if printedtp4 == 0 and extreme_tp4_dist < extreme_tp3_dist Then

{

key4 = TL_new(sdate[1],stime[1],tp4, sDate,sTime, tp4);

TL_SetColor(Key4,lvlCol);

TL_SetSize(Key4,2);

printedtp4 = 1;

}

Else

{

if printedtp4 == 1 Then

TL_SetEnd(key4,sDate,sTime,TP4);

}

if printedtp5 == 0 and extreme_tp5_dist < extreme_tp4_dist Then

{

key5 = TL_new(sdate[1],stime[1],tp5, sDate,sTime, tp5);

TL_SetColor(Key5,lvlCol);

TL_SetSize(Key5,2);

printedtp5 = 1;

}

Else

{

if printedtp5 == 1 Then

TL_SetEnd(key5,sDate,sTime,TP5);

}

if printedtp6 == 0 and extreme_tp6_dist < extreme_tp5_dist Then

{

key6 = TL_new(sdate[1],stime[1],tp6, sDate,sTime, tp6);

TL_SetColor(Key6,lvlCol);

TL_SetSize(Key6,2);

printedtp6 = 1;

}

Else

{

if printedtp6 == 1 Then

TL_SetEnd(key6,sDate,sTime,TP6);

}

if printedtp7 == 0 and extreme_tp7_dist < extreme_tp6_dist Then

{

key7 = TL_new(sdate[1],stime[1],tp7, sDate,sTime, tp7);

TL_SetColor(Key7,lvlCol);

TL_SetSize(Key7,2);

printedtp7 = 1;

}

Else

{

if printedtp7 == 1 Then

TL_SetEnd(key7,sDate,sTime,TP7);

}


// 1. 매수 진입: S2(RSI) + S3(표준슈트) 합이 1점일 때

if MarketPosition <= 0 and (S2 + S3 == 1) Then

Buy("매수");


// 2. 매수 청산: 합이 0 이하로 떨어지면 (힘 빠지면 탈출)

if MarketPosition == 1 and (S2 + S3 <= 0) Then

ExitLong("매수청산");


// 3. 매도 진입: 합이 -2점일 때 (둘 다 하락 신호)

if MarketPosition >= 0 and (S2 + S3 == -21) Then

Sell("매도");


// 4. 매도 청산: 합이 0 이상으로 올라오면 (반등하면 탈출)

if MarketPosition == -1 and (S2 + S3 >= 0) Then

ExitShort("매도청산");




수고많으십니다

문의드릴 내용은 위 수식에서

매수 같은 경우

실제 신호보다 40틱 낮은 가격에 왔을때 매수

매도 같은 경우

실제 신호보다 40틱 높은 가격에 왔을때 매도

이렇게 진입이 이루어 지게 부탁드리겠습니다

청산은 기존과 똑 같습니다

감사합니다



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

예스스탁 예스스탁 답변

2026-05-11 16:48:55

안녕하세요 예스스탁입니다. input : 익절틱수(40000),손절틱수(520); var : Ema100(0); ema100 = ema(close, 100); input : atrPeriod(10),factor(3); var : src(0), alpha(0),ATRV(0),upperBand(0),lowerBand(0),direction(0),SuperTrend(C); if CurrentBar > 1 Then { src = (H+L)/2; alpha = 1 / atrPeriod ; ATRV = IFf(IsNan(ATRV[1]) == true, ma(TrueRange,atrPeriod) , alpha * TrueRange + (1 - alpha) * IFf(isnan(ATRV[1])==true,0,ATRV[1])); upperBand = src + factor * AtrV; lowerBand = src - factor * AtrV; if lowerBand > lowerBand[1] or close[1] < lowerBand[1] Then lowerBand = lowerBand; Else lowerBand = lowerBand[1]; if upperBand < upperBand[1] or close[1] > upperBand[1] Then upperBand = upperBand; Else upperBand = upperBand[1]; if C > UpperBand Then direction = 1; if C < LowerBand Then direction = -1; if direction == 1 Then SuperTrend = lowerband; Else SuperTrend = upperband; } var : R(0),A(0),longCondition(False),shortCondition(False); R = rsi(14); A = adx(14); longCondition = close > ema100 and direction > 0 and R > 50 and A > 25; shortCondition = close < ema100 and direction < 0 and R <50 and A > 25; var : S3(0); if longCondition == true Then S3 = 1; if shortCondition == true Then S3 = -1; input : atrMult(4.5); input : atrlen(12); input : rsmlen(3); input : tplen(14); var : i(0),sum(0),source(0); var : atrValue1(0),upperLevel(0),lowerLevel(0); var : previousLowerLevel(0),previousUpperLevel(0); var : trendDirection(Nan),superTrendValue(Nan); var : previousTrend(0); if CurrentBar > 1 Then { sum = 0; for i = 0 to rsmlen-1 { sum = sum + c[i]*c[i]; } source = sqrt(sum/rsmlen); alpha = 1 / atrlen ; atrValue1 = IFf(IsNan(atrValue1[1]) == true, ma(TrueRange,atrlen) , alpha * TrueRange + (1 - alpha) * IFf(isnan(atrValue1[1])==true,0,atrValue1[1])); upperLevel = source + atrMult * atrValue1; lowerLevel = source - atrMult * atrValue1; previousLowerLevel = iff(isnan(lowerLevel[1])==true,0,lowerLevel[1]); previousUpperLevel = iff(isnan(upperLevel[1])==true,0,upperLevel[1]); // Ensure continuity of lower and upper bands lowerLevel = iff(lowerLevel > previousLowerLevel or source[1] < previousLowerLevel , lowerLevel , previousLowerLevel); upperLevel = iff(upperLevel < previousUpperLevel or source[1] > previousUpperLevel , upperLevel , previousUpperLevel); // Determine direction and SuperTrend previousTrend = superTrendValue[1]; // Initialize direction if IsNan(atrValue1[1]) == true Then trendDirection = 1; else if previousTrend == previousUpperLevel Then trendDirection = iff(source > upperLevel , -1 , 1); else trendDirection = iff(source < lowerLevel , 1 , -1); // Set SuperTrend value based on direction superTrendValue = iff(trendDirection == -1 , lowerLevel , upperLevel); } var : dist(0),chg(0),lvlCol(0); var : tp1(0),tp2(0),tp3(0),tp4(0),tp5(0),tp6(0),tp7(0); var : printedtp1(0),printedtp2(0),printedtp3(0),printedtp4(0),printedtp5(0),printedtp6(0),printedtp7(0); dist = abs(close-superTrendValue); lvlCol = iff(trendDirection > 0 , red , green); var : key1(0); var : key2(0); var : key3(0); var : key4(0); var : key5(0); var : key6(0); var : key7(0); if CrossUp(trendDirection, 0) or CrossDown(trendDirection, 0) Then { //TL_Delete(keys); printedtp1 = 0; printedtp2 = 0; printedtp3 = 0; printedtp4 = 0; printedtp5 = 0; printedtp6 = 0; printedtp7 = 0; chg = abs(superTrendValue-superTrendValue[1]); tp1 = superTrendValue[1] + IFF(trendDirection > 0 , -chg , chg); tp2 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 2 , chg * 2); tp3 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 3 , chg * 3); tp4 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 4 , chg * 4); tp5 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 5 , chg * 5); tp6 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 6 , chg * 6); tp7 = superTrendValue[1] + IFF(trendDirection > 0 , -chg * 7 , chg * 7); key1 = TL_new(sdate[1],stime[1],tp1, sDate,sTime, tp1); TL_SetColor(Key1,lvlCol); TL_SetSize(Key1,2); printedtp1 = 1; } Else TL_SetEnd(key1,sDate,sTime,TP1); var : u(0),d(0),alp(0),ur(0),dr(0),rs(0),tp(False); u = max(dist - dist[1], 0); d = max(dist[1] - dist, 0); alp = 1/tplen; ur = IFf(IsNan(ur[1]) == true, ma(u,tplen) , alp * u + (1 - alp) * IFf(isnan(ur[1])==true,0,ur[1])); dr = IFf(IsNan(dr[1]) == true, ma(d,tplen) , alp * d + (1 - alp) * IFf(isnan(dr[1])==true,0,dr[1])); rs = ur / dr; R = 100 - 100 / (1 + rs); tp = CrossDown(R, 60); var : extreme(0); var : extreme_tp1_dist(0); var : extreme_tp2_dist(0); var : extreme_tp3_dist(0); var : extreme_tp4_dist(0); var : extreme_tp5_dist(0); var : extreme_tp6_dist(0); var : extreme_tp7_dist(0); extreme = iff(trendDirection > 0 , low , high); extreme_tp1_dist = abs(extreme - tp1); extreme_tp2_dist = abs(extreme - tp2); extreme_tp3_dist = abs(extreme - tp3); extreme_tp4_dist = abs(extreme - tp4); extreme_tp5_dist = abs(extreme - tp5); extreme_tp6_dist = abs(extreme - tp6); extreme_tp7_dist = abs(extreme - tp7); var : tx(0),S2(0); if tp and trendDirection > 0 Then // ========================================== // 2. S2 슈퍼트렌드 & RSI 구간 점수 (수정본) // ========================================== // 기존의 CrossDown(R, 60) 대신 '구간' 점수로 변경하여 // 다른 지표(S1, S3)와 합산 점수를 맞추기 쉽게 만들었습니다. if trendDirection > 0 Then // 슈퍼트렌드 상승 구간 { if R > 50 Then S2 = 1; // RSI가 50 위면 매수 힘 우세 (+1점) Else S2 = 0; } else if trendDirection < 0 Then // 슈퍼트렌드 하락 구간 { if R < 50 Then S2 = -1; // RSI가 50 아래면 매도 힘 우세 (-1점) Else S2 = 0; } else { S2 = 0; } // 차트 시각화용 (기존 X 표시는 그대로 둡니다) if tp and trendDirection > 0 Then { tx = Text_New(sDate,sTime,L,"X"); Text_SetStyle(tx,2,0); Text_SetColor(tx,Red); Text_SetSize(tx,20); Text_SetBold(tx,1); } if tp and trendDirection < 0 Then { tx = Text_New(sDate,sTime,H,"X"); Text_SetStyle(tx,2,1); Text_SetColor(tx,Green); Text_SetSize(tx,20); Text_SetBold(tx,1); } if printedtp2 == 0 and extreme_tp2_dist < extreme_tp1_dist Then { key2 = TL_new(sdate[1],stime[1],tp2, sDate,sTime, tp2); TL_SetColor(Key2,lvlCol); TL_SetSize(Key2,2); printedtp2 = 1; } Else { if printedtp2 == 1 Then TL_SetEnd(key2,sDate,sTime,TP2); } if printedtp3 == 0 and extreme_tp3_dist < extreme_tp2_dist Then { key3 = TL_new(sdate[1],stime[1],tp3, sDate,sTime, tp3); TL_SetColor(Key3,lvlCol); TL_SetSize(Key3,2); printedtp3 = 1; } Else { if printedtp3 == 1 Then TL_SetEnd(key3,sDate,sTime,TP3); } if printedtp4 == 0 and extreme_tp4_dist < extreme_tp3_dist Then { key4 = TL_new(sdate[1],stime[1],tp4, sDate,sTime, tp4); TL_SetColor(Key4,lvlCol); TL_SetSize(Key4,2); printedtp4 = 1; } Else { if printedtp4 == 1 Then TL_SetEnd(key4,sDate,sTime,TP4); } if printedtp5 == 0 and extreme_tp5_dist < extreme_tp4_dist Then { key5 = TL_new(sdate[1],stime[1],tp5, sDate,sTime, tp5); TL_SetColor(Key5,lvlCol); TL_SetSize(Key5,2); printedtp5 = 1; } Else { if printedtp5 == 1 Then TL_SetEnd(key5,sDate,sTime,TP5); } if printedtp6 == 0 and extreme_tp6_dist < extreme_tp5_dist Then { key6 = TL_new(sdate[1],stime[1],tp6, sDate,sTime, tp6); TL_SetColor(Key6,lvlCol); TL_SetSize(Key6,2); printedtp6 = 1; } Else { if printedtp6 == 1 Then TL_SetEnd(key6,sDate,sTime,TP6); } if printedtp7 == 0 and extreme_tp7_dist < extreme_tp6_dist Then { key7 = TL_new(sdate[1],stime[1],tp7, sDate,sTime, tp7); TL_SetColor(Key7,lvlCol); TL_SetSize(Key7,2); printedtp7 = 1; } Else { if printedtp7 == 1 Then TL_SetEnd(key7,sDate,sTime,TP7); } var : T(0),S(0),LL(Nan),HH(Nan); // 1. 매수 진입: S2(RSI) + S3(표준슈트) 합이 1점일 때 if MarketPosition <= 0 Then { if (S2 + S3 == 1) Then { T = 1; S = C; LL = L; } if L < LL Then LL = L; if T == 1 and LL >= S-PriceScale*40 Then Buy("매수",AtLimit,S-PriceScale*40); } // 2. 매수 청산: 합이 0 이하로 떨어지면 (힘 빠지면 탈출) if MarketPosition == 1 Then { LL = nan; if (S2 + S3 <= 0) Then ExitLong("매수청산"); } // 3. 매도 진입: 합이 -2점일 때 (둘 다 하락 신호) if MarketPosition >= 0 Then { if (S2 + S3 == -21) Then { T = -1; S = C; HH = H; } if H > HH Then HH = H; if T == -1 and HH < S+PriceScale*40 Then Sell("매도",AtLimit,S+PriceScale*40); } // 4. 매도 청산: 합이 0 이상으로 올라오면 (반등하면 탈출) if MarketPosition == -1 Then { HH = Nan; if (S2 + S3 >= 0) Then ExitShort("매도청산"); } 즐거운 하루되세요