Search
📝

예제7. 수식 안에서 종목객체를 생성해서 이용하기

종목의 호가나 시세정보는 종목객체에서만 제공되므로 예제6과 같이 주문할 때 매도2호가나 매수2호가 등으로 가격을 지정하여 주문을 내려면 종목객체가 필요합니다. 예제6과 같이 전략식에서 단순히 주문가격을 지정할 때만 종목객체가 필요한 경우와 같이 스크립트 객체화면에 종목객체로 설정하지 않고 스크립트 안에서 종목객체를 생성해서 사용할 필요가 있을 때 사용하시면 됩니다. 예제6을 이용하므로 전략내용과 스크립트 설정은 예제6번과 동일합니다.
1.
전략내용
예제6과 동일합니다.
2.
스크립트 객체화면 설정
예제6과 동일하지만 종목객체는 수식 안에서 생성하므로 스크립트 객체설정 화면에 종목객체는 추가하지 않습니다
3.
전략작성전략
a.
스팟전략이 최초 실행될 때
① [예스스팟 스튜디오]의 디버깅창에 시작이라는 텍스트를 출력합니다. ② 스팟전략 실행 후에 차트에서 발생하는 최초의 진입신호부터 주문을 하기 위한 처리가 필요하므로 변수(Start)를 만들어 우선 기초값을 0으로 셋팅합니다. 전역변수로 선언합니다.
b.
차트 신호와 연계된 전략이므로 차트객체(C1)의 OnRiseSignal 이벤트를 사용합니다.
① 변수(Skind)에 완성신호의 종류를 저장합니다.  변수는 전역변수로 선언합니다. ② 변수(Scode)에 완성신호의 종목코드를 저장합니다. 변수는 전역변수로 선언합니다. ③ 변수(Scount)에 완성신호의 주문수량을 저장합니다. 변수는 전역변수로 선언합니다. ④ Main객체의 ReqMarketData는 종목객체를 생성을 요청하는 함수입니다.
c.
종목객체 생성 완료 이벤트가 발생하면 OnRcvMarketData 이벤트는 ReqMarketData함수에 의해 종목객체 요청이 되고 해당 종목객체의 생성이 완료가 되면 호출이 됩니다.
① 변수(SSEobject)에 생성된 종목객체를 저장합니다.
해당 이벤트 내에서만 사용되므로 지역변수로 선언합니다.
② 각 변수에 차트(차트객체 C2, 차트아이디 D1)에 적용된 지정한 이름의 지표의 값을 저장합니다.
해당 이벤트 내에서만 각 변수는 사용되므로 지역변수로 선언합니다.
자세한 설명은 예제6 참고하시기 바랍니다.
③ 저장한 값을 이용해 매수조건문을 만듭니다.
(최근 발생한 신호종류는 매수이고 일간차트의 이동평균은 정배열(5 > 20 > 60)이고
5일 이평은 상승중이고 일간차트의 스토케스틱 슬로우K가 30이하이면)
④ 매수조건이 만족하면 매수주문을 실행합니다.
완성신호 이벤트가 발생했을 때 변수에 저장한 값을 이용 주문종목코드와 주문수량을 지정합니다. 주문가격은 생성된 종목객체의 매수2호가로 지정합니다.
⑤ 진입이 발생하면 Start에는 1을 저장합니다.
⑥ 매도 조건을 지정합니다.
스팟적용 후 첫 진입주문 이후부터 청산주문 발동하기 위해
Start값은 1이고  완성신호의 종류는 exitlong일때 매도주문합니다.
⑦ 매수와 같이 주문종목코드와 주문수량은 완성신호 이벤트발생할 때 저장한 값을 이용하고
주문가격은 생성된 종목객체의 매수2호가로 지정합니다.
4.
스팟수식
/*스크립트시작-----------------------------------------------------*/ var Start; var Skind; var Scode; var Scount; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { Skind = Signal.signalKind; Scode = Signal.code; Scount = Signal.count; Main.ReqMarketData(Signal.code, 0); } function Main_OnRcvMarketData(MarketData) { var SSEobject = MarketData; 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 (Skind== 1 && dayma1 > dayma2 && dayma2 > dayma3 && dayma1 > predayma1 && slowK <= 30) { A1.OrderBuy(Scode,Scount,SSEobject.Ask(2),0); Start = 1; } if (Start == 1 && Skind == 2) { A1.OrderSell(Scode,Scount,SSEobject.Bid(2),0); } }
JavaScript
복사