커뮤니티
예스스팟 Q&A
답변완료
옵션 종목 자동으로 불러오기
안녕하세요.제가 지금 차트에 주종목을 연결선물챠트로 열고 참조 종목을 위클리 콜옵션 등가에서 5섯 행사가 불러오고위클리 풋옵션 등가에서 5섯 행사가 불러오고 있습니다.장중에 등락이 심할경우 등가가 바뀌기 때문에 등가가 2호가 이상 바뀌면 다시 위클리 콜옵션과 풋옵션을 다시 불러 옵니다.이렇게 수동으로 불러와서 번거러워서 이걸 예스스팟에서 자동으로 옵션을 불러오는 방법이 있을까요그리고 월요일물과 목요일물이 바뀌는것도 자동으로 바뀌게 가능할까요?예스스팟을 사용해 본적이 없어서 자세한 설명 부탁 드립니다.
2026-02-05
99
글번호 230374
답변완료
예스스팟 실행창에서
예스스팟 실행창에서종목이 올라왔을때종목명을 클릭하면해당 종목으로 화면이 연결되었으면 좋겠습니다종목뜰때마다 일일이 타자로 치는게 너무 번거롭네요
2026-02-05
104
글번호 230361
강심장 님에 의해서 삭제되었습니다.
2026-02-05
12
글번호 230359
답변완료
안녕하세요
안녕하세요 오랜만에 왔습니다옵션을 다시 하려고 하는데 잘 안되서 도움을 받고자 이렇게 글을 올려봅니다옵션의 진입 행사가 구하기아침 8시45분 선물기준 등가콜풋을 추출그두등가옵션 시가를 합한 양합구하기등가기준 행사가를 찾는다(예를 들면 선물이 781.30이다 이러면 증권사에서 지정하는 등가 기준 양합 콜이 등가가780이면 콜 시가는 12.50 풋780시가는 13.50 이러면 두개를 더한합 16 그러면 등가 기준780+16=796 그러니까 796이란 행사가는 없으니 795나 797두행사가의 저가를 저장그다음 9시10분 기준 등가 기준 옵션의 등가 기준 저가를 깨는놈 반대쪽으로 포지션 구축 단 먼저 구했던 변동폭(16) 기준 행사가 콜풋을 진입 이런식으로 전략을 짜려고 합니다전일 중심구하기1전일 주야통합 고가,저가, 종가,가져오며 전일 중심기록2 전일 중심을 (고가+저가)/2 하나랑(고가+저가+종가)/2 지표추가1.60분봉 adx 추가 스톡캐스틱 추가너무너무 감사합니다
2026-02-04
94
글번호 230325
답변완료
다시 한번 검토해 주시면 감사하겠습니다.
항상 노고에 머리숙여 감사드립니다.1.글번호 229848수식어 사용해 보니 다음날 분할매수가 되지 않터라구요그래서 챗-지피티을 이용해서 작성해 보았습니다.이게 맞는지 점검해 주시면 감사하겠습니다.위 조건이 힘드시면 2번 해당하는 수식어 부탁 드립니다.2.당일 분할매수 조건 말고, 보유종목들중에 마이너스 조건에 맞게 다음날 부터 분할매수 할수 있게끔 부탁드립니다.var timer5 = 2; var 매수금 = 500000; var OrderList = [];var MKList = [];var B = [], P = [], S = []; var SC = 1, req = 0;function Main_OnStart(){// 이전 상태 복원if (Main.GetUserValue("XB") != ""){B = JSON.parse(Main.GetUserValue("XB"));P = JSON.parse(Main.GetUserValue("XP"));S = JSON.parse(Main.GetUserValue("XS"));}OrderList = [];if (S.length > 0){OrderList = S;SC = 0;req = 0;Main.ReqMarketData(OrderList[req]);}else{SC = 1;Main.SetTimer(1, timer5 * 1000);Main.SetTimer(3, 1000);}}function Main_OnTimer(nEventID){var d = new Date();var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds();if (nEventID == 1 && HHMMSS > 090300 && HHMMSS < 151500){Main.ReqPowerSearch("test");}if (nEventID == 3 && MKList.length > 0){for (var i = 0; i < MKList.length; i++){Account1.SetBalance(MKList[i].code, 0);if (Account1.Balance.count <= 0) continue;var avg = Account1.Balance.avgUnitCost;var cur = MKList[i].current;if ((B[i] == 1 && cur <= avg * 0.97) ||(B[i] == 2 && cur <= avg * 0.95) ||(B[i] == 3 && cur <= avg * 0.92)){Account1.OrderBuy(MKList[i].code,Math.floor(매수금 / MKList[i].Ask(5)),MKList[i].Ask(5),0);B[i]++;Main.MessageList(MKList[i].code, "분할매수", B[i] - 1, "차");continue;}if (B[i] >= 4 && cur <= avg * 0.85){B[i] = -1;Account1.OrderSell(MKList[i].code,Account1.Balance.count,MKList[i].Bid(5),0);Main.MessageList(MKList[i].code, "분할완료 후 손절 -15%");continue;}if (cur >= avg * 1.11){B[i] = -1;Account1.OrderSell(MKList[i].code,Account1.Balance.count,MKList[i].Bid(5),0);Main.MessageList(MKList[i].code, "익절");continue;}}}}function Main_OnRcvItemList(altemList, nCount){Main.KillTimer(1);OrderList = [];for (var i = 0; i < nCount; i++){if (!IsStockInAccount(altemList[i]) && S.indexOf(altemList[i]) == -1){OrderList.push(altemList[i]);}}if (OrderList.length > 0){req = 0;Main.ReqMarketData(OrderList[req]);}else{Main.SetTimer(1, timer5 * 1000);}}/* ======================= MarketData 수신======================= */function Main_OnRcvMarketData(MarketData){for (var i = 0; i < MKList.length; i++){if (MKList[i].code == MarketData.code){MKList[i] = MarketData;return;}}MKList.push(MarketData);if (!IsStockInAccount(MarketData.code)){Account1.OrderBuy(MarketData.code,Math.floor(매수금 / MarketData.Ask(5)),MarketData.Ask(5),0);B.push(1);P.push(MarketData.current);S.push(MarketData.code);Main.MessageList(MarketData.code, "신규매수");}}function IsStockInAccount(stockCode){var cnt = Account1.GetTheNumberOfBalances();for (var i = 0; i < cnt; i++){Account1.SetBalance(i);if (Account1.Balance.code == stockCode)return true;}return false;}/* ======================= 스팟 종료======================= */function Main_OnClose(){for (var i = B.length - 1; i >= 0; i--){if (B[i] == -1){B.splice(i, 1);P.splice(i, 1);S.splice(i, 1);}}Main.SetUserValue("XB", JSON.stringify(B));Main.SetUserValue("XP", JSON.stringify(P));Main.SetUserValue("XS", JSON.stringify(S));}
2026-02-03
129
글번호 230297
지나리 님에 의해서 삭제되었습니다.
2026-02-02
5
글번호 230264
답변완료
예스스탁 과 조검 검색식 문의
안녕하세요. 예스스탁에서 익절 셋팅과 파위종목에 조건식 문의 드립니다.1. var 익절 = 0.95 (이렇게 하면 5% 익절로 알고 있습니다.) - 익절 10 % 이익보존 5% 이렇게 셋팅 가능 한가요 ? - 수익 10%에서 - 3% 빠지면 익절 이렇게도 셋팅이 가능 한가요 ? 2. 파워종목에서 조건식 - 분봉 기준 pivt 1 차 저항 위 와 2 차 저항 위 조건식은 어땋게 작성해야 하나요 ?미리 감사 인사 전합니다.늘 좋은 하루 보내세요.감사합니다.
2026-02-01
114
글번호 230231
스톰82 님에 의해서 삭제되었습니다.
2026-01-29
26
글번호 230195
답변완료
수식변경 부탁드립니다
var timer5 = 5; //5초var 매수금 = 10000;var 손절 = 0.95;var 익절 = 1.05;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("v-갭상에이격종합(1분)") } if (nEventID == 1) { //계좌보유종수 var num = Account1.GetTheNumberOfBalances(); //9시~15시 15분 사이 if (HHMMSS >= 90000 && HHMMSS < 150000) { //보유종목이 1개 이상 if (num >= 1) { //계좌평가금액이 스팟시작시 평가금액대비 5% 이상이면 전종목 전량매도 if (Account1.GetBalanceETCinfo(100) >= V1*1.06) { //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 >= 150100) { //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(1)),0,1); // Account1.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 = Account1.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account1.SetBalance(i); if (stockCode == Account1.Balance.code) { return true; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환}* 위 수식에 이익보존 3% 수식 추가 부탁드립니다.추신; var 손절 = 0.95;인데 잘못 오타 나와서 수정했습니다. 죄송합니다.
2026-01-29
143
글번호 230188
답변완료
문의_pointless
아래 수식은 차트 신호로 진입하고 청산하는 수식입니다.차트가 1회 진입, 1회 청산할 때는 문제가 없는데...최근 차트신호를 2회 이상의 진입과 청산으로 바꾼 후 사용해보니2회차부터는 진입하지 않습니다.차트신호에 따라 두번째 이상의 거래를 할 수 있게 수정해 주십시요.차트 진입명칭은 아래처럼 사용합니다. 1회차 진입명 "b1" 2회차부터 진입명 "b2"1회차 b1 진입, 2회차 이상은 b2 가 반복해서 진입합니다. ex) 5회 거래면 진입명이 b1,b2,b2,b2,b2 입니다.청산은 진입명과 연계되어 청산하고 있습니다.항상 고맙습니다.************************************************************************************************************************************************var UNum; var LNum;var CallCode; var CallPrice;var CC;var CallOrderCode;var CallExit;function Main_OnStart(){ CallExit = false; Main.SetTimer(1, 5000);}//차트에서 신호가 발생하면function Chart1_OnRiseSignal(Signal){ //해당 신호가 매수신호이면 if (Signal.signalKind == 1) { Main.MessageList("--------------------------------------------"); Main.MessageList("매수신호 발생"); //0.12 이하 중 가장 큰 가격을 가지는 종목을 찾음 //ATM위 행사가 갯수 UNum = Option1.uppersATM; //ATM아래 행사가 갯수 LNum = Option1.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 CallPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함 for (var i = -LNum; i <= UNum; i++) { //값이 0.12 이하이면 if (Option1.GetCurrent(0, i) <= 0.12) { //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장 CallPrice[i+LNum] = Option1.GetCurrent(0, i); //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장 CallCode[i+LNum] = Option1.GetATMCallRecent(i); //주의 //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터 //저장하도록 작성해야 함 } else//0.12 보다 크면 { //배열변수 CallPrice의 방번호 i+LNum에 -1 저장 CallPrice[i+LNum] = -1; //배열변수 CallCode의 방번호 i+LNum에 -1 저장 CallCode[i+LNum] = -1; } } //배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고 //CallCode의 동일 방번호의 값을 CallOrderCode에 저장 CC = -1; CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } Main.MessageList("--------------------------------------------"); Main.MessageList("콜종목코드:",CallOrderCode,"/콜현재가 :",CC); //콜옵션종목 매수 if (CallExit == false) { //지정가 Account1.OrderBuy(CallOrderCode, 1, Option1.GetAskByCode(CallOrderCode, 5), 0); //시장가 //Account1.OrderBuy(CallOrderCode, 1, 0, 1); } }//해당 신호가 청산신호면if (Signal.signalKind == 2){Account1.OrderSell(CallOrderCode, 1, Option1.GetBidByCode(CallOrderCode, 5), 0);}}
2026-01-26
128
글번호 230097