커뮤니티
수식 간략화, 처리속도 향상 문의
2018-11-14 20:13:57
254
글번호 123678
수고하십니다.
분봉차트에서 일봉의 갭을 구하고 0.2% 구간으로 나누어 분봉차트에 히스토그램을 그리는 식을 작성하였습니다.
아래에서 p가 구간인데 이것을 1000 거래일 이상으로 늘리면 컴퓨터가 계속 돌아갑니다.
컴퓨터 사양이 낮지도 않은데 유독 이 지표에서만 이런현상이 발생합니다.
그리고 지표 수식이 너무 긴데 배열 등을 활용하여 간략화가 가능하다면 작성 부탁드립니다.
input : P(100);
var : Cnt(0), sum1(0), sum2(0), sum3(0), sum4(0), sum5(0), sum6(0), sum7(0), sum8(0), sum9(0), sum10(0), sum11(0);
var : sum12(0), sum13(0), sum14(0), sum15(0), sum16(0), sum17(0), sum18(0), sum19(0), sum20(0);
sum1 = 0; sum2 = 0; sum3 = 0; sum4 = 0; sum5 = 0; sum6 = 0; sum7 = 0; sum8 = 0; sum9 = 0; sum10 = 0; sum11 = 0;
for cnt = 0 to P-1{
If 0.998*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1) Then //-0.002%~0%
sum1 = sum1+1;
If 0.996*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.998 Then //-0.004%~-0.002%
sum2 = sum2+1;
If 0.994*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.996 Then //-0.006%~-0.004%
sum3 = sum3+1;
If 0.992*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.994 Then //-0.008%~-0.006%
sum4 = sum4+1;
If 0.990*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.992 Then //-0.010%~-0.008%
sum5 = sum5+1;
If 0.988*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.990 Then //-0.012%~-0.010%
sum6 = sum6+1;
If 0.986*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.988 Then //-0.014%~-0.012%
sum7 = sum7+1;
If 0.984*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.986 Then //-0.016%~-0.014%
sum8 = sum8+1;
If 0.982*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.984 Then //-0.018%~-0.016%
sum9 = sum9+1;
If 0.980*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.982 Then //-0.020%~-0.018%
sum10 = sum10+1;
If DayOpen(cnt) < DayClose(cnt+1)*0.980 Then // ~-0.020%
sum11 = sum11+1;
}
If CurrentDate == sDate Then {
PlotBaseLine1(0, "0", WHITE);
PlotBaseLine2(10, "10", WHITE);
If sTime == 120000 Then {
Plot1(Sum1, "-0.002%~0", YELLOW);
}
if stime == 114500 Then {
Plot2(Sum2, "-0.004%~0.002", YELLOW);
}
if stime == 113000 Then {
Plot3(Sum3, "-0.006%~0.004", YELLOW);
}
if stime == 111500 Then {
Plot4(Sum4, "-0.006%~0.008", YELLOW);
}
if stime == 110000 Then {
Plot5(Sum5, "-0.008%~0.010", YELLOW);
}
if stime == 104500 Then {
Plot6(Sum6, "-0.010%~0.012", YELLOW);
}
if stime == 103000 Then {
Plot7(Sum7, "-0.012%~0.014", YELLOW);
}
if stime == 101500 Then {
Plot8(Sum8, "-0.014%~0.016", YELLOW);
}
if stime == 100000 Then {
Plot9(Sum9, "-0.016%~0.018", YELLOW);
}
if stime == 094500 Then {
Plot10(Sum10, "-0.018%~0.020", YELLOW);
}
if stime == 093000 Then {
Plot11(Sum11, "~0.020", YELLOW);
}
}
답변 1
예스스탁 예스스탁 답변
2018-11-15 11:11:16
안녕하세요
예스스탁입니다.
봉당 P번씩 루프가 수행되므로
P의 값이 크거나 차트의 데이터가 많으면 속도 늦어질수 밖에 없습니다.
기존 for문에 동일데이터를 반복으로 호출하는 내용이 많으므로
한번 호출해서 계산해서 변수를 이용하는 내용으로 변경해 드립니다.
input : P(100);
var : Cnt(0), sum1(0), sum2(0), sum3(0), sum4(0), sum5(0), sum6(0), sum7(0), sum8(0), sum9(0), sum10(0), sum11(0);
var : sum12(0), sum13(0), sum14(0), sum15(0), sum16(0), sum17(0), sum18(0), sum19(0), sum20(0);
sum1 = 0; sum2 = 0; sum3 = 0; sum4 = 0; sum5 = 0; sum6 = 0; sum7 = 0; sum8 = 0; sum9 = 0; sum10 = 0; sum11 = 0;
var : Rate(0);
for cnt = 0 to P-1
{
Rate = (dayopen(cnt)-DayClose(cnt+1))/DayClose(cnt+1)*100;
If 0 > Rate and Rate >= -2 Then //-0.002%~0%
sum1 = sum1+1;
If -2 > Rate and Rate >= -4 Then //-0.004%~-0.002%
sum2 = sum2+1;
If -4 > Rate and Rate >= -6 Then //-0.006%~-0.004%
sum3 = sum3+1;
If -6 > Rate and Rate >= -8 Then //-0.008%~-0.006%
sum4 = sum4+1;
If -8 > Rate and Rate >= -10 Then //-0.010%~-0.008%
sum5 = sum5+1;
If -10 > Rate and Rate >= -12 Then //-0.012%~-0.010%
sum6 = sum6+1;
If -12 > Rate and Rate >= -14 Then //-0.014%~-0.012%
sum7 = sum7+1;
If -14 > Rate and Rate >= -16 Then //-0.016%~-0.014%
sum8 = sum8+1;
If -16 > Rate and Rate >= -18 Then //-0.018%~-0.016%
sum9 = sum9+1;
If -18 > Rate and Rate >= -20 Then //-0.020%~-0.018%
sum10 = sum10+1;
If -20 > Rate Then // ~-0.020%
sum11 = sum11+1;
if IsNaN(DayClose(cnt+1)) == true Then
cnt = P+1;
}
If CurrentDate == sDate Then {
PlotBaseLine1(0, "0", WHITE);
PlotBaseLine2(10, "10", WHITE);
If sTime == 120000 Then {
Plot1(Sum1, "-0.002%~0", YELLOW);
}
if stime == 114500 Then {
Plot2(Sum2, "-0.004%~0.002", YELLOW);
}
if stime == 113000 Then {
Plot3(Sum3, "-0.006%~0.004", YELLOW);
}
if stime == 111500 Then {
Plot4(Sum4, "-0.006%~0.008", YELLOW);
}
if stime == 110000 Then {
Plot5(Sum5, "-0.008%~0.010", YELLOW);
}
if stime == 104500 Then {
Plot6(Sum6, "-0.010%~0.012", YELLOW);
}
if stime == 103000 Then {
Plot7(Sum7, "-0.012%~0.014", YELLOW);
}
if stime == 101500 Then {
Plot8(Sum8, "-0.014%~0.016", YELLOW);
}
if stime == 100000 Then {
Plot9(Sum9, "-0.016%~0.018", YELLOW);
}
if stime == 094500 Then {
Plot10(Sum10, "-0.018%~0.020", YELLOW);
}
if stime == 093000 Then {
Plot11(Sum11, "~0.020", YELLOW);
}
}
즐거운 하루되세요
> 제0원소 님이 쓴 글입니다.
> 제목 : 수식 간략화, 처리속도 향상 문의
> 수고하십니다.
분봉차트에서 일봉의 갭을 구하고 0.2% 구간으로 나누어 분봉차트에 히스토그램을 그리는 식을 작성하였습니다.
아래에서 p가 구간인데 이것을 1000 거래일 이상으로 늘리면 컴퓨터가 계속 돌아갑니다.
컴퓨터 사양이 낮지도 않은데 유독 이 지표에서만 이런현상이 발생합니다.
그리고 지표 수식이 너무 긴데 배열 등을 활용하여 간략화가 가능하다면 작성 부탁드립니다.
input : P(100);
var : Cnt(0), sum1(0), sum2(0), sum3(0), sum4(0), sum5(0), sum6(0), sum7(0), sum8(0), sum9(0), sum10(0), sum11(0);
var : sum12(0), sum13(0), sum14(0), sum15(0), sum16(0), sum17(0), sum18(0), sum19(0), sum20(0);
sum1 = 0; sum2 = 0; sum3 = 0; sum4 = 0; sum5 = 0; sum6 = 0; sum7 = 0; sum8 = 0; sum9 = 0; sum10 = 0; sum11 = 0;
for cnt = 0 to P-1{
If 0.998*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1) Then //-0.002%~0%
sum1 = sum1+1;
If 0.996*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.998 Then //-0.004%~-0.002%
sum2 = sum2+1;
If 0.994*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.996 Then //-0.006%~-0.004%
sum3 = sum3+1;
If 0.992*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.994 Then //-0.008%~-0.006%
sum4 = sum4+1;
If 0.990*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.992 Then //-0.010%~-0.008%
sum5 = sum5+1;
If 0.988*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.990 Then //-0.012%~-0.010%
sum6 = sum6+1;
If 0.986*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.988 Then //-0.014%~-0.012%
sum7 = sum7+1;
If 0.984*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.986 Then //-0.016%~-0.014%
sum8 = sum8+1;
If 0.982*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.984 Then //-0.018%~-0.016%
sum9 = sum9+1;
If 0.980*DayClose(cnt+1) <= DayOpen(cnt) and DayOpen(cnt) < DayClose(cnt+1)*0.982 Then //-0.020%~-0.018%
sum10 = sum10+1;
If DayOpen(cnt) < DayClose(cnt+1)*0.980 Then // ~-0.020%
sum11 = sum11+1;
}
If CurrentDate == sDate Then {
PlotBaseLine1(0, "0", WHITE);
PlotBaseLine2(10, "10", WHITE);
If sTime == 120000 Then {
Plot1(Sum1, "-0.002%~0", YELLOW);
}
if stime == 114500 Then {
Plot2(Sum2, "-0.004%~0.002", YELLOW);
}
if stime == 113000 Then {
Plot3(Sum3, "-0.006%~0.004", YELLOW);
}
if stime == 111500 Then {
Plot4(Sum4, "-0.006%~0.008", YELLOW);
}
if stime == 110000 Then {
Plot5(Sum5, "-0.008%~0.010", YELLOW);
}
if stime == 104500 Then {
Plot6(Sum6, "-0.010%~0.012", YELLOW);
}
if stime == 103000 Then {
Plot7(Sum7, "-0.012%~0.014", YELLOW);
}
if stime == 101500 Then {
Plot8(Sum8, "-0.014%~0.016", YELLOW);
}
if stime == 100000 Then {
Plot9(Sum9, "-0.016%~0.018", YELLOW);
}
if stime == 094500 Then {
Plot10(Sum10, "-0.018%~0.020", YELLOW);
}
if stime == 093000 Then {
Plot11(Sum11, "~0.020", YELLOW);
}
}