커뮤니티

문의 드립니다.

프로필 이미지
자오지환웅
2015-05-29 16:32:19
154
글번호 86573
답변완료
GetUnclearedDeposits("") 함수에 대해 문의 드립니다. GetUnclearedDepostis 함수를 이용해서 짠 전략을 실전에 적용시켰는데 제가 생각했던 청산이 이뤄어지지 않아서 다시 질문드립니다. 위의 함수는 선물잔고의 예탁총액을 리턴하는 것으로 알고 있습니다. 예탁총액이 현재 5천만원이면 50000000 을 리턴. 맞나요? 그렇다면 제가 아침에 선물계좌에 돈을 5천만원 넣어놓고 전략 3개를 걸어놓고 각 전략마다 if marketposition == 1 and GetUnclearedDeposits("3333-3333-31") < 49000000 then exitlong(); 위의 수식을 넣어두면 계좌의 총손실이 백만원을 넘어서서 선물계좌의 예탁총액이 4천9백만원 아래로 내려가면 현재 보유수량은 각 전략의 주기에 맞춰서 다 청산되어야하지 않나요? [ 잔고관련 함수는 사용자 PC의 "가원장"기능을 이용하는 것으로서 주문접수/체결응답이 실제 원장과 가원장에 도달하고 처리되는 시차와 데이터의 유실 등으로 인해 차이가 발생할 수 있습니다. 사용자는 반드시 적절한 시점에 잔고조회 등을 통해 가원장의 상태를 원장의 상태와 동기화 될 수 있도록 조치 하여야 합니다. ] 위의 설명은 함수의 예제에 나오는 내용인데, 그 의미가 좀 헷갈립니다. 원장과 가원장이 도달 처리시간 때문에 1분정도 틀릴수 있다는 의미인지, 아니면 전략실행시 예탁총액 창을 띄우고 수시로 조회를 해줘야한다는 의미인지 ? 또 예탁총액이란게 정확하게 어떤 의미인가요? 선물이 익일결제니까 오늘의 손익은 예탁총액에는 적용되지 않을 수도... 만약 그렇다면 당일의 선물계좌의 평가손익을 반환하는 함수는 있나요? 있다면 어떤 함수인지 ? 만약에 없다면 하나 새로 만들어 주실 것을 강력하게 건의합니다. 하이투자증권의 예스트레이더 1205 창의 총평가손익을 리턴해주는 함수 말입니다. 가칭 GetAccountOpenPL ^^ 꼭 좀 부탁드립니다. 좋은 하루 되세요. ^^
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-05-29 17:14:11

