커뮤니티

데이터 확인요청

프로필 이미지
SJ
2015-06-26 21:22:06
108
글번호 87709
답변완료
안녕하세요. 아래와 같이 지표를 debug 해보았을 때, 첫번째, messaglog에서 찍는 CLOSED(2)값과 두번째 messagelog에서 찍는 CLOSED(2)값이 다릅니다. 동일 봉에서 실행되는 지표이니 동일한 값을 가져와야 할 것 같은데 첫번째 messaglog에서 찍는 CLOSED(2)나 CLOSED(3)이나 모두 전일 종가를 가져오는 것 같습니다. 제 수식에 문제가 있는 지 확인 부탁드립니다. VARS: CORR1(0), CORR2(0), CORR3(0); VARS: NORM_VAL1(0), NORM_VAL2(0), NORM_VAL3(0); VARS: NORM_VAL1_K(0), NORM_VAL2_K(0), NORM_VAL3_K(0); VARS: SIGMA1(0), SIGMA2(0), SIGMA3(0); VARS: MEAN1(0), MEAN2(0),MEAN3(0),V_MEAN(0); VARS: S_NUM(0), T_NUM(0), NUM(0), TEMP_NUM(0),VOLUME_ADJ(0); VARS: I(0), SUM(0), SUM_KOSPI(0), PRICE_MEAN(0), PRICE_MEAN1(0), PRICE_MEAN2(0); S_NUM=1; T_NUM=1; TEMP_NUM=140; V_MEAN=0; NUM=1; FOR I=1 TO TEMP_NUM { // MessageLog(" STIME[I]: %f sDate:%f, sDate[I]:%f", STIME[I], sDate, sDate[I]); IF (STIME[I] == 090000 AND sDate[I] != sDate) THEN T_NUM = I ; ELSE IF (STIME[I] == 090000 AND sDate[I] == sDate ) THEN S_NUM = I + 1; } // MessageLog("NUM: %f", NUM); NUM = T_NUM - S_NUM; SIGMA1 = STD(Data1(C),NUM); MEAN1 = MA(Data1(C),NUM); NORM_VAL1 = (Data1(C)-MEAN1)/SIGMA1; //Data1 SIGMA2 = STD(Data1(V),NUM); MEAN2 = MA(Data1(V),NUM); NORM_VAL2 = (Data1(V)-MEAN2)/SIGMA2; //달러Data2 SUM=0; SUM_KOSPI=0; FOR I=S_NUM TO T_NUM { V_MEAN = V_MEAN + Data1(V[I]); } V_MEAN = V_MEAN /(T_NUM-S_NUM) ; FOR I=S_NUM TO T_NUM { PRICE_MEAN1 = (DATA1(C[I])-CLOSED(2))/CLOSED(2); PRICE_MEAN2 = (Data2(C[I])- Data2(CloseD(2)))/Data2(CloseD(2)); PRICE_MEAN=PRICE_MEAN1 - PRICE_MEAN2; SUM = SUM + PRICE_MEAN/ NUM ; SUM_KOSPI = SUM_KOSPI+PRICE_MEAN * (DATA1(V[I]))/V_MEAN/(T_NUM-S_NUM) ; MessageLog("I: %f STIME[I] :%f SDATE[I]:%f PRICE_MEAN: %f, SUM:%f, DATA1(C[I]): %f, CLOSED(2):%f, Data2(C[I]):%f, Data2(CloseD(2)): %f", I,STIME[I], SDATE[I] , PRICE_MEAN, SUM, DATA1(C[I]), CLOSED(2),Data2(C[I]), Data2(CloseD(3))); } VOLUME_ADJ= SUM; //PRICE_MEAN=(DATA1(C)-CLOSED(1))/CLOSED(1) - (Data2(C)- Data2(CloseD(1))/Data2(CloseD(1)) ); PRICE_MEAN1=(DATA1(C)-CLOSED(2))/CLOSED(2) ; PRICE_MEAN2=(Data2(C)- Data2(CloseD(2)))/Data2(CloseD(2)) ; PRICE_MEAN=PRICE_MEAN1 - PRICE_MEAN2; MessageLog(" DATA1(C): %f, CLOSED(2):%f, CLOSED(1):%f, Data2(C):%f, Data2(CloseD(2)): %f, Data2(CloseD(1)): %f", DATA1(C), CLOSED(2), CLOSED(1), Data2(C), Data2(CloseD(2)), Data2(CloseD(1))); PLOT1(PRICE_MEAN,"VOLUME_ADJ", RED); PLOT2(SUM,"PRICE_MEAN", BLUE);
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-06-29 14:34:55

안녕하세요 예스스탁입니다. Inputs : DaysAgo(Numeric); Array : CloseArray[50](-1); If DataCompress <= 2 Then { If Date > Date[1] Then Begin For Var1 = 49 DownTo 1 Begin CloseArray[Var1] = CloseArray[Var1 - 1]; End; CloseArray[0] = Close[1]; End; If DaysAgo < 50 AND DaysAgo > 0 && CloseArray[DaysAgo - 1] != -1 Then CloseD = CloseArray[DaysAgo - 1]; If DaysAgo == 0 Then CloseD = Close; } else { CloseD = Close[DaysAgo]; } 위 내용은 CloseD함수의 사용자함수 내용입니다. 참조데이터를 이용하시면 모든 계산식은 data함수로 씌워주셔야 합니다. 기본종목(data1) 마찬가지입니다. 해당 함수를 처리해 주지 않으시면 날짜가 변경이 될때(Date > Date[1]) 값을 넘기는데 참조데이터가 있어 차트의 봉이 여러개가 완성이 되므로 여러번 동일루틴이 수행되어 값을 넘기므로 동일값이 계산 이전배열방으로 넘어가게 됩니다. data1(CLoseD(1)) data1(CLoseD(2)) 또한 현재 수식에서 std(data1(c),NUM),MA(Data1(C),NUM)은 잘못 작성된 내용입니다. data1(std(c,NUM)) data1(MA(c,NUM)) 와 같이 함수 자체를 데이터 함수로 쒸워주셔야 합니다. 즐거운 하루되세요 > SJ 님이 쓴 글입니다. > 제목 : 데이터 확인요청 > 안녕하세요. 아래와 같이 지표를 debug 해보았을 때, 첫번째, messaglog에서 찍는 CLOSED(2)값과 두번째 messagelog에서 찍는 CLOSED(2)값이 다릅니다. 동일 봉에서 실행되는 지표이니 동일한 값을 가져와야 할 것 같은데 첫번째 messaglog에서 찍는 CLOSED(2)나 CLOSED(3)이나 모두 전일 종가를 가져오는 것 같습니다. 제 수식에 문제가 있는 지 확인 부탁드립니다. VARS: CORR1(0), CORR2(0), CORR3(0); VARS: NORM_VAL1(0), NORM_VAL2(0), NORM_VAL3(0); VARS: NORM_VAL1_K(0), NORM_VAL2_K(0), NORM_VAL3_K(0); VARS: SIGMA1(0), SIGMA2(0), SIGMA3(0); VARS: MEAN1(0), MEAN2(0),MEAN3(0),V_MEAN(0); VARS: S_NUM(0), T_NUM(0), NUM(0), TEMP_NUM(0),VOLUME_ADJ(0); VARS: I(0), SUM(0), SUM_KOSPI(0), PRICE_MEAN(0), PRICE_MEAN1(0), PRICE_MEAN2(0); S_NUM=1; T_NUM=1; TEMP_NUM=140; V_MEAN=0; NUM=1; FOR I=1 TO TEMP_NUM { // MessageLog(" STIME[I]: %f sDate:%f, sDate[I]:%f", STIME[I], sDate, sDate[I]); IF (STIME[I] == 090000 AND sDate[I] != sDate) THEN T_NUM = I ; ELSE IF (STIME[I] == 090000 AND sDate[I] == sDate ) THEN S_NUM = I + 1; } // MessageLog("NUM: %f", NUM); NUM = T_NUM - S_NUM; SIGMA1 = STD(Data1(C),NUM); MEAN1 = MA(Data1(C),NUM); NORM_VAL1 = (Data1(C)-MEAN1)/SIGMA1; //Data1 SIGMA2 = STD(Data1(V),NUM); MEAN2 = MA(Data1(V),NUM); NORM_VAL2 = (Data1(V)-MEAN2)/SIGMA2; //달러Data2 SUM=0; SUM_KOSPI=0; FOR I=S_NUM TO T_NUM { V_MEAN = V_MEAN + Data1(V[I]); } V_MEAN = V_MEAN /(T_NUM-S_NUM) ; FOR I=S_NUM TO T_NUM { PRICE_MEAN1 = (DATA1(C[I])-CLOSED(2))/CLOSED(2); PRICE_MEAN2 = (Data2(C[I])- Data2(CloseD(2)))/Data2(CloseD(2)); PRICE_MEAN=PRICE_MEAN1 - PRICE_MEAN2; SUM = SUM + PRICE_MEAN/ NUM ; SUM_KOSPI = SUM_KOSPI+PRICE_MEAN * (DATA1(V[I]))/V_MEAN/(T_NUM-S_NUM) ; MessageLog("I: %f STIME[I] :%f SDATE[I]:%f PRICE_MEAN: %f, SUM:%f, DATA1(C[I]): %f, CLOSED(2):%f, Data2(C[I]):%f, Data2(CloseD(2)): %f", I,STIME[I], SDATE[I] , PRICE_MEAN, SUM, DATA1(C[I]), CLOSED(2),Data2(C[I]), Data2(CloseD(3))); } VOLUME_ADJ= SUM; //PRICE_MEAN=(DATA1(C)-CLOSED(1))/CLOSED(1) - (Data2(C)- Data2(CloseD(1))/Data2(CloseD(1)) ); PRICE_MEAN1=(DATA1(C)-CLOSED(2))/CLOSED(2) ; PRICE_MEAN2=(Data2(C)- Data2(CloseD(2)))/Data2(CloseD(2)) ; PRICE_MEAN=PRICE_MEAN1 - PRICE_MEAN2; MessageLog(" DATA1(C): %f, CLOSED(2):%f, CLOSED(1):%f, Data2(C):%f, Data2(CloseD(2)): %f, Data2(CloseD(1)): %f", DATA1(C), CLOSED(2), CLOSED(1), Data2(C), Data2(CloseD(2)), Data2(CloseD(1))); PLOT1(PRICE_MEAN,"VOLUME_ADJ", RED); PLOT2(SUM,"PRICE_MEAN", BLUE);