커뮤니티

보유종목 이평청산

프로필 이미지
오토
2014-11-17 14:02:21
1522
글번호 223234
답변완료
안녕하세요. 스팟(검색종목)으로 진입을 자동으로 시키고 있습니다. 청산도 스팟으로 할려고 하는데요. 보유 종목들 5일 이평 이탈시 매도를 할려고 합니다. 답변(비슷한) 된 식으로 해봤지만 에러가 발생되네요 ㅠㅠ 수식 부탁드립니다. 덧 : 중간에 재접속해도 문제가 없겠죠?
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-12-05 11:09:13

안녕하세요 예스스탁입니다. 아래식 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 종목검색(30초간격) 후에 1초간격으로 검색된 종목에 대해 매수주문과 종목객체를 생성하고 5초간격으로 생성된 종목에 대하 이평값 계산해서 현재가가 아래면 전량 매도합니다. 스팟은 기본적으로 변수가 휘발성입니다. 접속이 종료되면 이전내용에 대해서 자동기록하지 않습니다. 해당부분은 함수중에 내부파일에 값을 저장하고 불러오는 함수나 엑셀등에 기록을 하셔서 따로 처리해 가셔야 합니다. var EntryMoney; var ItemList,Count; var EntryObject = []; var EntryItem = []; var RcvData = 0; var Search = false; var DataReq = false; //스팟시작 function Main_OnStart() { //타이머설정 Main.SetTimer(1, 30000);//간격(30초) Main.SetTimer(3, 5000);//간격(5초) Search = false; DataReq = false; RcvData = 0; EntryMoney = Math.floor(Account1.GetBalanceETCinfo(0)*0.1); } function Main_OnTimer(nEventID) { //타이머동작하면 사용자검색조건 실행 if (nEventID == 1 && Search == false ) { Main.MessageList("검색요청"); Main.ReqPowerSearch("Stest"); Req = 0; Search = true; DataReq = false; } if (nEventID == 2 && Req == Count) { Main.MessageList("요청종료"); Search = false; Main.KillTimer(2); } if (nEventID == 2 && Req < Count && Search == true && DataReq == false) { Main.MessageList("요청전 EntryItem",EntryItem); var Entry = false; for(var i = 0; i < EntryItem.length; i++) { if (EntryItem[i] == ItemList[Req]) { Entry = true; } } if (Entry == false) { //종목객체요청(일간데이터도 10개 같이 요청) Main.ReqMarketData(ItemList[Req], 10, 0); Main.MessageList("요청",ItemList[Req],Req); } if (Entry == true) { Main.MessageList("요청x",ItemList[Req]); } Req = Req+1; } if (RcvData >= 1 && nEventID == 3) { Main.MessageList("이평감시"); for(var i = 0; i < EntryItem.length; i++) { var sum = 0; for(var ii = 1; ii < 5; ii++) { sum = sum + EntryObject[i].GetPrevClose(ii); } var mav = (sum+EntryObject[i].current)/5; Main.MessageList("종목코드",EntryObject[i].code,"현재가",EntryObject[i].current,"이평",mav); Account1.SetBalanceItem(EntryObject[i].code, 0) //잔고가 있으면 if (Account1.Balance.count > 0) { //매수5호가로 전량 매도 Account1.OrderSell(EntryObject[i].code, Account1.Balance.count, EntryObject[i].Bid(5),0); } } } } //종목검색이 완료 function Main_OnRcvItemList(aItemList, nCount) { //검색종목수가 1개 이상이면 if (nCount >= 1 && DataReq == false) { ItemList = aItemList; Count = nCount; Main.MessageList("검색완료",ItemList); //종목객체 생성 요청 Main.MessageList("요청전 EntryItem",EntryItem); var Entry = false; for(var i = 0; i < EntryItem.length; i++) { if (EntryItem[i] == ItemList[Req]) { Entry = true; } } if (Entry == false) { DataReq = true; Main.ReqMarketData(ItemList[Req], 10, 0); Main.MessageList("요청",ItemList[Req],Req); } if (Entry == true) { DataReq = false; Main.MessageList("요청x",ItemList[Req]); } Req = Req+1; Main.SetTimer(2, 1000);//간격(1초) } if (nCount < 1 && DataReq == false) { Main.MessageList("요청종료"); Search = false; Main.KillTimer(2); } } //요청한 종목객체가 생성되면 function Main_OnRcvMarketData(MarketData) { EntryItem[RcvData] = MarketData.code; EntryObject[RcvData] = MarketData; Account1.SetBalanceItem(MarketData.code,0); Main.MessageList("종목수신",EntryObject[RcvData]); if (Account1.Balance.count == 0) { var Vol = 0; //1주 단위일 경우 if (EntryObject[RcvData].tradeUnit == 1) { Vol = Math.floor(EntryMoney*1.5/EntryObject[RcvData].Ask(5)); Main.MessageList("종목수량",EntryMoney,Vol); } //10주 단위일 경우 if (EntryObject[RcvData].tradeUnit == 10) { Vol = Math.floor(Math.floor(Math.floor(EntryMoney*1.5/EntryObject[RcvData].Ask(5))/10)*10); Main.MessageList("종목수량",EntryMoney,Vol); } if (Vol > 0) { Main.MessageList("주문",EntryObject[RcvData].code); Account1.OrderBuy(EntryObject[RcvData].code,Vol,EntryObject[RcvData].Ask(5),0); } } Main.MessageList("확인",RcvData,EntryItem[RcvData],EntryObject[RcvData].code); RcvData = RcvData+1; DataReq = false; } 즐거운 하루되세요 > 오토 님이 쓴 글입니다. > 제목 : 보유종목 이평청산 > 안녕하세요. 스팟(검색종목)으로 진입을 자동으로 시키고 있습니다. 청산도 스팟으로 할려고 하는데요. 보유 종목들 5일 이평 이탈시 매도를 할려고 합니다. 답변(비슷한) 된 식으로 해봤지만 에러가 발생되네요 ㅠㅠ 수식 부탁드립니다. 덧 : 중간에 재접속해도 문제가 없겠죠?