커뮤니티

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

프로필 이미지
철판때기
2024-01-03 11:24:33.0
609
글번호 225916
답변완료
var ItemList; var Count; var ReqCount; var X1 = false var OrderList = []; var MKList = []; var req; var OrderCode; function Main_OnStart() { Main.SetTimer(1, 3000); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시01분~15시20분 사이 if (nEventID == 1 && HHMMSS >= 90100 && HHMMSS < 152000) { Main.MessageLog("스팟시작"); Main.MessageLog("종목검색시작"); Main.ReqPowerSearch("하이업 지표5선") } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, 3000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { var MM = Account1.GetBalanceETCinfo(0); MKList.push(MarketData); Account1.OrderBuy(MarketData.code,Math.floor((MM*0.99)/ MarketData.Ask(1)),MarketData.Ask(1),0); req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 3000); } } else { Main.SetTimer(1, 3000); } if (Account1.Balance.count >= 1) Main.KillTimer(1); if (X1 == false && Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.033) { X1 = true; Account1.OrderSell(Account1.Balance.code,Math.floor(Account1.Balance.current),MarketData.Bid(1),0); } } } 위 스팟수식을 만들어서 사용중인데 매수후 3.3% 이상이면 매도를 해야하는데 안합니다. 어디가 잘못된걸까요??? 그리고 1종목 이상 검색이되면 스팟을 멈추고 싶어요
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-02-14 15:36:58.0

안녕하세요 예스스탁입니다. 1 function Main_OnRcvMarketData(MarketData) 위 이벤트는 종목객체가 만들지는 순간에만 동작하는 이벤트입니다. 만들어진 종목객체의 시세가 발생하면 알려주는 이벤트는 별도로 존재합니다. function Main_OnUp*dateMarket(sItemCode, lUp*dateID) 영문 업데이트가 게시판 금칙어라 up*date와 같이 중간에 별이 추가되었습니다. 아래식에서는 모두 삭제하고 사용하셔야 합니다. 2 var ItemList; var Count; var ReqCount; var X1 = false var OrderList = []; var MKList = []; var req; var OrderCode; var OD = []; function Main_OnStart() { Main.SetTimer(1, 3000); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시01분~15시20분 사이 if (nEventID == 1 && HHMMSS >= 90100 && HHMMSS < 152000) { Main.MessageLog("스팟시작"); Main.MessageLog("종목검색시작"); Main.ReqPowerSearch("하이업 지표5선") } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { //한종목이상 검색되면 검색하는 타이머는 종료 if (nCount >= 1) { Main.KillTimer(1); OrderList = aItemList; req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { var MM = Account1.GetBalanceETCinfo(0); if (MarketData.code == OrderList[req]) { MKList.push(MarketData); OD.Push(1);//주문 흐름 저장변수 매수는 1 Account1.OrderBuy(MarketData.code,Math.floor((MM*0.99)/ MarketData.Ask(1)),MarketData.Ask(1),0); req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 3000); } } else { Main.MessageList("객체생성완료") } } } function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*삭제 { //체결시세가 수신되면 if (lUp*dateID == 20001)//*삭제 { //주문한 종목들 시세 for (var i = 0; i < MKList.length; i++) { //MKList종목들 중 어느종목인지 찾고 if (sItemCode == MKList[i].code) { //잔고셋팅 Account1.SetBalance(MKList[i].code,0); //평단가 대비 3.3이상이면 if (OD[i] == 1 && Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.033) { //OD값은 2로 변경하고(매수후 한번 매도하기 위함) OD[i] = 2; //매도주문 Account1.OrderSell(Account1.Balance.code,Math.floor(Account1.Balance.current),MarketData.Bid(1),0); } } } } } 즐거운 하루되세요 > 철판때기 님이 쓴 글입니다. > 제목 : 수식질문 드립니다 도와주세요~~~ > var ItemList; var Count; var ReqCount; var X1 = false var OrderList = []; var MKList = []; var req; var OrderCode; function Main_OnStart() { Main.SetTimer(1, 3000); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시01분~15시20분 사이 if (nEventID == 1 && HHMMSS >= 90100 && HHMMSS < 152000) { Main.MessageLog("스팟시작"); Main.MessageLog("종목검색시작"); Main.ReqPowerSearch("하이업 지표5선") } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, 3000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { var MM = Account1.GetBalanceETCinfo(0); MKList.push(MarketData); Account1.OrderBuy(MarketData.code,Math.floor((MM*0.99)/ MarketData.Ask(1)),MarketData.Ask(1),0); req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 3000); } } else { Main.SetTimer(1, 3000); } if (Account1.Balance.count >= 1) Main.KillTimer(1); if (X1 == false && Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.033) { X1 = true; Account1.OrderSell(Account1.Balance.code,Math.floor(Account1.Balance.current),MarketData.Bid(1),0); } } } 위 스팟수식을 만들어서 사용중인데 매수후 3.3% 이상이면 매도를 해야하는데 안합니다. 어디가 잘못된걸까요??? 그리고 1종목 이상 검색이되면 스팟을 멈추고 싶어요