커뮤니티

문의드립니다

프로필 이미지
cjfdk
2025-12-10 11:01:40
76
글번호 228821
답변완료


input : atrMult(4.5);

input : atrlen(12);

input : rsmlen(3);

input : tplen(14);

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

var : alpha(0),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);

}

plot1(superTrendValue,"ST", iff(trendDirection > 0 , red,green));

Plot2((C+O)/2,"bodyMiddle");

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),R(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);

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);

}


수고많으십니다

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


Red색 X표시가 나오면

매수진입 매도청산

Red색 X표시가 계속 나오면 최대 10개까지 계속 매수진입


Green색 X표시가 나오면

매도진입 매수청산

Green색 X표시가 계속 나오면 최대 10개까지 계속 매도진입

이런 수식을 부탁드립니다

감사합니다

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

예스스탁 예스스탁 답변

2025-12-10 14:21:16

안녕하세요 예스스탁입니다. 추가진입을 하므로 피라미딩을 모든진입신호허용으로 설정하고 적용하시면 됩니다. input : atrMult(4.5); input : atrlen(12); input : rsmlen(3); input : tplen(14); var : i(0),sum(0),source(0); var : alpha(0),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),R(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); 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 MarketPosition <= 0 or (MarketPosition == 1 and MaxEntries < 10) Then Buy("b"); } 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 MarketPosition >= 0 or (MarketPosition == -1 and MaxEntries < 10) Then Sell("s"); } 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); } 즐거운 하루되세요