커뮤니티

예스스팟 Q&A

답변완료

주문응답객체 누락

안녕하세요? ID = 주문코드 식으로 넣고, OnOrderResponse에서 ID가 같을 경우 OrderNum어레이에 주문번호를 추가하고, 해당어레이에 있는 주문번호만 체결통보 오면 저장하는 식으로 주문관리를 하고 있습니다. 며칠 전에도 그랬고 오늘도 주문응답객체에서 누락되는 주문이 한건 씩 발생하네요. 이전 게시물에도 누락 관련된 내용이 보이는데, 여전히 누락 발생할 여지가 있는건가요? 누락이 생기는 이유와 최소화할 수 있는 방법이 있다면 안내 부탁드립니다.
프로필 이미지
다인아빠
2019-10-11
3495
글번호 225039
답변완료

주문취소 오류

아래와 같이 특정 조건에서 미체결된 매수와 매도 주문을 취소하기 위해서 수식을 작성했습니다. 참고로 BNum와 SNum은 접수 완료 후 리턴 받은 주문의 접수번호가 저장되어 있습니다. 그런데 미체결된 주문이 없는데 if문에 진입하여 orderCancel 주문에서 주문번호를 찾을 수 없다는 메시지가 표시되네요. 주문수량을 조회하는 방법이 잘 못 된 것인가요? A1.SetUnfill(BNum); if (A1.Unfill.count > 0) { Main.MessageLog(C1.GetSTime(1,0)+":"+"매수취소"); A1.OrderCancel(BNum); } A1.SetUnfill(SNum); if (A1.Unfill.count > 0) { Main.MessageLog(C1.GetSTime(1,0)+":"+"매도취소"); A1.OrderCancel(SNum); }
프로필 이미지
yes랭귀지
2019-10-11
3676
글번호 225038

idnotbe 님에 의해서 삭제되었습니다.

프로필 이미지
idnotbe
2019-10-10
6
글번호 225037

뉴하트 님에 의해서 삭제되었습니다.

프로필 이미지
뉴하트
2019-10-09
9
글번호 225036
답변완료

콜, 풋 매수처리

예스스팟 예제 부탁드립니다. 당일 콜에서 매수신호후 진입후 청산신호가 나오면 콜청산 과 풋진입 또는 콜 매수 신호중 풋 진입 신호가 나오면 풋진입 과 콜청산. 반대로 풋에서도 동일하게 적용. 풋에서 매수 진입 이후 청산 신호가 나오면 콜진입 또는 콜신호가 뜨면 콜진입 과 풋청산. 감사합니다.
프로필 이미지
브라질산아나콘다
2019-10-09
3660
글번호 225035

cs아빠 님에 의해서 삭제되었습니다.

프로필 이미지
cs아빠
2019-10-07
4
글번호 225034
답변완료

한 계좌에서 원하는 종목만 잔고함수를 구하고 싶습니다.

GetTotalCount() 함수를 쓰면 원하지 않는 종목의 수량까지 나옵니다. 이것을 원하는 특정 종목의 수량만 구하고 싶은데 A1.SetBalanceItem(M1.code, 0)를 사용해도 여전히 총계좌의 잔고수가 나옵니다.
프로필 이미지
토그
2019-10-07
3422
글번호 225032
답변완료

수식부탁드립니다.

