커뮤니티

예스스팟 Q&A

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

프로필 이미지
마루아빠
2013-11-29
18
글번호 222730
답변완료

수식 문의 드립니다

검토 후 수정바랍니다. ◎ 연결선물지수차트에서 완성신호가 발생하면 선물 잔고객체를 세팅하고 포지션상태를 확인합니다. ◎ 완성신호가 무포지션 상태에서 발생한 Buy이면, 1. 혹시 있을지 모를 미체결주문을 확인하여 모두 취소하고 주문수량 : 선물계좌 주문가능금액의 50%, 최대 20계약내 산출수량을 (주문수량계산 로직이 틀린 것 같은데... ㅠ) 주문가격 : 매도2호가로 매수주문합니다. 2. 선물 매도포지션 보유시 발생한 Buy이면 - 매도포지션 전량 청산하고, 매수포지션 주문합니다 ① 매도포지션 청산 청산 : 미체결주문을 확인하여 모두 취소하고 청산주문을 집행합니다. 주문수량 : 보유 매도포지션 전량 청산주문 주 문 가 : "매도2호가", 1분 동안 미체결 잔량이 발생하면 "시장가"로 정정 청산주문합니다. ② 청산완료 되어 잔고상 포지션계약수가 0 이 응답확인 후 매수 주문합니다 주문수량 : 변경된 선물계좌 주문가능금액을 재확인하여 금액의 50%, 최대 20계약내 산출수량을 주문가격 : 매도2호가로 매수주문합니다. ◎ 차트에서 ExitLong 완성신호가 발생하면 청산 : 미체결주문을 확인하여 모두 취소하고 청산주문을 집행합니다. 주문수량 : 보유 매수포지션 전량 주 문 가 : "매도2호가", 1분 동안 미체결 잔량이 발생하면 "시장가"로 정정 청산주문합니다. 종목객체 F1 계좌객체 A1 차트객체 C1 var Position; var OrdeCode; var BID; var SID; var Number ; var EntryVol function Main_OnStart() { Main.MessageLog("시작"); OrdeCode = Main.GetOrderCode(F1.code); } function C1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); A1.SetBalanceItem(OrdeCode, 0) ; // 차트 주종목의 잔고 객체 생성 if (A1.Balance.count == 0) { Position = 0; } A1.SetBalanceItem(OrdeCode, 1) ; // (0: 구분없음, 1:매도, 2: 매수) if (A1.Balance.count > 0) { Position = -1; } A1.SetBalanceItem(OrdeCode, 2) ; if (A1.Balance.count > 0) { Position = 1; } if (Position == 0 && Signal.signalKind == 1 ) { Main.MessageLog("매수진입"); // 종목 미체결주문 모두 취소 var UFnum = A1.GetTheNumberOfUnfills(); for (var i = 0; i < UFnum; i++) { A1.SetUnfillIndex(i); if (A1.Unfill.code == OrdeCode && A1.Unfill.count > 0) { A1.OrderCancel(A1.Unfill.orderNum); Main.MessageLog("미체결주문 모두 취소"); } } //주문수량 : 선물계좌 잔고금액의 50%, 최대 20계약내 산출수량 EntryVol = Math.floor(A1.GetBalanceETCinfo(30) * 0.5 / OrdeCode.current); if (EntryVol >= 20) { EntryVol = 20 ; } if (EntryVol < 1) { Main.MessageLog("잔고불충분"); } A1.OrderBuy(OrdeCode, EntryVol , OrdeCode.Ask(2), 0); } if (Position == -1 && Signal.signalKind == 1 ) // buy { Main.MessageLog("매도청산후 매수진입"); // 종목 미체결주문 모두 취소 var UFnum = A1.GetTheNumberOfUnfills(); // 미체결리스트 개수 for (var i = 0; i < UFnum; i++) { A1.SetUnfillIndex(i); if (A1.Unfill.code == OrdeCode && A1.Unfill.count > 0) { A1.OrderCancel(A1.Unfill.orderNum); Main.MessageLog("미체결주문 모두 취소"); } } // 매도2호 청산주문하고 1분후 시장가로 정정하여 매도청산 BID = A1.OrderBuy (OrdeCode, A1.Balance.count, OrdeCode.Ask(2),0); // 청산완료확인 후 변경된 잔고금액으로 주문수량결정 진입 A1.SetBalanceItem(OrdeCode, 0) ; // (0: 구분없음, 1:매도, 2: 매수) if (A1.Balance.count == 0) { //주문수량 : 선물계좌 잔고금액의 50%, 최대 20계약내 산출수량 EntryVol = Math.floor(A1.GetBalanceETCinfo(30) * 0.5 / OrdeCode.current); if (EntryVol >= 20) { EntryVol = 20 ; } if (EntryVol < 1) { Main.MessageLog("잔고불충분"); } A1.OrderBuy(OrdeCode, EntryVol , OrdeCode.Ask(2), 0); } } if (Position == 1 && Signal.signalKind == 2 ) // ExitLong { // 종목 미체결주문 모두 취소 var UFnum = A1.GetTheNumberOfUnfills(); for (var i = 0; i < UFnum; i++) { A1.SetUnfillIndex(i); if (A1.Unfill.code == OrdeCode && A1.Unfill.count > 0) { A1.OrderCancel(A1.Unfill.orderNum); Main.MessageLog("미체결주문 모두 취소"); } } //매수2호 매도하고 1분후 시장가로 정정 매도청산 SID == A1.OrderSell(OrdeCode,A1.Balance.count,OrdeCode.Bid(2),0); } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) { Number = OrderResponse.orderNum; Main.SetTimer(1, 60000); } if (OrderResponse.orderID == SID) { Number = OrderResponse.orderNum; Main.SetTimer(2, 60000); } } function Main_OnTimer(nEventID) { if (nEventID == 1) { A1.OrderReplacePrice(Number,0); //시장가청산으로 변경 Main.KillTimer(1); } if (nEventID == 2) { A1.OrderReplacePrice(Number,0); //시장가청산으로 변경 Main.KillTimer(2); } } function Main_OnNotifyFill(NotifyFill) { if (NotifyFill.orderNum == Number) { Main.KillTimer(1); Main.KillTimer(2); } }
프로필 이미지
gigi
2013-11-28
1121
글번호 222727

