커뮤니티

사용자조건식으로 종목정보 저장하기

프로필 이미지
뽀로로킴
2019-10-15 11:08:42
3208
글번호 225042
답변완료
파워검색으로 사용자 조건식을 받아서 조회된 종목정보를 가지고 있다가 매수하려고 합니다.... 이거 저거 찾아보니 종목정보는 메뉴얼에 나와있는대로 만들면 될거 같네요... /*스크립트시작-----------------------------------------------------*/ var Start; var Skind; var Scode; var Scount; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { Skind = Signal.signalKind; Scode = Signal.code; Scount = Signal.count; Main.ReqMarketData(Signal.code, 0); } function Main_OnRcvMarketData(MarketData) { var SSEobject = MarketData; var dayma1 = C2.GetIndicatorData("이동평균 5_20_60", 1,0); var dayma2 = C2.GetIndicatorData("이동평균 5_20_60", 2,0); var dayma3 = C2.GetIndicatorData("이동평균 5_20_60", 3,0); var predayma1 = C2.GetIndicatorData("이동평균 5_20_60", 1,1); var slowK = C2.GetIndicatorData("Stochastics",1,0); if (Skind== 1 && dayma1 > dayma2 && dayma2 > dayma3 && dayma1 > predayma1 && slowK <= 30) { A1.OrderBuy(Scode,Scount,SSEobject.Ask(2),0); Start = 1; } if (Start == 1 && Skind == 2) { A1.OrderSell(Scode,Scount,SSEobject.Bid(2),0); } } /*스크립트시작-------------------------------------------------------*/ 사용자 조건식을 받아서 조회되는 종목정보는 어떻게 받아오는지 모르겠습니다.... 도움 요청드립니다..... 좋은하루되십시오. ^^*
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-10-30 14:57:19

