커뮤니티

Array boundary out reached ?

프로필 이미지
다니엘87
2017-11-03 16:39:45
166
글번호 113893
답변완료
안녕하세요. 주간장 일봉과 야간장 일봉을 각각 하나의 일봉으로 보고 볼린저 밴드를 그려 실시간으로 1분봉에 표현하려고 다음과 같은 식을 만들었습니다. 식을 실행하면 'Array boundary out reached' 라는 에러와 함께 프로그램이 종료됩니다. array[100]이 너무 크다는 얘기 같아 array[10] 으로 줄여서 해 봤지만 동일한 결과를 만났습니다. 어떻게 수정해야 할지 가르침 부탁드립니다. 감사합니다. ---------------------------------------------------------------------------------------- Variables : cnt(0); Array : 주간일봉_시가[100](0), 주간일봉_고가[100](0), 주간일봉_저가[100](0), 주간일봉_종가[100](0); Array : 야간일봉_시가[100](0), 야간일봉_고가[100](0), 야간일봉_저가[100](0), 야간일봉_종가[100](0); Array : 복합일봉_시가[100](0), 복합일봉_고가[100](0), 복합일봉_저가[100](0), 복합일봉_종가[100](0); Array : 환산일봉_시가[100](0), 환산일봉_고가[100](0), 환산일봉_저가[100](0), 환산일봉_종가[100](0); # ---<<< 주간장 >>>---------------------------------------------------------------------------- If (sDate[1] != sDate And 090000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 090000 And 090000 <= sTime) Then Begin # 주간일봉 첫봉 복합일봉_시가[0] = Open; 복합일봉_고가[0] = High; 복합일봉_저가[0] = Low; 복합일봉_종가[0] = Close; 주간일봉_시가[0] = Open; 주간일봉_고가[0] = High; 주간일봉_저가[0] = Low; 주간일봉_종가[0] = Close; For cnt = 1 To 99 Begin 복합일봉_시가[cnt] = 복합일봉_시가[cnt-1][1]; 복합일봉_고가[cnt] = 복합일봉_고가[cnt-1][1]; 복합일봉_저가[cnt] = 복합일봉_저가[cnt-1][1]; 복합일봉_종가[cnt] = 복합일봉_종가[cnt-1][1]; End; End; If 090000 <= sTime And sTime < 180000 then Begin # 주간장 If 주간일봉_고가[0] < High Then 주간일봉_고가[0] = High; If 주간일봉_저가[0] > Low Then 주간일봉_저가[0] = Low; 주간일봉_종가[0] = Close; 복합일봉_고가[0] = 주간일봉_고가[0]; 복합일봉_저가[0] = 주간일봉_저가[0]; 복합일봉_종가[0] = 주간일봉_종가[0]; End; # ---<<< 야간장 >>>---------------------------------------------------------------------------- If (sDate[1] != sDate And 180000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 180000 And 180000 <= sTime) Then Begin # 야간일봉 첫봉 복합일봉_시가[0] = Open; 복합일봉_고가[0] = High; 복합일봉_저가[0] = Low; 복합일봉_종가[0] = Close; 야간일봉_시가[0] = Open; 야간일봉_고가[0] = High; 야간일봉_저가[0] = Low; 야간일봉_종가[0] = Close; For cnt = 1 To 99 Begin 복합일봉_시가[cnt] = 복합일봉_시가[cnt-1][1]; 복합일봉_고가[cnt] = 복합일봉_고가[cnt-1][1]; 복합일봉_저가[cnt] = 복합일봉_저가[cnt-1][1]; 복합일봉_종가[cnt] = 복합일봉_종가[cnt-1][1]; End; End; If 180000 <= sTime Or sTime < 090000 Then Begin # 야간장 If 야간일봉_고가[0] < High Then 야간일봉_고가[0] = High; If 야간일봉_저가[0] > Low Then 야간일봉_저가[0] = Low; 야간일봉_종가[0] = Close; 복합일봉_고가[0] = 야간일봉_고가[0]; 복합일봉_저가[0] = 야간일봉_저가[0]; 복합일봉_종가[0] = 야간일봉_종가[0]; End; # ---<<< 환산일봉 계산 >>>-------------------------------------------------------------------- If (sDate[1] != sDate And 090000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 090000 And 090000 <= sTime) Then Begin # 주간일봉 첫봉 환산일봉_시가[0] = 복합일봉_시가[0]; 환산일봉_고가[0] = 복합일봉_고가[0]; 환산일봉_저가[0] = 복합일봉_저가[0]; 환산일봉_종가[0] = 복합일봉_종가[0]; For cnt = 1 To 99 Begin 환산일봉_시가[cnt] = 환산일봉_시가[cnt-1][1]; 환산일봉_고가[cnt] = 환산일봉_고가[cnt-1][1]; 환산일봉_저가[cnt] = 환산일봉_저가[cnt-1][1]; 환산일봉_종가[cnt] = 환산일봉_종가[cnt-1][1]; End; End; If (sDate[1] != sDate And 180000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 180000 And 180000 <= sTime) Then Begin # 야간일봉 첫봉 환산일봉_시가[0] = 복합일봉_시가[0]; 환산일봉_고가[0] = 복합일봉_고가[0]; 환산일봉_저가[0] = 복합일봉_저가[0]; 환산일봉_종가[0] = 복합일봉_종가[0]; For cnt = 1 To 99 Begin 환산일봉_시가[cnt] = 환산일봉_시가[cnt-1][1]; 환산일봉_고가[cnt] = 환산일봉_고가[cnt-1][1]; 환산일봉_저가[cnt] = 환산일봉_저가[cnt-1][1]; 환산일봉_종가[cnt] = 환산일봉_종가[cnt-1][1]; End; End; # === <<< Bolinger Band >>>=========================================================================== Input : Period(20), MultiD(2); var : MAv(0),BBup(0),BBdn(0); MAv = ma(환산일봉_종가,Period); BBup = BollBandUp(Period,MultiD); BBdn = BollBandDown(Period,MultiD); Plot1(MAv, "이평"); Plot2(BBup, "상단밴드"); Plot3(BBdn, "하단밴드");
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2017-11-06 11:23:51

