커뮤니티

지표 계산 문의드립니다.

프로필 이미지
여유로운투자
2024-07-11 06:33:40
807
글번호 181372
답변완료

첨부 이미지

var:n(2); // SwingHigh, SwingLow에서 좌우 날개에 해당하는 봉의 개수 var : 파동선두께(2) // 파동선의 두께. 0 ~ 5 ; var : dayH(0),dayL(0); var : nowH(0),nowL(0); var : strongH(0),strongL(0); Var:j(0),jj(0),HH(0),LL(0),TL_H(0),TL_L(0),TL_L_1(0),TL_L_2(0),TL_L_3(0),TL_H_1(0),TL_H_2(0),TL_H_3(0),최종꼭지점(""),처리구분(""); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime var : t1(0),t2(0); if Index==0 Then ClearDebug; 파동선두께 = 1; #==========================================# HH = H; // IFF(조건식,참일 때 결과,거짓일 때 결과) LL = L; // SwingHigh 정의 Condition1 = Highest(HH,n)[n+1] <= HH[n] and HH[n] > Highest(HH,n); // SwingLow 정의 Condition2 = Lowest (LL,n)[n+1] >= LL[n] and LL[n] < Lowest (LL,n); 처리구분 = ""; If Condition1 and Condition2 Then // 긴 장대봉에서는 SwingHigh와 SwingLow가 동시에 나타날 수 있다. { If 최종꼭지점 == "저점" Then { If 저[1,1] > LL[n] Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH[n] Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 and 저[1,1] < HH[n] Then 처리구분 = "고점처리"; // SwingHigh 조건이 돼도 저점보다 낮으면 가격이 계속 하락중이므로 무시한다. Else If Condition2 and 고[1,1] > LL[n] Then 처리구분 = "저점처리"; // SwingLow 조건이 돼도 고점보다 높으면 가격이 계속 상승중이므로 무시한다. //========================================== If 처리구분 == "고점처리" Then { If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 // 2차원 배열이므로 For문안에 또 For문이 올 수 있다. { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH[n]; // 가격 고[1,2] = Index - n; // Index 고[1,3] = sDate[n]; // 날짜 고[1,4] = sTime[n]; // 시각 TL_H = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); // 신규 추세선 생성 TL_SetSize(TL_H,파동선두께); TL_SetColor(TL_H,Red); } Else If 고[1,1] < HH[n] Then // 고점 다음에 다시 고점이 온 경우로 신규 고점이 더 높아야 의미가 있다. { 고[1,1] = HH[n]; 고[1,2] = Index - n; 고[1,3] = sDate[n]; 고[1,4] = sTime[n]; TL_SetEnd(TL_H,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 TL_SetSize(TL_H,파동선두께); } 최종꼭지점 = "고점"; // 이전 꼭지점이 무엇인지 판단하기 쉽도록 변수에 상태를 저장 } //========================================== If 처리구분 == "저점처리" Then { If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL[n]; 저[1,2] = Index - n; 저[1,3] = sDate[n]; 저[1,4] = sTime[n]; TL_L = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_H_3 = TL_H_2; TL_H_2 = TL_H_1; TL_H_1 = TL_H; TL_SetSize(TL_L,파동선두께); TL_SetColor(TL_L,Blue); //var1 = NthHighest(1,strongL,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; //var2 = NthHighest(2,strongL,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; //var3 = NthHighest(3,strongL,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; Var13 = 고[1,2]-저[2,2]+1; var14 = 저[1,2]-고[1,2]+n; t1 = 고[1,2]-저[2,2]+1; t2 = 저[1,2]-고[1,2]+n; //* MessageLog("%.2f %.2f %.2f %.f %.f %.f %.f %.f %.2f ",Asks/Bids,고[1,2]-저[2,2]+1, 저[1,2]-고[1,2]+n,sTime, 고[1,3],고[1,4], 저[2,3],저[2,4], NthHighest(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]); //*/ //var1 = NthHighest(1,Asks/Bids,Var13)[var14]; var2 = NthHighest(2,Asks/Bids,Var13)[var14]; var3 = NthHighest(3,Asks/Bids,Var13)[var14]; //var1 = NthHighest(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; //var2 = NthHighest(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; //var3 = NthHighest(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; MessageLog("%.2f %.2f %.2f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f" ,var1,Var2,Var3,var11,Var12 ,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n], NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] ,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] ,NthHighestBar(1,Asks/Bids,Var13)[var14] ,NthHighestBar(2,Asks/Bids,Var13)[var14] ,NthHighestBar(3,Asks/Bids,Var13)[var14] ,NthHighestBar(1,Asks/Bids,t1)[t2] ,NthHighestBar(2,Asks/Bids,t1)[t2] ,NthHighestBar(3,Asks/Bids,t1)[t2] ); } Else If 저[1,1] > LL[n] then { 저[1,1] = LL[n]; 저[1,2] = Index - n; 저[1,3] = sDate[n]; 저[1,4] = sTime[n]; TL_SetEnd(TL_L,저[1,3],저[1,4],저[1,1]); TL_SetSize(TL_L,파동선두께); } 최종꼭지점 = "저점"; } 질문1 제룡전기 1분봉 1300봉 기준으로 해당지표를돌려보면 24년7월8일 9시59분에 결과값이 매우이상합니다. ,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n], NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] ,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] 와 ,NthHighestBar(1,Asks/Bids,Var13)[var14] ,NthHighestBar(2,Asks/Bids,Var13)[var14] ,NthHighestBar(3,Asks/Bids,Var13)[var14] 와 ,NthHighestBar(1,Asks/Bids,t1)[t2] ,NthHighestBar(2,Asks/Bids,t1)[t2] ,NthHighestBar(3,Asks/Bids,t1)[t2] 는 모두 같은 값이출력되어야하는데 16 17 15 로 출력되고 2 0 3 2 0 3 이렇게 출력됩니다. 매우이상합니다 이런식으로 되면 어떻게 수식을작성해야되는지막막합니다. 해당 구간에서는 ,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n], NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] ,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] 결과값이 맞는걸로나오는데 이게 아니라 다른종목에서는 반대의 결과로 ,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n], NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] ,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] 값이 틀리고 변수로 저장해서 한게 맞는케이스가 간혹나옵니다 디버깅하는데 한계가있는데 디버깅해주십시오 제가 잘못사용하는건지... 아님 프로그램에 버그가있는건지궁금합니다. 질문2 제룡전기 1분봉 1300봉 기준으로 해당지표를돌려보면 24년7월10일 9시9분에 결과값이 매우이상합니다. 0.0 1..7 1.#R 이렇게나오는데요 여기에는 이런 값이 나올수없을뿐더러 이렇게 1.#R로 계산이되는일은 없어야되는곳인데 이렇게 값이 완전다르거나 없는값으로 나오는경우도 많습니다. 확인 부탁드리빈다.
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-07-11 14:43:11

