예스스탁
예스스탁 답변
2014-07-24 18:19:40
안녕하세요
예스스탁입니다.
1.
Start변수는 스팟 적용후에 진입주문이 먼저 발생한 후에
청산이 나오게 하기 위한 용도입니다.
function Main_OnStart()
{
Main.MessageLog("시작");
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
Account1.OrderBuy(MarketData1.code,Vol,Signal.price,0);
}
if (Signal.signalKind == 2 )
{
Account1.OrderSell(MarketData1.code,Vol,Signal.price,0);
}
}
Start모두 제거하시면 스팟 적용후에 청산신호가 먼저 발생해도 주문을 내게 됩니다.
잔고가 무포지션일때 청산주문부터 시작되는 부분외에 별도로 주의하실 내용은 없습니다.
2.
계좌객체 Accoumt1 -1111-1111-31
계좌객체 Accoumt2 -2222-2222-31
계좌객체 Accoumt3 -3333-3333-31
var DayX;
function Main_OnStart()
{
DayX = false;
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)
{
if (DayX == false && MarketData1.time >= 1430000000)
{
DayX = true;
//계좌1의 MarketData1종목 잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//잔고가 있고 매도포지션이면
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, MarketData1.Ask(5), 0);
}
//잔고가 있고 매수포지션이면
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, MarketData1.Bid(5), 0);
}
//계좌2의 MarketData1종목 잔고셋팅
Account2.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
if (Account2.Balance.count > 0 && Account2.Balance.position == 1)
{
Account2.OrderBuy(Account2.Balance.code, Account2.Balance.count, MarketData1.Ask(5), 0);
}
if (Account2.Balance.count > 0 && Account2.Balance.position == 2)
{
Account2.OrderSell(Account2.Balance.code, Account2.Balance.count, MarketData1.Bid(5), 0);
}
//계좌3의 MarketData1종목 잔고셋팅
Account3.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
if (Account3.Balance.count > 0 && Account3.Balance.position == 1)
{
Account3.OrderBuy(Account3.Balance.code, Account3.Balance.count, MarketData1.Ask(5), 0);
}
if (Account3.Balance.count > 0 && Account3.Balance.position == 2)
{
Account3.OrderSell(Account3.Balance.code, Account3.Balance.count, MarketData1.Bid(5), 0);
}
}
}
즐거운 하루되세요
> 새로운세상 님이 쓴 글입니다.
> 제목 : 재접속시 YT 신호기준 Spot 주문
> 안녕하세요~
다음 내용이 맞는지 확인 부탁드립니다.
----------------------------------
< 질문 1 >
YT 신호발생시 Spot으로 주문을 낼 때,
function Main_OnStart()
{
Main.MessageLog("시작");
Start = 0;
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
Start = 1;
Account1.OrderBuy(MarketData1.code,Vol,Signal.price,0);
}
if (Signal.signalKind == 2 && Start == 1)
{
Account1.OrderSell(MarketData1.code,Vol,Signal.price,0);
}
}
위의 수식대로 하면, 진입이 반드시 발생하여야 청산이 발생됩니다.
그런데 문제는 HTS가 장중 비정상적으로 종료되어 재접속할 경우,
비정상 종료전 이미 진입 포지션이 있다면 청산신호가 무시되는 문제가 있습니다.
재접속후에 청산주문이 발생되도록 하기 위하여
Start = 0;
Start = 1;
이 두가지를 모두 삭제하면 되는지요?
만약 위의 내용이 맞다면,
재접속시 무포지션 상태라도 청산주문부터 시작될 수 있다는 것외에
별도로 주의할 점이 있는지요?
------------------------------------------
< 질문 2 >
위와 같이 재접속시 무포지션에서 청산부터 주문이 발생하였다면,
YT에서 장종료청산이 이루어진 후에 포지션이 남게 될 것입니다.
YT의 장종료청산이 14:30 이라고 가정했을 때
오버나잇을 안하기 위하여
14:40 에는 해당 계좌에 매수 또는 매도 포지션이 있을 경우
이를 전량 청산하라는 수식을 Spot으로 작성하고 싶습니다.
계좌에 1개 또는 여러개의 시스템이 적용될 수 있으므로
수식은 14:40 에 계좌를 check하여, 포지션이 있을 경우 전량 청산한다는 내용입니다.
물론 14:30 까지 HTS가 정상적으로 작동하였을 경우
14:40 Spot에서 청산할 것은 없습니다.
1111-1111-31, 2222-2222-31, 3333-3333-31
이렇게 3개의 계좌를 운용하고 있다고 가정할 때
위의 내용을 1개의 Spot 수식으로 가능한지요?
---------------------------
이상입니다.
감사합니다 !!!