커뮤니티
예스스팟 Q&A
답변완료
트레일링스탑을 위한 최고가 유지
안녕하세요. 주식을 매수한 후 트레일링 스탑을 구현하는 프로그램을 구현하려고 합니다.예제를 보면 매수 이후 최소수익 이후 최고가 대비 하락비율로 처리하게 되던데,최고가 이후 2~3일 후에 해당 하락율에 도달한다면, 오버나이트하여 예스트레이더를 재시작하게 되는데 최고가를 어떻게 처리해야 하나요?
2026-06-09
149
글번호 232329
답변완료
질문드립니다.
안녕하세요. 아래 식은 현재가격 1.0 이하의 콜/풋 옵션 중 가장 높은 가격의 종목을 선정하는 식입니다. 그런데, 현재가격 1.0이하가 아니라 매도호가 1.0이하의 콜/풋 옵션 중에 가장 높은 가격의 종목을 선정하는 식도 가능한가요? 매번 큰 도움 주셔서 감사드립니다. /*스크립트시작-----------------------------------------------------*/var UNum; var LNum;var CallCode; var CallPrice;var PutCode; var PutPrice;var CC; var PP;var CallOrderCode; var PutOrderCode;//차트에서 신호가 발생하면function Chart1_OnRiseSignal(Signal){ //해당 신호가 매수신호이면 if (Signal.signalKind == 1) { Main.MessageList("--------------------------------------------"); Main.MessageList("매수신호 발생"); //1.0이하 중 가장 큰 가격을 가지는 종목을 찾음 //ATM위 행사가 갯수 UNum = Option.uppersATM; //ATM아래 행사가 갯수 LNum = Option.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 CallPrice = new Array(UNum+LNum+1); //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함 for (var i = -LNum; i <= UNum; i++) { //값이 1.0이하이면 if (Option.GetCurrent(0, i) <= 1.0) { //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장 CallPrice[i+LNum] = Option.GetCurrent(0, i); //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장 CallCode[i+LNum] = Option.GetATMCallRecent(i); //주의 //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터 //저장하도록 작성해야 함 } else//1.0보다 크면 { //배열변수 CallPrice의 방번호 i+LNum에 -1 저장 CallPrice[i+LNum] = -1; //배열변수 CallCode의 방번호 i+LNum에 -1 저장 CallCode[i+LNum] = -1; } } //풋종목 찾기 //풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로 //for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함 for (var ii = -UNum; ii <= LNum; ii++) { //ii단계 풋종목이 1.0이하이면 if (Option.GetCurrent(1, ii) <= 1.0 ) { //해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장 PutPrice[ii+UNum] = Option.GetCurrent(1, ii); //해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장 PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else //1.0보다 크면 { //배열변수 PutPrice의 방번호 ii+LNum에 -1 저장 PutPrice[ii+UNum] = -1; //배열변수 PutCode의 방번호 ii+LNum에 -1 저장 PutCode[ii+UNum] = -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] } } //배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고 //PutCode의 동일 방번호의 값을 PutOrderCode에 저장 PP = -1; PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } Main.MessageList("--------------------------------------------"); Main.MessageList("콜종목코드:",CallOrderCode,"/콜현재가 :",CC); Main.MessageList("풋종목코드:",PutOrderCode,"/풋현재가 :",PP); //콜옵션종목 매수 Account1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 2), 1);//콜옵션종목 매수 Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 2), 1); }}
2026-06-05
153
글번호 232288
흰수염고래 님에 의해서 삭제되었습니다.
2026-06-02
24
글번호 232251
답변완료
자동매매식 좀 부탁드립니다.
이거는 자동 매매식이고여........ 밑에 충족하는 종목을 매수 할수 있도록 좀 부탁드립니다.var timer5 = 2; //5초var 매수금 = 100000;var OrderList = [];var MKList = [];var req;function Main_OnStart(){ //1번 타이머, 1초 Main.SetTimer(1, timer5*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = [];}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 > 090000 && HHMMSS < 151500) { //종목검색 수행 Main.ReqPowerSearch("최고") } 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 반환}--위에자동매매식에서 밑에 종목 검색에 일치하는 종목매수 자동매매식 좀 알려주세요 그리고 밑에식에 충족시 1분봉 100억이 들어오고 매도까지 다른 종목은 매수 안되게 부탁드립니다<밑에식은 3가지가 동시 돌파하는 종목 검색식입니다.>input : P(3);var : cnt(0),sum(0),mav(0);Array : CC[100](0);if Bdate != Bdate[1] and(DayOfWeek(Bdate)< DayOfWeek(Bdate[1]) orDateToJulian(Bdate) >= DateToJulian(Bdate[1])+7) Then{for cnt = 99 downto 1{ CC[cnt] = CC[cnt-1];}}CC[0] = C;if CC[P-1] > 0 Then{sum = 0;for cnt = 0 to P-1{sum = sum+CC[cnt];}mav = sum/P;if L < mav and CrossUp(C,mav) ThenFind(1);}2input : P(10);var : cnt(0),sum(0),mav(0);Array : CC[100](0);if Bdate != Bdate[1] and(DayOfWeek(Bdate)< DayOfWeek(Bdate[1]) orDateToJulian(Bdate) >= DateToJulian(Bdate[1])+7) Then{for cnt = 99 downto 1{ CC[cnt] = CC[cnt-1];}}CC[0] = C;if CC[P-1] > 0 Then{sum = 0;for cnt = 0 to P-1{sum = sum+CC[cnt];}mav = sum/P;if L < mav and CrossUp(C,mav) ThenFind(1);}3input : P(3);var : cnt(0),sum(0),mav(0);Array : CC[100](0);if Bdate > Bdate[1]+30 Then{for cnt = 99 downto 1{ CC[cnt] = CC[cnt-1];}}CC[0] = C;if CC[P-1] > 0 Then{sum = 0;for cnt = 0 to P-1{sum = sum+CC[cnt];}mav = sum/P;if L < mav and CrossUp(C,mav) ThenFind(1);}
2026-05-30
587
글번호 232222
wkri 님에 의해서 삭제되었습니다.
2026-05-28
55
글번호 232182
답변완료
글번호 232034 관련해서
안녕하세요.일전에 글번호 232034 관련해서 코딩자료 수정해 주셨는 데 매수가 되지 않네요. 수고스럽겠지만 다시 한번 수고 좀 부탁 드립니다.늘 수고에 감사드립니다.
2026-05-27
136
글번호 232162
아미고 님에 의해서 삭제되었습니다.
2026-05-22
71
글번호 232137
victor 님에 의해서 삭제되었습니다.
2026-05-22
22
글번호 232136
답변완료
여러종목 주문시 오류(연결끊김)
안녕하세요. Spot으로 거래시, 특정시간에 보유 주식비중이 너무 높으면 보유주식의 일정 %를 일괄매도 하는 logic을 사용하고 있습니다.아래와 같이 for문을 사용하여 보유주식을 매도 중인데,보유종목이 많은 경우(현재 보유종목 약 30개) 주문도중 접속이 끊기면서 매도가 되지 않는 경우가 종종 있습니다.(특히 오늘처럼 지수가 크게 올라가거나, 내려가는 경우 접속이 끊기는 것 같습니다.)for (var i=0; i<List.length; i ++) var orderN = 매각수량; A1.OrderSell(종목, orderN, 0, 1);위와 같이 여러종목 일괄 매도시 오류가 나지 않기 위해서는 어떻게 수식을 조정해야 할지요?만약, 매도 주문 중간에 1초 정도 pause하는 경우 주문 안정성이 증가한다면 해당 방법 안내 부탁드립니다.
2026-05-21
178
글번호 232127
답변완료
건의 사항입니다.
몇년동안 유진 예스트레이더을 이용중인 유저입니다.사용하면서 불편한 점을 말씀드려 앞으로의 예스스팟이 좀 더 많은 사랑을 받는 프로그램이 되었으면 합니다.1. 틱차트 오류 문제- 1년 안에 최근들어 틱차트를 통한 전략을 실행시키면 종종 차트 오류 안내 메세지(메세지 내용은 '지정되지 않은 오류' 라고 뜸)가 뜨면서 프로그램이 종료됩니다. 이는 껐다가 켜도 마찬가지이며 프로그램을 다시 지우고 실행시켜 틱차트 전략을 실행시키지 말아야 프로그램이 작동됩니다. 이러한 부분은 예외처리나 오류 처리를 예외 처리를 해주어 프로그램이 닫히지 않도록 처리해주면 좋을 것 같습니다.2. 예스 스팟 지표 문제- 윈도우 10 환경에서 예스스팟 전략중 확장차트의 지표를 설정할 때 바로 적용이 되지 않고 다시 지표설정을 눌러야 변경되는 버그가 아직도 해결되지 않고 있습니다. 한번에 할 수 있는 일을 두번해야하니 불변함을 느껴 꼭 개선해 주었으면 합니다.분명 일이 많고 고생많으시지만 이러한 부분은 저만 느끼는 부분이 아닐 것 같아 이렇게 글을 올립니다.
2026-05-21
187
글번호 232109