커뮤니티

수식 수정 부탁드립니다

프로필 이미지
새로운세상
2019-09-10 12:58:39
3327
글번호 224971
답변완료
안녕하세요~ 다음 수식 수정 부탁드립니다. 1) 현재 아래의 수식을 자동으로 설정하였을 경우, 8시30분 이전 주식시장 주문가능시간전에 HTS에 접속을 하면 주문 오류가 발생합니다. ---> 주문가능 시간전이므로 당연함 (8시30분 이후 접속시는 정상주문 됨) ---> 접속시간에 관계없이, 8시45분~ 8시55분 사이에 'test1'의 종목검색 및 매수주문이 발생하도록 수정 부탁드립니다. 2) 장개시전 매수 주문시 다음 조건을 추가하고 싶습니다. * 장개시전 계좌의 D+2 예수금 잔고가 주식평가자산을 포함한 순자산액의 1/10 이상일 때라는 조건 * 매수시 'K200 지수의 전일저가가 전전일저가보다 작을 때' 라는 조건 * 현재 작성된 수식은 검색된 종목들중 전일종가가 가장 높은 종목부터 순차적으로 5종목 이하로 매수하도록 작성되어 있습니다. ---> 이때 만약 잔고에 해당 종목들의 잔고가 미결제 포함하여 100주 미만이라면 매수주문이 발생하고, 100주 이상이라면 건너뛰고 가격이 높은 순으로 검색된 종목중 다음 가격이 높은 종목으로 순연하여 5종목 이하로 주문되도록 하고 싶습니다. 3) 8시45분 ~ 8시55분에 잔고에 있는 종목들중 평균매입가격대비 전일종가 기준으로 30% 이상 상승한 종목들이 있다면, 해당종목들의 전체 수량을 전일종가로 매도주문 내고 싶습니다. ---> 매도시 수량은 3일 결제로 인한 전일의 미결제 수량 포함입니다. 4) 당일 매수 및 매도 주문에 대한 정정과 취소는 없습니다. 즉, 개장전 주문이 장종료시까지 유지됩니다. 차트는 사용하지 않습니다. 다음 수식은 일봉기준으로 종목검색후, 장개시전 고가순으로 5종목 매수주문 < 스크립트 객체 > - Main - Account1 - Vol --------------------- var List; var ListCnt; var RcvCount; var ItemCode = new Array(200); var PPrice = new Array(200); var RcvCount = 0; var Ymoney; function Main_OnStart() { Main.ReqPowerSearch("test1") Ymoney = Account1.GetBalanceETCinfo(0); // D+2 예수금을 불러오는지요? Main.MessageLog("종목검색"); } function Main_OnRcvItemList(aItemList, nCount) { List = aItemList; ListCnt = nCount; for (var i = 0; i < nCount; i++) { Main.ReqMarketData(List[i], 0, 0); } } function Main_OnRcvMarketData(MarketData) { RcvCount = RcvCount+1; ItemCode[RcvCount] = MarketData.code; PPrice[RcvCount] = MarketData.prevClose; if (RcvCount == ListCnt) { for (var ii = 1; ii <= 5; ii++) { var HH = -1; var Hi = -1; for (var iii = 1; iii <= RcvCount; iii++) { if (PPrice[iii] > HH) { HH = PPrice[iii]; Hi = iii; } } //매수주문 if (Hi > -1) { Account1.OrderBuy(ItemCode[Hi], Vol, PPrice[Hi], 0); ItemCode[Hi] = -1; PPrice[Hi] = -1; } } } } 감사합니다 !!
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-09-10 15:08:57

안녕하세요 예스스탁입니다. 아래 내용 참고하셔서 수정보완해 완성하시기 바랍니다. KO200지수는 스크립트객체화면에 MarketData1로 추가하시면 됩니다. var List; var ListCnt; var RcvCount; var ItemCode = new Array(200); var PPrice = new Array(200); var RcvCount = 0; var Ymoney; var num,Slist = [],Avg = [],Vol = [],req; function Main_OnStart() { Main.SetTimer(1, 5000); step = 0; } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (HHMMSS > 84500 && HHMMSS < 85500) { Main.KillTimer(1); // 보유종목수 num = Account1.GetTheNumberOfBalances(); //1개 이상이면 if (num >= 1) { step = 1; //보유종목의 종목코드와 평단가, 수량을 각 배열변수 동일방번호에 추가 for (var i = 0; i < num; i++) { Account1.SetBalance(i); Slist.push(Account1.Balance.code); Avg.push(Account1.Balance.avgUnitCost); Vol.push(Account1.Balance.count); } //첫종목부터 종목객체 요청 req = 0; Main.ReqMarketData(Slist[req]); } else //보유종목이 없으면 종목검색요청 { //하이는 16,nh는 20이 D+2 예수금입니다. if (Account1.GetBalanceETCinfo(16) >= Account1.GetBalanceETCinfo(100)*(1/10) && MarketData1.GetPrevClose(1) < MarketData1.GetPrevClose(2)) { step = 2 Main.MessageLog("종목검색"); Main.ReqPowerSearch("test1") } } } } function Main_OnRcvItemList(aItemList, nCount) { step = 3; List = aItemList; ListCnt = nCount; for (var i = 0; i < nCount; i++) { Main.ReqMarketData(List[i], 0, 0); } } function Main_OnRcvMarketData(MarketData) { if (step == 1) { if (MarketData.code == Slist[req]) { if (MarketData.prevClose >= Avg[req]*1.03) { Account1.OrderSell(Slist[req],Vol[req],MarketData.prevClose,0); } } req = req+1; if (req < num) { Main.ReqMarketData(Slist[req]); } else //종목객체 요청이 끝났으면 종목검색 { //하이는 16,nh는 20이 D+2 예수금입니다. if (Account1.GetBalanceETCinfo(16) >= Account1.GetBalanceETCinfo(100)*(1/10)) { step = 2 Main.MessageLog("종목검색"); Main.ReqPowerSearch("test1") } } } if (step == 3) { RcvCount = RcvCount+1; ItemCode[RcvCount] = MarketData.code; PPrice[RcvCount] = MarketData.prevClose; var BuyCount = 0; if (RcvCount == ListCnt) { for (var ii = 1; ii <= RcvCount; ii++) { var HH = -1; var Hi = -1; for (var iii = 1; iii <= RcvCount; iii++) { if (PPrice[iii] > HH) { HH = PPrice[iii]; Hi = iii; } } //매수주문 if (Hi > -1) { Account1.SetBalance(ItemCode[Hi],0); if (Account1.Balance.count < 100 && BuyCount < 5) { Account1.OrderBuy(ItemCode[Hi], Vol, PPrice[Hi], 0); BuyCount = BuyCount+1; } ItemCode[Hi] = -1; PPrice[Hi] = -1; } if (BuyCount == 5) { break; } } } } } 즐거운 명절되시길 바랍니다. > 새로운세상 님이 쓴 글입니다. > 제목 : 수식 수정 부탁드립니다 > 안녕하세요~ 다음 수식 수정 부탁드립니다. 1) 현재 아래의 수식을 자동으로 설정하였을 경우, 8시30분 이전 주식시장 주문가능시간전에 HTS에 접속을 하면 주문 오류가 발생합니다. ---> 주문가능 시간전이므로 당연함 (8시30분 이후 접속시는 정상주문 됨) ---> 접속시간에 관계없이, 8시45분~ 8시55분 사이에 'test1'의 종목검색 및 매수주문이 발생하도록 수정 부탁드립니다. 2) 장개시전 매수 주문시 다음 조건을 추가하고 싶습니다. * 장개시전 계좌의 D+2 예수금 잔고가 주식평가자산을 포함한 순자산액의 1/10 이상일 때라는 조건 * 매수시 'K200 지수의 전일저가가 전전일저가보다 작을 때' 라는 조건 * 현재 작성된 수식은 검색된 종목들중 전일종가가 가장 높은 종목부터 순차적으로 5종목 이하로 매수하도록 작성되어 있습니다. ---> 이때 만약 잔고에 해당 종목들의 잔고가 미결제 포함하여 100주 미만이라면 매수주문이 발생하고, 100주 이상이라면 건너뛰고 가격이 높은 순으로 검색된 종목중 다음 가격이 높은 종목으로 순연하여 5종목 이하로 주문되도록 하고 싶습니다. 3) 8시45분 ~ 8시55분에 잔고에 있는 종목들중 평균매입가격대비 전일종가 기준으로 30% 이상 상승한 종목들이 있다면, 해당종목들의 전체 수량을 전일종가로 매도주문 내고 싶습니다. ---> 매도시 수량은 3일 결제로 인한 전일의 미결제 수량 포함입니다. 4) 당일 매수 및 매도 주문에 대한 정정과 취소는 없습니다. 즉, 개장전 주문이 장종료시까지 유지됩니다. 차트는 사용하지 않습니다. 다음 수식은 일봉기준으로 종목검색후, 장개시전 고가순으로 5종목 매수주문 < 스크립트 객체 > - Main - Account1 - Vol --------------------- var List; var ListCnt; var RcvCount; var ItemCode = new Array(200); var PPrice = new Array(200); var RcvCount = 0; var Ymoney; function Main_OnStart() { Main.ReqPowerSearch("test1") Ymoney = Account1.GetBalanceETCinfo(0); // D+2 예수금을 불러오는지요? Main.MessageLog("종목검색"); } function Main_OnRcvItemList(aItemList, nCount) { List = aItemList; ListCnt = nCount; for (var i = 0; i < nCount; i++) { Main.ReqMarketData(List[i], 0, 0); } } function Main_OnRcvMarketData(MarketData) { RcvCount = RcvCount+1; ItemCode[RcvCount] = MarketData.code; PPrice[RcvCount] = MarketData.prevClose; if (RcvCount == ListCnt) { for (var ii = 1; ii <= 5; ii++) { var HH = -1; var Hi = -1; for (var iii = 1; iii <= RcvCount; iii++) { if (PPrice[iii] > HH) { HH = PPrice[iii]; Hi = iii; } } //매수주문 if (Hi > -1) { Account1.OrderBuy(ItemCode[Hi], Vol, PPrice[Hi], 0); ItemCode[Hi] = -1; PPrice[Hi] = -1; } } } } 감사합니다 !!