1.
전략내용
차트에서 매수신호 발생시 현재가로 주문 → 매수 주문 후 미체결은 300초 뒤 취소
차트에서 매도신호 발생시 매수주문 미체결은 취소하고 잔고에 보유수량 전량을 현재가로 청산
2.
스크립트 객체화면 설정
차트에서 신호가 발생시 주문을 하기 위해서는
첫째, 차트에서 신호발생 등의 정보를 가져오는 차트객체가 필요하고,
둘째, 주문낼 종목의 가격/호가 정보등이 제공되는 종목객체가 필요하며,
셋째, 주문을 위해서는 계좌객체가 필요하게 됩니다.
전략을 구현하기 위해서 먼저 필요한 차트객체/종목객체/계좌객체를
스크립트 객체화면에서 추가하고 스크립트 편집창에서 전략을 작성해야 합니다.
•
차트객체 추가와 차트에서 아이디 부여
차트에서 정보를 얻기 위해서 스크립트 객체화면에서 차트객체를 추가합니다
차트객체는 복수로 추가해서 사용 가능합니다.
예제에서는 하나의 차트객체만 필요하므로 하나만 추가합니다.
차트객체를 추가한 후 속성에서 차트객체명은 C1, 차트아이디는 SYS1로 지정합니다.
차트객체와 차트의 연결은 [차트아이디] 부여를 통해서 이루어지게 되므로
차트객체와 차트에 같은 이름으로 [차트아이디]를 꼭 부여해 주어야 합니다.
차트에서 차트아이디는 오른쪽 하단의
버튼을 클릭하면 지정할 수 있습니다.
차트객체에서 지정한 이름과 동일한 이름으로 지정하며
알파벳 대소문자를 구별하므로 아이디 지정에 유의해야 합니다.

