커뮤니티

스팟은 활성화가 너무 안된거 같아요 ....... 답변까지 한달

프로필 이미지
자라도
2016-05-16 09:29:31
2295
글번호 223881
답변완료
전략실행해보고 수정하려고 해도 너무 오래걸려서 전략아이디어가 사라져 버려요 스팟식을 최초에 실행시키면 지정한 계좌의 모든 종목에 대해 내부적으로 종목객체를 생성하고 해당 종목들의 시세변화를 감시해 최초매입가의(2% : 목표가)수익시 매도 매수는 장종료후 일봉예비신호로 150000이후 주문 미체결시 취소후 다음날 장개시전에 다시주문 미체결되고 신호가의 2% 도달시 주문취소 매수체결후 하락시 추가매수(아래예시) 매도는 계좌잔고 및 실시간 가격변화로 최초매입가의 +2%수익시 매도 여기저기 짜집기를 하면서 만들다보니 필요없는 부분도 있는것 같읍니다. 불필요한건 삭제하고 간결하게 부탁드립니다. 아래식은 파워종목검색하여 일봉 예비신호시 종가매수주문입니다. 수정좀 부탁드립니다. 아울러 아래 내용을 추가하고자 하는데 부탁드립니다.스크립트 메세지에 에러는 없는데 주문이 안되네요 지정시간 150500 전에도 계속 주문이 나갑니다.(스팟실행시 이시간(150500) 이 되어야만 1번만 주문이 나가야 하는데) 타이머 이벤트에서 false => true 변경했는데도 거래가 될때마다 계속나가내요 수정할때 수량말고 금액기준으로(예 100만원 / 단가 = 수량) 주문 부탁합니다. 객체 차트,계좌는 지정했습니다. 1. 일봉예비신호로 주문을 넣고 채결이 안될시 다음날 장시작전에 주문을 다시내는 방법도 추가할수 있을까요? 2. 매수주문 넣고 체결이 안되고 목표수익가(신호가격의 +2%) 달성하면 매수주문취소하고, 목표가 미달성하고 신호가이하로 하락시는 매수유효 매수진입하여 보유한 종목이 2%수익이면 매도 하는 전략인데 매수진입하여 2%수익이 안되고 하락하여 손실시 처음매수한 가격( 1주가격이 2,000원)의 10% 하락(1주 가격이 1,800원 까지 하락시 처음에 진입한 금액의 10%(예로 100주* 2000원 이면 20만원의 10% 인 2만원) 2만원어치(1주가 격1,800 원을 2만원어치) 처음 매수가의 20% 하락한 1,600원 까지 하락시 20만원 의 10% 2만원 추가매수,,단 매도는 평균가격이 아닌 최초진입가인 2,000원 + 2% 수익에 전량매도 추가 매수 ((((여기서 추가매수는 똑같이 -10% , -20% , -30% -40% .....-90% 까지 계속하락시 똑같은 방법으로 추매는 진행합니다. 단 매도는 처음 진입가격 2000원 +2% 매도이고요)))) 추가매수한 평균 가격이 아닌 처음진입한 가격(2천원의 2%수익이 도달시매도) 3. 파워종목검색을 통한 차트신호시 매매이므로 잔고에 보유중인 종목이 진입신호가 발생시 종목무시 이렇게 가능할까요?(보유종목이면 2% 수익이 안난상태이므로 하락시 추가로 매수를 해야하므로 조건검색이 되어서 종목이 검색되어진다해도 진입신호무시) 계좌에 미보유한 종목은 차트의 매수 진입신호에 진입하고 매도는 차트의 매도신호가 나오더라도 2% 수익이 안되면 무시하고 무조건 2% 수익이 달성해야만 매도 /////////////////////////////////////////////////////////////////////// //스팟 시작할때 파워종목검색의 사용자검색조건 실행 var cond; function Main_OnStart() { Main.ReqPowerSearch("DMI스팟");//사용자검색조건명 지정 var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); cond = false; if (HHMMSS < 150500) { Main.SetTimer(1, 5000); } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && cond == false && HHMMSS >= 150500) { cond = true; var Incom = C1.GetIncompleteSignal(); } } //종목검색 완료(aItemList : 종목리스트), (nCount : 종목수) function Main_OnRcvItemList(aItemList, nCount) { // 확장챠트의 생성과 적용될 시스템의 세부 설정 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 1000, // 최대진입수량 20); // 최대진입횟수 //확장 챠트는 최대 25개까지만 가능 for (var i = 0; i < Math.min(nCount,100); i++) { //생성할 차트 셋팅 var C1 = new ReqChartItem(aItemList[i], 1, CHART_PERIOD_DAILY, 499,CHART_REQCOUNT_BAR,false, false); //차트에 적용할 시스템명 및 설정 var S1 = new SystemInfo("DMI스팟",YL_TYPE_NORMAL,null,TradeSet,null); Main.ReqChartEx(C1,S1); } } //확장챠트에서 발생한 신호에 의해 주문을 넣는 단계 function Main_OnRiseIncompleteSignal(ChartEx, IncompleteSignal) { //buy신호 발생 if (IncompleteSignal.signalKind == 1) { // 매수주문 A1.OrderBuy(IncompleteSignal.code, IncompleteSignal.count , IncompleteSignal.price, 0); } //Exitlong신호 발생 if (IncompleteSignal.signalKind == 2) { // 매도주문 A1.OrderSell(IncompleteSignal.code, IncompleteSignal.count , IncompleteSignal.price, 0); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-05-18 20:50:10

안녕하세요 예스스탁입니다. 아래 수식내용 참고하시기 바랍니다. 해당식 테스트된 내용이 아닙니다. 식 작성의 흐름을 알려드리는 가이드 입니다. 스팟시작시 종목검색후 --> 검색이 완료되면 --> 검색된 종목에 대해 순차적으로 차트를 생성 --> 생성된 차트는 배열변수에 차트객체를 저장 --> 차트가 모두 생성되었으면(최대 100개) --> 신호감시 --> 신호는 미완성신호이므로 시세수신될때마다 반복되므로 봉의 시가수신후 첫번째만 감시 (해당 부분은 사용자분이 계속적으로 발생되는 미완성신호에서 어떤 시점의 신호만 관리할지 정해서 코딩하셔야 합니다.) --> 잔고에 해당 종목의 수량이 0인 상태에서만 매수신호가 발생하면 주문 --> 주문후 첫매수주문가격과 하락율, 첫매수가격의 10%에 해당하는 금액을 계산해 저장 --> 이후 시세 업데이트가 되면 --> 업데이트가 된 종목이 어떤 종목인지 파악하고 --> 현재가가 첫전입가 +2% 이면 전량청산 --> 현재가가 첫진입가 -10%이면 첫진입금액의 10%에 해당하는 수량만큼만 추가매수 --> 추가매수후에는 하락율에 0.1을 추가해 다음진입은 10%더 하락하면 추가매수하도록 변수의 값 변경 내용 참고하시고 이후 수정보완해 완성해 가시기 바랍니다. 업무상 시간이 많이 소모되는 스팟전략은 전체적으로 저희가 작성은 해드릴수 없습니다. 작성하시다가 막히시는 부분이 있으면 02-3453-1060으로 전화주시기 바랍니다. var cond,rcvChart,rcvMK, RcvChartEnd = false; var item,itemcnt; //아래 배열변수를 사용하는 이유는 동일종목의 정보는 배열변수의 동일방번호에 저장하기 위함입니다. var CT = [];//차트객체 저장할 배열변수 var MK = [];//종목객체 저장할 배열변수 var IS = [];//미완성 신호횟수 저장할 배열변수 var VV = [];//주문수량 저장할 변수 var C1 = [];//첫 매수가격을 저장할 변수 var CC = [];//다음 하락시 가격을 저장할 변수 //스팟 시작시 종목검색 요청 function Main_OnStart() { Main.ReqPowerSearch("DMI스팟");//사용자검색조건명 지정 var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); rcvChart = 0; } //종목검색 완료(aItemList : 종목리스트), (nCount : 종목수) function Main_OnRcvItemList(aItemList, nCount) { item = aItemList; itemcnt = nCount; RcvChart = 0; RcvChartEnd = false; //확장 챠트요청(최대 100개까지만 가능) // 확장챠트의 생성과 적용될 시스템의 세부 설정 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 1000, // 최대진입수량 20); // 최대진입횟수 //종목검색된 종목의 차트와 종목객체 요청 for (var i = 0; i < Math.min(itemcnt,100); i++) { //생성할 차트 셋팅 var C1 = new ReqChartItem(item[i], 1, CHART_PERIOD_DAILY, 499,CHART_REQCOUNT_BAR,false, false); //차트에 적용할 시스템명 및 설정 var S1 = new SystemInfo("DMI스팟",YL_TYPE_NORMAL,null,TradeSet,null); Main.ReqChartEx(C1,S1); Main.ReqMarketData(item[i]); } } //차트객체 수신받으면 //해당 종목의 종목검색순번과 같은 번호의 배열방에 차트객체저장 function Main_OnRcvChartEx(ChartEx) { for (var i = 0; i < Math.min(itemcnt,100); i++) { if (ChartEx.code == item[i]) { CT[i] = ChartEx; } } } //차트객체 수신받으면 //해당 종목의 종목검색순번과 같은 번호의 배열방에 종목객체저장 function Main_OnRcvMarketData(MarketData) { for (var i = 0; i < Math.min(itemcnt,100); i++) { if (MarketData.code == item[i]) { MK[i] = MarketData; } } } //각 차트의 새로운 봉이 생성 function Main_OnBarAppended(ChartEx, nData) { //차트와 종목객체 전체가 수신이 완료된 상태이고 if (CT.length == Math.min(itemcnt,100) && MK.length == Math.min(itemcnt,100) ) { //새로운봉이 생성된 종목과 CT배열의 종목과 비교해 //같은 종목을 찾으면 미완성신호를 카운트 하는 배열변수의 동일방번호를 0으로 초기화 for (i = 0; i < Math.min(itemcnt,100); i++) { if (ChartEx.code == CT[i].code) { IS[i] = 0; } } } } //확장챠트에서 발생한 신호에 의해 주문을 넣는 단계 function Main_OnRiseIncompleteSignal(ChartEx, IncompleteSignal) { //차트와 종목객체 전체가 수신이 완료된 상태이고 if (CT.length == Math.min(itemcnt,100) && MK.length == Math.min(itemcnt,100) ) { //잔고세팅 A1.SetBalance(IncompleteSignal.code, nPosition); //buy신호 발생 if (IncompleteSignal.signalKind == 1) { //해당 종목의 방번호를 찾아서 for (i = 0; i < Math.min(itemcnt,100); i++) { if (ChartEx.code == CT[i].code && ChartEx.code == MK[i].code) { //카운트 1증가 IS[i] = IS[i]+1; //현재 미완성신호 발생하고 해당종목의 잔고가 0이고 첫번째 매수미완성신호이면 매수 if (A1.Balance.count == 0 && IS[i] == 1) { // 매수주문 A1.OrderBuy(IncompleteSignal.code, IncompleteSignal.count , MK[i].Ask(3), 0); //수량과 가격 저장 C1[i] = IncompleteSignal.price ;//최초매수가 CC[i] = 0.1;//하락시 가격 계산할 변수 VV[i] = (IncompleteSignal.price * IncompleteSignal.count)*0.1;//최초매수금의 10% } } } } //잔고에 수량이 있고 청산신호 발생하면 청산 if (A1.Balance.count > 0 && IncompleteSignal.signalKind == 2) { // 매도주문 A1.OrderSell(IncompleteSignal.code, A1.Balance.count, MK[i].Bid(3), 0); } } } function Main_OnUp*dateMarket(sItemCode, lUp*dateID) { //체결데이터 수신 업데이트 if (lUp*dateID == 20001) { //루프를 돌아 생성된 종목중 어떤 종목인지 파악 for (i = 0; i < Math.min(itemcnt,100); i++) { //어떤 배열방의 종목인지 찾았으면 if (sItemCode == MK[i]) { //해당 종목 잔고셋팅 A1.SetBalance(MK[i].code, 0); //잔고 수량이 있을때만 if (A1.Balance.count > 0) { //최초 매수가격의 2% 이상 상승하면 전량청산 if (MK[i].current >= C1[i]*1.02) { A1.OrderSell(MK[i].code,A1.Balance.count, MK[i].Bid(3), 0); } //하락시 매수할 가격이하이면 추가매수 if (MK[i].current <= Ci[i]*(1-CC[i])) { A1.OrderBuy(MK[i].code,Math.floor(VV[i]/MK[i].Ask(3)),MK[i].Ask(3), 0); CC[i] = CC[i]+0.1;//0.1을 추가해줌 } } } } } } 즐거운 하루되세요 > 자라도 님이 쓴 글입니다. > 제목 : 스팟은 활성화가 너무 안된거 같아요 ....... 답변까지 한달 > 전략실행해보고 수정하려고 해도 너무 오래걸려서 전략아이디어가 사라져 버려요 스팟식을 최초에 실행시키면 지정한 계좌의 모든 종목에 대해 내부적으로 종목객체를 생성하고 해당 종목들의 시세변화를 감시해 최초매입가의(2% : 목표가)수익시 매도 매수는 장종료후 일봉예비신호로 150000이후 주문 미체결시 취소후 다음날 장개시전에 다시주문 미체결되고 신호가의 2% 도달시 주문취소 매수체결후 하락시 추가매수(아래예시) 매도는 계좌잔고 및 실시간 가격변화로 최초매입가의 +2%수익시 매도 여기저기 짜집기를 하면서 만들다보니 필요없는 부분도 있는것 같읍니다. 불필요한건 삭제하고 간결하게 부탁드립니다. 아래식은 파워종목검색하여 일봉 예비신호시 종가매수주문입니다. 수정좀 부탁드립니다. 아울러 아래 내용을 추가하고자 하는데 부탁드립니다.스크립트 메세지에 에러는 없는데 주문이 안되네요 지정시간 150500 전에도 계속 주문이 나갑니다.(스팟실행시 이시간(150500) 이 되어야만 1번만 주문이 나가야 하는데) 타이머 이벤트에서 false => true 변경했는데도 거래가 될때마다 계속나가내요 수정할때 수량말고 금액기준으로(예 100만원 / 단가 = 수량) 주문 부탁합니다. 객체 차트,계좌는 지정했습니다. 1. 일봉예비신호로 주문을 넣고 채결이 안될시 다음날 장시작전에 주문을 다시내는 방법도 추가할수 있을까요? 2. 매수주문 넣고 체결이 안되고 목표수익가(신호가격의 +2%) 달성하면 매수주문취소하고, 목표가 미달성하고 신호가이하로 하락시는 매수유효 매수진입하여 보유한 종목이 2%수익이면 매도 하는 전략인데 매수진입하여 2%수익이 안되고 하락하여 손실시 처음매수한 가격( 1주가격이 2,000원)의 10% 하락(1주 가격이 1,800원 까지 하락시 처음에 진입한 금액의 10%(예로 100주* 2000원 이면 20만원의 10% 인 2만원) 2만원어치(1주가 격1,800 원을 2만원어치) 처음 매수가의 20% 하락한 1,600원 까지 하락시 20만원 의 10% 2만원 추가매수,,단 매도는 평균가격이 아닌 최초진입가인 2,000원 + 2% 수익에 전량매도 추가 매수 ((((여기서 추가매수는 똑같이 -10% , -20% , -30% -40% .....-90% 까지 계속하락시 똑같은 방법으로 추매는 진행합니다. 단 매도는 처음 진입가격 2000원 +2% 매도이고요)))) 추가매수한 평균 가격이 아닌 처음진입한 가격(2천원의 2%수익이 도달시매도) 3. 파워종목검색을 통한 차트신호시 매매이므로 잔고에 보유중인 종목이 진입신호가 발생시 종목무시 이렇게 가능할까요?(보유종목이면 2% 수익이 안난상태이므로 하락시 추가로 매수를 해야하므로 조건검색이 되어서 종목이 검색되어진다해도 진입신호무시) 계좌에 미보유한 종목은 차트의 매수 진입신호에 진입하고 매도는 차트의 매도신호가 나오더라도 2% 수익이 안되면 무시하고 무조건 2% 수익이 달성해야만 매도 /////////////////////////////////////////////////////////////////////// //스팟 시작할때 파워종목검색의 사용자검색조건 실행 var cond; function Main_OnStart() { Main.ReqPowerSearch("DMI스팟");//사용자검색조건명 지정 var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); cond = false; if (HHMMSS < 150500) { Main.SetTimer(1, 5000); } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && cond == false && HHMMSS >= 150500) { cond = true; var Incom = C1.GetIncompleteSignal(); } } //종목검색 완료(aItemList : 종목리스트), (nCount : 종목수) function Main_OnRcvItemList(aItemList, nCount) { // 확장챠트의 생성과 적용될 시스템의 세부 설정 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 1000, // 최대진입수량 20); // 최대진입횟수 //확장 챠트는 최대 25개까지만 가능 for (var i = 0; i < Math.min(nCount,100); i++) { //생성할 차트 셋팅 var C1 = new ReqChartItem(aItemList[i], 1, CHART_PERIOD_DAILY, 499,CHART_REQCOUNT_BAR,false, false); //차트에 적용할 시스템명 및 설정 var S1 = new SystemInfo("DMI스팟",YL_TYPE_NORMAL,null,TradeSet,null); Main.ReqChartEx(C1,S1); } } //확장챠트에서 발생한 신호에 의해 주문을 넣는 단계 function Main_OnRiseIncompleteSignal(ChartEx, IncompleteSignal) { //buy신호 발생 if (IncompleteSignal.signalKind == 1) { // 매수주문 A1.OrderBuy(IncompleteSignal.code, IncompleteSignal.count , IncompleteSignal.price, 0); } //Exitlong신호 발생 if (IncompleteSignal.signalKind == 2) { // 매도주문 A1.OrderSell(IncompleteSignal.code, IncompleteSignal.count , IncompleteSignal.price, 0); } }