커뮤니티
메모리 부족현상
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]);
다음글
이전글