커뮤니티

예스스팟 Q&A

영원한자유 님에 의해서 삭제되었습니다.

프로필 이미지
영원한자유
15
글번호 225458
답변완료

스팟에서 시스템의 손절,익절 신호 문의

안녕하세요. 스팟에서 확장차트객체에 이미 만들어진 시스템을 로딩해서 시스템 안에서 손절, 익절을 처리하려고 합니다. 시스템의 손절, 익절 신호도 스팟에서 OnRiseSignal 이벤트가 발생하나요?
프로필 이미지
브라이언7
2756
글번호 225456
답변완료

미청산 부분 엑셀추출

지표로 진입과 청산 수식을 짜서 적용하고 있습니다. 차트에서 진입과 청산이 이루어지면 엑셀로 데이터가 추출되는데 차트상 진입은 있고 청산이 이루어지지 않는 부분은 아예 그어떤것도 데이터가 추출되지 않아서요. 청산되지 않은 진입에 관하여 진입시기와 기준가 정도만 기록하여 "미청산"이라는 표기로 엑셀로 데이터 추출을 하고 싶은데 혹시 안되는 이유가 무엇인지 알 수 있을까요? 아래 수식 올려드립니다. var Log = new Logger(true); var gData = []; var gName; function Main_OnStart() { Log.log("===================== Main_OnStart ====================="); var i; try { for(i = 0 ; i < 10000000 ; i++) { var date = Chart1.GetSDate(1, i); var time = Chart1.GetSTime(1, i); var barDateTime = makeDateTimeStr(date, time, true); // Log.log('일시 : ', dateTime, ', ', i, '봉전 종가 = ', Chart1.GetClose(1, i)); if(Chart1.GetIndicatorData(지표명, 1, i) < 0) continue; var data = new Data(); data.read(i, barDateTime); gData.push(data); } } catch(e) { Log.log('stopped, i = ', i, ', e => ', e); } var code = Main.GetOrderCode(Chart1.GetCode(1)); Main.ReqMarketData(code, 0, 0); Log.log('Main_OnStart, code = ', code); } function Main_OnRcvMarketData(MarketData) { Log.log('Main_OnRcvMarketData, code = ', MarketData.code, ', name = ', MarketData.name); Excel1.Clear(1, 'A1', 'Z5000'); Excel1.SetArrayToRow(1, 'A1', ['기록봉', '종목', '분봉', '일시', '방향', '기준가', '고가/저가', '되돌림%', '벌어진값', '봉갯수', '청산가']); var name = MarketData.name; gName = name; var j = 2; for(i = gData.length - 1; i >= 0 ; i--) { var d = gData[i]; var isUpS = d.isUp ? '상승' : '하락'; // if(d.isEnter) Excel1.SetArrayToRow(1, 'A' + j, [d.barDateTime, name, d.barInterval + '분', d.dateTime, isUpS, '진입', '', '', '', '']); // else Excel1.SetArrayToRow(1, 'A' + j, [d.barDateTime, name, d.barInterval + '분', d.dateTime, isUpS, d.standard, d.base, d.retrace + '%', d.tick, d.barCnt, d.exit]); if(d.isEnter) continue; Excel1.SetArrayToRow(1, 'A' + j, [d.barDateTime, name, d.barInterval + '분', d.dateTime, isUpS, d.standard, d.base, d.retrace + '%', d.tick, d.barCnt, d.exit]); j++; } writeUnexitedEnters(j); } function Data() { this.isEnter = false; this.date; this.time; this.isUp = true; this.standard; this.base; this.retrace; this.tick; this.barCnt; this.exit; this.dateTime; this.barDateTime; this.barInterval; Data.prototype.read = function(i, barDateTime) { this.isEnter = Chart1.GetIndicatorData(지표명, 1, i) == 1; this.date = Chart1.GetIndicatorData(지표명, 2, i); this.time = Chart1.GetIndicatorData(지표명, 3, i); this.isUp = Chart1.GetIndicatorData(지표명, 4, i) == 1; this.standard = Chart1.GetIndicatorData(지표명, 5, i).toFixed(소수자릿수); this.base = Chart1.GetIndicatorData(지표명, 6, i).toFixed(소수자릿수); this.retrace = Chart1.GetIndicatorData(지표명, 7, i).toFixed(0); this.tick = Chart1.GetIndicatorData(지표명, 8, i).toFixed(소수자릿수); this.barCnt = Chart1.GetIndicatorData(지표명, 9, i); this.exit = Chart1.GetIndicatorData(지표명, 10, i).toFixed(소수자릿수); this.barInterval = Chart1.GetIndicatorData(지표명, 11, i); this.dateTime = makeDateTimeStr(this.date, this.time, false); this.barDateTime = barDateTime; this.barCnt = this.barCnt == -2 ? '미청산' : this.barCnt; Log.log(i, ', ', this.isEnter, ', ', this.dateTime, ', ', this.isUp, ', ', this.standard, ', ', this.base, ', ', this.retrace, ', ', this.tick, ', ', this.barCnt, ', ', this.exit); } } function makeDateTimeStr(date, time, isChartDate) { var year = Math.floor(date / 10000); var date1 = date - year * 10000; var month = Math.floor(date1 / 100); var day1 = date1 - month * 100; var time = isChartDate ? Math.floor(time / 1000000) : time; var hour = Math.floor(time / 100); var minute = time - hour * 100; var dateTime = year + "-" + month + "-" + day1 + " " + hour + ":" + minute; return dateTime; } function writeUnexitedEnters(row) { Log.log('writeUnexitedEnters, 미청산 추가'); var enters = []; for(var i in gData) { var d = gData[i]; if(d.isEnter) { var isExited = false; for(var j in gData) { var t = gData[j]; if(i == j) continue; if(d.dateTime == t.dateTime) isExited = true; } if(!isExited) enters.push(d); } } for(var i in enters) { var d = enters[i]; var isUpS = d.isUp ? '상승' : '하락'; var rowN = Number(row) + Number(i); var rowS = 'A' + rowN; Log.log('row = ', row, ', i = ', i, ', rowN = ', rowN, ', rowS = ', rowS); Excel1.SetArrayToRow(1, rowS, ['', gName, d.barInterval + '분', d.dateTime, isUpS, '미청산', '', '', '', '']); // Excel1.SetArrayToRow(1, 'A' + j, [d.barDateTime, gName, d.barInterval + '분', d.dateTime, isUpS, d.standard, d.base, d.retrace + '%', d.tick, '미청산', d.exit]); } } //------------------------------------ Util -------------------------------------------------- function DateUtil() { this.startTime = 900; this.endTime = 1521; this.searchEndTime = 1515; this.now = new Date(); DateUtil.prototype.format = function(value) { return ('00' + value).slice(-2); } DateUtil.prototype.getTimeString = function() { return this.format(this.now.getHours()) + ':' + this.format(this.now.getMinutes()) + ':' + this.format(this.now.getSeconds()); } DateUtil.prototype.isAfter = function(time) { var HHMM = this.now.getHours() * 100 + this.now.getMinutes(); return HHMM >= time; } DateUtil.prototype.isBefore = function(time) { var HHMM = this.now.getHours() * 100 + this.now.getMinutes(); return HHMM <= time; } DateUtil.prototype.isAfterSearchTime = function() { return this.isAfter(this.searchEndTime); } DateUtil.prototype.isInSearchTime = function() { return this.isAfter(this.startTime) && !this.isAfterSearchTime() && this.isBefore(this.endTime); } DateUtil.prototype.isAfterEndTime = function() { return this.isAfter(this.endTime); } DateUtil.prototype.isMarketStarted = function() { return this.isAfter(900); } DateUtil.prototype.getDate = function() { return '' + (this.now.getYear() + 1900) + this.format(this.now.getMonth() + 1) + this.format(this.now.getDate()); } } function Logger(isOn) { this.DEBUG = isOn; this.log = function() { if(this.DEBUG) Main.MessageLog(this.makeString(arguments)); } this.msg = function() { Main.MessageLog(this.makeString(arguments)); } this.makeString = function(args) { var str = new DateUtil().getTimeString() + ', '; for(var i = 0; i < args.length; i++) { var arg = args[i]; if( isFinite(arg) ) { arg = ('' + arg).replace(/₩B(?=(₩d{3})+(?!₩d))/g, ","); } str += arg; } return str; } }
프로필 이미지
열라빠른거북이
2715
글번호 225452
답변완료

전일 계좌조회를 하고 싶을때..

안녕하세요 1. 현재 NH선물을 이용하고 있습니다. 3월 15일이 오늘이고 3월 12일 전영업일 이었다면, 오늘의 총계정 자산가치는 A1.GetBalanceETCinfo(9)로 받아오면 되는데, 전날 3월 12일의 총계정 자산가치의 금액을 불러 들이고 싶을때 어떻게 적용해야할까요? 2. 예스글로벌에서 챠트 신호를 실시간으로 엑셀로 불러 들인다음, 예스트레이터 예스스팟으로 실시간으로 찍히는 엑셀신호를 읽어들여 국내주식을 주문해보려고 합니다. 예스글로벌 신호를 엑셀로 저장하는거 까지는 진행이 되었는데, 예스트레이더에서 엑셀을 부르는 과정에서 엑셀파일이 '읽기전용'으로 불러져서 실시간 신호를 읽을 수 없습니다. 엑셀에 실시간으로 찍히는 신호를 보고 예스트레이더로 주문을 어떻게 넣어야 하는지 궁금합니다. 미리 감사드립니다.
프로필 이미지
왕왕
2850
글번호 225450
답변완료

수식 문의드립니다.

안녕하세요 예스랭귀지에서 예스스팟으로 영역을 확대하려고 하는데... 이건 또 신세계네요 ㅠㅠ 예스랭귀지에 'PowerSearch1', 'PowerSearch2' 2개로 생성된 사용자검색조건 항목을 만들었습니다. 해당 이름으로 검색된 종목들을 3회 분할 매수하는 조건으로 예스스팟을 작성하고 싶습니다. - 1번 진입 : 50만원 - 2번 진입 : 10% 하락시 50만원 추가 진입 - 3번 진입 : 10% 추가 하락시 50만원 최종 진입 청산시에는 평균매수가 대비 100% 상승시 청산하는 조건으로 예스스팟 가이드 부탁드려도 될까요? 기본 가이드 제공해 주시면 수정해보면서 개선해 나가보겠습니다. 감사합니다 ^^
프로필 이미지
이엘성투
2827
글번호 225449
답변완료

확장차트 객체 식별 방법 또는 먼저 생성된 객체 삭제 방법

안녕하세요. 확장차트를 이용하여 신호를 발생시킵니다. 1번의 매수/청산이 완료된 이후 포지션이 없는 상태에서 가격이 많이 움직인 경우 종목을 변경하여 신규로 매매를 하려고 합니다. 그래서 기존의 확장 차트를 삭제하거나 확장 차트 삭제가 안되는 경우 신규로 확장 차트를 만들어 2개를 구분할 수 있는 방법이 있는지 문의 드립니다. 감사합니다.
프로필 이미지
richon
2691
글번호 225445
답변완료

장전 호가정보

선물의 getasktotalamount 같은 함수등으로 장 시작전 동시호가 호가잔량 정보도 받을 수 있나요?
프로필 이미지
괴델
2677
글번호 225444

괴델 님에 의해서 삭제되었습니다.

프로필 이미지
괴델
0
글번호 225443
답변완료

종목객체

종목객체 추가시 증권사: 하이투자증권 종목명: 나스닥종합 일간데이터: 사용 조회건수: 10 으로 설정하였는데 다음과 같은 오류메시지가 발생합니다. (첨부파일 참조) 에러메시지: 데이터가 존재하지 않습니다(10005) 현재가(TR1229)조회 응답 데이터의 COUNT 값이 0 입니다. 주간에 지난 밤의 나스닥 상승률(전일종가대비) 값을 계산하여 쓰려고 하는 상황인데, Spot 수식으로 위와 같은 에러없이 구현이 가능할까요?
프로필 이미지
괴델
2835
글번호 225442

캣피쉬 님에 의해서 삭제되었습니다.

프로필 이미지
캣피쉬
6
글번호 225441