예스스탁
예스스탁 답변
2015-07-22 18:14:27
안녕하세요
예스스탁입니다.
아래 내용 참고하시기 바랍니다.
진입신호가 발생하면 1계약 주문후에
해당 주문이 정상접수되면 또 1계약을 주문하는 것을 반복합니다.
주문 --> 접수응답(정상) 1계약 --> 접수응답(정상) 1계약 --> .......
청산은 신호가 발생하면 잔고수량 일괄 청산합니다.
15시 10분에 잔고에 포지션 있으면 시장가로 청산합니다.
스크립트 객체화면 설정
차트객체 추가 --> 속성에서 객체명 Chart1, 차트아이디 지정후 차트에 동일 아이디 지정
종목객체 추가 --> 속성에서 객체명 MarketData1, 차트와 동일종목으로 지정
계좌객체 추가 --> 속성에서 객체명 Account1, 계좌번호 지정
객체 설정방법은 도움말 참고하시기 바랍니다.
var BID,Bnum,SID,Snum;
function Main_OnStart()
{
Main.MessageList("시작")
Main.SetTimer(1, 30000);//30초 간격으로 타이머 작동
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
//Buy신호 발생하면 매도5호가로 1계약 매수주문
BID =Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0);
}
if (Signal.signalKind == 2)
{
//exitlong신호 발생하면
//잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//잔고의 수량이 1개이상이고 매수포지션이면 전량청산
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0)
}
}
if (Signal.signalKind == 3)
{
//Sell신호 발생하면 매수5호가로 1계약 매도주문
SID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0)
}
if (Signal.signalKind == 4)
{
//exitshort신호 발생하면
//잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//잔고의 수량이 1개이상이고 매도포지션이면 전량청산
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0)
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
//직전 매수주문이 정상접수되면 추가로 1계약 매도5호가로 매수주문
if (BID == OrderResponse.orderID && OrderResponse.isNormal == true)
{
BID =Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0);
}
//직전 매도주문이 정상접수되면 추가로 1계약 매도5호가로 매수주문
if (BID == OrderResponse.orderID && OrderResponse.isNormal == true)
{
SID =Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0);
}
}
//15시 10분에 잔고에 포지션 있으면 청산
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//15시 10분 이후
if (nEventID == 1 && HHMMSS >= 151000)
{
//타이머 종료
Main.KillTimer(1);
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//매수포지션이면
if (Account1.Balance.position == 1)
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
//매도포지션이면
if (Account1.Balance.position == 2)
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
즐거운 하루되세요
> 궁금궁금123 님이 쓴 글입니다.
> 제목 : 수식 문의
> 메뉴얼을 봐도 접근하기가 너무 어려워서 문의를 드립니다.
1.
현재 예스트레이더에서 하나의 차트에서 수식을 운용중입니다.
이것을 예스스팟을 통해서 주문을 내고 싶습니다.
현재 신호가 발생하면 예를들어 x계약의 주문이 나간다고 치면 x계약이 한번에 나가는데, 이것을 예스스팟으로 1계약씩 나눠서 증거금이 가능한 범위까지 주문을 내고 싶습니다. 1계약씩 빠르게 계속 증거금이 가능한 수준까지 주문이 나가는것이죠...
(예스트레이더는 한번 계약수를 정하면 다시 수정해주지 않는 한 그 계약수대로 나가는데 매매를 하다보면 증거금이 늘어나거나 부족해져서 계약수가 변하는데 그것을 1계약씩 처리해서 주문하고 싶습니다.)
청산은 체결된 계약수만큼 주문을 나가게 하고 싶습니다.
2.
포지션이 있을경우 동시호가에 시장가로 청산하는 주문을 내고 싶습니다.
감사합니다.