커뮤니티

지표수식(76016번)에 대한 수정 질문드립니다

프로필 이미지
원칙투자자
2022-02-23 11:14:47
1288
글번호 156623
답변완료

첨부 이미지

담당자님, 안녕하세요. (Q&A 76016번과 관련한 추가 질의입니다.) 담당자님께서 작성해 주신 수식을 잘 활용하고 있습니다. 그런데, <지표2>의 시스템 산출 결과가 의도했던 것과는 다른 결과가 산출됩니다. 선택한 기간에 대한 일봉 시가, 종가 중에서 조건에 부합하는 것이 당일(D)에만 추세선으로 표시되어야 하는데, 선택한 기간 보다 이전 과거의 일봉 시가 또는 종가도 당일(D)에 표시되는 경우가 발생하고 당일(D)에 표시되어야 할 추세선이 표시되지 않는 경우도 발생합니다. 첨부된 그림 파일의 예시로 설명드립니다. 기간을 3일(n=3)으로 설정하고 지표를 조회하면 2022.2.21을 당일(D)로 볼 때 (D-1) 2.18 ~ (D-3) 2.16의 일봉 시가, 종가 중 조건에 부합하는 추세선 만이 표시되어야 하는데 그 이외에 표시되지 않아야 할 (D-4) 2.15의 시가 363.90도 추세선으로 표시됩니다. cf. (D-4) 2.15의 종가 360.55는 2.18에만 표시됨. 즉, 2.18을 당일(D)로 볼 때 (D-3)에 해당되는 2.15의 종가 360.55가 2.18에 표시되는 것은 적합함. 또한 예시에는 기재하지 않았으나, 기간 n을 확장해서 조회할 경우에 2022.2.21을 당일(D)로 볼 때 2.21에 표시되지 않아야 할 추세선이 표시되는 사례도 있으며, 2022.2.22의 경우에는 표시되어야 할 추세선이 표시되지 않는 사례도 있습니다. <지표2>에 대해서 다른 결과가 도출되는 점에 대해 검토해주시고 수정해 주실 것을 부탁드립니다. * 일봉 고가와 저가를 연산하는 Q&A 76016번의 <지표1>에서는 위와 같은 사례를 제가 발견하지 못했는데 지표 로직 상 <지표2>와 같은 부분이 보완되어야 한다면 <지표1>의 수정도 부탁드립니다. 수정해서 작성해 주시는 것에 대해 담당자님께 미리 감사드립니다. (담당자님께서 작성해주신 지표2의 수식을 아래에 기재합니다.) -------------------------------------------------------------------------------------- input : N(30); var : cnt(0),HH(0),LL(0); Array : HTL[100](0),LTL[100](0); Array : HTX[100](0),LTX[100](0); if Sdate != sDate[1] Then { For cnt = 1 to N { if HTL[cnt] > 0 Then { TL_SetEnd(HTL[cnt],sDate,sTime,TL_GetValue(HTL[cnt],sDate,sTime)); TL_SetExtRight(HTL[cnt],False); } if LTL[cnt] > 0 Then { TL_SetEnd(LTL[cnt],sDate,sTime,TL_GetValue(LTL[cnt],sDate,sTime)); TL_SetExtRight(LTL[cnt],False); } if cnt == 1 Then { var1 = max(DayOpen(cnt),DayClose(cnt)); var2 = min(DayOpen(cnt),DayClose(cnt)); HTL[cnt] = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1); TL_SetColor(HTL[cnt],RED); TL_SetExtRight(HTL[cnt],true); TL_SetDrawMode(HTL[cnt],0); HH = var1; LTL[cnt] = TL_New(sDate,sTime,var2,NextBarSdate,NextBarStime,var2); TL_SetColor(LTL[cnt],BLUE); TL_SetExtRight(LTL[cnt],true); TL_SetDrawMode(LTL[cnt],0); LL = var2; } Else { var1 = max(DayOpen(cnt),DayClose(cnt)); var2 = min(DayOpen(cnt),DayClose(cnt)); if abs(var1-DayOpen(0)) < 10 and (var1 > HH or var1 < LL) Then { HTL[cnt] = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1); TL_SetColor(HTL[cnt],RED); TL_SetExtRight(HTL[cnt],true); TL_SetDrawMode(HTL[cnt],0); } if abs(Var2-DayOpen(0)) < 10 and (Var2 > HH or Var2 < LL) Then { LTL[cnt] = TL_New(sDate,sTime,Var2,NextBarSdate,NextBarStime,Var2); TL_SetColor(LTL[cnt],BLUE); TL_SetExtRight(LTL[cnt],true); TL_SetDrawMode(LTL[cnt],0); } if var1 > HH and abs(var1-DayOpen(0)) < 10 Then HH = DayHigh(cnt); if Var2 < LL and abs(Var2-DayOpen(0)) < 10 Then LL = DayLow(cnt); } } } -----------------------------------------------------------------------------------
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-02-23 14:03:39

