커뮤니티

문의드립니다.

프로필 이미지
무패
2015-02-14 23:41:40
145
글번호 83222
답변완료

첨부 이미지

이전 문의 내용이 의사전달과 틀린거같아 다시 문의드립니다. 예를들어 차트그림을 하나 올립니다. 예로든 차트는 세중이란 종목에서 99이평선을 표시한 차트입니다. 차트에서 보면 20봉에서 40봉전 사이에 최고값하고 현재 시점에서 어떤 이평이 그 최고가를 기록한 날과 만나는지 알아내서 그 이평을 차트에 표현하고 싶습니다. 그림에서 현재봉보다 26봉전에 20-40봉 사이의 최고가를 찍었구요. 여러이평중 99이평이 그당시 고가와 가장 가격이 근접합니다. 그러니까 단순하게 어떤 이평이 일정 구간에서 최고가 저항대로 작용했는지 알아내고 그 이평만 표시하려고 합니다. 전에 답변주신걸 토대로 다음과같이 조금 수정했는데요. 제 의도대로 이평이 그려지지 않습니다. var : cnt(0),HH(0),HI(0),VV(0),Vi(0); Array : mav[1001](0), diff[101](1); HH = H[20]; HI = 20; for cnt = 20 to 40 { if H[cnt] > HH Then{ HH = H[cnt]; HI = cnt; } } ########### 1번 문의 부분 ############## for cnt = 20 to 100 { mav[cnt] = ma(c, cnt)[HI]; } ############################################## for cnt = 20 to 100 { diff[cnt] = abs(HH-mav[cnt]); } VV = diff[20]; Vi = 20; for cnt = 20 to 100 { if diff[cnt] < VV Then { VV = diff[cnt]; Vi = cnt; } } ############# 2번 문의 부분 ############# plot1(ma(c, vi), "가장가까운이평"); plot2(vi,"이평값"); ############################################ 위에식에서 우선 문의 부분이 2군데 인데요. 우선 1번 문의 부분에서 ########### 1번 문의 부분 ############## for cnt = 20 to 100 { mav[cnt] = ma(c, cnt)[HI]; } ############################################## 여기서 mav[cnt]에 모두 같은 값이 들어갑니다. mav[20] = ma(c, 20)[HI];....... mav[100] = ma(c, 100)[HI]; 이렇게 하나씩 써주면 제대로된 값이 들어가는데요. for문으로 하면 꼭 마지막 값이 모두 들어가 버리네요. 저기서 잘못된 점을 알고 싶습니다. 그리고 2번 문의 부분에서요. ############# 2번 문의 부분 ############# plot1(ma(c, vi), "가장가까운이평"); plot2(vi,"이평값"); ############################################ 여기서 vi 값을 그냥 숫자로 대입했을때랑 위의식이랑 plot1이 그리는게 틀립니다. 이전에 vi값이 50으로 구해졌다면 vi 값은 50인데 plot1(ma(c, 50), "가장가까운이평"); plot1(ma(c, vi), "가장가까운이평"); 위에 두 문장은 완전히 틀린 이평을 그리네요. 여기서도 잘못된 점을 알고 싶습니다. 수고하세요.
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-02-16 16:46:24

