커뮤니티

수식부탁드립니다.

프로필 이미지
jju77
2018-05-10 11:00:18
3201
글번호 224390
답변완료
파워종목검색 이용해서 매수매도 프로그램을 만들고싶은데 예스스팟에서 막혀서 가이드 수식좀 부탁드립니다.. 가이드수식을 기초로 수정보완하면서 공부할수 있도록 꼭 답변 부탁드립니다 --------------------------------------------------------------------------- 3분주기로 파워종목검색을 이용해서 나오는 종목들의 1분주기 차트를 생성하고 'test'라는 전략을 이용, 매수신호를 받아서 매수한다 test전략에서 종목당 최대 2회 매수가 진행된다.(진입후 하락시 1회만 추가매수) (1차매수 2차매수 모두 전략에서 매수신호가 나오도록 만들었습니다) 1회당 매수금액은 100만원으로 한다 당일 5개의 종목이 1회라도 매수되었다면 더이상 신규종목 매수를 하지않는다. (하루에 5개동목 이하만 매매한다.) 보유종목 평균가 대비 3%수익에 수익실현한다 (지정가) 매도주문시 그 종목에 미체결 매수주문이 있다면 취소한다.
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2018-05-10 17:52:58

안녕하세요 예스스탁입니다. 아래 내용 참고하셔서 수정보완해서 사용하시기 바랍니다. 예스스팟의 수식 답변은 단순히 식작성의 흐름 참고용입니다. 동작등을 모두 테스트하고 답변을 드리는 내용이 아닙니다. 기본 개념은 아래와 같습니다. 1. 3분 주기로 타이머를 실행해 종목검색 2. 종목검색후 검색된 종목에 대해 차트를 생성 ( 차트생성시 이전에 생성된 종목은 제외) 3. 생성된 차트에서 매수신호가 발생하면 주문(순차적으로 5개 종목만 체크) 4. 매수주문된 종목에서 매도 발생하면 해당 종목 미체결모두 취소, 잔고수량만큼만 매도 5. 1분 간격으로 잔고체크해 차트신호 발생종목에 대해 3%이상 수익난 종목은 미체결모두 취소, 잔고수량만큼만 매도 var ReqChart; var Searchs = []; var ExChart = []; var Order = []; //스팟시작 function Main_OnStart() { //검색용 1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); //잔고체크용 2번 타이머 실행, 1분 Main.SetTimer(2, 60000); } //타이머 동작 function Main_OnTimer(nEventID) { //1번 타이머 동작(차트생성해 매수신호 발생한 종목이 5종목이 되면 수행하지 않음) if (nEventID == 1 && Order.length < 5) { //1번 타이머 중지 Main.KillTimer(1); //파워종목검색실행 Main.ReqPowerSearch("#단타1"); Main.MessageList("ReqPowerSearch"); } //2번 타이머 동작하고 차트생성해 매수신호 발생한 종목이 있을때 if (nEventID == 2 && Order.length > 0 ) { //보유종목 전체에 대해 하나씩 잔고셋팅 for (var i1 = 0; i1 < Order.length; i1++) { //잔고셋팅 Account1.SetBalance(Order[i1],0); //3%이상 수익중이면 if (Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.03) { //전체 미체결수 var num3 = Account1.GetTheNumberOfUnfills(); //전체 미체결객체를 하나하나 셋팅해서 for (var i3 = 0; i3 < num3; i3++) { Account1.SetUnfill(i3); //미체결내역 중 신호발생 종목과 같은 종목인것을 찾아 if (Account1.Unfill.count > 0 && Account1.Unfill.code == ChartEx.GetCode(1)) { //취소주문 Account1.OrderCancel(Account1.Unfill.orderNum); } } //보유수량을 현재가로 매도 Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,Account1.Balance.current,0); //매도가 수행됐으면 -1로 처리해 추후 매수나 매도가 되지 않게 함 Order[i] = -1; } } } } //종목검색완료 function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("OnRcvItemList : ",nCount); //검색된 종목이 1종목 이상이면 if (aItemList.length > 0) { //검색된 종목 중 기존에 차트를 생성한 종목은 제외하고 //Searchs 배열변수에 종목코드 저장 Searchs = []; if (ExChart.length == 0) { Searchs = aItemList; } else { for (var i1 = 0; i1 < aItemList.length; i1++) { var add = true; for (var i2 = 0; i2 < ExChart.length; i2++) { if (aItemList[i1] == ExChart[i2].GetClose(1,0)) { add = false; } } if (add == true) { Searchs.push(aItemList[i1]); } } } //차트 요청갯수는 0으로 초기화 ReqChart = 0; if (Searchs.length > 0) { //생성된 차트가 100개 이하이면 if (ExChart.length < 100) { //차트설정 1분주기,5000개봉 var setChart = new ReqChartItem(Searchs[ReqChart],1,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false); //시스템설정 var setSystem = new SystemInfo("test"); Main.ReqChartEx(setChart,setSystem); Main.MessageList("ReqChartEx"); } else { //차트객체가 100개만 제공되므로 100이상 만들어지지 않게 함 Main.MessageList("차트객체생성제한"); } } else { //차트 생성할 종목이 없으면 타이머 실행해 3분후 재검색 //1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); } } else { //검색된 종목이 없으면 타이머 실행해 3분후 재검색 //1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); } } function Main_OnRcvChartEx(ChartEx) { //요청한 차트가 만들어 지면 if(ChartEx.GetCode(1) == Searchs[ReqChart]) { Main.MessageList("OnRcvChartEx : ",ChartEx.GetCode(1)); //배열변수 ExChart의 ReqChart번호 공간에 차트객체 저장 ExChart[ReqChart] = ChartEx; //차트요청건수는 1증가 ReqChart = ReqChart+1; if (ReqChart < Searchs.length) { //생성된 차트가 100개 이하이면 if (ExChart.length < 100) { //차트설정 1분주기,5000개봉 var setChart = new ReqChartItem(Searchs[ReqChart],1,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false); //시스템설정 var setSystem = new SystemInfo("test"); Main.ReqChartEx(setChart,setSystem); } else { //차트객체가 100개만 제공되므로 100이상 만들어지지 않게 함 Main.MessageList("차트객체생성제한"); } } else { //차트 모두 만들어지고 3분후에 다시 종목검색실행 //1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); } } } //차트신호 발생 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생하면 //순서대로 Order배열변수에 5개 종목 저장 if (Signal.signalKind == 1 && Order.length < 5) { var add = true; for (var i = 0; i < ExChart.length; i++) { if (ChartEx.GetCode(1) == Order[i]) { var add = false; } } if (add == true) { Order.push(ChartEx.GetCode(1)); } } //신호 발생한 종목이 //Order배열변수에 있는 종목이면 주문실행 for (var i = 0; i < Order.length; i++) { if (ChartEx.GetCode(1) == Order[i]) { //매수신호 발생 100만원 현재가로 매수 if (Signal.signalKind == 1) { Account1.OrderBuy(Order[i],Math.floor(1000000/ChartEx.GetClose(1,0)), ChartEx.GetClose(1,0),0); } //매도신호 발생 if (Signal.signalKind == 2) { //전체 미체결 갯수 var num1 = Account1.GetTheNumberOfUnfills(); //전체 미체결객체를 하나하나 셋팅해서 for (var i = 0; i < num1; i++) { Account1.SetUnfill(i); //미체결내역 중 신호발생 종목과 같은 종목인것을 찾아 if (Account1.Unfill.count > 0 && Account1.Unfill.code == ChartEx.GetCode(1)) { //취소주문 Account1.OrderCancel(Account1.Unfill.orderNum); } } //잔고셋팅 Account1.SetBalance(ChartEx.GetCode(1), 0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //보유수량을 현재가로 매도 Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,ChartEx.GetClose(1,0),0); } //매도가 수행됐으면 -1로 처리해 추후 매수나 매도가 되지 않게 함 Order[i] = -1; } } } } 즐거운 하루되세요 > jju77 님이 쓴 글입니다. > 제목 : 수식부탁드립니다. > 파워종목검색 이용해서 매수매도 프로그램을 만들고싶은데 예스스팟에서 막혀서 가이드 수식좀 부탁드립니다.. 가이드수식을 기초로 수정보완하면서 공부할수 있도록 꼭 답변 부탁드립니다 --------------------------------------------------------------------------- 3분주기로 파워종목검색을 이용해서 나오는 종목들의 1분주기 차트를 생성하고 'test'라는 전략을 이용, 매수신호를 받아서 매수한다 test전략에서 종목당 최대 2회 매수가 진행된다.(진입후 하락시 1회만 추가매수) (1차매수 2차매수 모두 전략에서 매수신호가 나오도록 만들었습니다) 1회당 매수금액은 100만원으로 한다 당일 5개의 종목이 1회라도 매수되었다면 더이상 신규종목 매수를 하지않는다. (하루에 5개동목 이하만 매매한다.) 보유종목 평균가 대비 3%수익에 수익실현한다 (지정가) 매도주문시 그 종목에 미체결 매수주문이 있다면 취소한다.
프로필 이미지

