답변완료
수식수정 부탁드립니다
아래의 지표수식에 대해 수정 요망합니다.#기본조건 설정#===================================================================================================input : 상승단갭율(1.45), 양봉기준율(0.050), 음봉기준율(0.0499), 가격라인율(11.8);var : 양봉(False),음봉(False), GapUp(False), GapDown(False) ;input : 하락갭율양(1.75), 하락갭율음(-1.75);양봉 = C >= O *(1+양봉기준율/100) ;음봉 = C < O*(1+음봉기준율/100) or C < O ;GapUp = ( O - C[1] ) / C[1] * 100 >= 상승단갭율 ; GapDown = ( (C[1] * (1-하락갭율양/100) >= O) or ((O-C[1])/C[1] * 100 <= 하락갭율음) ) and C[1] > O and O[1] > O ; #시가 상승갭 발생의 경우#===================================================================================================if GapUp == true and C[1] <= O[1] and C > O Then { Var1 = C[1] ; Var2 = (C-O)*가격라인율/100+O ; }if GapUp == true and C[1] <= O[1] and C <= O Then { Var1 = C[1] ; Var2 = O ; }if GapUp == true and C[1] > O[1] and C > O Then { Var1 = C[1] ; Var2 = (C-O)*가격라인율/100+O ; }if GapUp == true and C[1] > O[1] and C <= O Then { Var1 = C[1] ; Var2 = O ; }Plot1(Var1, "상승갭전일종가라인");Plot2(Var2, "상승갭당일시가라인");#===================================================================================#갭하락캔들의 음봉 또는 양봉를 구별하여 라인 설정#===================================================================================if GapDown == true and C <= O Then #하락갭이면서 음봉인 경우{ if 양봉[1] == true Then { Var3 = O[1] ; Var4 = O ; } if 음봉[1] == true Then { Var3 = C[1] ; Var4 = C ; }}if GapDown == true and C > O Then #하락갭이면서 양봉인 경우{ if 양봉[1] == true and C <= C[1] Then #1봉전의 캔들이 양봉이면서 전일종가보다 당일종가가 낮은 경우는 1봉전 시가와 당일시가로 두개의 가격라인이 생성되고 { Var3 = O[1] ; Var4 = O ; } if 양봉[1] == true and C > C[1] Then #1봉전의 캔들이 양봉이면서 전일종가보다 당일종가가 높은 경우는 당일종가와 1봉전 종가로 두개의 가격라인이 생성되고 { Var3 = O[1] ; Var4 = O ; } if 음봉[1] == true and C <= C[1] Then #1봉전의 캔들이 음봉이면서 전일종가보다 당일종가가 낮은 경우는 1봉전 종가와 당일종가로 두개의 가격라인이 생성되고 { Var3 = C[1] ; Var4 = O ; } if 음봉[1] == true and C > C[1] Then #1봉전의 캔들이 음봉이면서 전일종가보다 당일종가가 높은 경우는 1봉전 종가와 당일시가로 두개의 가격라인이 생성되고 { Var3 = C[1] ; Var4 = O ; }}Plot3(Var3, "하락갭전일종가라인음양봉");Plot4(Var4, "하락갭당일가격라인음양봉");#==============================================================================================# 1. 상승 갭(Var1) 계단식 변동 추적 #==============================================================================================var : UGap0(0), UGap1(0), UGap2(0), UGap3(0); var : UIdx0(0), UIdx1(0), UIdx2(0), UIdx3(0); # 변동이 발생한 봉 번호(Index)var : URate(0), txUp(0);Input : U최소변동하락율(40),U계단변동율텍스트표시(1),글자크기UU(13),글자긁기UU(1),글자크기UD(13),글자긁기UD(1);var : U_UpCnt(0), U_DnCnt(0); var : U_PrevCnt1(0), U_PrevCnt2(0);if Var1 > 0 and Var1 != Var1[1] Then{ # 1-1. 가격 데이터 계단식 이관 if Var1[1] == Var1[2] Then { UGap3 = UGap2; UGap2 = UGap1; UGap1 = UGap0; } UGap0 = Var1; # 1-2. 발생 위치(인덱스) 계단식 이관 if Var1[1] == Var1[2] Then { UIdx3 = UIdx2; UIdx2 = UIdx1; UIdx1 = UIdx0; } UIdx0 = Index; # 1-3. 변동률 계산 및 텍스트 출력 if UGap1 > 0 Then { URate = (UGap0 - UGap1) / UGap1 * 100; # (현재-과거)/과거 * 100 if Var1[1] != Var1[2] Then { Text_Delete(txUp); } Else { # 연속 카운팅 및 과거 파동 저장 로직 if URate > 0 Then # 위로 변동 (상승) { if U_DnCnt > 0 Then { U_PrevCnt2 = U_PrevCnt1; U_PrevCnt1 = -U_DnCnt; } U_UpCnt = U_UpCnt + 1; # 상승 카운트 1 증가 U_DnCnt = 0; # 하락 카운트 초기화 } Else if URate < 0 Then # 아래로 변동 (하락) { if U_UpCnt > 0 Then { U_PrevCnt2 = U_PrevCnt1; U_PrevCnt1 = U_UpCnt; } U_DnCnt = U_DnCnt + 1; U_UpCnt = 0; } } if U계단변동율텍스트표시 == 1 and Abs(URate) >= U최소변동하락율 Then { if URate > 0 Then # 위로 변동 (상승) { txUp = Text_New(sDate, sTime, H * 1.05, "+" + NumToStr(URate, 2) + "%"); Text_SetColor(txUp, BlacK); Text_SetStyle(txUp, 2, 1); Text_SetSize(txUp, 글자크기UU); Text_SetBold(txUp, 글자긁기UU); } Else if URate < 0 Then # 아래로 변동 (하락) { txUp = Text_New(sDate, sTime, L * 0.95, NumToStr(URate, 2) + "%"); Text_SetColor(txUp, WhitE); Text_SetStyle(txUp, 2, 0); Text_SetSize(txUp, 글자크기UD); Text_SetBold(txUp, 글자긁기UD); } } }}#==============================================================================================# 2. 하락 갭(Var3) 계단식 변동 추적 및 텍스트 표시#==============================================================================================var : DGap0(0), DGap1(0), DGap2(0), DGap3(0); var : DIdx0(0), DIdx1(0), DIdx2(0), DIdx3(0); # 변동이 발생한 봉 번호(Index)var : DRate(0), txDown(0);Input : D최소변동하락율(30),D계단변동율텍스트표시(1),글자크기DU(15),글자긁기DU(1),글자크기DD(15),글자긁기DD(1);var : D_UpCnt(0), D_DnCnt(0); var : D_PrevCnt1(0), D_PrevCnt2(0); if Var3 > 0 and Var3 != Var3[1] Then{ # 2-1. 가격 데이터 계단식 이관 if Var3[1] == Var3[2] Then { DGap3 = DGap2; DGap2 = DGap1; DGap1 = DGap0; } DGap0 = Var3; # 2-2. 발생 위치(인덱스) 계단식 이관 if Var3[1] == Var3[2] Then { DIdx3 = DIdx2; DIdx2 = DIdx1; DIdx1 = DIdx0; } DIdx0 = Index; # 2-3. 변동률 계산 및 텍스트 출력 if DGap1 > 0 Then { DRate = (DGap0 - DGap1) / DGap1 * 100; if Var3[1] != Var3[2] Then { Text_Delete(txDown); } Else { # 연속 카운팅 및 과거 파동 저장 로직 if DRate > 0 Then # 위로 변동 (상승) { if D_DnCnt > 0 Then { D_PrevCnt2 = D_PrevCnt1; D_PrevCnt1 = -D_DnCnt; } D_UpCnt = D_UpCnt + 1; D_DnCnt = 0; } Else if DRate < 0 Then { if D_UpCnt > 0 Then { D_PrevCnt2 = D_PrevCnt1; D_PrevCnt1 = D_UpCnt; } D_DnCnt = D_DnCnt + 1; D_UpCnt = 0; } } if D계단변동율텍스트표시 == 1 and Abs(DRate) >= D최소변동하락율 Then { if DRate > 0 Then # 위로 변동 (상승) { txDown = Text_New(sDate, sTime, H * 1.05, "+" + NumToStr(DRate, 2) + "%"); Text_SetColor(txDown, Red); Text_SetStyle(txDown, 2, 1); Text_SetSize(txDown, 글자크기DU); Text_SetBold(txDown, 글자긁기DU); } Else if DRate < 0 Then # 아래로 변동 (하락) { txDown = Text_New(sDate, sTime, L * 0.95, NumToStr(DRate, 2) + "%"); Text_SetColor(txDown, Blue); Text_SetStyle(txDown, 2, 0); Text_SetSize(txDown, 글자크기DD); Text_SetBold(txDown, 글자긁기DD); } } }}plot1~4의 라인은 계단식 상승 또는 하락의 변동라인을 표시하게 되어 있는데 이 변동의 변동율을 차트에 표시하게 하는 수식입니다.문제는 일정한 변동율이 있을 때에만 표시되게 수식을 구성하였는데 일정율이상의 변동율이 발생했음에도 불구하고 차트에 표시가 되지 않아서 수정 검토를 요청드리는 것입니다.예를 들어 현대건설의 주봉차트에서 문제가 되고 있는 부분에 대해서 예시해보겠습니다.1. 2020년 3월 27일 주봉의 경우는 Plot3(Var3, "하락갭전일종가라인음양봉");라인의 하락변동율이 38.90%가 됨에도 불구하고 U최소변동하락율(40)와 D최소변동하락율을 23이상 입력하면 표시가 안되지만 22이하로 입력하면 표시가 됩니다. 그런데 U최소변동하락율을39이하로 설정하고 D최소변동하락율을 38까지 입력하면 변동율이 표시가 됩니다. 즉 U최소변동하락율과 D최소변동하락율는 각각 독립적으로작동을 해야하는데 연동되어 표시가 된다는 것입니다.2. 2015년 07월 03일의 주봉은 28.32%, 2016년 02월 12일의 주봉은 27.49%인데 D최소변동하락율을 각 변화율보다 낮은 변화율을 설정하면 표시가 되어야 하는데 U최소변동하락율(40)와 25%, 15%등을 설정하면 표시가 안되다가 D최소변동하락율을 0에 가깝게 설정하거나 U최소변동하락율(40)을 일정이하로 변동시키면 표시가 된다는 것입니다갭상승라인과 갭하락라인의 변동율이 독립적으로 설정한 변동율이상이면 표시가 될 수 있게끔 수정해주시기 바랍니다.
2026-02-20
101
글번호 230661
지표
답변완료
전환추세 쌍바닥
두 양선이 모두 0.2 이상이면 쌍바닥 되는 조건을,직전 양선은 그대로 0.2 이상이면 되는데 나중 양선은 0.25 이상일 때 쌍바닥으로 수정.나중 양선은 전환될 때 0.25 이상일 수도 있고, 0.2에 전환된 후 +1틱일 때 0.25 조건 만족일 수 있습니다.and 저[1,1] <= 고[1,1]-0.25 추가 해보니 오류가 납니다.쌍봉은 반대. 감사합니다.Input : 전환(0.2);Var:j(0),jj(0),HH(0),LL(0),hiBar(0),loBar(0),최종꼭지점(""),처리구분(""), TL(0),TX(0);Array:고[10,4](0),저[10,4](0);HH = H;LL = L;If Index == 0 Then{ 고[1,1] = HH; 고[1,2] = 0; 고[1,3] = sDate; 고[1,4] = sTime; 저[1,1] = LL; 저[1,2] = 0; 저[1,3] = sDate; 저[1,4] = sTime;}If Index > 0 Then{ hiBar = hiBar + 1; loBar = loBar + 1;}If HH[hiBar] < HH Then hiBar = 0;If LL[loBar] > LL Then loBar = 0;Condition1 = 저[1,1]+전환 <= HH and hiBar == 0;Condition2 = 고[1,1]-전환 >= LL and loBar == 0;처리구분 = "";If Condition1 and Condition2 Then { If 최종꼭지점 == "저점" Then { If 저[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; }}Else If Condition1 Then 처리구분 = "고점처리";Else If Condition2 Then 처리구분 = "저점처리";If 처리구분 == "고점처리" Then{ If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH[hiBar]; 고[1,2] = Index - hiBar; 고[1,3] = sDate[hiBar]; 고[1,4] = sTime[hiBar]; hiBar = -1; loBar = -1; TL = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); TL_SetSize(TL,1); TL_SetColor(TL,Red); if 저[1,1] <= 저[2,1] + PriceScale* 1 and 저[1,1] >= 저[2,1] - PriceScale* 1 and 저[1,1]<= highest(H,400)-2.5 and 저[1,1]<= lowest(L,200)+0.1 Then { tx = Text_New(저[1,3],저[1,4],저[1,1]-0.3,"●"); Text_SetStyle(tx,2,2); Text_SetColor(tx,Red); Text_SetSize(tx,12); } } Else If 고[1,1] < HH[hiBar] Then { 고[1,1] = HH[hiBar]; 고[1,2] = Index - hiBar; 고[1,3] = sDate[hiBar]; 고[1,4] = sTime[hiBar]; hiBar = -1; loBar = -1; TL_SetEnd(TL,고[1,3],고[1,4],고[1,1]); } 최종꼭지점 = "고점"; }If 처리구분 == "저점처리" Then{ If 최종꼭지점 == "고점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL[loBar]; 저[1,2] = Index - loBar; 저[1,3] = sDate[loBar]; 저[1,4] = sTime[loBar]; hiBar = -1; loBar = -1; TL = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL,1); TL_SetColor(TL,Blue); if max(고[1,1],고[2,1]) <= min(고[1,1],고[2,1])+PriceScale*1 and 고[1,1] >= lowest(L,400)+2.5 and 고[1,1] >= highest(H,200)-0.1 Then { tx = Text_New(고[1,3],고[1,4],고[1,1]+0.3,"●"); Text_SetStyle(tx,2,2); Text_SetColor(tx,Blue); Text_SetSize(tx,12); } } Else If 저[1,1] > LL[loBar] Then { 저[1,1] = LL[loBar]; 저[1,2] = Index - loBar; 저[1,3] = sDate[loBar]; 저[1,4] = sTime[loBar]; hiBar = -1; loBar = -1; TL_SetEnd(TL,저[1,3],저[1,4],저[1,1]); } 최종꼭지점 = "저점"; Plot2(저[1,1]); NoPlot(1);}