커뮤니티
데이터 확인요청
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);
이전글