jju77

2018-05-11 10:26:23

자세한 주석까지 정말 감사드립니다 . 수식설명에 제가 실수로 빠트린 부분이 있는데 전략에서 2차매수까지 진행된 후 하락하면 매도신호가 하나 나옵니다 ... 매도신호시 시장가로 전량 매도하는 부분만 추가부탁드립니다 감사합니다! > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식부탁드립니다. > 안녕하세요 예스스탁입니다. 아래 내용 참고하셔서 수정보완해서 사용하시기 바랍니다. 예스스팟의 수식 답변은 단순히 식작성의 흐름 참고용입니다. 동작등을 모두 테스트하고 답변을 드리는 내용이 아닙니다. 기본 개념은 아래와 같습니다. 1. 3분 주기로 타이머를 실행해 종목검색 2. 종목검색후 검색된 종목에 대해 차트를 생성 ( 차트생성시 이전에 생성된 종목은 제외) 3. 생성된 차트에서 매수신호가 발생하면 주문(순차적으로 5개 종목만 체크) 4. 매수주문된 종목에서 매도 발생하면 해당 종목 미체결모두 취소, 잔고수량만큼만 매도 5. 1분 간격으로 잔고체크해 차트신호 발생종목에 대해 3%이상 수익난 종목은 미체결모두 취소, 잔고수량만큼만 매도 var ReqChart; var Searchs = []; var ExChart = []; var Order = []; //스팟시작 function Main_OnStart() { //검색용 1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); //잔고체크용 2번 타이머 실행, 1분 Main.SetTimer(2, 60000); } //타이머 동작 function Main_OnTimer(nEventID) { //1번 타이머 동작(차트생성해 매수신호 발생한 종목이 5종목이 되면 수행하지 않음) if (nEventID == 1 && Order.length < 5) { //1번 타이머 중지 Main.KillTimer(1); //파워종목검색실행 Main.ReqPowerSearch("#단타1"); Main.MessageList("ReqPowerSearch"); } //2번 타이머 동작하고 차트생성해 매수신호 발생한 종목이 있을때 if (nEventID == 2 && Order.length > 0 ) { //보유종목 전체에 대해 하나씩 잔고셋팅 for (var i1 = 0; i1 < Order.length; i1++) { //잔고셋팅 Account1.SetBalance(Order[i1],0); //3%이상 수익중이면 if (Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.03) { //전체 미체결수 var num3 = Account1.GetTheNumberOfUnfills(); //전체 미체결객체를 하나하나 셋팅해서 for (var i3 = 0; i3 < num3; i3++) { Account1.SetUnfill(i3); //미체결내역 중 신호발생 종목과 같은 종목인것을 찾아 if (Account1.Unfill.count > 0 && Account1.Unfill.code == ChartEx.GetCode(1)) { //취소주문 Account1.OrderCancel(Account1.Unfill.orderNum); } } //보유수량을 현재가로 매도 Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,Account1.Balance.current,0); //매도가 수행됐으면 -1로 처리해 추후 매수나 매도가 되지 않게 함 Order[i] = -1; } } } } //종목검색완료 function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("OnRcvItemList : ",nCount); //검색된 종목이 1종목 이상이면 if (aItemList.length > 0) { //검색된 종목 중 기존에 차트를 생성한 종목은 제외하고 //Searchs 배열변수에 종목코드 저장 Searchs = []; if (ExChart.length == 0) { Searchs = aItemList; } else { for (var i1 = 0; i1 < aItemList.length; i1++) { var add = true; for (var i2 = 0; i2 < ExChart.length; i2++) { if (aItemList[i1] == ExChart[i2].GetClose(1,0)) { add = false; } } if (add == true) { Searchs.push(aItemList[i1]); } } } //차트 요청갯수는 0으로 초기화 ReqChart = 0; if (Searchs.length > 0) { //생성된 차트가 100개 이하이면 if (ExChart.length < 100) { //차트설정 1분주기,5000개봉 var setChart = new ReqChartItem(Searchs[ReqChart],1,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false); //시스템설정 var setSystem = new SystemInfo("test"); Main.ReqChartEx(setChart,setSystem); Main.MessageList("ReqChartEx"); } else { //차트객체가 100개만 제공되므로 100이상 만들어지지 않게 함 Main.MessageList("차트객체생성제한"); } } else { //차트 생성할 종목이 없으면 타이머 실행해 3분후 재검색 //1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); } } else { //검색된 종목이 없으면 타이머 실행해 3분후 재검색 //1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); } } function Main_OnRcvChartEx(ChartEx) { //요청한 차트가 만들어 지면 if(ChartEx.GetCode(1) == Searchs[ReqChart]) { Main.MessageList("OnRcvChartEx : ",ChartEx.GetCode(1)); //배열변수 ExChart의 ReqChart번호 공간에 차트객체 저장 ExChart[ReqChart] = ChartEx; //차트요청건수는 1증가 ReqChart = ReqChart+1; if (ReqChart < Searchs.length) { //생성된 차트가 100개 이하이면 if (ExChart.length < 100) { //차트설정 1분주기,5000개봉 var setChart = new ReqChartItem(Searchs[ReqChart],1,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false); //시스템설정 var setSystem = new SystemInfo("test"); Main.ReqChartEx(setChart,setSystem); } else { //차트객체가 100개만 제공되므로 100이상 만들어지지 않게 함 Main.MessageList("차트객체생성제한"); } } else { //차트 모두 만들어지고 3분후에 다시 종목검색실행 //1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); } } } //차트신호 발생 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생하면 //순서대로 Order배열변수에 5개 종목 저장 if (Signal.signalKind == 1 && Order.length < 5) { var add = true; for (var i = 0; i < ExChart.length; i++) { if (ChartEx.GetCode(1) == Order[i]) { var add = false; } } if (add == true) { Order.push(ChartEx.GetCode(1)); } } //신호 발생한 종목이 //Order배열변수에 있는 종목이면 주문실행 for (var i = 0; i < Order.length; i++) { if (ChartEx.GetCode(1) == Order[i]) { //매수신호 발생 100만원 현재가로 매수 if (Signal.signalKind == 1) { Account1.OrderBuy(Order[i],Math.floor(1000000/ChartEx.GetClose(1,0)), ChartEx.GetClose(1,0),0); } //매도신호 발생 if (Signal.signalKind == 2) { //전체 미체결 갯수 var num1 = Account1.GetTheNumberOfUnfills(); //전체 미체결객체를 하나하나 셋팅해서 for (var i = 0; i < num1; i++) { Account1.SetUnfill(i); //미체결내역 중 신호발생 종목과 같은 종목인것을 찾아 if (Account1.Unfill.count > 0 && Account1.Unfill.code == ChartEx.GetCode(1)) { //취소주문 Account1.OrderCancel(Account1.Unfill.orderNum); } } //잔고셋팅 Account1.SetBalance(ChartEx.GetCode(1), 0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //보유수량을 현재가로 매도 Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,ChartEx.GetClose(1,0),0); } //매도가 수행됐으면 -1로 처리해 추후 매수나 매도가 되지 않게 함 Order[i] = -1; } } } } 즐거운 하루되세요 > jju77 님이 쓴 글입니다. > 제목 : 수식부탁드립니다. > 파워종목검색 이용해서 매수매도 프로그램을 만들고싶은데 예스스팟에서 막혀서 가이드 수식좀 부탁드립니다.. 가이드수식을 기초로 수정보완하면서 공부할수 있도록 꼭 답변 부탁드립니다 --------------------------------------------------------------------------- 3분주기로 파워종목검색을 이용해서 나오는 종목들의 1분주기 차트를 생성하고 'test'라는 전략을 이용, 매수신호를 받아서 매수한다 test전략에서 종목당 최대 2회 매수가 진행된다.(진입후 하락시 1회만 추가매수) (1차매수 2차매수 모두 전략에서 매수신호가 나오도록 만들었습니다) 1회당 매수금액은 100만원으로 한다 당일 5개의 종목이 1회라도 매수되었다면 더이상 신규종목 매수를 하지않는다. (하루에 5개동목 이하만 매매한다.) 보유종목 평균가 대비 3%수익에 수익실현한다 (지정가) 매도주문시 그 종목에 미체결 매수주문이 있다면 취소한다.
프로필 이미지

