커뮤니티

예스스팟 Q&A

답변완료

앞에 답변해주신 코드

글번호 227426 앞에 답변해주신 코드를 [순위검색] 거래량 상위 10 종목검색만 설정하고8~9시 돌려보면 nxt에 해당하지 않은 종목 (예)고영 종목이 잡혀서 실제로는 매수가 되지 않습니다.문제점 해결할 방법이 있을까요?
프로필 이미지
허밍스타
2025-11-10
156
글번호 227801
답변완료

수정문의

아래 수식 중 당일 전량매도조건 부분을 2봉전 RSI(20)>60, 1봉전 RSI(20)<59.9, 0봉전 RSI(20)<59.9일때에만 매도하는 조건으로 수정 가능한지 문의드립니다. (15시15분에 전량매도 삭제) 또, 계좌잔고 수익이 +-5%일때 전량매도조건을 삭제하고 싶은데요.그리고, 단봉(5분봉)으로 자동매매 실험하여(1주 매수매도)장종료 후 5분봉차트에서 확인해보니 조건에 맞는 종목이 많이 매수가 안되는 현상이 있는데이는 왜그런지요. 또 이를 피하려면 어떻게 해야 하나요? var timer5 = 5; //5초 var 매수금 = 100000; var 손절 = 0.95; var 익절 = 1.10; var OrderList = []; var MKList = []; var req; function Main_OnStart() { //1번 타이머, 5초 Main.SetTimer(1, timer5*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; //스팟 시작시 잔고평가금액 V1 = Account1.GetBalanceETCinfo(100); } function Main_OnTimer(nEventID) { var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151500) { //종목검색 수행 Main.ReqPowerSearch("ZLMA+RSI-5분봉") } if (nEventID == 1) { //계좌보유종수 var num = Account1.GetTheNumberOfBalances(); //9시~15시 15분 사이 if (HHMMSS >= 90000 && HHMMSS < 151500) { //보유종목이 1개 이상 if (num >= 1) { //계좌평가금액이 스팟시작시 평가금액대비 5% 이상이면 전종목 전량매도 if (Account1.GetBalanceETCinfo(100) >= V1*1.10) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } else //아니면 개별종목 5%익절, -5%손절 체크 { //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account1.Balance.count > 0 && (Account1.Balance.current >= Account1.Balance.avgUnitCost*익절 || Account1.Balance.current <= Account1.Balance.avgUnitCost*손절)) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } } //15시 15분이후이면 if (HHMMSS >= 151500) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true && !IsStockInAccount(aItemList[a])) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { // 계좌에 없는 경우에만 매수 Account1.OrderBuy(MarketData.code,1,0,1); //Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(2)),0,1); // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(2)),MarketData.Ask(2),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다."); } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer5*1000); } } } function IsStockInAccount(stockCode) { // 계좌에 해당 종목이 있는지 확인하는 함수 var numberOfBalances = Account1.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account1.SetBalance(i); if (stockCode == Account1.Balance.code) { return true; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환 }
프로필 이미지
ksks
2025-11-10
214
글번호 227800
답변완료

선물에서 나온 신호로 kodex200을 매수하려고합니다. 스팟수식 부탁드립니다.

1. 차트에 코스피 200선물 띠우고 시험적용을 적용한 다음.. 2. 선물 8분봉에서 첫봉에 매수신호가 나오면(= 이때는 8시 53분) 이 매수신호를 kodex200 에 보내서 9시 동시호가에 바로 kodex200에 매수주문을 넣는 스팟 수식을 부탁드립니다.
프로필 이미지
제우스
2025-11-07
181
글번호 227773
답변완료

종목객체에서 전일봉 데이터를 조회하면

종목객체에서 전일봉 데이터를 조회하면전일부터 데이터가 받아져야하는데 전전일 데이터부터 받아집니다.예를 들어 GetPrevHigh(1) 의 경우 전일 고가를 받아와야하는데 전전일 고가를 받아옵니다.
프로필 이미지
ruach
2025-11-06
177
글번호 227691
답변완료

DB insert 오류 문의

예스스팟의 Database객체 insert 함수를 이용하여 거래내역을 DB에 기록하고 있습니다.DB insert 실행시 insert함수의 반복실행 텀이 아주 짧을 경우 내용이 뒤죽박죽 되어 insert되는 현상이 발생합니다. (이미지의 빨간 박스 참고)텀이 짧을 경우 매번 이런 현상이 나타나진 않고 정상적으로 insert될 때도 있습니다. (이미지의 초록색 박스 참고)insert 함수의 사용텀을 지연시키는 것 외에 다른 솔루션이 있을지 문의드립니다.
프로필 이미지
훈sys
2025-11-05
167
글번호 227680
답변완료

엑셀 불러오기

