[STage특징 및 주의사항] Cross 문법
글쓴이 : STage 조회수 : 2771 작성일 : 2011-04-22
1번첨부 : 없음 2번첨부 : 없음 3번첨부 : 없음

전략 작성시 많이 사용하시는 문법중에 Cross over/ Cross under 가 있습니다.

이동평균 = MA(Close, 20)

if Close Cross Over 이동평균 then
   Buy
elseif Close Cross Under 이동평균 then
   Sell
end if

이 문장이 대표적인 예가 되겠죠.
결론부터 말씀드리면 현재 스테이지에서 이 문장은 원하는 결과를 얻을 수 없습니다.  다음과 같이 작성하시면 올바른 결과를 얻을 수 있습니다.

이동평균 = MA(Close, 20)

if Close Cross Over 이동평균 then
   Buy
end if

if Close Cross Under 이동평균 then
   Sell
end if

차이점은 바로 조건문장에 의해 Cross 문장이 매 봉마다 실행되지 않는 경우의 발생 여부입니다.  아시겠지만 Cross의 여부는 단순히 크다(>), 작다(<)가 아니라 두 선이 교차하는 시점에만 의미를 가집니다.  즉, Cross 표현식의 좌/우의 값은 매 봉마다 정확한 값을 가지고 있어야 합니다.

위의 경우 첫번째 if문장에서 Cross Over가 참이되어 두번째 문장이 실행되지 않으면 두번째 문장인 Cross Under의 좌/우 값은 해당 봉에서 값을 저장할 기회를 잃게되어 특정한 순간 Cross Under의 정확한 판단을 못하게 되는 결과가 발생합니다.

그럼, 여기서 한가지 의문이 생깁니다.
Close는 그 자체로 히스토리가 있는 변수이고, 오른쪽의 이동평균 변수도 이미 if문장 위에서 값이 할당되어 있으니 자동으로 매봉마다 값을 가지게 하여 비교하면 될것 아닌가?

맞습니다.  프로그램적으로 구현이 가능합니다.
다음의 경우를 보겠습니다.

if Close + SomeFunction1() Cross Over 이동평균 + OtherFunction1() then
   Buy
elseif Close + SomeFunction2() Cross Under 이동평균 + OtherFunction2() then
   Sell
end if

이 경우는 좌/우에 변수대신 반드시 수행해야 결과를 얻을 수 있는 표현식이 있고, SomeFunction과 Otherfunction이 어떤 결과를 리턴할지 모르는 상황입니다.  하지만 이 경우도 프로그램적으로 올바른 결과를 얻을 수 있도록 만드는 것이 가능합니다.
이 문장을 해석할 때 Cross Over와 Cross Under의 표현식을 if문 위에서 수행해 그 결과만 비교하면 됩니다.

그러면, 다음의 예를 보겠습니다.

if 조건1 then
   v1 = SomeFunction()

   if Close Cross Over v1 then
      Buy
   end if
elseif 조건2 then
   v1 = OtherFunction()

   if Close Cross Under v1 then
      Sell
   end if
end if

이 경우는 좀더 난해 합니다. 일단 if문장 안에 또 if가 있는 중첩if 문장입니다.  그리고 비교 대상이되는 v1은 조건1조건2의 경우에 따라 각각 해당봉에서 다른값을 가지게 됩니다.
해결책을 생각해보았더니 매 봉마다 조건1과 조건2가 무조건 참인 경우를 가정해 v1의 값을 별도로 가지고 있던지, 아니면 조건문에 의해 실행되지 않은 구간을 내부적으로 강제로 실행시켜 v1의 값을 채워 넣는 경우 등 여러가지로 생각해 보았지만 이것보다 더 복잡한 경우까지 생각하니 100% 정확한 해결책을 찾을 수가 없었습니다.

TradeStation 2000i에서도 복잡한 케이스의 경우 예상대로 결과값도 정확하지 않고 내부적으로 추가적인 Loop를 여러번 도는 것을 확인하고 일단 완벽한 해결책을 찾는 작업을 나중으로 미루었습니다.

물론, 이렇게 까지 복잡하게 사용하는 사용자는 거의 없으리라 생각됩니다.  그래서 스테이지는 다음과 같은 순서로 진행하려고 합니다.

1. 조건문에 따라 매봉마다 실행되지 않을 수 있는 Cross문장을 검증하려 할 때 경고 메시지 출력
2. 내부적으로 자동으로 해결할 수 있는 문장일 경우 경고없이 검증완료.
3. 자동으로 해결할 수 있더라도 비용(내부적으로 Loop를 돌아야 해결되는 경우 등)이 많이 드는 경우 경고.

하나씩 해결할 때 마다 별도로 공지해 드리고, 이 글의 내용도 그에 맞게 수정해 나가겠습니다.

감사합니다.



번호 제목 첨부 작성자 작성일 조회
24  당일종가청산, 당일청산 안내 도움말 스테이지 2013-09-13 2319
23  야간장 매매시 [당일청산], [당일종가청산] 관련.. 스테이지 2013-07-01 2143
22  STage 도움말 - 시간보정 신규옵션 안내 스테이지 2012-02-02 2209
21  STage 도움말 - 사용자 함수 옵션 설정안내 스테이지 2011-12-09 2103
20  STage 도움말 - IF문 관련 주의사항 안내 스테이지 2011-09-15 2411
19  STage 도움말 - 최적화 사용 안내 스테이지 2011-09-05 2389
18  STage 도움말 - 주문함수 안내 스테이지 2011-08-26 2971
17  STage차트 종목연동기능 안내 스테이지 2011-08-04 2567
16  STage-GOM 유의사항 공지 - 주문기능제한 스테이지 2011-08-01 2398
15  STage-GOM 사용안내 (최초 사용시) 스테이지 2011-08-01 2481
14  STage - GOM 사용도움말 배포 안내 스테이지 2011-07-28 3661
13  STage 동영상 #3 - STage 시스템주문 사용법 스테이지 2011-07-01 3040
12  STage 동영상 #2 - STage 차트 사용법 #2 스테이지 2011-07-01 2713
11  STage 동영상 #1 - STage 차트 사용법 스테이지 2011-07-01 3272
10  STage 메뉴얼 - STage 시스템 주문 설정 스테이지 2011-06-23 2905
9  STage 메뉴얼 - 사용자지표 만들기 스테이지 2011-06-01 2855
8  STage 사용법 매뉴얼 스테이지 2011-05-26 3349
7  STage 도움말 배포 안내 스테이지 2011-05-13 3615
6  [STage특징] 라인 오브젝트의 활용 스테이지 2011-05-05 3120
5  [STage특징] 함수를 객체로 활용하기 스테이지 2011-04-27 2839
4  [STage특징 및 주의사항] 함수작성 및 호출시 주.. STage 2011-04-22 3366
3  [STage특징 및 주의사항] Cross 문법 STage 2011-04-22 2772
2  [STage특징 및 주의사항] STage 2011-04-22 3144
1  STage 많은 관심 부탁드립니다. 상상나무 2011-03-22 2797
1