차트에 아이디 부여가 완료되면 차트 오른쪽 상단에 해당 차트의 아이디가 표시 됩니다.
차트에서 신호를 정보를 받아야 하므로 차트에 시스템식을 적용해 주면 됩니다.
차트는 신호만 발생하고 주문은 스팟에서 수행되므로 시스템은 시험적용으로 적용해 주시면 됩니다.
•
종목객체 추가
주문낼 종목의 가격/호가 정보가 필요하므로 종목객체를 추가합니다.
종목객체를 추가 후에 속성에서 객체명은 MK로 지정하고 상품은 차트와 동일종목을 지정해 줍니다.
만약 종목객체를 차트와 다른종목을 선택하게 되면 차트에서 매수나 매도신호가 발생하면
다른종목에 대해 주문이 집행되는 식이 됩니다.
•
계좌객체 추가
주문을 낼 때 계좌번호 등이 필요하므로 계좌객체를 추가합니다.
스크립트 객체화면에서 계좌객체명을 클릭하면
속성화면에서 해당 계좌객체의 객체명과 계좌번호를 지정할 수 있습니다.
객체명은 기본으로 지정된 이름을 사용해도 되고 임의로 지정해도 됩니다.
예제에서는 객체명은 ACC로 지정합니다.
계좌란을 클릭해서 주문낼 계좌번호를 지정합니다.
3.
전략작성 구조
예스스팟 전략작성의 기본적인 구조는
이벤트 발생(특정사건 발생)하면 그 때 처리해야 할 내용을 기술하는 것입니다.
예제1에서는 이벤트는 차트에서 신호 발생하는 것이며
신호의 종류를 확인하는 것은 조건문, 주문을 내는 것이 실행문이 됩니다.
•
이벤트 지정
먼저 차트에서 완성신호가 발생하면 완성신호의 정보를 수신 받는 이벤트를 설정합니다.
이벤트는 아래와 같이 스크립트에 기술하고 중괄호 안에 처리해야 할 내용을 기술합니다.
차트에서 완성신호가 발생되면 호출되는 이벤트는 차트객체에 제공되는 OnRiseSignal이며
아래와 같이 작성해 사용합니다.
위와 같이 작성하면 차트객체(C1)에서 완성신호이벤트(OnRiseSignal)가 발생하면
완성신호객체(Signal)에 그 정보를 넘겨주게 됩니다.
완성신호 객체인 Signal은 아래와 같은 프로퍼티를 가집니다.
프로퍼티나 메소드는 이미 시스템에서 정의된 기능을 불러와 사용하는 개념으로
스크립트에서 사용할 때에는 점 연산자의 왼쪽에는 객체가, 오른쪽에는 프로퍼티나 메소드를 지정하여 사용합니다.
가령 완성신호객체(Signal)의 이름을 알고자 하면 Signal.name,
완성신호객체의 종목코드를 알고자 하면 Signal.code와 같이 표현해서
전략에서 해당 정보를 이용하면 됩니다.
※ 예스스팟에서 전략을 작성할 때에는 이벤트나 함수나 프로퍼티를
작성자가 하나하나 모두 기술할 필요는 없습니다.
스크립트 객체화면에 추가되어 있는 객체의 이벤트는 모두 더블클릭하면 스크립트 편집창에 자동으로 입력됩니다.
•
조건문 작성
완성신호 이벤트가 설정이 되었으므로
완성신호가 buy신호인지 확인하는 내용을 기술해 보도록 하겠습니다.
완성신호 객체에서 신호의 종류를 알 수 있는 프로퍼티는 signalKind입니다.
완성신호가 Buy이면 1, Exitlong이면 2, Sell이면 3, ExitShort이면 4를 리턴합니다.
차트에서 발생한 완성신호가 Buy이면 signalKind는 1을 가지게 되므로
아래와 같이 if문으로 완성신호의 종류가 매수임을 나타내는 if 조건문을 작성해 주시면 됩니다.
※ 자바스크립트에서 if문은 if (조건) { 실행문 } 과 같은 구조이며
알파벳 대소문자를 구별하므로 특별히 대소문자 사용에 유의하시기 바랍니다.
•
실행문 작성
차트에서 발생된 신호가 Buy라는 것이 확인되면 주문을 발생하면 되므로
실행문으로 계좌객체의 매수주문함수가 들어가면 됩니다.
OrderBuy(market, sItemCode, nCount, dPrice, nPriceKind, totalAmount)
계좌객체의 매수주문 함수에는시장구문, 종목코드,주문수량, 주문가격, 가격구분, 주문총액을 순서대로 지정해 주시면 됩니다.
간단히 종목객체로 지정한 종목을 100만원어치 현재가로 매수한다면 아래와 같이 매수주문 함수를 작성하시면 됩니다.
4.
스팟수식
var BID,BNum;
function Main_OnStart()
{
//"Start"메세지 출력
Main.MessageList("Start");
}
//차트에서 신호 발생
function C1_OnRiseSignal(Signal)
{
//Buy신호가 발생
if (Signal.signalKind == 1)
{
//현재가로 백만원 매수주문(주문아이디를 BID변수에 저장)
//주문함수는 동작하면 고유의 주문아이디가 발생합니다. 주문아이디를 저장해서 주문응답시에 주문번호를 저장할 때 사용합니다.
BID = ACC.OrderBuy(MK.market, MK.code, 1000000/MK.current, MK.current, 0,0);
//1번 타이머 셋팅(300초, 1000이 1초)
Main.SetTimer(1, 3000000);
}
//ExitLong신호 발생
if (Signal.signalKind == 2)
{
//매수주문 주문번호로 미체결객체 셋팅
ACC.SetUnfill(BNum);
//미체결 수량이 있으면 주문 취소
if (ACC.Unfill.count > 0)
{
ACC.OrderCancel(BNum);
}
//잔고 셋팅
ACC.SetBalance(MK.code, 0);
//계좌잔고에 해당종목 보유수량이 있으면
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
//전량 현재가로 청산
ACC.OrderSell(MK.market, MK.code, Account1.Balance.count,MK.current, 0)
}
}
}
//주문응답
function Main_OnOrderResponse(OrderResponse)
{
//수신받은 주문응답이 매수주문시 지정한 아이디와 같으면(매수주문에 대한 주문응답이면)
if (OrderResponse.orderID == BID)
{
//Bnum에 주문번호 저장
BNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
//타이머 종료
Main.KillTimer(1);
//매수주문 주문번호로 미체결객체 셋팅
ACC.SetUnfill(BNum);
//미체결 수량이 있으면 주문 취소
if (ACC.Unfill.count > 0)
{
ACC.OrderCancel(BNum);
}
}
}
JavaScript
복사