> 여유로운투자 님이 쓴 글입니다. > 제목 : 지표 계산 문의드립니다. > var:n(2); // SwingHigh, SwingLow에서 좌우 날개에 해당하는 봉의 개수 var : 파동선두께(2) // 파동선의 두께. 0 ~ 5 ; var : dayH(0),dayL(0); var : nowH(0),nowL(0); var : strongH(0),strongL(0); Var:j(0),jj(0),HH(0),LL(0),TL_H(0),TL_L(0),TL_L_1(0),TL_L_2(0),TL_L_3(0),TL_H_1(0),TL_H_2(0),TL_H_3(0),최종꼭지점(""),처리구분(""); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime var : t1(0),t2(0); if Index==0 Then ClearDebug; 파동선두께 = 1; #==========================================# HH = H; // IFF(조건식,참일 때 결과,거짓일 때 결과) LL = L; // SwingHigh 정의 Condition1 = Highest(HH,n)[n+1] <= HH[n] and HH[n] > Highest(HH,n); // SwingLow 정의 Condition2 = Lowest (LL,n)[n+1] >= LL[n] and LL[n] < Lowest (LL,n); 처리구분 = ""; If Condition1 and Condition2 Then // 긴 장대봉에서는 SwingHigh와 SwingLow가 동시에 나타날 수 있다. { If 최종꼭지점 == "저점" Then { If 저[1,1] > LL[n] Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH[n] Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 and 저[1,1] < HH[n] Then 처리구분 = "고점처리"; // SwingHigh 조건이 돼도 저점보다 낮으면 가격이 계속 하락중이므로 무시한다. Else If Condition2 and 고[1,1] > LL[n] Then 처리구분 = "저점처리"; // SwingLow 조건이 돼도 고점보다 높으면 가격이 계속 상승중이므로 무시한다. //========================================== If 처리구분 == "고점처리" Then { If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 // 2차원 배열이므로 For문안에 또 For문이 올 수 있다. { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH[n]; // 가격 고[1,2] = Index - n; // Index 고[1,3] = sDate[n]; // 날짜 고[1,4] = sTime[n]; // 시각 TL_H = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); // 신규 추세선 생성 TL_SetSize(TL_H,파동선두께); TL_SetColor(TL_H,Red); } Else If 고[1,1] < HH[n] Then // 고점 다음에 다시 고점이 온 경우로 신규 고점이 더 높아야 의미가 있다. { 고[1,1] = HH[n]; 고[1,2] = Index - n; 고[1,3] = sDate[n]; 고[1,4] = sTime[n]; TL_SetEnd(TL_H,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 TL_SetSize(TL_H,파동선두께); } 최종꼭지점 = "고점"; // 이전 꼭지점이 무엇인지 판단하기 쉽도록 변수에 상태를 저장 } //========================================== If 처리구분 == "저점처리" Then { If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL[n]; 저[1,2] = Index - n; 저[1,3] = sDate[n]; 저[1,4] = sTime[n]; TL_L = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_H_3 = TL_H_2; TL_H_2 = TL_H_1; TL_H_1 = TL_H; TL_SetSize(TL_L,파동선두께); TL_SetColor(TL_L,Blue); //var1 = NthHighest(1,strongL,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; //var2 = NthHighest(2,strongL,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; //var3 = NthHighest(3,strongL,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; Var13 = 고[1,2]-저[2,2]+1; var14 = 저[1,2]-고[1,2]+n; t1 = 고[1,2]-저[2,2]+1; t2 = 저[1,2]-고[1,2]+n; //* MessageLog("%.2f %.2f %.2f %.f %.f %.f %.f %.f %.2f ",Asks/Bids,고[1,2]-저[2,2]+1, 저[1,2]-고[1,2]+n,sTime, 고[1,3],고[1,4], 저[2,3],저[2,4], NthHighest(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]); //*/ //var1 = NthHighest(1,Asks/Bids,Var13)[var14]; var2 = NthHighest(2,Asks/Bids,Var13)[var14]; var3 = NthHighest(3,Asks/Bids,Var13)[var14]; //var1 = NthHighest(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; //var2 = NthHighest(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; //var3 = NthHighest(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n]; MessageLog("%.2f %.2f %.2f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f %.f" ,var1,Var2,Var3,var11,Var12 ,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n], NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] ,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] ,NthHighestBar(1,Asks/Bids,Var13)[var14] ,NthHighestBar(2,Asks/Bids,Var13)[var14] ,NthHighestBar(3,Asks/Bids,Var13)[var14] ,NthHighestBar(1,Asks/Bids,t1)[t2] ,NthHighestBar(2,Asks/Bids,t1)[t2] ,NthHighestBar(3,Asks/Bids,t1)[t2] ); } Else If 저[1,1] > LL[n] then { 저[1,1] = LL[n]; 저[1,2] = Index - n; 저[1,3] = sDate[n]; 저[1,4] = sTime[n]; TL_SetEnd(TL_L,저[1,3],저[1,4],저[1,1]); TL_SetSize(TL_L,파동선두께); } 최종꼭지점 = "저점"; } 질문1 제룡전기 1분봉 1300봉 기준으로 해당지표를돌려보면 24년7월8일 9시59분에 결과값이 매우이상합니다. ,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n], NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] ,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] 와 ,NthHighestBar(1,Asks/Bids,Var13)[var14] ,NthHighestBar(2,Asks/Bids,Var13)[var14] ,NthHighestBar(3,Asks/Bids,Var13)[var14] 와 ,NthHighestBar(1,Asks/Bids,t1)[t2] ,NthHighestBar(2,Asks/Bids,t1)[t2] ,NthHighestBar(3,Asks/Bids,t1)[t2] 는 모두 같은 값이출력되어야하는데 16 17 15 로 출력되고 2 0 3 2 0 3 이렇게 출력됩니다. 매우이상합니다 이런식으로 되면 어떻게 수식을작성해야되는지막막합니다. 해당 구간에서는 ,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n], NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] ,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] 결과값이 맞는걸로나오는데 이게 아니라 다른종목에서는 반대의 결과로 ,NthHighestBar(1,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n], NthHighestBar(2,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] ,NthHighestBar(3,Asks/Bids,고[1,2]-저[2,2]+1)[저[1,2]-고[1,2]+n] 값이 틀리고 변수로 저장해서 한게 맞는케이스가 간혹나옵니다 디버깅하는데 한계가있는데 디버깅해주십시오 제가 잘못사용하는건지... 아님 프로그램에 버그가있는건지궁금합니다. 질문2 제룡전기 1분봉 1300봉 기준으로 해당지표를돌려보면 24년7월10일 9시9분에 결과값이 매우이상합니다. 0.0 1..7 1.#R 이렇게나오는데요 여기에는 이런 값이 나올수없을뿐더러 이렇게 1.#R로 계산이되는일은 없어야되는곳인데 이렇게 값이 완전다르거나 없는값으로 나오는경우도 많습니다. 확인 부탁드리빈다.