커뮤니티

주간 일봉 SMI를 분봉에 표시

프로필 이미지
다니엘87
2018-06-13 14:08:57
154
글번호 119708
답변완료
주간 일봉의 SMI를 복합 분봉에서 표시하려고 아래와 같은 식을 만들었습니다. 그러나 그래프가 일봉 그래프와 많이 다르게 나옵니다. 어디가 잘못 된 것인지 모르겠습니다. 한번 봐 주시기 부탁드립니다. 감사합니다. # ===<<< 분봉 차트에서 일봉 시고저종 계산 >>>=========================================== Arrays : 일봉_시가[100](0), 일봉_고가[100](0), 일봉_저가[100](0), 일봉_종가[100](0); Variables : cnt(0); # ===<<< 주간장 시작 (09:00) >>>=== If (sDate[1] != sDate And 080000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 080000 And 080000 <= sTime) Then Begin # ---< 일봉_시고저종[1] 이동 >--- For cnt = 99 DownTo 1 Begin 일봉_시가[cnt] = 일봉_시가[cnt-1]; 일봉_고가[cnt] = 일봉_고가[cnt-1]; 일봉_저가[cnt] = 일봉_저가[cnt-1]; 일봉_종가[cnt] = 일봉_종가[cnt-1]; End; # ---< 일봉_시고저종[0] 초기값 입력 >--- 일봉_시가[0] = Open; 일봉_고가[0] = High; 일봉_저가[0] = Low; 일봉_종가[0] = Close; End; # ===<<< 주간장 (09:00-15:45) >>>>=== If 080000 <= sTime And sTime < 180000 then Begin If 일봉_고가[0] < High Then 일봉_고가[0] = High; If 일봉_저가[0] > Low Then 일봉_저가[0] = Low; 일봉_종가[0] = Close; End; # ===<<< 분봉 차트에서 일봉 SMI 계산 >>>========================================= Arrays : SMI_Var1[50](0), SMI_Var2[50](0), SMI_Var3[50](0), SMI_Var4[50](0), SMI_Var5[50](0), SMI_Var6[50](0), SMI_Var7[50](0); Variables : 기간1(13), 기간2(25), 기간3(2); Variables : 기간_고가(0), 기간_저가(0); Variables : ep1(0), ep2(0), ep3(0); # ===<<< 주간장 시작 (09:00) >>>=== If (sDate[1] != sDate And 080000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 080000 And 080000 <= sTime) Then Begin # ---< 스토케스틱[1] 이동 >--- For cnt = 49 DownTo 1 Begin SMI_Var1[cnt] = SMI_Var1[cnt-1]; SMI_Var2[cnt] = SMI_Var2[cnt-1]; SMI_Var3[cnt] = SMI_Var3[cnt-1]; SMI_Var4[cnt] = SMI_Var4[cnt-1]; SMI_Var5[cnt] = SMI_Var5[cnt-1]; SMI_Var6[cnt] = SMI_Var6[cnt-1]; SMI_Var7[cnt] = SMI_Var7[cnt-1]; End; # ---< 기간중고저가 초기값 입력 >--- 기간_고가 = 일봉_고가[0]; 기간_저가 = 일봉_저가[0]; End; # ===<<< 주간장 (09:00-15:45) >>>=== If 080000 <= sTime And sTime < 180000 then Begin For cnt = 1 to 기간1-1 Begin If 기간_고가 < 일봉_고가[cnt] Then 기간_고가 = 일봉_고가[cnt]; If 기간_저가 > 일봉_저가[cnt] Then 기간_저가 = 일봉_저가[cnt]; End; # ---<<< SMI 계산 >>>--- ep1 = 2/(기간1+1); ep2 = 2/(기간2+1); ep3 = 2/(기간3+1); SMI_Var1[0] = Close - (기간_고가+기간_저가)/2; SMI_Var2[0] = SMI_Var1[0] * ep2 + SMI_Var2[1] * (1-ep2); SMI_Var3[0] = SMI_Var2[0] * ep3 + SMI_Var3[1] * (1-ep3); SMI_Var4[0] = 기간_고가-기간_저가; SMI_Var5[0] = SMI_Var4[0] * ep2 + SMI_Var5[1] * (1-ep2); SMI_Var6[0] = (SMI_Var5[0] * ep3 + SMI_Var6[1] * (1-ep3))/2; SMI_Var7[0] = SMI_Var3[0] / SMI_Var6[0] * 100; End; If SMI_Var7[1] < SMI_Var7[0] Then Plot1(SMI_Var7[0],"SMI_Var7", RED); Else If SMI_Var7[1] > SMI_Var7[0] Then Plot1(SMI_Var7[0],"SMI_Var7", BLUE); Else Plot1(SMI_Var7[0],"SMI_Var7",BLACK); PlotBaseLine1( 40,"과열", Red); PlotBaseLine2( 0," 0",GRAY); PlotBaseLine3(-40,"침체",Blue);
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-06-14 13:32:08