안녕하세요 예스스탁입니다. 두식 모두 수정해 드립니다. 1 시종 input : N(3); var : cnt(0),HH(0),LL(0),HTL1(0),LTL1(0),H1(0),L1(0); Array : HTL[100](0),LTL[100](0); if Sdate != sDate[1] Then { value1 = sDate; Value2 = value1[1]; Value3 = sTime; Value4 = Value3[1]; For cnt = 1 to N { TL_Delete(HTL[cnt]); TL_Delete(LTL[cnt]); var1 = max(DayOpen(cnt),DayClose(cnt)); var2 = min(DayOpen(cnt),DayClose(cnt)); if cnt == 1 Then { HTL[cnt] = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1); TL_SetColor(HTL[cnt],RED); TL_SetExtRight(HTL[cnt],true); TL_SetDrawMode(HTL[cnt],0); HH = var1; LTL[cnt] = TL_New(sDate,sTime,var2,NextBarSdate,NextBarStime,var2); TL_SetColor(LTL[cnt],BLUE); TL_SetExtRight(LTL[cnt],true); TL_SetDrawMode(LTL[cnt],0); LL = var2; } Else { if abs(var1-DayOpen(0)) < 10 and (var1 > HH or var1 < LL) Then { HTL[cnt] = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1); TL_SetColor(HTL[cnt],RED); TL_SetExtRight(HTL[cnt],true); TL_SetDrawMode(HTL[cnt],0); } if abs(Var2-DayOpen(0)) < 10 and (Var2 > HH or Var2 < LL) Then { LTL[cnt] = TL_New(sDate,sTime,Var2,NextBarSdate,NextBarStime,Var2); TL_SetColor(LTL[cnt],BLUE); TL_SetExtRight(LTL[cnt],true); TL_SetDrawMode(LTL[cnt],0); } if var1 > HH and abs(var1-DayOpen(0)) < 10 Then HH = DayHigh(cnt); if Var2 < LL and abs(Var2-DayOpen(0)) < 10 Then LL = DayLow(cnt); } var3 = max(DayOpen(cnt+1),DayClose(cnt+1)); var4 = min(DayOpen(cnt+1),DayClose(cnt+1)); if cnt == 1 Then { HTL1 = TL_New(Value2,value4,var3,sDate[1],sTime[1],var3); TL_SetColor(HTL1,RED); TL_SetDrawMode(HTL1,0); H1 = var3; LTL1 = TL_New(Value2,Value3,var4,sDate[1],sTime[1],var4); TL_SetColor(LTL1,BLUE); TL_SetDrawMode(LTL1,0); L1 = var4; } Else { if abs(var3-DayOpen(1)) < 10 and (var3 > H1 or var3 < L1) Then { HTL1 = TL_New(Value2,value4,var3,sDate[1],sTime[1],var3); TL_SetColor(HTL1,RED); TL_SetDrawMode(HTL1,0); } if abs(Var4-DayOpen(1)) < 10 and (Var4 > H1 or Var4 < L1) Then { LTL1 = TL_New(Value2,Value3,var4,sDate[1],sTime[1],var4); TL_SetColor(LTL1,BLUE); TL_SetDrawMode(LTL1,0); } if var3 > H1 and abs(var3-DayOpen(1)) < 10 Then H1 = Var3; if Var2 < L1 and abs(Var2-DayOpen(0)) < 10 Then L1 = Var4; } } } 2 고저 input : N(3); var : cnt(0),HH(0),LL(0),HTL1(0),LTL1(0),H1(0),L1(0); Array : HTL[100](0),LTL[100](0); if Sdate != sDate[1] Then { value1 = sDate; Value2 = value1[1]; Value3 = sTime; Value4 = Value3[1]; For cnt = 1 to N { TL_Delete(HTL[cnt]); TL_Delete(LTL[cnt]); var1 = max(DayHigh(cnt),DayLow(cnt)); var2 = min(DayHigh(cnt),DayLow(cnt)); if cnt == 1 Then { HTL[cnt] = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1); TL_SetColor(HTL[cnt],RED); TL_SetExtRight(HTL[cnt],true); TL_SetDrawMode(HTL[cnt],0); HH = var1; LTL[cnt] = TL_New(sDate,sTime,var2,NextBarSdate,NextBarStime,var2); TL_SetColor(LTL[cnt],BLUE); TL_SetExtRight(LTL[cnt],true); TL_SetDrawMode(LTL[cnt],0); LL = var2; } Else { if abs(var1-DayOpen(0)) < 10 and (var1 > HH or var1 < LL) Then { HTL[cnt] = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1); TL_SetColor(HTL[cnt],RED); TL_SetExtRight(HTL[cnt],true); TL_SetDrawMode(HTL[cnt],0); } if abs(Var2-DayOpen(0)) < 10 and (Var2 > HH or Var2 < LL) Then { LTL[cnt] = TL_New(sDate,sTime,Var2,NextBarSdate,NextBarStime,Var2); TL_SetColor(LTL[cnt],BLUE); TL_SetExtRight(LTL[cnt],true); TL_SetDrawMode(LTL[cnt],0); } if var1 > HH and abs(var1-DayOpen(0)) < 10 Then HH = DayHigh(cnt); if Var2 < LL and abs(Var2-DayOpen(0)) < 10 Then LL = DayLow(cnt); } var3 = max(DayHigh(cnt+1),DayLow(cnt+1)); var4 = min(DayHigh(cnt+1),DayLow(cnt+1)); if cnt == 1 Then { HTL1 = TL_New(Value2,value4,var3,sDate[1],sTime[1],var3); TL_SetColor(HTL1,RED); TL_SetDrawMode(HTL1,0); H1 = var3; LTL1 = TL_New(Value2,Value3,var4,sDate[1],sTime[1],var4); TL_SetColor(LTL1,BLUE); TL_SetDrawMode(LTL1,0); L1 = var4; } Else { if abs(var3-DayOpen(1)) < 10 and (var3 > H1 or var3 < L1) Then { HTL1 = TL_New(Value2,value4,var3,sDate[1],sTime[1],var3); TL_SetColor(HTL1,RED); TL_SetDrawMode(HTL1,0); } if abs(Var4-DayOpen(1)) < 10 and (Var4 > H1 or Var4 < L1) Then { LTL1 = TL_New(Value2,Value3,var4,sDate[1],sTime[1],var4); TL_SetColor(LTL1,BLUE); TL_SetDrawMode(LTL1,0); } if var3 > H1 and abs(var3-DayOpen(1)) < 10 Then H1 = Var3; if Var2 < L1 and abs(Var2-DayOpen(0)) < 10 Then L1 = Var4; } } } 즐거운 하루되세요 > 원칙투자자 님이 쓴 글입니다. > 제목 : 지표수식(76016번)에 대한 수정 질문드립니다 > 담당자님, 안녕하세요. (Q&A 76016번과 관련한 추가 질의입니다.) 담당자님께서 작성해 주신 수식을 잘 활용하고 있습니다. 그런데, <지표2>의 시스템 산출 결과가 의도했던 것과는 다른 결과가 산출됩니다. 선택한 기간에 대한 일봉 시가, 종가 중에서 조건에 부합하는 것이 당일(D)에만 추세선으로 표시되어야 하는데, 선택한 기간 보다 이전 과거의 일봉 시가 또는 종가도 당일(D)에 표시되는 경우가 발생하고 당일(D)에 표시되어야 할 추세선이 표시되지 않는 경우도 발생합니다. 첨부된 그림 파일의 예시로 설명드립니다. 기간을 3일(n=3)으로 설정하고 지표를 조회하면 2022.2.21을 당일(D)로 볼 때 (D-1) 2.18 ~ (D-3) 2.16의 일봉 시가, 종가 중 조건에 부합하는 추세선 만이 표시되어야 하는데 그 이외에 표시되지 않아야 할 (D-4) 2.15의 시가 363.90도 추세선으로 표시됩니다. cf. (D-4) 2.15의 종가 360.55는 2.18에만 표시됨. 즉, 2.18을 당일(D)로 볼 때 (D-3)에 해당되는 2.15의 종가 360.55가 2.18에 표시되는 것은 적합함. 또한 예시에는 기재하지 않았으나, 기간 n을 확장해서 조회할 경우에 2022.2.21을 당일(D)로 볼 때 2.21에 표시되지 않아야 할 추세선이 표시되는 사례도 있으며, 2022.2.22의 경우에는 표시되어야 할 추세선이 표시되지 않는 사례도 있습니다. <지표2>에 대해서 다른 결과가 도출되는 점에 대해 검토해주시고 수정해 주실 것을 부탁드립니다. * 일봉 고가와 저가를 연산하는 Q&A 76016번의 <지표1>에서는 위와 같은 사례를 제가 발견하지 못했는데 지표 로직 상 <지표2>와 같은 부분이 보완되어야 한다면 <지표1>의 수정도 부탁드립니다. 수정해서 작성해 주시는 것에 대해 담당자님께 미리 감사드립니다. (담당자님께서 작성해주신 지표2의 수식을 아래에 기재합니다.) -------------------------------------------------------------------------------------- input : N(30); var : cnt(0),HH(0),LL(0); Array : HTL[100](0),LTL[100](0); Array : HTX[100](0),LTX[100](0); if Sdate != sDate[1] Then { For cnt = 1 to N { if HTL[cnt] > 0 Then { TL_SetEnd(HTL[cnt],sDate,sTime,TL_GetValue(HTL[cnt],sDate,sTime)); TL_SetExtRight(HTL[cnt],False); } if LTL[cnt] > 0 Then { TL_SetEnd(LTL[cnt],sDate,sTime,TL_GetValue(LTL[cnt],sDate,sTime)); TL_SetExtRight(LTL[cnt],False); } if cnt == 1 Then { var1 = max(DayOpen(cnt),DayClose(cnt)); var2 = min(DayOpen(cnt),DayClose(cnt)); HTL[cnt] = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1); TL_SetColor(HTL[cnt],RED); TL_SetExtRight(HTL[cnt],true); TL_SetDrawMode(HTL[cnt],0); HH = var1; LTL[cnt] = TL_New(sDate,sTime,var2,NextBarSdate,NextBarStime,var2); TL_SetColor(LTL[cnt],BLUE); TL_SetExtRight(LTL[cnt],true); TL_SetDrawMode(LTL[cnt],0); LL = var2; } Else { var1 = max(DayOpen(cnt),DayClose(cnt)); var2 = min(DayOpen(cnt),DayClose(cnt)); if abs(var1-DayOpen(0)) < 10 and (var1 > HH or var1 < LL) Then { HTL[cnt] = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1); TL_SetColor(HTL[cnt],RED); TL_SetExtRight(HTL[cnt],true); TL_SetDrawMode(HTL[cnt],0); } if abs(Var2-DayOpen(0)) < 10 and (Var2 > HH or Var2 < LL) Then { LTL[cnt] = TL_New(sDate,sTime,Var2,NextBarSdate,NextBarStime,Var2); TL_SetColor(LTL[cnt],BLUE); TL_SetExtRight(LTL[cnt],true); TL_SetDrawMode(LTL[cnt],0); } if var1 > HH and abs(var1-DayOpen(0)) < 10 Then HH = DayHigh(cnt); if Var2 < LL and abs(Var2-DayOpen(0)) < 10 Then LL = DayLow(cnt); } } } -----------------------------------------------------------------------------------