커뮤니티

메모리 부족현상

프로필 이미지
nadogaja
2014-03-04 14:49:18
227
글번호 73175
답변완료
아래는 사용자 함수명 _vps 로 초봉에서 긴주기의 거래량을 알기 위해 만들어진 수식입니다 MessageLog("up %.f, down %.f",_vps(60,1,0),_vps(60,2,0)); 사용한 챠트는 10초 챠트 입니다. 전략식에서 위 처럼 디버깅을 하면 메모리가 부족하다면서 꺼져 버립니다. 그런데 사용자 함수를 쓰지 않고 본 수식에 직접 구현해서 쓰면 오류가 없습니다. 무슨 차이인가요... 사용자 함수화 하면 더 많은 메모리를 사용하는것인가요? 자세한 설명부탁 드립니다. /////////////////////////////////////////////////////////// input:기간(Numeric),v0up1down2(Numeric),전일값(Numeric); var: start_m(0),start_s(0),start_ms(0); var: end_m(0),end_s(0),end_ms(0); var : pass_S(0),renew_s(0); array: vps[3,5000](0);// 기간별 거래량합 //--------------------------------------[ 시작 기준초 ] if dayindex == 0 Then{ start_m = TimeToMinutes(stime)*60; start_s = FracPortion(stime/100)*100;//시작시간 초 start_ms = start_m+start_s; } //------------------------------------------------------ //------------------------------------[ 끝 시간 기준초 ] end_m = TimeToMinutes(time)*60;// 분을 초로 환산 end_s = FracPortion(time/100)*100;// 나머지 초 end_ms = end_m+end_s; // 환산 초 + 나머지 초 //------------------------------------------------------ pass_s = end_ms - start_ms; renew_s = pass_s%기간; // 갱신기간 기본 "90초" var:cns(0),cnt(0),cnt1(0); if dayindex == 0 then{ for cnt = 0 to 2{ for cnt1 = 0 to cns vps[cnt,cnt1] = 0; } cns=0; } if renew_s < renew_s[1] then{ cns = cns+1; for cnt = 0 to 2 vps[cnt,0] = 0; for cnt1 = 1 to cns{ vps[0,cnt1] = vps[0,cnt1-1][1]; vps[1,cnt1] = vps[1,cnt1-1][1]; vps[2,cnt1] = vps[2,cnt1-1][1]; } } vps[0,0] = vps[0,0]+v; vps[1,0] = vps[1,0]+upvol; vps[2,0] = vps[2,0]+downvol; if renew_s < renew_s[1] then{ } _vps=vps[v0up1down2,전일값]; //MessageLog("cns %.f",cns); //MessageLog("0: %.f,1: %.f,2: %.f",vps[0,0],vps[1,0],vps[2,0]); //MessageLog("3: %.f,4: %.f,5: %.f",vps[0,1],vps[1,1],vps[2,1]);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-03-05 12:38:33

안녕하세요 예스스탁입니다. 함수로 만든 후에 시스템식등에서 이 함수를 한번 콜해서 사용하면 메모리는 거의 같습니다. 다만 이 함수를 여러번 콜할 경우 각각 메모리가 잡히게 되므로 더 커지게 됩니다. MessageLog("up %.f, down %.f",_vps(60,1,0),_vps(60,2,0)); 위 경우 메세지 출력을 _vps함수가 2번 호출이 됩니다.산식이 2개입니다. 수식안에 계산식을 2개 적으신것과 같습니다. 풀어서 작성하는 경우는 하나의 계산식안에서 배열에 저장된 값을 호출하게 됩니다. 즐거운 하루되세요 > nadogaja 님이 쓴 글입니다. > 제목 : 메모리 부족현상 > 아래는 사용자 함수명 _vps 로 초봉에서 긴주기의 거래량을 알기 위해 만들어진 수식입니다 MessageLog("up %.f, down %.f",_vps(60,1,0),_vps(60,2,0)); 사용한 챠트는 10초 챠트 입니다. 전략식에서 위 처럼 디버깅을 하면 메모리가 부족하다면서 꺼져 버립니다. 그런데 사용자 함수를 쓰지 않고 본 수식에 직접 구현해서 쓰면 오류가 없습니다. 무슨 차이인가요... 사용자 함수화 하면 더 많은 메모리를 사용하는것인가요? 자세한 설명부탁 드립니다. /////////////////////////////////////////////////////////// input:기간(Numeric),v0up1down2(Numeric),전일값(Numeric); var: start_m(0),start_s(0),start_ms(0); var: end_m(0),end_s(0),end_ms(0); var : pass_S(0),renew_s(0); array: vps[3,5000](0);// 기간별 거래량합 //--------------------------------------[ 시작 기준초 ] if dayindex == 0 Then{ start_m = TimeToMinutes(stime)*60; start_s = FracPortion(stime/100)*100;//시작시간 초 start_ms = start_m+start_s; } //------------------------------------------------------ //------------------------------------[ 끝 시간 기준초 ] end_m = TimeToMinutes(time)*60;// 분을 초로 환산 end_s = FracPortion(time/100)*100;// 나머지 초 end_ms = end_m+end_s; // 환산 초 + 나머지 초 //------------------------------------------------------ pass_s = end_ms - start_ms; renew_s = pass_s%기간; // 갱신기간 기본 "90초" var:cns(0),cnt(0),cnt1(0); if dayindex == 0 then{ for cnt = 0 to 2{ for cnt1 = 0 to cns vps[cnt,cnt1] = 0; } cns=0; } if renew_s < renew_s[1] then{ cns = cns+1; for cnt = 0 to 2 vps[cnt,0] = 0; for cnt1 = 1 to cns{ vps[0,cnt1] = vps[0,cnt1-1][1]; vps[1,cnt1] = vps[1,cnt1-1][1]; vps[2,cnt1] = vps[2,cnt1-1][1]; } } vps[0,0] = vps[0,0]+v; vps[1,0] = vps[1,0]+upvol; vps[2,0] = vps[2,0]+downvol; if renew_s < renew_s[1] then{ } _vps=vps[v0up1down2,전일값]; //MessageLog("cns %.f",cns); //MessageLog("0: %.f,1: %.f,2: %.f",vps[0,0],vps[1,0],vps[2,0]); //MessageLog("3: %.f,4: %.f,5: %.f",vps[0,1],vps[1,1],vps[2,1]);