커뮤니티

수식수정 부탁드립니다

프로필 이미지
해피오
2026-01-09 15:15:56
77
글번호 229685
답변완료

2025.12.24자 글번호 229347과 관련되어 수정을 요청드립니다.


**예스랭귀지 지표수식

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

Input : 가격(C), 단순이평P1(5), 단순이평P2(10), 단순이평P3(20), 지수이평P1(5), 지수이평P2(10), 지수이평P3(20);

Input : HL기간(60),저고상승율(0.35),발생제한봉수(20),발생검토봉수(4),H검토봉수(10),L검토봉수(33);

var : HH(0),LL(0),T(0),cnt(0),HHN(0),LLN(0);

var : DC(0),DH(0),DL(0),DGL(0);


var1 = ma(가격,단순이평P1); #5단순이평

var2 = ma(가격,단순이평P2); #10단순이평

var3 = ma(가격,단순이평P3); #20단순이평

var4 = ema(가격,지수이평P1); #5지수이평

var5 = ema(가격,지수이평P2); #10지수이평

var6 = ema(가격,지수이평P3); #20지수이평

HH = Highest(H,HL기간); #L장기간(60)의 H고가격 표시

LL = Lowest(L,HL기간); #L장기간(60)의 L저가격 표시


#주가의 위치관계(최고가와 최저가의 발생시기에 따른)

#======================================================

input : N(60),하향위치(52),상향위치(61.8) ;

var : /*cnt(0),*/ A(0),B(0),Ai(0),Bi(0);

input : 시종상승율(50), 고저상승율(90) ; #봉상승율관련


A = 0;

Ai = 0;

B = 0;

Bi = 0;

For cnt = 0 to N-1

{

if A == 0 or (A > 0 and H[cnt] > A) Then

{

A = H[cnt];

Ai = cnt;

}

if B == 0 or (B > 0 and L[cnt] < B) Then

{

B = L[cnt];

Bi = cnt;

}

}


#최고가후 최저가 출현(하향추세중 반등,상승전환)......최저가후 최고가출현(상향추세중 되돌림)

//Condition8 = ( (Ai > Bi and C <= B+(A-B)*하향위치/100) or (Ai < Bi and C <= B+(A-B)*상향위치/100) ) ;


Condition1 = HH >= LL * ( 1 + 저고상승율/100 ) and CrossDown(var2,var3); #기준캔들D-10이평선이 20이평선을 데드크로스 발생

Condition2 = CrossUp(var2,var3); #기준캔들G - 10이평선이 20이평선을 골드크로스 발생

Condition3 = C < var3 and var3 < O; #20이평선을 시가종가상 잉태된 데드크로스

Condition4 = C < var2 and var2 < O; #10이평선을 시가종가상 잉태된 데드크로스


if Ai < Bi and Condition1 == true and CountIf(Condition1==true,발생제한봉수) == 1 Then

{

T = 1;

DC = Nan;

For cnt = 발생검토봉수 downto 0

{

if Condition1[cnt] == true Then

{

DC = O[cnt]; #"기준D20선잉태음봉시가라인"

}

}

DH = highest(H,H검토봉수); #"기준D기준N1봉최고가라인"

DL = lowest(L,L검토봉수); #"기준D기준N2봉최저가라인"

DGL = L;

}

Else

{

if T == 1 and CrossUp(var2,var3) Then

T = 2;


if T == 1 and L < DGL Then

DGL = L; #"기준D와G최저가가라인"

}


if DC > 0 Then

Plot1(DC, "기준D20선잉태음봉시가라인" );

if DH > 0 then

plot2(DH, "기준D기준N1봉최고가라인" );

if DL > 0 Then

Plot3(DL, "기준D기준N2봉최저가라인" );

if DGL > 0 Then

plot4(DGL, "기준D와G최저가라인" );

if HH > 0 Then

