커뮤니티

간단한 수식질문 드립니다.

프로필 이미지
doktor
2019-02-24 12:38:49
3092
글번호 224746
답변완료
안녕하세요 매수한 주식종목에 대해서 '최근 4시간동안의 저가'를 기준으로 로스컷을 하고 싶습니다. 오전 10시~12시에는 1시간 저가를 손절기준으로 잡고 12시 이후에는 4시간 저가를 손절기준으로 잡는 코드를 작성하려면 어떻게 해야 할까요??
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-03-13 17:12:10

안녕하세요 예스스탁입니다. 문의하신 내용은 현재 스팟에서는 아래코딩 구조로만 구현될것 같습니다. 스팟의 종목객체는 실시간으로 시세만 수신되므로 그 이전의 시간의 시세는 알수가 없습니다. 또한 특정 주기로 값을 제공하는 것은 아니므로 실시간으로 계속 시세를 받아 배열변수에 저장해 이용하기에는 무리가 있습니다. 일정시간 동안의 최저가를 알기위해서는 차트를 이용해는 방법이 가장 간단하지만 수식안에서 차트객체도 최대 100개만 생성할수 있습니다. 보유종목이 100개이상이면 사용할수 없습니다. 기본 흐름은 아래와 같습니다. 스팟이 시작하면 보유종목에 대해 60분봉 차트를 모두 열고 30초 단위로 차트의 마지막봉 저가가 그이전의 N개봉의 최저가 보다 작으면 해당 종목을 청산합니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 영문 업데이트가 게시판 금칙어라 Up*date와 같이 사이에 *이 들어가 있습니다. 삭제하시면 됩니다. var num,req; var CD = [];//보유종목의 종목코드를 저장할 배열변수 var CH = [];//차트를 저장할 배열변수 //스팟시작 function Main_OnStart() { //계좌 보유종목수 num = Account1.GetTheNumberOfBalances(); //차트객체 요청건수 저장할 변수 초기값 0 req = 0; //1종목이상이면 if (num >= 1) { //배열변수 CD의 0번배열부터 보유종목 종목코드를 순차적으로 저장 for (var i = 0; i < num; i++) { Account1.SetBalance(i); CD[i] = Account1.Balance.code; } //CD[0]번방의 종목부터 차트객체 요청(60분봉 20개봉) var ChartSet = new ReqChartItem(CD[req],60,CHART_PERIOD_MINUTE,20,CHART_REQCOUNT_BAR,false,StopSet); Main.ReqChartEx(ChartSet); } } function Main_OnRcvChartEx(ChartEx) { //수신된 차트가 요청한 종목이 맞으면 if (ChartEx.GetCode(1) == CD[req]) { //CH 배열변수의 동일배열번호에 차트객체 저장 CH[req] = ChartEx; //요청건수 1증가 req = req+1; //다음 종목 차트객체 요청 if (req < num) { var ChartSet = new ReqChartItem(CD[req],60,CHART_PERIOD_MINUTE,20,CHART_REQCOUNT_BAR,false,StopSet); Main.ReqChartEx(ChartSet); } else { Main.MessageList("보유종목 차트객체요청 끝"); //타이머 동작 Main.SetTimer(1, 30000); } } } //계좌 이벤트 function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) { //실행중 계좌에 새로운 종목이 추가되면 if (lUp*dateID == 30001) { //CD변수에 종목코드 추가하고 CD[req] = sItemCode; //차트객체 요청 var ChartSet = new ReqChartItem(CD[req],60,CHART_PERIOD_MINUTE,20,CHART_REQCOUNT_BAR,false,StopSet); Main.ReqChartEx(ChartSet); } } //타이머 동작 function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1) { //생성된 차트 전체 중에 for (var i = 0; i < CH.length; i++) { //동일 배열에 저장된 값이 ""가 아니고 if (CD[i] != "") { //10~12시 사이는 현재봉저가가 전봉저가보다 작고 //12시 이후에는 현재봉 젖가가 직전2개봉 최저가보다 작으면 if ((HHMMSS >= 100000 && HHMMSS < 120000 && CH[i].GetLow(1,0) < CH[i].GetLow(1,1)) || (HHMMSS >= 120000 && CH[i].GetLow(1,0) < Math.min(CH[i].GetLow(1,1),CH[i].GetLow(1,2),CH[i].GetLow(1,3)))) { //잔고셋팅 Account1.SetBalance(CH[i].GetCode(1),0); //잔고가 있으면 전량 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); //매도후 해당 종목코드는 리스트에서 삭제 CD[i] = ""; } } } } } } 즐거운 하루되세요 > doktor 님이 쓴 글입니다. > 제목 : 간단한 수식질문 드립니다. > 안녕하세요 매수한 주식종목에 대해서 '최근 4시간동안의 저가'를 기준으로 로스컷을 하고 싶습니다. 오전 10시~12시에는 1시간 저가를 손절기준으로 잡고 12시 이후에는 4시간 저가를 손절기준으로 잡는 코드를 작성하려면 어떻게 해야 할까요??