Search
📝

예제6. 주기가 다른 여러 차트를 참조해 주문발생하기

예스랭귀지에서 타주기의 값을 이용하는 시스템을 만들 때 보통 2가지 방법을 사용합니다. 첫번째 방법은 참조데이터로 타주기 데이터를 추가하고 수식에서 이용하는 것이 있고, 두번째 방법은 주종목 데이터로만 타주기의 계산식을 만들어 사용하는 방법이 있습니다. 타주기 참조데이터를 사용하는 경우에는 수식에서 data2(macd(12,26)과 같이 타종목참조 함수를 이용하면 수식 작성은 간단하지만 최근 완성된 봉까지만 사용되므로 현재 만들어지고 있는 미완성봉의 값을 이용하지 못하는 단점이 있고, 주종목 데이터로만 계산식을 만들어 사용하는 경우에는 계산식 작성이 어렵고, 실시간 차트의 데이터가 최대건수가 5000개봉이므로 봉수가 부족하여 구현이 가능하지 못한 경우도 있으며 3분봉에서 10분봉같이 주종목의 주기의 배수가 아닌 타주기는 구현이 되지 않습니다. 예스스팟에서는 차트객체를 통해 차트에 적용된 지표나 검색, 강조의 값을 실시간으로 최종값 및 이전 봉의 값도 이용할 수 있으므로 타주기의 지표나 계산값을 이용할 때 예스랭귀지 시스템과 연동해 사용하시면 좀더 간단하고 제약 없이 전략 구현이 가능합니다.
1.
전략내용
종목은 간단한 전략 구현을 위해 일반종목인 삼성전자를 이용합니다.
매수 : 1분봉 차트에서 종가가 파라볼릭을 상향돌파하면 매수하는데
일간 이동평균 5-20-60 정배열이고 5일 이동평균은 상승 중이고
일간 스토케스틱 슬로우K는 30 이하인 상태일 때만 매수주문
매도 : 1분봉 차트에서 종가가 파라볼릭을 하향이탈하면 매도
파라볼릭 전략은 확정된 신호를 위해 시스템에서 발생하는 신호를 참고합니다.
2.
스크립트 객체화면 설정
a.
첫번째 차트객체
첫번째 차트객체는 파라볼릭 신호등 1분봉 차트에 적용된 완성된 신호정보를 가져오는 용도입니다.차트객체를 추가하고 객체명은 C1으로 하고 차트아이디는 M1으로 합니다.
1분봉 차트에 파라볼릭 시스템을 적용하고 차트아이디는 차트객체와 같은 M1으로 지정합니다.
b.
두번째 차트객체
두번째 차트객체는 일간의 값을 가져오는 용도입니다. 차트객체를 추가하고 객체명은 C2으로 하고 차트아이디는 D1으로 합니다.
일간차트의 아이디를 D1로 설정하고 전략에서 필요한 지표를 적용해 주시면 됩니다. 예제에서는 이동평균3개와 스토케스틱 슬로우K값이 필요하므로 지표식 중 [이동평균 5_20_60]과 [Stochastics]을 적용합니다.
c.
계좌객체
주문을 발생해야 하므로 계좌객체를 추가한 후 계좌를 지정합니다. 객체명은 A1로 지정하고 주문 낼 계좌번호를 지정합니다.
d.
종목객체
주문시 삼성전자의 호가정보를 얻기 위해 종목객체를 추가합니다.
객체명은 SSE로 지정하고 삼성전자, KRX시세로 지정합니다. 일간데이터, 수급데이터는 사용하지 않습니다
3.
전략작성전략
a.
스팟전략이 최초 실행될 때
① [예스스팟 스튜디오]의 디버깅창에 시작이라는 텍스트를 출력합니다. ② 스팟전략 실행 후에 차트에서 발생하는 최초의 진입신호부터 주문을 하기 위한 처리가 필요하므로 변수(Start)를 만들어 우선 기초값을 0으로 셋팅합니다. 전역변수로 선언합니다.
b.
차트 신호와 연계된 전략이므로 차트객체(C1)의 OnRiseSignal 이벤트를 사용합니다.
OnRiseSignal은 연결된 차트에서 완성신호가 발생했을 때 호출되는 이벤트이고 완성신호 정보는 완성신호객체(Signal)가 제공합니다. 차트(차트객체 C1, 차트아이디 M1)에서 완성신호 이벤트가 발생하면 각 변수에 일간차트에서 필요한 값을 가져와 저장합니다. GetIndicatorData는 차트의 적용된 지표값을 가져오는 함수입니다. 첫번째 매개변수에 차트에 적용된 지표명을 입력합니다. 두번째 매개변수에는 출력할 plot의 번호를 지정하면 됩니다. 세번째 매개변수에는 이전 봉의 값을 참조할 때 사용합니다. (순서대로 0은 현재, 1은 1봉전, 2는 2봉전 순입니다.)
① 변수(dayma1)에 차트(차트객체 C2, 차트아이디 D1)에 적용된 [이동평균 5_20_60]지표의
plot1지표의 현재 값을 가져와 저장합니다.
② 변수(dayma2)에 차트(차트객체 C2, 차트아이디 D1)에 적용된 [이동평균 5_20_60]지표의
plot2지표의 현재 값을 가져와 저장합니다.
③ 변수(dayma3)에 차트(차트객체 C2, 차트아이디 D1)에 적용된 [이동평균 5_20_60]지표의
plot3지표의 현재 값을 가져와 저장합니다.
④ 변수(predayma1)에 차트(차트객체 C2, 차트아이디 D1)에 적용된 [이동평균 5_20_60]지표의
plot1지표의 1봉전 값을 가져와 저장합니다.
⑤ 변수(slowk)에 차트(차트객체 C2, 차트아이디 D1)에 적용된 [Stochastics]지표의
plot1지표의 현재 값을 가져와 저장합니다.
c.
조건에 필요한 변수값이 모두 할당되었으므로 매수와 매도식을 작성하면 됩니다. .
⑥ 완성신호가 Buy신호이고
⑦ 일간차트의 현재시점 이동평균값이 5일 > 20일 > 60일
⑧ 일간차트의 5일이동평균의 현재값이 1봉전 값보다 큼
⑨ 일간차트의 스토케스틱 슬로우K가 30 이하이면
⑩ 매수주문(완성신호의 종목코드, 완성신호의 수량, 매도2호가, 지정가)하고
⑪ Start는 1값
⑫ 완성신호가 Exitlong신호이고 Start가 1이면
⑬ 매도주문(완성신호의 종목코드, 완성신호의 수량, 매수2호가, 지정가)
4.
스팟수식
var Start; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { var dayma1 = C2.GetIndicatorData("이동평균 5_20_60", 1,0); var dayma2 = C2.GetIndicatorData("이동평균 5_20_60", 2,0); var dayma3 = C2.GetIndicatorData("이동평균 5_20_60", 3,0); var predayma1 = C2.GetIndicatorData("이동평균 5_20_60", 1,1); var slowK = C2.GetIndicatorData("Stochastics",1,0); if (Signal.signalKind == 1 && dayma1 > dayma2 && dayma2 > dayma3 && dayma1 > predayma1 && slowK <= 30) { A1.OrderBuy(Signal.code,Signal.count,SSE.Ask(2),0); Start = 1; } if (Signal.signalKind == 2 && Start == 1) { A1.OrderSell(Signal.code,Signal.count,SSE.Bid(2),0); } }
JavaScript
복사