plot10(HHN, "상승추세율연동H라인" ); //신규설정 요망

if LL > 0 Then

plot11(LLN, "하락추세율연동L라인" ); //신규설정 요망


<수정 요청사항>

//현재 주어진 수식에서의 표시라인은 아래와 같으므로 수정 해주세요

// - 시가라인(DC)은 데드발생캔들의 시가가 표시됨.....이 시가라인이 아니라 데드발생캔들포함하여 최근 5봉이내에 20이평선을 데드한 경우중 시가>20이평

&& 종가<20이평인 경우의 캔들을 찾아서 시가라인 설정하는 것임

// 만약시 10이평선과 20이평선의 데드가 발생했지만 20이평선을 시가종가로 잉태되어 데드가 발생하지 않으면 데드크로스가 발생한다고 해서 라인이 설정되면 안된다

// - 최고가라인(DH)와 최저가라인(DL)은 현재 제대로 표시되고 있음

// - 기준캔들D와 기준캔들G사이의 최저가라인(DGL)는 제대로 표시안됨...이 DGL은 기준캔들D가 발생할 시점에서는 라인이 그려지지않고, 이후 기준캔들G가

발생하시에 라인이 그려지는 것임

//신규설정 요망

//- HHN(상승추세율연동H라인)- HL기간동안의 LL가 HH보다 먼저 발생되고(상승추세중인 차트), 그 상승변동폭(=저고상승율)이 0.3%이상일때의 최고가라인지표

//- LLN()- HL기간동안의 HH가 LL보다 먼저 발생되고(하락추세중인 차트), 그 하락변동폭(=저고상승율)이 0.3%이상일때의 최저가라인지표


상기의 내용으로 만든 아래의 키움증권 수식을 참고해주세요

M10 = avg(C, 10);

M20 = avg(C, 20);

HH = Highest(H, 60);

LL = Lowest(L, 60);

고가위치 = BarsSince(H == HH);

저가위치 = BarsSince(L == LL);

상승추세 = 저가위치 > 고가위치;

변동폭 = (HH - LL) /LL >= 고저변동율(0.3%)/100;

데드 = CrossDown(M10, M20);

음봉이탈 = O > M20 && C < M20;

음봉이탈시가 = if(음봉이탈, O, 0); //이탈캔들이면 시가(O), 아니면 0

최고이탈시가 = Highest(음봉이탈시가, 음봉기간5);// 5봉 내에 이탈캔들이 하나라면 그 값이 나오고, 여러 개면 가장 높은 시가, 없으면 0


// 데드 시점의 종가가 20선 아래면 5봉이내 이탈캔들 최고시가, 20선 이상이면 '표시가격' 사용

TargetPrice = if(C < M20, 최고이탈시가, C);

/* 데드+상승+변동폭 만족해야 하며, */

/* 특히 C<M20인 경우 5봉내 이탈캔들이 없으면(가격이 0이면) 신호 제외 */

MainCond = 데드 && 상승추세 && 변동폭 && TargetPrice > 0;


// 데드 발생 시점의 최저가(Line3)

Line3 = Valuewhen(1, MainCond, Lowest(L, L기간));

// 데드(MainCond) 발생 후 경과된 봉 수

BS = BarsSince(MainCond);

// 데드 이후 현재까지 종가가 Line3를 깬 적이 없어야 함

NoBreak = CountSince(MainCond, C < Line3) == 0;

골드 = CrossUp(M10, M20);

// 골드발생 + 저점지지 + 데드발생후 10봉 이상 경과(BS >= 10)

FinalCond = 골드 && NoBreak && BS > H경과기간;


1. 데드발생시가라인; Valuewhen(1, MainCond, TargetPrice) >>>> Plot1(DC, "기준D20선잉태음봉시가라인" );

2. 고점라인; Valuewhen(1, MainCond, Highest(H, 10)) >>>> plot2(DH, "기준D기준N1봉최고가라인" );

