커뮤니티

매수식 의뢰드립니다.

프로필 이미지
cs아빠
2019-12-30 16:55:00
3170
글번호 225112
답변완료
1. n1 초마다 주기적으로 검색식으로 검색한다. 2. 새로 검색된 종목중 시세감시(OnUp*dateMarket)를 통해 어제종가보다 n2 % 이상 하락시 매수 오더를 낸다. (이미 오더나간 종목은 제외한다.) 3. 이 스팟을 통해 매수된 종목갯수가 n3 개 이상이면 매수된 종목을 제외한 매수안된 종목의 미체결 매수 주문은 취소하고, 스팟을 종료한다. (== 한개라도 체결된 종목의 미체결은 취소하지 않는다.) 감사합니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-12-30 17:11:06

안녕하세요 예스스탁입니다. 아래 내용을 참고하셔서 수정보완해 완성하시기 바랍니다. var BL = []; var MK = []; var ID = []; var Num = []; var Fill = []; var req,MKreq; var n1 = 60;//60초 var n2 = 5;//% var mm = 1000000;//매수금액 var n3 = 30;//30종목 var run; function Main_OnStart() { req = 0; CTreq = 0; MKreq = 0; Main.SetTimer(1, n1*1000); fillcnt = 0; run= true; } function Main_OnTimer(nEventID) { if (nEventID == 1 && run == true) { //타이머 종료 Main.KillTimer(1); Main.MessageList("OnTimer --> ReqPowerSearch"); Main.ReqPowerSearch("사용자검색조건"); } } function Main_OnRcvItemList(aItemList, nCount) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageList("Main_OnRcvItemList : ",nCount); if ( run == true) { if (nCount <= 0) //검색된 종목이 없으면 { //타이머 다시 셋팅 Main.SetTimer(1, 종목검색시간간격*1000); } else { BL = []; if (MK.length == 0) { BL = aItemList; Main.MessageList("BL:",BL); } else { for(var a = 0 ; a < aItemList.length ; a++) { var add = true; for(var b = 0 ; b < MK.length ; b++) { if (aItemList[a] == MK[b].code) { add = false; } } if (add == true) { BL.push(aItemList[a]); } } Main.MessageList("BL:",BL); } Main.MessageList("시간",HHMMSS,"BL : ",BL.length); if (BL.length > 0) { //차트 요청 req = 0; Main.ReqMarketData(BL[req]); } else //없으면 타이머 다시 셋팅 { Main.SetTimer(1, 종목검색시간간격*1000);//1번 타이머, 60초 } } } } function Main_OnRcvMarketData(MarketData) { if (run == true) { if (MarketData.code == BL[req]) { MK[MKreq] = MarketData; ID[MKreq] = 0; Num[MKreq] = 0; Fill[MKreq] = 0; Main.MessageList("RcvMarket : ",req,MK[MKreq].code); MKreq = MKreq+1; req = req+1; if (req < BL.length) { Main.MessageList("ReqMarket : ",req,BL[req]); Main.ReqMarketData(BL[req]); } else { Main.MessageList("종목객체요청완료"); Main.SetTimer(1, n1*1000);//1번 타이머, 60초 } } } } function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거 { if (lUp*dateID == 20001)//*제거 { for(var i = 0 ; i < MK.length ; i++) { if (sItemCode == MK[i].code && OD[i] == 0 && MK[i].current <= MK[i].prevClose*(1-n2/100)) { var vol = Math.floor(mm/MK[i].current); ID[i] = Account1.OrderBuy(MK[i].code,vol,MK[i].current, 0); } } } } function Main_OnOrderResponse(OrderResponse) { for(var i = 0 ; i < ID.length ; i++) { if (OrderResponse.orderID == ID[i]) { Num[i] = OrderResponse.orderNum; } } } function Main_OnNotifyFill(NotifyFill) { for(var i = 0 ; i < Num.length ; i++) { if (Fill[i] == 0 && NotifyFill.orderNum == Num[i]) { Fill[i] = 1; FillCnt = FillCnt+1; if (Fillcnt == n3) { run = false; } } } if (run == false) { //타이머 종료 Main.KillTimer(1); var nufill = Account1.GetTheNumberOfUnfills() for(var i = 0 ; i < Num.length ; i++) { Account1.SetUnfill(Num[i]); if (Account1.Unfill.count > 0 && Fill[i] == 0) { Account1.OrderCancel(Num[i]); } } } } 즐거운 하루되세요 > cs아빠 님이 쓴 글입니다. > 제목 : 매수식 의뢰드립니다. > 1. n1 초마다 주기적으로 검색식으로 검색한다. 2. 새로 검색된 종목중 시세감시(OnUp*dateMarket)를 통해 어제종가보다 n2 % 이상 하락시 매수 오더를 낸다. (이미 오더나간 종목은 제외한다.) 3. 이 스팟을 통해 매수된 종목갯수가 n3 개 이상이면 매수된 종목을 제외한 매수안된 종목의 미체결 매수 주문은 취소하고, 스팟을 종료한다. (== 한개라도 체결된 종목의 미체결은 취소하지 않는다.) 감사합니다.