예스스탁
예스스탁 답변
2017-11-09 17:22:52
안녕하세요
예스스탁입니다.
예스스팟은 간단한 가이드 정도만 답변해 드립니다.
아래수식 참고하셔서 수정보완해 사용하시기 바랍니다.
스크립트 객체설정
계좌객체 --> 객체명 Account1,속성에서 주문낼 계좌번호 지정
차트객체 --> 객체명 Chart1, 속성에서 연동할 차트와 아이디 지정
종목객체 --> 객체명 MarketData1, 속성에서 차트와 동일종목으로 지정
var BID,BXID,SID,SXID;
var BID1,BXID1,SID1,SXID1;
var BNum,BXNum,SNum,SXNum;
var BNum1,BXNum1,SNum1,SXNum1;
function Chart1_OnRiseSignal(Signal)
{
//buy신호 발생
if (Signal.signalKind == 1)
{
BID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Signal.count,MarketData1.current, 0);
}
//Exitlong신호 발생
if (Signal.signalKind == 2)
{
//진입미체결취소
Account1.SetUnfill(BNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(BNum);
}
//보유중인 수량만 청산
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
BXID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.current, 0);
}
}
//Sell신호 발생
if (Signal.signalKind == 3)
{
SID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Signal.count,MarketData1.current, 0);
}
//Exitshort신호 발생
if (Signal.signalKind == 4)
{
//진입 미체결 취소
Account1.SetUnfill(SNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(SNum);
}
//보유중인 수량만 청
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
SXID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.current, 0);
}
}
}
//주문응답
function Main_OnOrderResponse(OrderResponse)
{
//매수진입 최초주문
if (OrderResponse.orderID == BID)
{
BNum = OrderResponse.orderNum;
Main.SetTimer(1,30000); //1번 타이머셋팅 30초
}
//매수진입 30초후 정정주문
if (OrderResponse.orderID == BID1)
{
BNum1 = OrderResponse.orderNum;
Main.SetTimer(11,180000); //11번 타이머셋팅 180초
}
//매수청산 최초주문
if (OrderResponse.orderID == BXID)
{
BXNum = OrderResponse.orderNum;
Main.SetTimer(2,20000); //2번 타이머셋팅 20초
}
//매수청산 취소주문 후 시장가 청산
if (OrderResponse.orderID == BXID1)
{
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, 0, 1);
}
}
//매도진입 최초주문
if (OrderResponse.orderID == SID)
{
SNum = OrderResponse.orderNum;
Main.SetTimer(3,30000); //3번 타이머셋팅 30초
}
//매도진입 30초 후 정정주문
if (OrderResponse.orderID == SID1)
{
SNum1 = OrderResponse.orderNum;
Main.SetTimer(33,180000); //33번 타이머셋팅 180초
}
//매수청산 최초주문
if (OrderResponse.orderID == SXID)
{
SXNum = OrderResponse.orderNum;
Main.SetTimer(4,20000); //4번 타이머셋팅 20초
}
//매수청산 취소주문 후 시장가로 청산
if (OrderResponse.orderID == SXID1)
{
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, 0, 1);
}
}
}
function Main_OnTimer(nEventID)
{
//매수진입주문 타이머 동작
if (nEventID == 1)
{
Main.KillTimer(1);
Account1.SetUnfill(BNum);
if (Account1.Unfill.count > 0)
{
BID1 = Account1.OrderReplacePrice(BNum, Account1.Unfill.price + MarketData1.GetTickSize());
}
}
if (nEventID == 11)
{
Main.KillTimer(11);
Account1.SetUnfill(BNum1);
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(BNum1)
}
}
//매수청산주문 타이머 동작
//20초 후 미체결은 취소(최수주문에 응답들어오면 시장가로 청산주문)
if (nEventID == 2)
{
Main.KillTimer(2);
Account1.SetUnfill(BXNum);
if (Account1.Unfill.count > 0)
{
BXID1 = Account1.OrderCancel(BXNum);
}
}
//매도진입주문 타이머 동작
if (nEventID == 3)
{
Main.KillTimer(3);
Account1.SetUnfill(SNum);
if (Account1.Unfill.count > 0)
{
SID1 = Account1.OrderReplacePrice(SNum, Account1.Unfill.price - MarketData1.GetTickSize());
}
}
if (nEventID == 33)
{
Main.KillTimer(33);
Account1.SetUnfill(SNum1);
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(SNum1)
}
}
//매도청산주문 타이머 동작
//20초 후 미체결은 취소(최수주문에 응답들어오면 시장가로 청산주문)
if (nEventID == 4)
{
Main.KillTimer(4);
Account1.SetUnfill(SXNum);
if (Account1.Unfill.count > 0)
{
SXID1 = Account1.OrderCancel(SXNum);
}
}
}
즐거운 하루되세요
> 지킴이 님이 쓴 글입니다.
> 제목 : 문의 드립니다.
> 항상 답변 감사하게 받아보고 있습니다.
하이투자에서 선물거래를 하고 잇습니다.
질문1 : <<진입식>>
예스트레이더에서 신호발생시, 현재가진입
체결이 안되었으면 30초후 한틱위로 정정
미체결시 180초후에 취소.
일부만 체결되고 미체결된것은 취소
<<청산식>>
예스트레이더에서 신호발생시, 현재가진입
체결이 안되었으면 20초후 시장가청산.
청산식은 매수이든 매도이든 잔고를 확인해서 체결잔고가 있을때만 발생되도록 부탁드립니다.
청산식은 항상 포지션잔고 체크하고 잔고에 있는 전량이 전부 주문이 이루어지게 부탁합니다.