커뮤니티

수식문의드립니다.

프로필 이미지
jba
2018-06-07 08:16:36
2549
글번호 224445
답변완료
관심종목에 등록된 종목들의 확장차트를 만들고 시스템을 적용하여 매수매도 신호에 따라 주문하고자 합니다. -관심종목에 등록된 종목의 확장차트 생성, 시스템 적용 -보유종목은 3개로 제한 (3종목 보유중에 한종목 청산되면 이후에 나오는 신호는 정상적으로 매수) -첫번째 매수신호 발생시 100만원매수 (현재가) -두번째 매수신호 발생시 100만원매수 (현재가) -매도신호 발생시 전량매도 (현재가) -매도신호 발생시 미체결매수주문 있는경우 전량 취소. -매도신호 발생시 전량 체결되지 못하고 남은물량이 있을경우 -2%하락시 전량 시장가 매도 1거래일~3거래일 보유하는 경우도 있는데 혹시 프로그램 시작할때 보유중인 종목에 대해 따로 처리해야 할 부분이 있는지 궁금합니다. 따로 처리해야할 부분이 있다면 포함해서 수식 작성 부탁드립니다. 감사합니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-06-12 16:33:06

안녕하세요 예스스탁입니다. 스팟 수식 답변은 단순식작성의 가이드 입니다. 아래 내용 참고하셔서 이후 내용은 수정보완해 사용하시기 바랍니다. 대략적인 흐름은 아래와 같습니다. 스팟 시작하면 1초 단위로 지정한 관심그룹에 있는 종목에 대해 차트를 생성하고 이때 지정한 이름의 전략도 같이 적용해서 생성합니다. 생성후 매수신호 발생하면 보유종목수가 3개 이하에서 신규종목이거나(미보유 종목) 기존 보유종목이면 매수신호가 발생하면 해당 종목을 매수를 하게 됩니다.(백만원) 매도신호가 발생하고 보유종목이면 전략 매도하게 되며 매수 미체결이 있으면 이때 모두 취소합니다. 계좌보유종목이 매도주문이 있는 상태에서 현재가가 평단가 대비 -2% 이하이면 해당 매도미체결주문은 취소하고 다시 보유수량 전량 시장가로 주문합니다. 스크립트 객체화면 계좌객체 추가 --> 속성에서 객체명 Account1, 주문낼 계좌번호 지정 var ItemList; var Count; var ReqCount; var 금액 = 1000000; var BXID,BXVol,BXCode; function Main_OnStart() { Main.MessageLog("스팟시작"); //지정한 관심그룹의 종목수(관심그룹지정 필요) Count = Main.GetItemCountOfInterest("관심그룹명"); Main.MessageList("지정관심그룹 종목수 : ", Count); ItemList = []; //관심그룹 종목코드를 ItemList로 옮김 for(var i = 0 ; i < Count ; i++) { //관심그룹지정 필요 ItemList.push(Main.GetItemCodeInInterest("관심그룹명", i)); } Main.SetTimer(1, 1000); //1초 Main.SetTimer(2, 5000); //5초 ReqCount = 0; } function Main_OnTimer(nEventID) { if (nEventID == 1) { //1분주기 봉수 5000개 var ChartSet = new ReqChartItem(ItemList[ReqCount],1,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,StopSet); //차트에 적용할 전략 var SystemSet = new SystemInfo("#전략명"); //차트객체 요청 Main.ReqChartEx(ChartSet,SystemSet); Main.MessageList("확장차트생성 : ",ItemList[ReqCount]); ReqCount = ReqCount+1; if (ReqCount == Count) { Main.KillTimer(1); Main.MessageLog("차트생성완료"); } } if (nEventID == 2) { //계좌미체결수 var xnum = Account1.GetTheNumberOfUnfills(); //미체결이 1개이상 if (xnum > 0) { //미체결 하나씩 셋팅 for(var i = 0 ; i < xnum ; i++) { Account1.SetUnfill(i); //미체결수량이 1개 이상이고 매도주문에 대한 미체결 if (Account1.Unfill.count >= 1 && Account1.Unfill.orderKind == 1 ) { //잔고셋팅 Account1.SetBalance(Account1.Unfill.code, 0); //잔고수량이 1개 이상이고 현재가가 평간가대비 -2% 이하이면 if (Account1.Balance.count >= 1 && Account1.Balance.current < Account1.Balance.avgUnitCost*0.98) { //잔고 종목코드 저장 BXCode = Account1.Balance.code; //잔고 수량 저장 BXVol = Account1.Balance.count; //기존 매도주문취소(주문아이디를 BXID에 저장) BXID = Account1.OrderCancel(Account1.Unfill.orderNum); //이후 주문응답 이벤트에서 취소주문에 대한 주문응답이 들어오면 시장가로 청산 } } } } } } //신호발생 function Main_OnRiseSignal(ChartEx, Signal) { //계좌 보유 종목 수 var num = Account1.GetTheNumberOfBalances(); //신호발생 종목에 대해 잔고셋팅 Account1.SetBalance(Main.GetOrderCode(Signal.code),0); //매수신호가 발생했고 //보유종목수가 3개 미만이고 잔고가 없거나 //보유수량이 있으면(기존매수종목) 매수, 100만원 if (Signal.signalKind == 1 && ((num < 3 && Account1.Balance.count == 0) or (Account1.Balance.count > 0)) { Account1.OrderBuy(Main.GetOrderCode(Signal.code),Math.floor(금액/ChartEx.GetClose(1,0)),ChartEx.GetClose(1,0),0); Main.MessageList("매수주문"); } //매도신호 발생 if (Signal.signalKind == 2) { //전체미체결주문 갯수 var num = Account1.GetTheNumberOfUnfills(); //전체 미체결수 만큼 루프를 돌면서 for (var i = 0; i < num; i++) { //미체결을 하나씩 셋팅하고 Account1.SetUnfill(i); //미체결종목이 신호종목과 같고 미체결수량이 있으면 if (Account1.Unfill.code == Main.GetOrderCode(Signal.code) && Account1.Unfill.count > 0) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //잔고수량만큼만 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,ChartEx.GetClose(1,0),0); Main.MessageList("매도주문"); } } } function Main_OnOrderResponse(OrderResponse) { //주문아이디가 BXID인 주문(매도 미체결취소주문)에 대한 응답이 들어오면 if (OrderResponse.orderID == BXID) { //시장가로 전량매도 Account1.OrderSell(BXCode,BXVol,0,1); } } 즐거운 하루되세요 > jba 님이 쓴 글입니다. > 제목 : 수식문의드립니다. > 관심종목에 등록된 종목들의 확장차트를 만들고 시스템을 적용하여 매수매도 신호에 따라 주문하고자 합니다. -관심종목에 등록된 종목의 확장차트 생성, 시스템 적용 -보유종목은 3개로 제한 (3종목 보유중에 한종목 청산되면 이후에 나오는 신호는 정상적으로 매수) -첫번째 매수신호 발생시 100만원매수 (현재가) -두번째 매수신호 발생시 100만원매수 (현재가) -매도신호 발생시 전량매도 (현재가) -매도신호 발생시 미체결매수주문 있는경우 전량 취소. -매도신호 발생시 전량 체결되지 못하고 남은물량이 있을경우 -2%하락시 전량 시장가 매도 1거래일~3거래일 보유하는 경우도 있는데 혹시 프로그램 시작할때 보유중인 종목에 대해 따로 처리해야 할 부분이 있는지 궁금합니다. 따로 처리해야할 부분이 있다면 포함해서 수식 작성 부탁드립니다. 감사합니다.