예스스탁
예스스탁 답변
2007-08-20 15:57:22
안녕하세요..예스스탁입니다.
검증오류 나오는 부분은 예스트레이더 3.0 버전에서 3.1버전(리딩스타도 동일)으로 변경되면서 변수처리를 3.0에서는 논리형과 수치형을 혼합해서 사용했었는데 3.1 및 리딩스타에서는 논리형과 수치형을 분리해서 사용하도록 변경되었기 때문입니다.
예를들어서 3.0에서는 다음과 같이 작성할 수 있습니다.
var : cond1(0), cond2(0), cond3(0);
cond1 = CrossUp(A,B);
cond2 = A > B;
cond3 = RSI(9);
3.1과 리딩스타에서는 아래와 같이 작성하셔야 됩니다.
var : cond1(false), cond2(false), cond3(0);
cond1 = CrossUp(A,B);
cond2 = A > B;
cond3 = RSI(9);
또는
var : cond1(0), cond2(0), cond3(0);
cond1 = iff(CrossUp(A,B),1,0);
cond2 = iff(A > B,1,0);
cond3 = RSI(9);
3.0과 3.1 또는 리딩스타와 시뮬레이션 결과를 비교하면 다른 부분이 발생하는 경우가 있는데, 데이타처리의 차이및 연산 방법의 차이 때문에 결과값이 다르게 나올 수 있습니다.
차이가 발생하는 주요 이유는
1. 3.1과 리딩스타에서는 허수봉(거래량이 없는봉)을 없앴기 때문에 지표의 계산 결과값이 달라져서 차이가 발생할 수 있습니다.
2. 여래개의 식중에 하나가 연산되지 않는 N/A가 나올 경우 3.0에서는 나머지 모두를 N/A처리 하였는데, 3.1 및 리딩스타에서는 and 로 연결된 경우만 N/A처리하고 or로 연결된 경우는 N/A처리하지 않게 변경되었습니다.
1) 식1(N/A) && 식2(정상) => N/A처리
2) 식1(N/A) || 식2(정상) => 식2에 따라 결과값 처리
이 내용 때문에 주로 차트 앞부분에서 결과값이 다르게 나오게 될 것입니다.
3. ADX / DMI / DiPlus / DiMinus / RSI 의 식이 변경되었습니다.
만일 식중에 위의 지표가 들어가 있다면 계산식의 변경으로 인하여 다른 결과가 나올 수 있습니다. 과거의 식을 그대로 사용하기를 원하신다면 해당식 다음에 "_Y"를 붙여서 사용하시면 됩니다. [ ADX_Y(Period), DMI_Y(Period), Diplus_Y(Period), Diminus_Y(Period), RSI_Y(Period) ]
4. 강제청산에 거래비용(수수료, 슬리피지)를 반영하지 않고 계산하도록 변경되었습니다. 거래비용에 모두 0을 넣고 적용했을때 결과값이 동일하다면 이 부분의 변경때문입니다.
5. 타종목을 참조하는 식이라면
3.0에서는 기본차트, 첫번째 참조차트 이렇게 두개가 있을때 첫번째 참조차트의 종가는 data1("C") 로 표현하였는데, 변경된 랭귀지에서는 첫번째 참조차트는 data2(C) 로 표현됩니다. 기본차트는 C 로 표현해도 되고 data1(C) 로 표현해도 됩니다.
6. 연산자 우선순위 변경
3.0에서는 &&와 || 연산자간에 우선순위가 없었습니다. 변경된 랭귀지에서는 &&연산자가 or연산자에 우선하도록 변경되었습니다. 따라서
A || B && C 의 식이 있을때 3.0에서는 앞에서 부터 순차적으로 연산하였지만, 변경된 랭귀지에서는 B와C의 연산을 먼저한 후 A와 연산을 합니다. 앞부터 순차적으로 연산하도록하려면
(A||B) && C로 작성하셔야 됩니다.
7. 분봉에서 사용하는 일봉의 데이타
dayopen(0), dayHigh(0), dayLow(0), dayClose(0) 와 같은 데이타는 3.0에서는 차트 맨 앞 시작시점을 기준으로 100 일치의 데이타를 가지고 있었으며 별도로 일봉의 데이타를 가지고 있었습니다. 변경된 랭귀지에서는 별도로 일봉의 데이타를 갖고 있지 않고 분봉자체에서 일봉의 값을 계산해 냅니다. 분봉에서 일봉의 이동평균선이나 다른 지표를 사용할 경우 3.0에서는 전체기간+100일의 데이타를 별도로 갖고 있었으므로 차트 앞부터 바로 지표를 그릴 수 있었는데, 변경된 랭귀지에서는 분봉데이타 만으로 계산하기 때문에 적용하는 만큼의 데이타가 진행된 이후에 지표를 그릴 수 있습니다.(지표를 그릴 수 없는 구간은 N/A처리 되므로 시스템의 결과가 다를 수 있습니다.)
위 사항에 대한 자세한 내용은 저희 홈페이지 첫화면 > 공지사항 > 예스트레이더3.1 기능추가 및 변경사항 글을 보시면 됩니다.
감사합니다.
> mcs0422 님이 쓴 글입니다.
> 제목 : 리딩스타
> 예스트레이더에서 사용하던 시스템 수식을
그대로 리딩스타에 적용하니
dt = date==20070816 && stime>=150000; (4열)
If iff(dt, 0, q1>q2) Then (13열)
Buy();
"연산자 앞뒤 두 데이터의 형태가 같아야 한다"는 오류 메시지가 나오며
검증이 안되는데
어찌된건지 궁금합니다
그래서 내용을 같게 수식을 약간 수정하여
If iff(date==20070816 && stime>=150000, 0, 1) && q1>q2 Then
Buy();
검증한 후
사실상 같은 내용의 시스템으로 시뮬레이션을 하니
두 프로그램에서의 시뮬레이션 값이 다르게 나옵니다
어찌된 건지 궁금합니다
리딩스타의 프로그램이 아직 불완전한지
아니면 연산하는 방식의 차이가 있는지?