안녕하세요 예스스탁입니다. 올려주신 수식으로 내용이 파악이 힘들어 새로 작성해 올려드립니다. 분봉에서 주간일봉 SMI를 그리는 지표입니다. 해당 수식이 값을 일봉과 비교해 같은 값을 가지기 어렵습니다. 수식의 근간이 지수이동평균인데 해당 이평이 과거 봉수에 영향을 받습니다. 첨부된 그림과 같이 5분봉으로 만개봉을 차트에 여시면 약 48일치의 데이터입니다. 일봉차트 48개봉만 조회후 smi와 비교하면 값이 정확히 맞습니다. 이용에 참고하시기 바랍니다. Input: g(13), r(25), s(2); var : smiv(0),cnt(0),Tcond(false),Hv(0),Lv(0); var : didx(0),Price1(0),Price2(0),ep1(0),ep2(0); var : pre11(0),pre12(0),emav11(0),emav12(0); var : pre21(0),pre22(0),emav21(0),emav22(0); Array : DO[200](0),DH[200](0),DL[100](0),DC[100](0); Ep1 = 2/(r+1); Ep2 = 2/(s+1); if (sdate != sdate[1] and stime >= 90000) or (sdate == sdate[1] and stime >= 90000 and stime[1] < 90000) Then{ Tcond = true; DO[0] = O; DH[0] = H; DL[0] = L; for cnt = 1 to 199 { DO[cnt] = DO[cnt-1][1]; DH[cnt] = DH[cnt-1][1]; DL[cnt] = DL[cnt-1][1]; DC[cnt] = DC[cnt-1][1]; } } if (sdate != sdate[1] and stime >= 180000) or (sdate == sdate[1] and stime >= 180000 and stime[1] < 180000) Then{ Tcond = false; } if Tcond == true then { DC[0] = C; if H > DH[0] Then DH[0] = H; if L < DL[0] Then DL[0] = L; if DH[g] > 0 then { Hv = DH[0]; Lv = DH[0]; for cnt = 0 to g-1 { if DH[cnt] > Hv Then Hv = DH[cnt]; if DL[cnt] < Lv Then Lv = DL[cnt]; } Price1 = DC[0]-(Hv + Lv)*0.5; Price2 = Hv - Lv; if bdate != bdate[1] then { didx = didx + 1; Pre11 = emav11[1]; Pre12 = emav12[1]; Pre21 = emav21[1]; Pre22 = emav22[1]; } if didx <= 1 then{ emav11 = Price1; emav12 = emav11; emav21 = Price2; emav22 = emav11; } else{ emav11 = Price1 * EP1 + Pre11 * (1-EP1); emav12 = emav11 * EP2 + Pre12 * (1-EP2); emav21 = Price2 * EP1 + Pre21 * (1-EP1); emav22 = emav21 * EP2 + Pre22 * (1-EP2); } SMIv = emav12 * 100 / (0.5 * emav22); plot1(smiv); } } 즐거운 하루되세요 > 다니엘87 님이 쓴 글입니다. > 제목 : 주간 일봉 SMI를 분봉에 표시 > 주간 일봉의 SMI를 복합 분봉에서 표시하려고 아래와 같은 식을 만들었습니다. 그러나 그래프가 일봉 그래프와 많이 다르게 나옵니다. 어디가 잘못 된 것인지 모르겠습니다. 한번 봐 주시기 부탁드립니다. 감사합니다. # ===<<< 분봉 차트에서 일봉 시고저종 계산 >>>=========================================== Arrays : 일봉_시가[100](0), 일봉_고가[100](0), 일봉_저가[100](0), 일봉_종가[100](0); Variables : cnt(0); # ===<<< 주간장 시작 (09:00) >>>=== If (sDate[1] != sDate And 080000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 080000 And 080000 <= sTime) Then Begin # ---< 일봉_시고저종[1] 이동 >--- For cnt = 99 DownTo 1 Begin 일봉_시가[cnt] = 일봉_시가[cnt-1]; 일봉_고가[cnt] = 일봉_고가[cnt-1]; 일봉_저가[cnt] = 일봉_저가[cnt-1]; 일봉_종가[cnt] = 일봉_종가[cnt-1]; End; # ---< 일봉_시고저종[0] 초기값 입력 >--- 일봉_시가[0] = Open; 일봉_고가[0] = High; 일봉_저가[0] = Low; 일봉_종가[0] = Close; End; # ===<<< 주간장 (09:00-15:45) >>>>=== If 080000 <= sTime And sTime < 180000 then Begin If 일봉_고가[0] < High Then 일봉_고가[0] = High; If 일봉_저가[0] > Low Then 일봉_저가[0] = Low; 일봉_종가[0] = Close; End; # ===<<< 분봉 차트에서 일봉 SMI 계산 >>>========================================= Arrays : SMI_Var1[50](0), SMI_Var2[50](0), SMI_Var3[50](0), SMI_Var4[50](0), SMI_Var5[50](0), SMI_Var6[50](0), SMI_Var7[50](0); Variables : 기간1(13), 기간2(25), 기간3(2); Variables : 기간_고가(0), 기간_저가(0); Variables : ep1(0), ep2(0), ep3(0); # ===<<< 주간장 시작 (09:00) >>>=== If (sDate[1] != sDate And 080000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 080000 And 080000 <= sTime) Then Begin # ---< 스토케스틱[1] 이동 >--- For cnt = 49 DownTo 1 Begin SMI_Var1[cnt] = SMI_Var1[cnt-1]; SMI_Var2[cnt] = SMI_Var2[cnt-1]; SMI_Var3[cnt] = SMI_Var3[cnt-1]; SMI_Var4[cnt] = SMI_Var4[cnt-1]; SMI_Var5[cnt] = SMI_Var5[cnt-1]; SMI_Var6[cnt] = SMI_Var6[cnt-1]; SMI_Var7[cnt] = SMI_Var7[cnt-1]; End; # ---< 기간중고저가 초기값 입력 >--- 기간_고가 = 일봉_고가[0]; 기간_저가 = 일봉_저가[0]; End; # ===<<< 주간장 (09:00-15:45) >>>=== If 080000 <= sTime And sTime < 180000 then Begin For cnt = 1 to 기간1-1 Begin If 기간_고가 < 일봉_고가[cnt] Then 기간_고가 = 일봉_고가[cnt]; If 기간_저가 > 일봉_저가[cnt] Then 기간_저가 = 일봉_저가[cnt]; End; # ---<<< SMI 계산 >>>--- ep1 = 2/(기간1+1); ep2 = 2/(기간2+1); ep3 = 2/(기간3+1); SMI_Var1[0] = Close - (기간_고가+기간_저가)/2; SMI_Var2[0] = SMI_Var1[0] * ep2 + SMI_Var2[1] * (1-ep2); SMI_Var3[0] = SMI_Var2[0] * ep3 + SMI_Var3[1] * (1-ep3); SMI_Var4[0] = 기간_고가-기간_저가; SMI_Var5[0] = SMI_Var4[0] * ep2 + SMI_Var5[1] * (1-ep2); SMI_Var6[0] = (SMI_Var5[0] * ep3 + SMI_Var6[1] * (1-ep3))/2; SMI_Var7[0] = SMI_Var3[0] / SMI_Var6[0] * 100; End; If SMI_Var7[1] < SMI_Var7[0] Then Plot1(SMI_Var7[0],"SMI_Var7", RED); Else If SMI_Var7[1] > SMI_Var7[0] Then Plot1(SMI_Var7[0],"SMI_Var7", BLUE); Else Plot1(SMI_Var7[0],"SMI_Var7",BLACK); PlotBaseLine1( 40,"과열", Red); PlotBaseLine2( 0," 0",GRAY); PlotBaseLine3(-40,"침체",Blue);