안녕하세요 예스스탁입니다. 배열변수를 이름만 사용하면 에러가 발생합니다. MAv = ma(환산일봉_종가,Period); 환산일봉_종가는 배열변수입니다. 배열변수는 항상 방의 번호를 지정하셔야 합니다. MAv = ma(환산일봉_종가[0],Period); 또한 위와 같이 지정해도 배열변수 환산일봉_종가의 Period개의 방에서 값을 모아 평균하는 것은 아닙니다. 아래 수식 참고하시기 바랍니다. Variables : cnt(0); Array : 주간일봉_시가[100](0), 주간일봉_고가[100](0), 주간일봉_저가[100](0), 주간일봉_종가[100](0); Array : 야간일봉_시가[100](0), 야간일봉_고가[100](0), 야간일봉_저가[100](0), 야간일봉_종가[100](0); Array : 복합일봉_시가[100](0), 복합일봉_고가[100](0), 복합일봉_저가[100](0), 복합일봉_종가[100](0); Array : 환산일봉_시가[100](0), 환산일봉_고가[100](0), 환산일봉_저가[100](0), 환산일봉_종가[100](0); # ---<<< 주간장 >>>---------------------------------------------------------------------------- If (sDate[1] != sDate And 090000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 090000 And 090000 <= sTime) Then Begin # 주간일봉 첫봉 복합일봉_시가[0] = Open; 복합일봉_고가[0] = High; 복합일봉_저가[0] = Low; 복합일봉_종가[0] = Close; 주간일봉_시가[0] = Open; 주간일봉_고가[0] = High; 주간일봉_저가[0] = Low; 주간일봉_종가[0] = Close; For cnt = 1 To 99 Begin 복합일봉_시가[cnt] = 복합일봉_시가[cnt-1][1]; 복합일봉_고가[cnt] = 복합일봉_고가[cnt-1][1]; 복합일봉_저가[cnt] = 복합일봉_저가[cnt-1][1]; 복합일봉_종가[cnt] = 복합일봉_종가[cnt-1][1]; End; End; If 090000 <= sTime And sTime < 180000 then Begin # 주간장 If 주간일봉_고가[0] < High Then 주간일봉_고가[0] = High; If 주간일봉_저가[0] > Low Then 주간일봉_저가[0] = Low; 주간일봉_종가[0] = Close; 복합일봉_고가[0] = 주간일봉_고가[0]; 복합일봉_저가[0] = 주간일봉_저가[0]; 복합일봉_종가[0] = 주간일봉_종가[0]; End; # ---<<< 야간장 >>>---------------------------------------------------------------------------- If (sDate[1] != sDate And 180000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 180000 And 180000 <= sTime) Then Begin # 야간일봉 첫봉 복합일봉_시가[0] = Open; 복합일봉_고가[0] = High; 복합일봉_저가[0] = Low; 복합일봉_종가[0] = Close; 야간일봉_시가[0] = Open; 야간일봉_고가[0] = High; 야간일봉_저가[0] = Low; 야간일봉_종가[0] = Close; For cnt = 1 To 99 Begin 복합일봉_시가[cnt] = 복합일봉_시가[cnt-1][1]; 복합일봉_고가[cnt] = 복합일봉_고가[cnt-1][1]; 복합일봉_저가[cnt] = 복합일봉_저가[cnt-1][1]; 복합일봉_종가[cnt] = 복합일봉_종가[cnt-1][1]; End; End; If 180000 <= sTime Or sTime < 090000 Then Begin # 야간장 If 야간일봉_고가[0] < High Then 야간일봉_고가[0] = High; If 야간일봉_저가[0] > Low Then 야간일봉_저가[0] = Low; 야간일봉_종가[0] = Close; 복합일봉_고가[0] = 야간일봉_고가[0]; 복합일봉_저가[0] = 야간일봉_저가[0]; 복합일봉_종가[0] = 야간일봉_종가[0]; End; # ---<<< 환산일봉 계산 >>>-------------------------------------------------------------------- If (sDate[1] != sDate And 090000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 090000 And 090000 <= sTime) Then Begin # 주간일봉 첫봉 환산일봉_시가[0] = 복합일봉_시가[0]; 환산일봉_고가[0] = 복합일봉_고가[0]; 환산일봉_저가[0] = 복합일봉_저가[0]; 환산일봉_종가[0] = 복합일봉_종가[0]; For cnt = 1 To 99 Begin 환산일봉_시가[cnt] = 환산일봉_시가[cnt-1][1]; 환산일봉_고가[cnt] = 환산일봉_고가[cnt-1][1]; 환산일봉_저가[cnt] = 환산일봉_저가[cnt-1][1]; 환산일봉_종가[cnt] = 환산일봉_종가[cnt-1][1]; End; End; If (sDate[1] != sDate And 180000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 180000 And 180000 <= sTime) Then Begin # 야간일봉 첫봉 환산일봉_시가[0] = 복합일봉_시가[0]; 환산일봉_고가[0] = 복합일봉_고가[0]; 환산일봉_저가[0] = 복합일봉_저가[0]; 환산일봉_종가[0] = 복합일봉_종가[0]; For cnt = 1 To 99 Begin 환산일봉_시가[cnt] = 환산일봉_시가[cnt-1][1]; 환산일봉_고가[cnt] = 환산일봉_고가[cnt-1][1]; 환산일봉_저가[cnt] = 환산일봉_저가[cnt-1][1]; 환산일봉_종가[cnt] = 환산일봉_종가[cnt-1][1]; End; End; # === <<< Bolinger Band >>>=========================================================================== Input : Period(20), MultiD(2); var : count(0),SumSqrt(0),sum(0); var : MAv(0),Stdv(0),BBup(0),BBdn(0); If 환산일봉_종가[Period-1] > 0 Then { #일봉 이동평균 계산 sum = 0; for count = 0 to Period-1{ sum = sum + 환산일봉_종가[count]; } mav = sum/Period; #표준편차 계산 SumSqrt = 0; For count = 0 To Period - 1 { SumSqrt = SumSqrt + (환산일봉_종가[count] - mav)^2; } Stdv = SquareRoot(SumSqrt / Period); # 일봉 볼린져밴드 계산 BBup = mav + (MultiD * Stdv); BBdn = mav - (MultiD * Stdv); plot1(BBup ,"상단"); plot2(mav,"중단"); plot3(BBdn,"하단"); } 즐거운 하루되세요 > 다니엘87 님이 쓴 글입니다. > 제목 : Array boundary out reached ? > 안녕하세요. 주간장 일봉과 야간장 일봉을 각각 하나의 일봉으로 보고 볼린저 밴드를 그려 실시간으로 1분봉에 표현하려고 다음과 같은 식을 만들었습니다. 식을 실행하면 'Array boundary out reached' 라는 에러와 함께 프로그램이 종료됩니다. array[100]이 너무 크다는 얘기 같아 array[10] 으로 줄여서 해 봤지만 동일한 결과를 만났습니다. 어떻게 수정해야 할지 가르침 부탁드립니다. 감사합니다. ---------------------------------------------------------------------------------------- Variables : cnt(0); Array : 주간일봉_시가[100](0), 주간일봉_고가[100](0), 주간일봉_저가[100](0), 주간일봉_종가[100](0); Array : 야간일봉_시가[100](0), 야간일봉_고가[100](0), 야간일봉_저가[100](0), 야간일봉_종가[100](0); Array : 복합일봉_시가[100](0), 복합일봉_고가[100](0), 복합일봉_저가[100](0), 복합일봉_종가[100](0); Array : 환산일봉_시가[100](0), 환산일봉_고가[100](0), 환산일봉_저가[100](0), 환산일봉_종가[100](0); # ---<<< 주간장 >>>---------------------------------------------------------------------------- If (sDate[1] != sDate And 090000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 090000 And 090000 <= sTime) Then Begin # 주간일봉 첫봉 복합일봉_시가[0] = Open; 복합일봉_고가[0] = High; 복합일봉_저가[0] = Low; 복합일봉_종가[0] = Close; 주간일봉_시가[0] = Open; 주간일봉_고가[0] = High; 주간일봉_저가[0] = Low; 주간일봉_종가[0] = Close; For cnt = 1 To 99 Begin 복합일봉_시가[cnt] = 복합일봉_시가[cnt-1][1]; 복합일봉_고가[cnt] = 복합일봉_고가[cnt-1][1]; 복합일봉_저가[cnt] = 복합일봉_저가[cnt-1][1]; 복합일봉_종가[cnt] = 복합일봉_종가[cnt-1][1]; End; End; If 090000 <= sTime And sTime < 180000 then Begin # 주간장 If 주간일봉_고가[0] < High Then 주간일봉_고가[0] = High; If 주간일봉_저가[0] > Low Then 주간일봉_저가[0] = Low; 주간일봉_종가[0] = Close; 복합일봉_고가[0] = 주간일봉_고가[0]; 복합일봉_저가[0] = 주간일봉_저가[0]; 복합일봉_종가[0] = 주간일봉_종가[0]; End; # ---<<< 야간장 >>>---------------------------------------------------------------------------- If (sDate[1] != sDate And 180000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 180000 And 180000 <= sTime) Then Begin # 야간일봉 첫봉 복합일봉_시가[0] = Open; 복합일봉_고가[0] = High; 복합일봉_저가[0] = Low; 복합일봉_종가[0] = Close; 야간일봉_시가[0] = Open; 야간일봉_고가[0] = High; 야간일봉_저가[0] = Low; 야간일봉_종가[0] = Close; For cnt = 1 To 99 Begin 복합일봉_시가[cnt] = 복합일봉_시가[cnt-1][1]; 복합일봉_고가[cnt] = 복합일봉_고가[cnt-1][1]; 복합일봉_저가[cnt] = 복합일봉_저가[cnt-1][1]; 복합일봉_종가[cnt] = 복합일봉_종가[cnt-1][1]; End; End; If 180000 <= sTime Or sTime < 090000 Then Begin # 야간장 If 야간일봉_고가[0] < High Then 야간일봉_고가[0] = High; If 야간일봉_저가[0] > Low Then 야간일봉_저가[0] = Low; 야간일봉_종가[0] = Close; 복합일봉_고가[0] = 야간일봉_고가[0]; 복합일봉_저가[0] = 야간일봉_저가[0]; 복합일봉_종가[0] = 야간일봉_종가[0]; End; # ---<<< 환산일봉 계산 >>>-------------------------------------------------------------------- If (sDate[1] != sDate And 090000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 090000 And 090000 <= sTime) Then Begin # 주간일봉 첫봉 환산일봉_시가[0] = 복합일봉_시가[0]; 환산일봉_고가[0] = 복합일봉_고가[0]; 환산일봉_저가[0] = 복합일봉_저가[0]; 환산일봉_종가[0] = 복합일봉_종가[0]; For cnt = 1 To 99 Begin 환산일봉_시가[cnt] = 환산일봉_시가[cnt-1][1]; 환산일봉_고가[cnt] = 환산일봉_고가[cnt-1][1]; 환산일봉_저가[cnt] = 환산일봉_저가[cnt-1][1]; 환산일봉_종가[cnt] = 환산일봉_종가[cnt-1][1]; End; End; If (sDate[1] != sDate And 180000 <= sTime) Or (sDate[1] == sDate And sTime[1] < 180000 And 180000 <= sTime) Then Begin # 야간일봉 첫봉 환산일봉_시가[0] = 복합일봉_시가[0]; 환산일봉_고가[0] = 복합일봉_고가[0]; 환산일봉_저가[0] = 복합일봉_저가[0]; 환산일봉_종가[0] = 복합일봉_종가[0]; For cnt = 1 To 99 Begin 환산일봉_시가[cnt] = 환산일봉_시가[cnt-1][1]; 환산일봉_고가[cnt] = 환산일봉_고가[cnt-1][1]; 환산일봉_저가[cnt] = 환산일봉_저가[cnt-1][1]; 환산일봉_종가[cnt] = 환산일봉_종가[cnt-1][1]; End; End; # === <<< Bolinger Band >>>=========================================================================== Input : Period(20), MultiD(2); var : MAv(0),BBup(0),BBdn(0); MAv = ma(환산일봉_종가,Period); BBup = BollBandUp(Period,MultiD); BBdn = BollBandDown(Period,MultiD); Plot1(MAv, "이평"); Plot2(BBup, "상단밴드"); Plot3(BBdn, "하단밴드");