관리자에 의해 프로그램 사용법 QnA로 이동되었습니다

프로필 이미지
유선수
2013-11-27
13
글번호 222726
0
답변완료

수식 문의 드립니다

1. 아래는 저번에 선물차트 신호로 옵션진입하는 로직을 작성하여 주신 내용입니다. 이번에는 는 옵션차트의 신호를 보고 옵션에 주문을 넣는 주문을 부탁드립니다. 옵션차트신호가 매수신호일 때, 옵션차트종목보다 +2단계 위의 옵션종목을 매도합니다. 옵션차트신호가 매도신호일 때 옵션차트종목보다 -2단계 아래 옵션종목을 매수합니다. 2. 당일매매가 아니고 포지션전략이므로 예스스팟이 꺼졌다 다시 켜져도 위에서 진입했던 동일종목이 청산과 반전이 되도로 로직 부탁드립니다. 3. 데이타 매니저에 코스피 연결선물이나 월물별 코스피 선물 종목추가하는 방법 좀 안내 부탁드립니다. 안녕하세요 예스스탁입니다. 차트의 신호로 보고 옵션에 주문을 넣으시므로 시크립트 객체화면에 총 3개의 객체가 필요합니다. 옵션객체 추가 --> 속성에서 지정하실 부분이 없습니다 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트아이디는 차트와 동일한 이름으로 지정 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌변호는 거래하고자 하는 선옵계좌를 지정 아래는 수식내용입니다. var Start = 0; var SelCallCode; var SelCallPrice; var SelCallVol; var SellPutCode; var SellPutPrice; var SellPutVol; function Main_OnStart() { Start = 0; } function Chart1_OnRiseSignal(Signal) { //차트에서 매수신호 발생하면 콜 매수 if (Signal.signalKind ==1) { Start = 1; SellCallCode = Option.GetATMCallRecent(0);//주문종목 : ATM콜 종목코드 SellCallPrice = Option.GetBidByCode(SellCallCode, 2);//주문가격 매수2호가 SelCallVol = Signal.count;//주문수량 : 차트신호의 수량 Account1.OrderSell(SellCallCode,SelCallVol, SellCallPrice, 0); Main.MessageList("등가콜매도 : "+SellCallCode); } //차트에서 매수청산신호 발생하면 콜매도 청산 if (Start == 1 && Signal.signalKind == 2) { //매도2호가로 청산 Account1.OrderBuy(SellCallCode, SelCallVol, Option.GetAskByCode(SellCallCode, 2), 0); Main.MessageList("콜청산 : ",SellCallCode); } //선물차트에서 매도신호 발생하면 풋 매수 if (Signal.signalKind ==3) { Start =1; SellPutCode = Option.GetATMPutRecent(0);//주문종목 : ATM풋 종목코드 SellPutPrice = Option.GetBidByCode(SellPutCode, 2);//주문가격 : 매수 2호가 SellPutVol = Signal.count; //수량 : 차트신호의 수량 Account1.OrderSell(SellPutCode, Signal.count, SellPutPrice, 0); Main.MessageList("등가풋매도 : "+SellPutCode); } //차트에서 매도청산신호 발생하면 풋매도 청산 if (Start == 1 && Signal.signalKind == 4) { Account1.OrderBuy(SellPutCode, SellPutVol, Option.GetAskByCode(SellPutCode, 2), 0); Main.MessageList("풋청산 : ",SellPutCode); } }
프로필 이미지
무명
2013-11-28
1107
글번호 222725

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

프로필 이미지
마루아빠
2013-11-22
4
글번호 222723

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

프로필 이미지
마루아빠
2013-11-22
12
글번호 222722

관리자에 의해 프로그램 사용법 QnA로 이동되었습니다

프로필 이미지
고질라
2013-11-20
15
글번호 222718
0
답변완료

미체결 취소주문

주식 종목 오전에 매수 진입후 체결이 되지 않으면 13시 이후에 미체결된 주문들 모두 취소를 할려면 어떻게 해야되나요? ㅡㅡ; 이렇게 저렇게 해봤지만.. 맞는거 같지가 않네요. ㅠㅠ function Main_OnStart() { Main.MessageLog("시작") Main.SetTimer(1, 5000);//5초 간격으로 타이머 작동 } //지정시간 계좌 내 모든 종목 청산 function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageList(HHMMSS); if (nEventID == 1 && HHMMSS >= 130000) { Main.KillTimer(1); Main.MessageLog("취소") num = Account1.GetTheNumberOfUnfills(); for(var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); Account1.SetUnfillOrderNumber(i); if (Account1.Unfill.count > 0) { Account1.OrderCancel(i); } } } }
프로필 이미지
오토
2013-11-19
1040
글번호 222716
답변완료

사용자 모듈함수 문의 드립니다.

전략마다 지수가 플러스인지 마이너스인지 체크를 할려고 합니다. 사용자 모뮬함수를 이용하면 간단하게 전략마다 넣을 수 있을거 같아서 시도를 해보는데 어렵네요. ㅠㅠ plus_minus(KP); 만들고 var chk = 0; if KP.open <= KP.current { chk = 1;} else {chk = -1;} 이렇게하면 될 줄 알았는데 에러만 나네요. ㅡ,.ㅡ 예제 부탁드립니다. 메뉴얼 예제를봐도 쉽지가 않네요. ㅜㅜ
프로필 이미지
오토
2013-11-19
885
글번호 222715
답변완료

PrintOnFile 문의드립니다.

Main.PrintOnFile("C:₩APM_Setup₩htdocs₩load.txt", "1111"); 이렇게 했지만... 해당 경로에 저장이 안되네요. ㅡㅡ; 경로를 빼고 load.txt 만 넣으면 export 폴더에 파일이 저장이 되구요. ^^;;; 왜 경로는 먹히질 않는걸까요? ㅡㅡ;
프로필 이미지
오토
2013-11-18
952
글번호 222714