Yes spot에서 잔고함수를 사용해서 잔고 종목, 수량 등이 0 으로 나오네요.
스크립트 객체설정
차트객체추가 --> 속성에서 객체명 Chart1, 차트와 아이디 연결
종목객체추가 --> 속성에서 객체명 MarketData1, 차트와 동일종목으로 설정
계좌객체추가 --> 속성에서 객체명 Account1, 계좌번호 지정
var Score;
function Main_OnStart()
{
    Main.MessageList("start")
}
//차트에서 신호발생
function Chart1_OnRiseSignal(Signal)
{
      //매수진입신호이면
    if (Signal.signalKind == 1)
      {
            //수량계산
            var vol = Account1.GetBalanceETCinfo(0)*0.6*Score/ MarketData1.Ask(3);
            //계산된 수량으로 매도3호가로 매수주문
            Account1.OrderBuy(MarketData1.code, vol, MarketData1.Ask(3), 0);
      }
      //매수청산신호이면
    if (Signal.signalKind == 2)
      {
            //미체결 중 해당종목의 미체결은 모두 취소
            var num = Account1.GetTheNumberOfUnfills();
            if (num > 0)
            {
                  for (var i = 0;i < num;i++)
                  {
                        Account1.SetUnfill(i)
                        if (Account1.Unfill.count > 0 && Account1.Unfill.code == MarketData1.code)      
                        {
                              Account1.OrderCancel(Account1.Unfill.orderNum);      
                        }
                  }
            }
            //잔고셋팅
            Account1.SetBalance(MarketData1.code, 0);
            //잔고보유수량 전량 매수3호가로 매도주문
            if (Account1.Balance.count > 0)
            {
                  Account1.OrderSell(MarketData1.code,Account1.Balance.count, MarketData1.Bid(3), 0);
            }
      }
}
답변 1
예스스탁
예스스탁 답변
2021-06-24 13:56:01
안녕하세요
예스스탁입니다.
1
올려주신 수식은 하이투자증권이나 NH투자증권에서 주식에 사용하는 수식같습니다.
해당 해외선물에는 Account1.SetUnfill이나 Account1.SetBalance함수가 없습니다.
미체결이나 잔고를 셋팅할때
인덱스로 지정할때는 아래 함수를 이용하셔야 하고
Account1.SetUnfillIndex(nIndex),Account1.SetBalanceIndex(nIndex)
주문번호나 종목코드로 지정할 떄는 아래함수를 이용하셔야 합니다.
Account1.SetUnfillOrderNumber(sOrderNumber),Account1.SetBalanceItem(sItemCode, nPosition)
2
주문함수에서 시장가는 1, 지정가는 2입니다.
해당 수식에는 국내거래용으로 지정가가 0으로 작성되어 있습니다.
3
//수량계산
var vol = Account1.GetBalanceETCinfo(0)*0.6*Score/ MarketData1.Ask(3);
차트에서 매수신호 발생시에 위와 같은 계산식이 사용됩니다.
계좌객체의 Account1.GetBalanceETCinfo(인덱스)함수는 각 증권사나 선물사별로 인덱스로 지정하는 값이 다릅니다.
Account1.GetBalanceETCinfo(0)이 하이투자증권은 예수금, NH투자증권은 D-1일자예수금입니다.
NH선물에서는 당일예탁금입니다. 스팟해외선물도움말에서 값 확인하시기 바랍니다.
또한 수식에 Score라는 변수가 있는데 해당변수에 값이 없습니다.
해당값이 있어야 위 내용으로 수량이 산출되지만 단지 금액을 가격으로 나눠 수량을 산정하는 내용으로 주식용입니다.
해당 내용으로는 해외선물에서 수량을 지정할수 없으므로
아래식에서는 해당 내용은 제거하고 차트에서 발생한 신호수량으로 매수되게 수정해 드립니다.
4
function Main_OnStart()
{
Main.MessageList("start")
}
//차트에서 신호발생
function Chart1_OnRiseSignal(Signal)
{
//매수진입신호이면
if (Signal.signalKind == 1)
{
//계산된 수량으로 매도3호가로 매수주문
Account1.OrderBuy(MarketData1.code, Signal.count, MarketData1.Ask(3), 0);
}
//매수청산신호이면
if (Signal.signalKind == 2)
{
//미체결 중 해당종목의 미체결은 모두 취소
var num = Account1.GetTheNumberOfUnfills();
if (num > 0)
{
for (var i = 0;i < num;i++)
{
Account1.SetUnfillIndex(i);
if (Account1.Unfill.count > 0 && Account1.Unfill.code == MarketData1.code)
{
Account1.OrderCancel(Account1.Unfill.orderNum);
}
}
}
//잔고셋팅
Account1.SetBalanceItem(MarketData1.code, 0);
//잔고보유수량 전량 매수3호가로 매도주문
if (Account1.Balance.count > 0)
{
Account1.OrderSell(MarketData1.code,Account1.Balance.count, MarketData1.Bid(3), 2);
}
}
}
즐거운 하루되세요
> 김상 님이 쓴 글입니다.
> 제목 : Yes Global Spot 에서 잔고 함수 정상 작동 확인 요청드립니다.
> Yes spot에서 잔고함수를 사용해서 잔고 종목, 수량 등이 0 으로 나오네요.
스크립트 객체설정
차트객체추가 --> 속성에서 객체명 Chart1, 차트와 아이디 연결
종목객체추가 --> 속성에서 객체명 MarketData1, 차트와 동일종목으로 설정
계좌객체추가 --> 속성에서 객체명 Account1, 계좌번호 지정
var Score;
function Main_OnStart()
{
    Main.MessageList("start")
}
//차트에서 신호발생
function Chart1_OnRiseSignal(Signal)
{
      //매수진입신호이면
    if (Signal.signalKind == 1)
      {
            //수량계산
            var vol = Account1.GetBalanceETCinfo(0)*0.6*Score/ MarketData1.Ask(3);
            //계산된 수량으로 매도3호가로 매수주문
            Account1.OrderBuy(MarketData1.code, vol, MarketData1.Ask(3), 0);
      }
      //매수청산신호이면
    if (Signal.signalKind == 2)
      {
            //미체결 중 해당종목의 미체결은 모두 취소
            var num = Account1.GetTheNumberOfUnfills();
            if (num > 0)
            {
                  for (var i = 0;i < num;i++)
                  {
                        Account1.SetUnfill(i)
                        if (Account1.Unfill.count > 0 && Account1.Unfill.code == MarketData1.code)      
                        {
                              Account1.OrderCancel(Account1.Unfill.orderNum);      
                        }
                  }
            }
            //잔고셋팅
            Account1.SetBalance(MarketData1.code, 0);
            //잔고보유수량 전량 매수3호가로 매도주문
            if (Account1.Balance.count > 0)
            {
                  Account1.OrderSell(MarketData1.code,Account1.Balance.count, MarketData1.Bid(3), 0);
            }
      }
}