안녕하세요 예스스탁입니다. 수식에 이평을 계산하는 부분에 오류가 있었습니다. 이평의 기간을 루프로 돌리게 되면 이전에 해당 이평에 대해 사용준비가 되지 않아 메모리가 깨지게 됩니다. 이평을 과거봉 종가를 가져와 직접계산하게 변경했습니다. 1) 20~100이평 계산후에 2) 각봉의 고가와 이평과의 차이를 구하고 3) 가장 차이가 작은 이평의 인덱스 저장 4) 과거 20~40봉전 고가중 가장큰 고가 인덱스 구하고 5) 하당인덱스로 과거3)으로 계산해서 저장한 값을 가져와 이평을 호출합니다. var : cnt(0),HH(0),HI(0),VV(0),Vi(0); var : sum(0),ii(0); Array : mav[1001](0), diff[101](1); #20~100이평을 배열변수 20~100번방에 저장 for cnt = 20 to 100 { sum = 0; for ii = 0 to cnt-1{ sum = sum+C[ii]; } mav[cnt] = sum/cnt; if sdate == 20150216 Then MessageLog("%.f %.2f",cnt,mav[cnt]); } #각 봉의 고가와 이평의 차이를 배열변수 20~100번방에 저장 for cnt = 20 to 100 { diff[cnt] = abs(H-mav[cnt]); } #차이가 가장작은 값을 찾고 배열방번호 저장 VV = diff[20]; Vi = 20; for cnt = 20 to 100 { if diff[cnt] < VV Then { VV = diff[cnt]; Vi = cnt; } } #20~40개봉사이의 최고가 찾고 번호저장 HH = H[20]; HI = 20; for cnt = 20 to 40 { if H[cnt] > HH Then{ HH = H[cnt]; HI = cnt; } } #plot1(Vi); #plot2(Vi[Hi]); plot3(mav[Vi[Hi]]); 즐거운 하루되세요 > 무패 님이 쓴 글입니다. > 제목 : 문의드립니다. > 이전 문의 내용이 의사전달과 틀린거같아 다시 문의드립니다. 예를들어 차트그림을 하나 올립니다. 예로든 차트는 세중이란 종목에서 99이평선을 표시한 차트입니다. 차트에서 보면 20봉에서 40봉전 사이에 최고값하고 현재 시점에서 어떤 이평이 그 최고가를 기록한 날과 만나는지 알아내서 그 이평을 차트에 표현하고 싶습니다. 그림에서 현재봉보다 26봉전에 20-40봉 사이의 최고가를 찍었구요. 여러이평중 99이평이 그당시 고가와 가장 가격이 근접합니다. 그러니까 단순하게 어떤 이평이 일정 구간에서 최고가 저항대로 작용했는지 알아내고 그 이평만 표시하려고 합니다. 전에 답변주신걸 토대로 다음과같이 조금 수정했는데요. 제 의도대로 이평이 그려지지 않습니다. var : cnt(0),HH(0),HI(0),VV(0),Vi(0); Array : mav[1001](0), diff[101](1); HH = H[20]; HI = 20; for cnt = 20 to 40 { if H[cnt] > HH Then{ HH = H[cnt]; HI = cnt; } } ########### 1번 문의 부분 ############## for cnt = 20 to 100 { mav[cnt] = ma(c, cnt)[HI]; } ############################################## for cnt = 20 to 100 { diff[cnt] = abs(HH-mav[cnt]); } VV = diff[20]; Vi = 20; for cnt = 20 to 100 { if diff[cnt] < VV Then { VV = diff[cnt]; Vi = cnt; } } ############# 2번 문의 부분 ############# plot1(ma(c, vi), "가장가까운이평"); plot2(vi,"이평값"); ############################################ 위에식에서 우선 문의 부분이 2군데 인데요. 우선 1번 문의 부분에서 ########### 1번 문의 부분 ############## for cnt = 20 to 100 { mav[cnt] = ma(c, cnt)[HI]; } ############################################## 여기서 mav[cnt]에 모두 같은 값이 들어갑니다. mav[20] = ma(c, 20)[HI];....... mav[100] = ma(c, 100)[HI]; 이렇게 하나씩 써주면 제대로된 값이 들어가는데요. for문으로 하면 꼭 마지막 값이 모두 들어가 버리네요. 저기서 잘못된 점을 알고 싶습니다. 그리고 2번 문의 부분에서요. ############# 2번 문의 부분 ############# plot1(ma(c, vi), "가장가까운이평"); plot2(vi,"이평값"); ############################################ 여기서 vi 값을 그냥 숫자로 대입했을때랑 위의식이랑 plot1이 그리는게 틀립니다. 이전에 vi값이 50으로 구해졌다면 vi 값은 50인데 plot1(ma(c, 50), "가장가까운이평"); plot1(ma(c, vi), "가장가까운이평"); 위에 두 문장은 완전히 틀린 이평을 그리네요. 여기서도 잘못된 점을 알고 싶습니다. 수고하세요.