커뮤니티

수식질문 드립니다 도와주세요~~~

프로필 이미지
철판때기
2023-09-27 15:53:48.0
790
글번호 225844
답변완료
파워 종목 검색으로 제일 처음 검색되는 1종목만 매수하고 싶습니다. 매도는 손익률 3.5%에 매도하고 싶습니다. 위 1종목이 검색되면 정지시키고 싶어요 아래까지는 만들어봤는데 수량을 1000개로 되어있어서 현금부족으로 매수가 되질않네요 매수를 예수금 현금최대로 하고십습니다. var ItemList; var Count; var ReqCount; var 수량= 1000; var X1 = false function Main_OnStart() { Main.SetTimer(1, 3000); } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.MessageLog("스팟시작"); Main.MessageLog("종목검색시작"); Main.ReqPowerSearch("aaa") } } function Main_OnRcvItemList(aItemList, nCount) { if (nCount >= 1) { for (var i = 0; i < nCount; i++) { Account1.SetBalance(aItemList[i],0); if (Account1.Balance.count == 0) { Account1.OrderBuy(aItemList[i], 수량,0,1); } if (Account1.Balance.count >= 1) Main.KillTimer(1); if (X1 == false && Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.035) { X1 = true; Account1.OrderSell(Account1.Balance.code,Math.floor(Account1.Balance.current),MarketData.Bid(3),0); } } } } 이까지는 확실하게 알겠는데 여기서 어떤걸 손대야 할까요?
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-10-17 10:23:45.0

안녕하세요 예스스탁입니다. 1 최초 보유하지 않은 종목이 검색되면 해당 종목 1종목만 매수하게 작성해 드립니다. 2 예수금등을 이용해 주문수량을 지정하기 위해서는 가격이 필요합니다. 지정가 주문이면 지정한 가격으로 금액을 나누면 되지만 시장가의 경우 체결가능한 가장높은 가격으로 금액을 나누어야 하므로 상한가로 금액을 나누어야 합니다. 종목의 가격을 알기 위해서는 종목객체가 필요하게 됩니다. 그러므로 검색이 되면 첫번째 종목에 대해 종목객체를 생성하고 주문을 집행하게 구현하셔야 합니다. 3 예스스팟 도움말의 계좌객체에 보시면 예스금이나 주문가능현금등을 리턴하는 함수가 있습니다. 각 증권사별로 항목에 대한 인덱스가 다릅니다. 아래식은 하이투자증권 기준으로 주문가능현금을 지정해 드립니다. 도움말에서 GetBalanceETCinfo함수에 대한 참고하시기 바랍니다. 스팟은 사용자분이 자바스크립트로 식을 작성할 수 있다는 가정하에 일종의 가이드 수식만 제공합니다. 아래 수식 내용 참고하시기 바랍니다. 4 var OrderCode; var X1; function Main_OnStart() { Main.MessageList("스팟시작"); Main.SetTimer(1, 3000); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시~15시20분 사이 if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 152000) { Main.MessageList("종목검색시작"); Main.ReqPowerSearch("aaa"); } if (nEventID == 2) { Account1.SetBalance(OrderCode, 0); if (X1 == false && Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.035) { X1 = true; Account1.OrderSell(Account1.Balance.code,Math.floor(Account1.Balance.current),MarketData.Bid(3),0); } } } function Main_OnRcvItemList(aItemList, nCount) { //1종목이상 검색됨 if (nCount >= 1) { //검색된 종목 중 보유하지 않은 종목 1종목 찾기 OrderCode = ""; for (var i = 0; i < nCount; i++) { Account1.SetBalance(aItemList[i],0); //검색된 종목 중 잔고에 없는 종목이 있으면 if (Account1.Balance.count == 0) { //종목코드 저장 OrderCode = aItemList[i]; //타이머종료 Main.KillTimer(1); //for문 빠져나감 break; } } //주문낼 종목 종목객체 요청 if (OrderCode != "") { Main.ReqMarketData(OrderCode); } } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderCode) { var 수량 = Math.floor(Account1.GetBalanceETCinfo(18)/MarketData.limitUp); Account1.OrderBuy(MarketData.code, 수량,0,1); X1 = false; Main.SetTimer(2, 3000); } } 즐거운 하루되세요 > 철판때기 님이 쓴 글입니다. > 제목 : 수식질문 드립니다 도와주세요~~~ > 파워 종목 검색으로 제일 처음 검색되는 1종목만 매수하고 싶습니다. 매도는 손익률 3.5%에 매도하고 싶습니다. 위 1종목이 검색되면 정지시키고 싶어요 아래까지는 만들어봤는데 수량을 1000개로 되어있어서 현금부족으로 매수가 되질않네요 매수를 예수금 현금최대로 하고십습니다. var ItemList; var Count; var ReqCount; var 수량= 1000; var X1 = false function Main_OnStart() { Main.SetTimer(1, 3000); } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.MessageLog("스팟시작"); Main.MessageLog("종목검색시작"); Main.ReqPowerSearch("aaa") } } function Main_OnRcvItemList(aItemList, nCount) { if (nCount >= 1) { for (var i = 0; i < nCount; i++) { Account1.SetBalance(aItemList[i],0); if (Account1.Balance.count == 0) { Account1.OrderBuy(aItemList[i], 수량,0,1); } if (Account1.Balance.count >= 1) Main.KillTimer(1); if (X1 == false && Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.035) { X1 = true; Account1.OrderSell(Account1.Balance.code,Math.floor(Account1.Balance.current),MarketData.Bid(3),0); } } } } 이까지는 확실하게 알겠는데 여기서 어떤걸 손대야 할까요?