안녕하세요 예스스팟에서 엑셀을 실시간으로 불러오기 기능이 구현가능할까요?/제가 트레이딩뷰에서 구현한 매매시그널을 신호가 나오면 실시간으로 엑셀로 저장가능하고 그걸 스팟에서 불러와서 매매를 해보고싶은데(예를들면 엑셀에 buy , sell, 수량 등을 읽어오는 방식으로 엑셀에 저장)구현가능한지 검토 부탁드립니다.
프로필 이미지
소드노
2025-11-03
175
글번호 227590

민재77 님에 의해서 삭제되었습니다.

프로필 이미지
민재77
2025-11-03
38
글번호 227586
답변완료

신속하고 친절한 답변 감사 합니다.

Python 기반 강화학습 자동매매 시스템과의 연동과 관련하여 다음 몇가지 질문 드립니다. 1. 예스스팟의 JScript 환경에서 직접 적이거나 fetch 또는 XMLHttpRequest 와 같은 간접적인 방법에 의한 HTTP 지원여부 및 방안. 그리고 모의 거래시에도 DB와의 연동이 실거래와 마찬가지로 원활하게 사용 가능 한지요? 2. DB1 객체가 DSN을 통한 로컬 SQLite DB 연결 시 'Error initializing DB connection' 오류 발생 초기화에 실패 하였습니다. 특히 스크립트 로딩시점에 초기화 오류 원인에 대하여 해결 방안을 말씀해 주시면 감사 하겠습니다. 또한 초기화 실패가 원인 인줄은 잘 모르겠으나 가원장 체킹이 안 되고 있습니다. 3. 해외선물(MYMZ25) 거래에서 SQLite DB 연동과 관련한 예제를 하나 올려 주시면 정말 감사 하겠습니다.
프로필 이미지
너무조아
2025-11-01
219
글번호 227560
답변완료

대체거래소 시세주문

안내해주신 공지사항 (https://www.yesstock.com/community/notice-dtl?postNo=227137&searchType=&searchValue=)봤는데제가 사용하고 있는 코드는 종목객체속성도 없고 코드 예제에 속성도 좀 달라서 ......ordersell, orderbuy 이 부분만 고치면 되는가요?속성 부분이 예제랑 달라서... 수정 부탁드려요 ㅠ sor로 수정 하고 싶습니다-------------------아래 코드 -------------------------------var timer5 = 3; //3초var 매수금 = 1500000;var 손절 = 0.975;var 익절 = 1.15;var OrderList = [];var MKList = [];var req;function Main_OnStart(){ //1번 타이머, 5초 Main.SetTimer(1, timer5*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; //스팟 시작시 잔고평가금액 V1 = Account2.GetBalanceETCinfo(100); }function Main_OnTimer(nEventID){ var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 090459 && HHMMSS < 151900) { //종목검색 수행 Main.ReqPowerSearch("메인733511") } if (nEventID == 1) { //계좌보유종수 var num = Account2.GetTheNumberOfBalances(); //9시~15시 15분 사이 if (HHMMSS >= 090459 && HHMMSS < 151900) { //보유종목이 1개 이상 if (num >= 1) { //계좌평가금액이 스팟시작시 평가금액대비 5% 이상이면 전종목 전량매도 if (Account2.GetBalanceETCinfo(100) >= V1*1.10) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account2.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account2.Balance.count > 0) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count,0,1); } } } else //아니면 개별종목 5%익절, -5%손절 체크 { //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account2.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account2.Balance.count > 0 && (Account2.Balance.current >= Account2.Balance.avgUnitCost*익절 || Account2.Balance.current <= Account2.Balance.avgUnitCost*손절)) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count,0,1); } } } } } //15시 15분이후이면 if (HHMMSS >= 152900) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account2.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account2.Balance.count > 0) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count,0,1); } } } } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); }}function Main_OnRcvItemList(aItemList, nCount){ Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true && !IsStockInAccount(aItemList[a])) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); }}function Main_OnRcvMarketData(MarketData){ if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { // 계좌에 없는 경우에만 매수 //Account2.OrderBuy(MarketData.code,1,0,1); Account2.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); //Account2.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다."); } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer5*1000); } }}function IsStockInAccount(stockCode) { // 계좌에 해당 종목이 있는지 확인하는 함수 var numberOfBalances = Account2.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account2.SetBalance(i); if (stockCode == Account2.Balance.code) { return true; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환}
SOR주문
프로필 이미지
허밍스타
2025-10-29
231
글번호 227426
답변완료

수식 문의드림니다

선물신호를 받아 etf 종류인 코덱스 인버스 와 레버리지를 매수 하고 싶은데요선물신호가 매도 발생하면 코덱스인버스를 매수하고선물신호에서 매수가 발생하면 코덱스 레버리지를 매수 하는 스팟 수식 부탁드림니다* 주의점은 선물신호가 매수인 경우는 이익방향이 같기 때문에 코덱스레버리지를 같은 방향으로 매수하는 것이 맞는데요주식의 성질을 같는 코덱스인버스는 선물처럼 매도를 할수 없기 때문에선물에서 매도신호가 나오면 매수하는 것으로 수식 작성 부탁드림니다
선물신호ETF주문
프로필 이미지
mao
2025-10-27
227
글번호 227345