안녕하세요 예스스탁입니다. 아래 내용 참고하시기 바랍니다. 모든 매수/매도청산 주문은 매도 5호가 매도/매수청산 주문은 매수5호가로 발생하게 작성했습니다. 선물 잔고에 -백만원 손실이 발생하면 전량 청산하고 차트에서 신호가 발생해도 더이상 주문을 하지 않습니다. 시세 수신될때마다 체크를 하면 부하가 심할것 같아 잔고는 5초마다 한번씩만 체크하게 했습니다. 스크립트 객체화면 설정 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정 종목객체 추가 --> 속성에서 연결선물로 지정 차트객체 추가 --> 속성에서 객체명은 Chart1, A전략이 적용된 차트와 동일 아이디를 지정 차트객체 추가 --> 속성에서 객체명은 Chart2, B전략이 적용된 차트와 동일 아이디를 지정 차트객체 추가 --> 속성에서 객체명은 Chart3, C전략이 적용된 차트와 동일 아이디를 지정 객체설정방법은 도움말 참고하시기 바랍니다. var Entry = false; function Main_OnStart() { Main.MessageList("Spot Start") Entry = true; Main.SetTimer(1, 5000);//잔고감시 5초단위 } //1번차트신호 function Chart1_OnRiseSignal(Signal) { if (Entry == true) { if (Signal.signalKind == 1)//Buy발생 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0); if (Signal.signalKind == 2)//exitlong발생 Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0); if (Signal.signalKind == 3)//sell발생 Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0); if (Signal.signalKind == 4)//exitshort발생 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0); } } //2번차트신호 function Chart2_OnRiseSignal(Signal) { if (Entry == true) { if (Signal.signalKind == 1)//Buy발생 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0); if (Signal.signalKind == 2)//exitlong발생 Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0); if (Signal.signalKind == 3)//sell발생 Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0); if (Signal.signalKind == 4)//exitshort발생 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0); } } //3번차트신호 function Chart3_OnRiseSignal(Signal) { if (Entry == true) { if (Signal.signalKind == 1)//Buy발생 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0); if (Signal.signalKind == 2)//exitlong발생 Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0); if (Signal.signalKind == 3)//sell발생 Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0); if (Signal.signalKind == 4)//exitshort발생 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0); } } function Main_OnTimer(nEventID) { if (nEventID == 1 && MarketData1.open > 0) { Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0); { //잔고가 매도포지션 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { //손익이 -백만원 이면 전량청산하고 // Entry변수를 false로 만들어 차트에서 신호가 발생해도 더이상 진입을 하지 않게 함 var PL = (Account1.Balance.avgUnitCost-MarketData1.current)*Account1.Balance.count; if ( PL*500000 <= -1000000 ) { Entry = false; Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,MarketData1.Ask(5), 0); } } //잔고가 매수포지션 if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { //손익이 -백만원 이면 전량청산하고 // Entry변수를 false로 만들어 차트에서 신호가 발생해도 더이상 진입을 하지 않게 함 var PL = (Account1.Balance.avgUnitCost-MarketData1.current)*Account1.Balance.count; if ( PL*500000 <= -1000000 ) { Entry = false; Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,MarketData1.Bid(5), 0); } } } } } 즐거운 하루되세요 > 자오지환웅 님이 쓴 글입니다. > 제목 : 문의 드립니다. > GetUnclearedDeposits("") 함수에 대해 문의 드립니다. GetUnclearedDepostis 함수를 이용해서 짠 전략을 실전에 적용시켰는데 제가 생각했던 청산이 이뤄어지지 않아서 다시 질문드립니다. 위의 함수는 선물잔고의 예탁총액을 리턴하는 것으로 알고 있습니다. 예탁총액이 현재 5천만원이면 50000000 을 리턴. 맞나요? 그렇다면 제가 아침에 선물계좌에 돈을 5천만원 넣어놓고 전략 3개를 걸어놓고 각 전략마다 if marketposition == 1 and GetUnclearedDeposits("3333-3333-31") < 49000000 then exitlong(); 위의 수식을 넣어두면 계좌의 총손실이 백만원을 넘어서서 선물계좌의 예탁총액이 4천9백만원 아래로 내려가면 현재 보유수량은 각 전략의 주기에 맞춰서 다 청산되어야하지 않나요? [ 잔고관련 함수는 사용자 PC의 "가원장"기능을 이용하는 것으로서 주문접수/체결응답이 실제 원장과 가원장에 도달하고 처리되는 시차와 데이터의 유실 등으로 인해 차이가 발생할 수 있습니다. 사용자는 반드시 적절한 시점에 잔고조회 등을 통해 가원장의 상태를 원장의 상태와 동기화 될 수 있도록 조치 하여야 합니다. ] 위의 설명은 함수의 예제에 나오는 내용인데, 그 의미가 좀 헷갈립니다. 원장과 가원장이 도달 처리시간 때문에 1분정도 틀릴수 있다는 의미인지, 아니면 전략실행시 예탁총액 창을 띄우고 수시로 조회를 해줘야한다는 의미인지 ? 또 예탁총액이란게 정확하게 어떤 의미인가요? 선물이 익일결제니까 오늘의 손익은 예탁총액에는 적용되지 않을 수도... 만약 그렇다면 당일의 선물계좌의 평가손익을 반환하는 함수는 있나요? 있다면 어떤 함수인지 ? 만약에 없다면 하나 새로 만들어 주실 것을 강력하게 건의합니다. 하이투자증권의 예스트레이더 1205 창의 총평가손익을 리턴해주는 함수 말입니다. 가칭 GetAccountOpenPL ^^ 꼭 좀 부탁드립니다. 좋은 하루 되세요. ^^