예스스탁 예스스탁 답변

2018-05-11 13:44:04

안녕하세요 예스스탁입니다. 수식내에 매도신호 발생시 매도주문하는 내용(수식하단부)이 있습니다. Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,ChartEx.GetClose(1,0),0); 현재는 현재가로 지정가 주문입니다. 아래와 같이 변경하시면 시장가 주문이 됩니다. Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); 즐거운 하루되세요 > jju77 님이 쓴 글입니다. > 제목 : Re : Re : 수식부탁드립니다. > 자세한 주석까지 정말 감사드립니다 . 수식설명에 제가 실수로 빠트린 부분이 있는데 전략에서 2차매수까지 진행된 후 하락하면 매도신호가 하나 나옵니다 ... 매도신호시 시장가로 전량 매도하는 부분만 추가부탁드립니다 감사합니다! > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식부탁드립니다. > 안녕하세요 예스스탁입니다. 아래 내용 참고하셔서 수정보완해서 사용하시기 바랍니다. 예스스팟의 수식 답변은 단순히 식작성의 흐름 참고용입니다. 동작등을 모두 테스트하고 답변을 드리는 내용이 아닙니다. 기본 개념은 아래와 같습니다. 1. 3분 주기로 타이머를 실행해 종목검색 2. 종목검색후 검색된 종목에 대해 차트를 생성 ( 차트생성시 이전에 생성된 종목은 제외) 3. 생성된 차트에서 매수신호가 발생하면 주문(순차적으로 5개 종목만 체크) 4. 매수주문된 종목에서 매도 발생하면 해당 종목 미체결모두 취소, 잔고수량만큼만 매도 5. 1분 간격으로 잔고체크해 차트신호 발생종목에 대해 3%이상 수익난 종목은 미체결모두 취소, 잔고수량만큼만 매도 var ReqChart; var Searchs = []; var ExChart = []; var Order = []; //스팟시작 function Main_OnStart() { //검색용 1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); //잔고체크용 2번 타이머 실행, 1분 Main.SetTimer(2, 60000); } //타이머 동작 function Main_OnTimer(nEventID) { //1번 타이머 동작(차트생성해 매수신호 발생한 종목이 5종목이 되면 수행하지 않음) if (nEventID == 1 && Order.length < 5) { //1번 타이머 중지 Main.KillTimer(1); //파워종목검색실행 Main.ReqPowerSearch("#단타1"); Main.MessageList("ReqPowerSearch"); } //2번 타이머 동작하고 차트생성해 매수신호 발생한 종목이 있을때 if (nEventID == 2 && Order.length > 0 ) { //보유종목 전체에 대해 하나씩 잔고셋팅 for (var i1 = 0; i1 < Order.length; i1++) { //잔고셋팅 Account1.SetBalance(Order[i1],0); //3%이상 수익중이면 if (Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.03) { //전체 미체결수 var num3 = Account1.GetTheNumberOfUnfills(); //전체 미체결객체를 하나하나 셋팅해서 for (var i3 = 0; i3 < num3; i3++) { Account1.SetUnfill(i3); //미체결내역 중 신호발생 종목과 같은 종목인것을 찾아 if (Account1.Unfill.count > 0 && Account1.Unfill.code == ChartEx.GetCode(1)) { //취소주문 Account1.OrderCancel(Account1.Unfill.orderNum); } } //보유수량을 현재가로 매도 Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,Account1.Balance.current,0); //매도가 수행됐으면 -1로 처리해 추후 매수나 매도가 되지 않게 함 Order[i] = -1; } } } } //종목검색완료 function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("OnRcvItemList : ",nCount); //검색된 종목이 1종목 이상이면 if (aItemList.length > 0) { //검색된 종목 중 기존에 차트를 생성한 종목은 제외하고 //Searchs 배열변수에 종목코드 저장 Searchs = []; if (ExChart.length == 0) { Searchs = aItemList; } else { for (var i1 = 0; i1 < aItemList.length; i1++) { var add = true; for (var i2 = 0; i2 < ExChart.length; i2++) { if (aItemList[i1] == ExChart[i2].GetClose(1,0)) { add = false; } } if (add == true) { Searchs.push(aItemList[i1]); } } } //차트 요청갯수는 0으로 초기화 ReqChart = 0; if (Searchs.length > 0) { //생성된 차트가 100개 이하이면 if (ExChart.length < 100) { //차트설정 1분주기,5000개봉 var setChart = new ReqChartItem(Searchs[ReqChart],1,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false); //시스템설정 var setSystem = new SystemInfo("test"); Main.ReqChartEx(setChart,setSystem); Main.MessageList("ReqChartEx"); } else { //차트객체가 100개만 제공되므로 100이상 만들어지지 않게 함 Main.MessageList("차트객체생성제한"); } } else { //차트 생성할 종목이 없으면 타이머 실행해 3분후 재검색 //1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); } } else { //검색된 종목이 없으면 타이머 실행해 3분후 재검색 //1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); } } function Main_OnRcvChartEx(ChartEx) { //요청한 차트가 만들어 지면 if(ChartEx.GetCode(1) == Searchs[ReqChart]) { Main.MessageList("OnRcvChartEx : ",ChartEx.GetCode(1)); //배열변수 ExChart의 ReqChart번호 공간에 차트객체 저장 ExChart[ReqChart] = ChartEx; //차트요청건수는 1증가 ReqChart = ReqChart+1; if (ReqChart < Searchs.length) { //생성된 차트가 100개 이하이면 if (ExChart.length < 100) { //차트설정 1분주기,5000개봉 var setChart = new ReqChartItem(Searchs[ReqChart],1,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false); //시스템설정 var setSystem = new SystemInfo("test"); Main.ReqChartEx(setChart,setSystem); } else { //차트객체가 100개만 제공되므로 100이상 만들어지지 않게 함 Main.MessageList("차트객체생성제한"); } } else { //차트 모두 만들어지고 3분후에 다시 종목검색실행 //1번 타이머 실행, 3분(180초) Main.SetTimer(1, 180000); } } } //차트신호 발생 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생하면 //순서대로 Order배열변수에 5개 종목 저장 if (Signal.signalKind == 1 && Order.length < 5) { var add = true; for (var i = 0; i < ExChart.length; i++) { if (ChartEx.GetCode(1) == Order[i]) { var add = false; } } if (add == true) { Order.push(ChartEx.GetCode(1)); } } //신호 발생한 종목이 //Order배열변수에 있는 종목이면 주문실행 for (var i = 0; i < Order.length; i++) { if (ChartEx.GetCode(1) == Order[i]) { //매수신호 발생 100만원 현재가로 매수 if (Signal.signalKind == 1) { Account1.OrderBuy(Order[i],Math.floor(1000000/ChartEx.GetClose(1,0)), ChartEx.GetClose(1,0),0); } //매도신호 발생 if (Signal.signalKind == 2) { //전체 미체결 갯수 var num1 = Account1.GetTheNumberOfUnfills(); //전체 미체결객체를 하나하나 셋팅해서 for (var i = 0; i < num1; i++) { Account1.SetUnfill(i); //미체결내역 중 신호발생 종목과 같은 종목인것을 찾아 if (Account1.Unfill.count > 0 && Account1.Unfill.code == ChartEx.GetCode(1)) { //취소주문 Account1.OrderCancel(Account1.Unfill.orderNum); } } //잔고셋팅 Account1.SetBalance(ChartEx.GetCode(1), 0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //보유수량을 현재가로 매도 Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,ChartEx.GetClose(1,0),0); } //매도가 수행됐으면 -1로 처리해 추후 매수나 매도가 되지 않게 함 Order[i] = -1; } } } } 즐거운 하루되세요 > jju77 님이 쓴 글입니다. > 제목 : 수식부탁드립니다. > 파워종목검색 이용해서 매수매도 프로그램을 만들고싶은데 예스스팟에서 막혀서 가이드 수식좀 부탁드립니다.. 가이드수식을 기초로 수정보완하면서 공부할수 있도록 꼭 답변 부탁드립니다 --------------------------------------------------------------------------- 3분주기로 파워종목검색을 이용해서 나오는 종목들의 1분주기 차트를 생성하고 'test'라는 전략을 이용, 매수신호를 받아서 매수한다 test전략에서 종목당 최대 2회 매수가 진행된다.(진입후 하락시 1회만 추가매수) (1차매수 2차매수 모두 전략에서 매수신호가 나오도록 만들었습니다) 1회당 매수금액은 100만원으로 한다 당일 5개의 종목이 1회라도 매수되었다면 더이상 신규종목 매수를 하지않는다. (하루에 5개동목 이하만 매매한다.) 보유종목 평균가 대비 3%수익에 수익실현한다 (지정가) 매도주문시 그 종목에 미체결 매수주문이 있다면 취소한다.