커뮤니티

Yes Global Spot 에서 잔고 함수 정상 작동 확인 요청드립니다.

프로필 이미지
김상
2021-06-24 11:48:36
1101
글번호 150239
답변완료
Yes spot에서 잔고함수를 사용해서 잔고 종목, 수량 등이 0 으로 나오네요. 스크립트&#160;객체설정 차트객체추가&#160;-->&#160;속성에서&#160;객체명&#160;Chart1,&#160;차트와&#160;아이디&#160;연결 종목객체추가&#160;-->&#160;속성에서&#160;객체명&#160;MarketData1,&#160;차트와&#160;동일종목으로&#160;설정 계좌객체추가&#160;-->&#160;속성에서&#160;객체명&#160;Account1,&#160;계좌번호&#160;지정 var&#160;Score; function&#160;Main_OnStart() { &#160;&#160;&#160;&#160;Main.MessageList("start") } //차트에서&#160;신호발생 function&#160;Chart1_OnRiseSignal(Signal) { &#160;&#160;&#160;&#160;&#160;&#160;//매수진입신호이면 &#160;&#160;&#160;&#160;if&#160;(Signal.signalKind&#160;==&#160;1) &#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//수량계산 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;vol&#160;=&#160;Account1.GetBalanceETCinfo(0)*0.6*Score/&#160;MarketData1.Ask(3); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//계산된&#160;수량으로&#160;매도3호가로&#160;매수주문 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Account1.OrderBuy(MarketData1.code,&#160;vol,&#160;MarketData1.Ask(3),&#160;0); &#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;//매수청산신호이면 &#160;&#160;&#160;&#160;if&#160;(Signal.signalKind&#160;==&#160;2) &#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//미체결&#160;중&#160;해당종목의&#160;미체결은&#160;모두&#160;취소 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;num&#160;=&#160;Account1.GetTheNumberOfUnfills(); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(num&#160;>&#160;0) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for&#160;(var&#160;i&#160;=&#160;0;i&#160;<&#160;num;i++) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Account1.SetUnfill(i) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(Account1.Unfill.count&#160;>&#160;0&#160;&&&#160;Account1.Unfill.code&#160;==&#160;MarketData1.code)&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Account1.OrderCancel(Account1.Unfill.orderNum);&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//잔고셋팅 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Account1.SetBalance(MarketData1.code,&#160;0); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//잔고보유수량&#160;전량&#160;매수3호가로&#160;매도주문 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(Account1.Balance.count&#160;>&#160;0) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Account1.OrderSell(MarketData1.code,Account1.Balance.count,&#160;MarketData1.Bid(3),&#160;0); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;} }
시스템
답변 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 으로 나오네요. 스크립트&#160;객체설정 차트객체추가&#160;-->&#160;속성에서&#160;객체명&#160;Chart1,&#160;차트와&#160;아이디&#160;연결 종목객체추가&#160;-->&#160;속성에서&#160;객체명&#160;MarketData1,&#160;차트와&#160;동일종목으로&#160;설정 계좌객체추가&#160;-->&#160;속성에서&#160;객체명&#160;Account1,&#160;계좌번호&#160;지정 var&#160;Score; function&#160;Main_OnStart() { &#160;&#160;&#160;&#160;Main.MessageList("start") } //차트에서&#160;신호발생 function&#160;Chart1_OnRiseSignal(Signal) { &#160;&#160;&#160;&#160;&#160;&#160;//매수진입신호이면 &#160;&#160;&#160;&#160;if&#160;(Signal.signalKind&#160;==&#160;1) &#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//수량계산 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;vol&#160;=&#160;Account1.GetBalanceETCinfo(0)*0.6*Score/&#160;MarketData1.Ask(3); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//계산된&#160;수량으로&#160;매도3호가로&#160;매수주문 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Account1.OrderBuy(MarketData1.code,&#160;vol,&#160;MarketData1.Ask(3),&#160;0); &#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;//매수청산신호이면 &#160;&#160;&#160;&#160;if&#160;(Signal.signalKind&#160;==&#160;2) &#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//미체결&#160;중&#160;해당종목의&#160;미체결은&#160;모두&#160;취소 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;num&#160;=&#160;Account1.GetTheNumberOfUnfills(); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(num&#160;>&#160;0) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for&#160;(var&#160;i&#160;=&#160;0;i&#160;<&#160;num;i++) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Account1.SetUnfill(i) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(Account1.Unfill.count&#160;>&#160;0&#160;&&&#160;Account1.Unfill.code&#160;==&#160;MarketData1.code)&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Account1.OrderCancel(Account1.Unfill.orderNum);&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//잔고셋팅 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Account1.SetBalance(MarketData1.code,&#160;0); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//잔고보유수량&#160;전량&#160;매수3호가로&#160;매도주문 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(Account1.Balance.count&#160;>&#160;0) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Account1.OrderSell(MarketData1.code,Account1.Balance.count,&#160;MarketData1.Bid(3),&#160;0); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;&#160;&#160;} }