3. 저점라인; Valuewhen(1, MainCond, Lowest(L,30)) >>>> Plot3(DL, "기준D기준N2봉최저가라인" );

4. 골드발생종가라인; Valuewhen(1, FinalCond, (C+O)/2) >>>> 예스에서 누락

5. 데드골드간저가라인; Valuewhen(1, FinalCond, Lowest(L, BS)) >>>> plot4(DGL, "기준D와G최저가라인" );


상기 지표 수정 완성 확정이후 신호 수식을 요청할 예정임.


지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-01-12 11:02:27

안녕하세요 예스스탁입니다. input : 고저변동율(0.3),음봉기간5(5),L기간(5),H경과기간(10),HL기간(60); var : M10(0),M20(0),HH(0),LL(0); var : 고가위치(Nan),저가위치(nan),상승추세(false),변동폭(False); var : 데드(False),음봉이탈(False),음봉이탈시가(0),최고이탈시가(0); var : TargetPrice(0),MainCond(False),Line3(0),BS(Nan),CS(Nan); var : NoBreak(False),골드(False),FinalCond(False); M10 = ma(C, 10); M20 = ma(C, 20); HH = Highest(H, HL기간); LL = Lowest(L, HL기간); if H == HH Then 고가위치 = 0; Else 고가위치 = 고가위치+1; if L == LL Then 저가위치 = 0; Else 저가위치 = 저가위치+1; 상승추세 = 저가위치 > 고가위치; 변동폭 = (HH - LL) /LL >= 고저변동율/100; 데드 = CrossDown(M10, M20); 음봉이탈 = O > M20 && C < M20; 음봉이탈시가 = iff(음봉이탈, O, 0); //이탈캔들이면 시가(O), 아니면 0 최고이탈시가 = Highest(음봉이탈시가, 음봉기간5);// 5봉 내에 이탈캔들이 하나라면 그 값이 나오고, 여러 개면 가장 높은 시가, 없으면 0 // 데드 시점의 종가가 20선 아래면 5봉이내 이탈캔들 최고시가, 20선 이상이면 '표시가격' 사용 TargetPrice = iff(C < M20, 최고이탈시가, C); /* 데드+상승+변동폭 만족해야 하며, */ /* 특히 C<M20인 경우 5봉내 이탈캔들이 없으면(가격이 0이면) 신호 제외 */ MainCond = 데드 && 상승추세 && 변동폭 && TargetPrice > 0; // 데드 발생 시점의 최저가(Line3) if MainCond Then { Line3 = Lowest(L, L기간); BS = 0; CS = 0; } Else BS = BS+1; // 데드(MainCond) 발생 후 경과된 봉 수 // 데드 이후 현재까지 종가가 Line3를 깬 적이 없어야 함 if C < Line3 Then CS = CS+1; NoBreak = CS == 0; 골드 = CrossUp(M10, M20); // 골드발생 + 저점지지 + 데드발생후 10봉 이상 경과(BS >= 10) FinalCond = 골드 && NoBreak && BS > H경과기간; var: DC(0),DH(0),DL(0),CC(0),DGL(0); if MainCond Then { DC = TargetPrice; DH = highest(H,10); DL = lowest(L,30); } if finalCond Then { CC = (C+O)/2; DGL = lowest(L,BS); } if DC > 0 Then Plot1(DC); Else NoPlot(1); if DH > 0 Then Plot2(DH); Else NoPlot(2); if DL > 0 Then Plot3(DL); Else NoPlot(3); if CC > 0 Then Plot4(CC); Else NoPlot(4); if DGL > 0 Then Plot5(DGL); Else NoPlot(5); if 저가위치 > 고가위치 and 변동폭 Then plot6(HH); Else NoPlot(6); if 저가위치 < 고가위치 and 변동폭 Then plot7(LL); Else NoPlot(7); 즐거운 하루 되세요