커뮤니티

부탁드리겠습니다..

프로필 이미지
만들레영토
2016-11-05 03:30:05
2154
글번호 224032
답변완료
안녕하세요? 제가 시스템식으로 당일매매를 하고 있습니다. 종목객체에서 수신된 매수/매도신호가 당일에 발생이 되지 않는 경우, 수동으로 매도처리를 하고 있습니다. 즉, 종목객체에서 수신되는 매수/매도 신호외 과거 보유종목이 있으면 보유종목의 평단을 수신하여 평단대비 4%대면 매도를 할 수 있는 식을 추가로 부탁드리겠습니다. 아래식으로 시스템을 입혀서 종목객체를 수신하였습니다. //요청한 종목객체가 생성되면 function Main_OnRcvMarketData(MarketData) { RcvData = RcvData+1; DataReq = false; EntryItem[RcvData] = MarketData.code; EntryObject[RcvData] = MarketData; Account1.SetBalanceItem(MarketData.code,0); Main.MessageList("종목수신",EntryObject[RcvData]); Main.MessageList(RcvData,"번째 종목생성",MarketData.name); var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 기타정보들..) var C1 = new ReqChartItem(EntryObject[RcvData].code, 기타정보들..) var S1 = new SystemInfo("당일매매식",YL_TYPE_NORMAL,null,TradeSet,null); Main.ReqChartEx(C1,S1); } function Main_OnRiseSignal(ChartEx, Signal) { for (var i = 1; i <= RcvData; i++) { if (EntryObject[i].code == ChartEx.GetCode(1)) { if (Signal.signalKind == 1) { BuyVol[i] = 0; if (EntryObject[i].tradeUnit == 1) BuyVol[i] = Math.floor(EntryMoney/EntryObject[i].Ask(5) ); else BuyVol[i] = Math.floor((EntryMoney/EntryObject[i].Ask(5) )/EntryObject[i].tradeUnit); Account1.OrderBuy(Signal.code,BuyVol[i],EntryObject[i].Ask(5),0); Main.MessageList("매수주문종목 : ",Signal.code); } if (Signal.signalKind == 2) Account1.OrderSell(Signal.code,BuyVol[i],EntryObject[i].Bid(5),0); Main.MessageList("매도주문종목 : ",Signal.code); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-11-17 17:34:31

안녕하세요 예스스탁입니다. 아래 수식 참고하시기 바랍니다. 5초간격으로 잔고종목이 오늘 수신받은 EntryItem에 없는 종목이면 현재가가 평단가대비 4%이상이면 매도하게 추가했습니다. function Main_OnStart() { Main.SetTimer(99, 5000);//99번 타이머 셋팅(5초) } //요청한 종목객체가 생성되면 function Main_OnRcvMarketData(MarketData) { RcvData = RcvData+1; DataReq = false; EntryItem[RcvData] = MarketData.code; EntryObject[RcvData] = MarketData; Account1.SetBalanceItem(MarketData.code,0); Main.MessageList("종목수신",EntryObject[RcvData]); Main.MessageList(RcvData,"번째 종목생성",MarketData.name); var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 기타정보들..) var C1 = new ReqChartItem(EntryObject[RcvData].code, 기타정보들..) var S1 = new SystemInfo("당일매매식",YL_TYPE_NORMAL,null,TradeSet,null); Main.ReqChartEx(C1,S1); } function Main_OnRiseSignal(ChartEx, Signal) { for (var i = 1; i <= RcvData; i++) { if (EntryObject[i].code == ChartEx.GetCode(1)) { if (Signal.signalKind == 1) { BuyVol[i] = 0; if (EntryObject[i].tradeUnit == 1) BuyVol[i] = Math.floor(EntryMoney/EntryObject[i].Ask(5) ); else BuyVol[i] = Math.floor((EntryMoney/EntryObject[i].Ask(5) )/EntryObject[i].tradeUnit); Account1.OrderBuy(Signal.code,BuyVol[i],EntryObject[i].Ask(5),0); Main.MessageList("매수주문종목 : ",Signal.code); } if (Signal.signalKind == 2) { Account1.OrderSell(Signal.code,BuyVol[i],EntryObject[i].Bid(5),0); Main.MessageList("매도주문종목 : ",Signal.code); } } } } //타이머동작 function Main_OnTimer(nEventID) { if (nEventID == 99) { //보유종목 수만큼 1차 루프 var num = Account1.GetTheNumberOfBalances(); for (var i = 0; i < num; i++) { //잔고셋팅 Account1.SetBalance(EntryItem[i], nPosition); //초기값 false var Hold = false; //수신받은 데이터수 만큼 2차 루프 실행 for (var z = 1; z <= RcvData; i++) { //셋팅된 잔고종목과 EntryItem에 같은 종목코드가 있으면 if (Account1.Balance.code == EntryItem[z]) { Hold = true; } } if (Hold == false) { //현재가가 잔고평단가 +4% 이상이면 전량 매도 if (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.04) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1); } } } } } 즐거운 하루되세요 > 만들레영토 님이 쓴 글입니다. > 제목 : 부탁드리겠습니다.. > 안녕하세요? 제가 시스템식으로 당일매매를 하고 있습니다. 종목객체에서 수신된 매수/매도신호가 당일에 발생이 되지 않는 경우, 수동으로 매도처리를 하고 있습니다. 즉, 종목객체에서 수신되는 매수/매도 신호외 과거 보유종목이 있으면 보유종목의 평단을 수신하여 평단대비 4%대면 매도를 할 수 있는 식을 추가로 부탁드리겠습니다. 아래식으로 시스템을 입혀서 종목객체를 수신하였습니다. //요청한 종목객체가 생성되면 function Main_OnRcvMarketData(MarketData) { RcvData = RcvData+1; DataReq = false; EntryItem[RcvData] = MarketData.code; EntryObject[RcvData] = MarketData; Account1.SetBalanceItem(MarketData.code,0); Main.MessageList("종목수신",EntryObject[RcvData]); Main.MessageList(RcvData,"번째 종목생성",MarketData.name); var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 기타정보들..) var C1 = new ReqChartItem(EntryObject[RcvData].code, 기타정보들..) var S1 = new SystemInfo("당일매매식",YL_TYPE_NORMAL,null,TradeSet,null); Main.ReqChartEx(C1,S1); } function Main_OnRiseSignal(ChartEx, Signal) { for (var i = 1; i <= RcvData; i++) { if (EntryObject[i].code == ChartEx.GetCode(1)) { if (Signal.signalKind == 1) { BuyVol[i] = 0; if (EntryObject[i].tradeUnit == 1) BuyVol[i] = Math.floor(EntryMoney/EntryObject[i].Ask(5) ); else BuyVol[i] = Math.floor((EntryMoney/EntryObject[i].Ask(5) )/EntryObject[i].tradeUnit); Account1.OrderBuy(Signal.code,BuyVol[i],EntryObject[i].Ask(5),0); Main.MessageList("매수주문종목 : ",Signal.code); } if (Signal.signalKind == 2) Account1.OrderSell(Signal.code,BuyVol[i],EntryObject[i].Bid(5),0); Main.MessageList("매도주문종목 : ",Signal.code); } } }