안녕하세요. 작성해주신 아래 수식을 연결선물 차트에서 당일 첫진입신호(매수 또는 매도)가 발생하면 옵션당일행사가 콜매수 1개, 옵션당일행사가 풋매수 2개 옵션당일행사가+3호가위 콜매도 3개, 진입하고 당일 청산신호(매수 또는 매도)가 발생하면 전량청산하고 당일 매매 종료하는 수식으로 변경 요청드립니다. 감사합니다. ----------------------------------------------------------------------------------- 안녕하세요 예스스탁입니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 신호발생시 주문까지만 작성해 드립니다. 지정가 주문에 대해 미체결 해소는 방법을 모르겠습니다. 해당 부분은 사용자분이 구상하셔서 추가해 보셔야 합니다. 옵션 종류는 옵션객체 속성에서 지정하시면 됩니다. 스크립트 객체설정 차트객체추가 --> 객체명 Chart1, 차트아이디 연결 옵션객체추가 --> 객체명 Option1, 일반이나 미니옵션 중 선택 계좌객체추가 --> 객체명 Account1, 계좌번호지정 var T; var Put1,Put2,Put3,BEP1,BEP2,BEP3,BXP1,BXP2,BXP3; var Call1,Call,Call3,SEP1,SEP2,SEP3,SXP1,SXP2,SXP3; function Main_OnStart() { T = 0; } function Chart1_OnRiseSignal(Signal) { //매수진입신호 발생(T가 0일때만) if (T == 0 && Signal.signalKind == 1) { //T는 1 T = 1; //풋등가부터 아래 행사가 총 3개 지정 Put1 = Option1.GetATMPutRecent(0); Put2 = Option1.GetATMPutRecent(1); Put3 = Option1.GetATMPutRecent(2); //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 BEP1 = Option1.GetCurrent(Put1); BEP2 = Option1.GetCurrent(Put2); BEP3 = Option1.GetCurrent(Put3); for (var i = 1; i <= 5; i++) { if (Option1.GetBid(Put1,i) > 0) BEP1 = Option1.GetBid(Put1,i); if (Option1.GetAsk(Put2,i) > 0) BEP2 = Option1.GetAsk(Put2,i); if (Option1.GetBid(Put3,i) > 0) BEP3 = Option1.GetBid(Put3,i); } //각 가격이 0이상이면 주문 if (BEP1 > 0) Account1.OrderSell(Put1, 2,BEP1,0); if (BEP2 > 0) Account1.OrderBuy(Put2,3, BEP2, 0); if (BEP3 > 0) Account1.OrderSell(Put3,4, BEP3, 0); } //매수청산 신호 발생 if (T == 1 && Signal.signalKind == 2) { //T는 2 T = 2; //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 BXP1 = Option1.GetCurrent(Put1); BXP2 = Option1.GetCurrent(Put2); BXP3 = Option1.GetCurrent(Put3); for (var i = 1; i <= 5; i++) { if (Option1.GetAsk(Put1,i) > 0) { BXP1 = Option1.GetAsk(Put1,i); } if (Option1.GetBid(Put2,i) > 0) { BXP2 = Option1.GetBid(Put2,i); } if (Option1.GetAsk(Put3,i) > 0) { BXP3 = Option1.GetAsk(Put3,i); } } //각 가격이 0이상이면 주문 if (BXP1 > 0) Account1.OrderBuy(Put1, 2,BXP1,0); if (BXP2 > 0) Account1.OrderSell(Put2,3, BXP2, 0); if (BXP3 > 0) Account1.OrderBuy(Put3,4, BXP3, 0); } //매도진입신호 발생(T가 0일때만) if (T == 0 && Signal.signalKind == 3) { T = -1; //콜등가부터 위 행사가 총 3개 지정 Call1 = Option1.GetATMCallRecent(0); Call2 = Option1.GetATMCallRecent(1); Call3 = Option1.GetATMCallRecent(2); //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 SEP1 = Option1.GetCurrent(Call1); SEP2 = Option1.GetCurrent(Call2); SEP3 = Option1.GetCurrent(Call3); for (var i = 1; i <= 5; i++) { if (Option1.GetBid(Call1,i) > 0) SEP1 = Option1.GetBid(Call1,i); if (Option1.GetAsk(Call2,i) > 0) SEP2 = Option1.GetAsk(Call2,i); if (Option1.GetBid(Call3,i) > 0) SEP3 = Option1.GetBid(Call3,i); } //각 가격이 0이상이면 주문 if (SEP1 > 0) Account1.OrderSell(Call1, 2,SEP1,0); if (SEP2 > 0) Account1.OrderBuy(Call2,3, SEP2, 0); if (SEP3 > 0) Account1.OrderSell(Call3,4, SEP3, 0); } //매도청산 신호 발생 if (T == -1 && Signal.signalKind == 4) { //T는 -2 T = -2; //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 SXP1 = Option1.GetCurrent(Call1); SXP2 = Option1.GetCurrent(Call2); SXP3 = Option1.GetCurrent(Call3); for (var i = 1; i <= 5; i++) { if (Option1.GetAsk(Call1,i) > 0) { SXP1 = Option1.GetAsk(Call1,i); } if (Option1.GetBid(Call2,i) > 0) { SXP2 = Option1.GetBid(Call2,i); } if (Option1.GetAsk(Call3,i) > 0) { SXP3 = Option1.GetAsk(Call3,i); } } //각 가격이 0이상이면 주문 if (SXP1 > 0) Account1.OrderBuy(Call1, 2,SXP1,0); if (SXP2 > 0) Account1.OrderSell(Call2,3, SXP2, 0); if (SXP3 > 0) Account1.OrderBuy(Call3,4, SXP3, 0); } }
프로필 이미지
dandy
2019-10-08
3309
글번호 225031

영원한자유 님에 의해서 삭제되었습니다.

프로필 이미지
영원한자유
2019-10-06
4
글번호 225030
답변완료

스팟 수식문의드립니다.

var JCODE; var Highest = 0; var Lowest = 0; function Main_OnStart() { Highest = 0;//highest는 0 Lowest = 0;//lowest는 0 JCODE = Main.GetOrderCode(Chart1.GetCode(1)); Account1.SetBalance(Main.GetOrderCode(Chart1.GetCode(1)), 0); } //계좌에 종목이 추가되면 function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) { Account1.SetBalanceItem(Main.GetOrderCode(Chart1.GetCode(1)), 0); //선물종목의 잔고객체 생성 if (Account1.Balance.count > 0) //잔고객체가 생성되면 { Highest = Account1.Balance.avgUnitCost; //Highest는 초기값으로 해당 종목의 평균가 저장 Lowest = Account1.Balance.avgUnitCost; //lowest는 초기값으로 해당 종목의 평균가 저장 JCODE = Main.GetOrderCode(Chart1.GetCode(1)); Account1.SetBalance(Main.GetOrderCode(Chart1.GetCode(1)), 0); Account1.Refresh() Main.MessageLog("계좌변동발생"+"최고가"+Highest+"최저가"+Lowest+"현재가"+Account1.Balance.current+"코드"+JCODE); } } //============================================================================================================== //종목의 시세가 업데이터 되면 function Main_OnUp*dateMarket(sItemCode, lUp*dateID) { //Start가 1이 된 상태(선물이 계좌에 신규편입되고 잔고객체생성 완료)에서 선물종목 가격이 변경되면 if (sItemCode == JCODE && lUp*dateID == 20001 && Highest != 0 && Lowest != 0) { //현재 시세가 highest보다 크면 highest에 현재 시세 저장(잔고편입이후의 최고가 계산) if (Account1.Balance.current > Highest) { Highest = Account1.Balance.current; Main.MessageLog("진입이후 최고가 갱신"+Highest); } //현재 시세가 lowest보다 작으면 lowest에 현재 시세 저장(잔고편입이후의 최저가 계산) if (Account1.Balance.current < Lowest) { Lowest = Account1.Balance.current; Main.MessageLog("진입이후 최저가 갱신"+Lowest); } } } 위의 수식 온업데이트 마켓에서 종목객체 Marketdata1을 추가없이 sItemCode == JCODE 라고 넣으면 작동을 안합니다. 종목객체 Marketdata1을 추가하고 sItemCode == Main.GetOrderCode(Chart1.GetCode(1))를 넣으면 실행이 됩니다. 종목객체 Marketdata1를 추가하는거랑 sItemCode == Main.GetOrderCode(Chart1.GetCode(1))는 관계가 없는거 아닌가요? 저는 종목객체 Marketdata1를 추가하지 않고 chart1의 종목을 바꿀때마다 자동으로 바뀌게 사용하고 싶은데 어떻게 표현해야하나요?
프로필 이미지
수다리
2019-10-05
3386
글번호 225029