안녕하세요 예스스탁입니다. 수식에서 Main.ReqPowerSearch가 실행되면 종목검색 완료 후에 아래 이벤트가 발생합니다. Main.ReqPowerSearch에 사용자검색조건명을 지정하셔야 하며 차트를 생성할때도 시스템명을 지정해 주셔야 합니다. 차트에 적용되는 지표는 올려주신 수식에 있는 이름으로 지정했습니다. function Main_OnRcvItemList(aItemList, nCount) aItemList가 종목코드 nCount는 검색된 종목갯수가 리턴됩니다. 아래 가이드 참고하시기 바랍니다. 종목검색후에 검색된 종목에 대해 차트와 종목객체를 모두 생성한 이후에 매수와 매도 신호에 따라 주문하는 내용입니다. var List = []; //종목검색 후 종목코드 저장할 배열변수 var CT = []; //차트객체 저장할 배열변수 var MK = []; //종목객체 저장할 배열변수 var req,step; function Main_OnStart() { step = 0; Main.ReqPowerSearch("사용자검색조건명"); } function Main_OnRcvItemList(aItemList, nCount) { if (nCount > 0) { for (var i = 0; i < nCount; i++) { List[i] = aItemList[i]; } } if (List.length > 0) { step = 1; Main.MessageList("차트객체 생성시작"); req = 0; //차트객체 요청(5분봉 100개) var CTSet = new ReqChartItem(List[req],5,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false); //차트에 적용할 시스템명 var STSet = new SystemInfo("시스템명"); //차트에 적용할 지표명 var IDSet = new Array(new IndicatorInfo("이동평균 5_20_60"),new IndicatorInfo("Stochastics")); Main.ReqChartEx(CTSet, STSet, IDSet); } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == List[req]) { CT[req] = ChartEx; req = req+1; if (req < List.length) { //차트객체 요청(5분봉 100개) var CTSet = new ReqChartItem(List[req],5,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false); //차트에 적용할 시스템명 var STSet = new SystemInfo("TRIX"); //차트에 적용할 지표명 var IDSet = new Array(new IndicatorInfo("이동평균 5_20_60"),new IndicatorInfo("Stochastics")); Main.ReqChartEx(CTSet, STSet, IDSet); } else { step = 2; Main.MessageList("차트객체 생성끝"); Main.MessageList("종목객체 생성시작"); req = 0; Main.ReqMarketData(List[req]); } } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == List[req]) { MK[req] = MarketData; req = req+1; if (req < List.length) { var S = Main.ReqMarketData(List[req]); if (S == -1) { Main.MessageList(HHMMSS," |----------------------"); Main.SetTimer(1, 15000); } } else { step = 3; Main.MessageList("종목객체 생성끝"); } } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.KillTimer(1); S = Main.ReqMarketData(list[req]); if (S == -1) { Main.MessageList(HHMMSS," |----------------------"); Main.SetTimer(1, 15000); } } } function Main_OnRiseSignal(ChartEx, Signal) { if (step == 3) { //전체 차트중에 신호가 발생한 차트를 찾아서 for (var i = 0; i < CT.length; i++) { if (ChartEx.GetCode(1) == CT[i].GetCode(1)) { var dayma1 = CT[i].GetIndicatorData("이동평균 5_20_60", 1,0); var dayma2 = CT[i].GetIndicatorData("이동평균 5_20_60", 2,0); var dayma3 = CT[i].GetIndicatorData("이동평균 5_20_60", 3,0); var predayma1 = CT[i].GetIndicatorData("이동평균 5_20_60", 1,1); var slowK = CT[i].GetIndicatorData("Stochastics",1,0); //신호가 buy이고 지표조건만족하면 매수 if (Signal.signalKind == 1 && dayma1 > dayma2 && dayma2 > dayma3 && dayma1 > predayma1 && slowK <= 30) { A1.OrderBuy(CT[i].GetCode(1),Signal.count,MK[i].Ask(2),0); } //차트에서 exitlong신호 발생하면 매도 if (Signal.signalKind == 2) { //전체 미체결 중 해당 종목 매수주문 미체결을 있으면 취소 var num = A1.GetTheNumberOfUnfills(); for (var x = 0; x < num; x++) { A1.SetUnfill(x); if (A1.Unfill.code == CT[i].GetCode(1) && A1.Unfill.orderKind == 2) { A1.OrderCancel(A1.Unfill.orderNum); } } //잔고셋팅해서 보유수량 전량 청산 A1.SetBalance(CT[i].GetCode(1), 0); if (A1.Balance.count > 0) { A1.OrderSell(CT[i].GetCode(1),A1.Balance.count,MK[i].Bid(2),0); } } } } } } 즐거운 하루되세요 > 뽀로로킴 님이 쓴 글입니다. > 제목 : 사용자조건식으로 종목정보 저장하기 > 파워검색으로 사용자 조건식을 받아서 조회된 종목정보를 가지고 있다가 매수하려고 합니다.... 이거 저거 찾아보니 종목정보는 메뉴얼에 나와있는대로 만들면 될거 같네요... /*스크립트시작-----------------------------------------------------*/ var Start; var Skind; var Scode; var Scount; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { Skind = Signal.signalKind; Scode = Signal.code; Scount = Signal.count; Main.ReqMarketData(Signal.code, 0); } function Main_OnRcvMarketData(MarketData) { var SSEobject = MarketData; var dayma1 = C2.GetIndicatorData("이동평균 5_20_60", 1,0); var dayma2 = C2.GetIndicatorData("이동평균 5_20_60", 2,0); var dayma3 = C2.GetIndicatorData("이동평균 5_20_60", 3,0); var predayma1 = C2.GetIndicatorData("이동평균 5_20_60", 1,1); var slowK = C2.GetIndicatorData("Stochastics",1,0); if (Skind== 1 && dayma1 > dayma2 && dayma2 > dayma3 && dayma1 > predayma1 && slowK <= 30) { A1.OrderBuy(Scode,Scount,SSEobject.Ask(2),0); Start = 1; } if (Start == 1 && Skind == 2) { A1.OrderSell(Scode,Scount,SSEobject.Bid(2),0); } } /*스크립트시작-------------------------------------------------------*/ 사용자 조건식을 받아서 조회되는 종목정보는 어떻게 받아오는지 모르겠습니다.... 도움 요청드립니다..... 좋은하루되십시오. ^^*