커뮤니티

예스스팟 Q&A

온고지신 님에 의해서 삭제되었습니다.

프로필 이미지
온고지신
2026-01-06
27
글번호 229618

관리자에 의해 예스랭귀지 QnA로 이동되었습니다.

프로필 이미지
파워
2026-01-04
12
글번호 229555
0
답변완료

야간옵션

아래수식은국내 옵션 주간 거래수식입니다. - 수식 내용 084500에 15분간 변동성 체크하고 090000 거래시작 익절,손절,151500에 endofday 작동 야간거래에 사용할 수 있도록 수정바랍니다. 1. 첫번째 요청수식 오후6시에 15분간 변동성 체크하고 오후6시15분 거래시작 익절,손절, 새벽2시 endofday 작동 2. 두번째 요청수식 오후10시에 15분간 변동성 체크하고 오후10시15분 거래시작 익절,손절, 새벽5시 endofday 작동항상 고맙습니다.*********************************************************************************************************************************var ID1, ID2, num1, num2;var Entry, CallCode, PutCode;var Xv1, Xv2;var HasExited; // 청산 후 재진입을 방지하는 변수var VolatilityCheckPassed; // 변동성 필터 확인 변수var InitialSum, FinalSum; // 양합 체크용 변수var a, b; // 양합var FilterTimePassed; // 필터 시간이 지났는지 여부var HasSoldCall = false; // 콜 옵션 매도 여부var HasSoldPut = false; // 풋 옵션 매도 여부function Main_OnStart() { Main.MessageList("Start"); Main.SetTimer(1, 5000); // 기존 타이머 설정 (5초 간격) Main.SetTimer(2, 1000); // 청산을 위한 타이머 설정 (1초 간격) Main.SetTimer(3, 1000); // 변동성 필터용 타이머 설정 (1초 간격) Entry = 0; // 초기 Entry 값 설정 HasExited = false; // 초기 재진입 가능 상태 VolatilityCheckPassed = false; // 변동성 필터 초기화 InitialSum = null; // 초기 양합값 초기화 FinalSum = null; // 최종 양합값 초기화 a = null; // a양합 초기화 b = null; // b양합 초기화 FilterTimePassed = false; // 필터 시간이 지났는지 여부}function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (nEventID == 3) { // 변동성 필터 확인 타이머 설정 if (HHMMSS == 084500) { // 084500 양합값 기록 a = Option1.GetCurrent(0, 0) + Option1.GetCurrent(1, 0); } else if (HHMMSS == 085959) { // 085959 양합값 기록 b = Option1.GetCurrent(0, 0) + Option1.GetCurrent(1, 0); if (a !== null && b !== null) { // 양합 차이 계산 var sumDifference = a - b; // 변동성 high 시장으로 판단 if (sumDifference >= 999) { Main.MessageList("Market volatility is low. Skipping trading."); VolatilityCheckPassed = true; // 변동성 필터 통과 } } } // 필터 시간이 지났는지 체크 if (HHMMSS >= 090000) { // 09시 00분부터 거래 가능 FilterTimePassed = true; } } if (nEventID == 1 && !HasExited) { // 재진입 방지 조건 추가 if (HHMMSS >= 084500 && HHMMSS < 150000) { // 0845부터 1500까지 if (FilterTimePassed) { var callPrice = Option1.GetCurrent(0, 0); var putPrice = Option1.GetCurrent(1, 0); var sum = callPrice + putPrice; var diff = Math.abs(callPrice - putPrice); // 진입 조건 if (Entry == 0 && sum <= 999 && diff <= 2.00 && !VolatilityCheckPassed) { Entry = sum; CallCode = Option1.GetATMCallRecent(0); PutCode = Option1.GetATMPutRecent(0); ID1 = Account1.OrderBuy(CallCode, 1, Option1.GetAsk(CallCode, 5), 0); ID2 = Account1.OrderBuy(PutCode, 1, Option1.GetAsk(PutCode, 5), 0); Xv1 = 1; Xv2 = 1; // 진입 성공 시 메시지 Main.MessageList("Trade entry successful. Market volatility is high. Trading ON."); } } if (Entry > 0 && HHMMSS < 151500 && (Option1.GetCurrent(CallCode)+Option1.GetCurrent(PutCode) >= Entry+999) || (Option1.GetCurrent(CallCode)+Option1.GetCurrent(PutCode) <= Entry-1.00)) { // 청산 로직 if (Xv1 > 0 && !HasSoldCall) { Account1.SetUnfill(num1); if (Account1.Unfill.count > 0) { Xv1 = Xv1 - Account1.Unfill.count; Account1.OrderCancel(num1); } Account1.OrderSell(CallCode, Xv1, Option1.GetBid(CallCode, 5), 0); HasSoldCall = true; // 콜 옵션 매도 완료 Main.MessageList("Call option sold."); } if (Xv2 > 0 && !HasSoldPut) { Account1.SetUnfill(num2); if (Account1.Unfill.count > 0) { Xv2 = Xv2 - Account1.Unfill.count; Account1.OrderCancel(num2); } Account1.OrderSell(PutCode, Xv2, Option1.GetBid(PutCode, 5), 0); HasSoldPut = true; // 풋 옵션 매도 완료 Main.MessageList("Put option sold."); } // Entry = 0; // 필요한 경우에만 주석 해제 Main.KillTimer(1); } } } // 1515에 청산 로직 추가 if (Entry > 0 && HHMMSS >= 151500) { Main.MessageList("Clearing orders"); if (Xv1 > 0 && !HasSoldCall) { Account1.SetUnfill(num1); if (Account1.Unfill.count > 0) { Xv1 = Xv1 - Account1.Unfill.count; Account1.OrderCancel(num1); } Account1.OrderSell(CallCode, Xv1, Option1.GetBid(CallCode, 5), 0); HasSoldCall = true; // 콜 옵션 매도 완료 Main.MessageList("Call option sold."); } if (Xv2 > 0 && !HasSoldPut) { Account1.SetUnfill(num2); if (Account1.Unfill.count > 0) { Xv2 = Xv2 - Account1.Unfill.count; Account1.OrderCancel(num2); } Account1.OrderSell(PutCode, Xv2, Option1.GetBid(PutCode, 5), 0); HasSoldPut = true; // 풋 옵션 매도 완료 Main.MessageList("Put option sold."); } Main.KillTimer(1); }}function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == ID1) { num1 = OrderResponse.orderNum; } if (OrderResponse.orderID == ID2) { num2 = OrderResponse.orderNum; }}
프로필 이미지
좌오비우오비
2026-01-03
58
글번호 229548
답변완료

문의 합니다...

26년 병오년 새해 복 많이 받으세요....^^*한가지 문의 사항이 있어서 질의 합니다..예스스팟에서 종목이 검색되어서 자동매매가 이루어지는데, 종목이 검출되면 전략실행차트와 종목이 연동이 되는 방법이 었는지요?
프로필 이미지
서민순
2026-01-02
58
글번호 229542

온고지신 님에 의해서 삭제되었습니다.

프로필 이미지
온고지신
2026-01-02
38
글번호 229514
답변완료

수식 부탁드립니다.

스팟문의는 예스스팟 Q&A에 올려 주시기 바랍니다.스팟은 기본적으로 저희가 완성식을 작성해 드리지는 않습니다.질문 올리신면 가이드식으로 답변드리며 답변받으시는데 시간이 좀 걸리실 수 있습니다.안녕하세요. 이 수식어에 분할 매수 수식어가 필요합니다. 부탁드립니다.보유종목 중 마이너스에 매수하기1차매수후- 신규종목2차매수- -3%3차매수- -5%4차매수- -8%+3% 전량익절보유종목중 2.3.4차에 도달하지 않았더라도 +3% 익절시 전량 매도var timer5 = 2; // 2초var 매수금 = 500000;var OrderList = [];var MKList = [];var req;function Main_OnStart(){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 > 090300 && HHMMSS < 151500){ Main.ReqPowerSearch("test");}if (nEventID == 2){ Main.ReqMarketData(OrderList[req]);}}function Main_OnRcvItemList(altemList, nCount){Main.KillTimer(1);OrderList = [];if (nCount >= 1){ if (MKList.length == 0) { OrderList = altemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (altemList[a] == MKList[b].code) { Add = false; } } if (Add == true && !IsStockInAccount(altemList[a])) { OrderList.push(altemList[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,2); // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(5)),MarketData.Ask(5),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; }}return false; }
프로필 이미지
치치야
2025-12-31
98
글번호 229512
답변완료

문의 드립니다

특정 종목으로 관심종목을 만들고 관심종목만으로 예스스팟으로 실시간 매매 가능한지요예를 들어 10종목으로 관심종목 만들고 파워검색으로 macd (12,26,9) 골든크로스 매수데드크로스 매도하는 파워검색식을 만들어 일정간격(10초)으로 해댱되는 관심종목(10종목)만예스스팟 매매 하고 싶은데 가능한 방법 문의 드립니다.
프로필 이미지
미래테크
2026-01-01
46
글번호 229497

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

프로필 이미지
다올
2025-12-26
1
글번호 229372
답변완료

엑셀 객체 사용 방법 및 챠트 데이터, 옵션 객체 사용법 등 문의

앞의 답변에 이어서 질문 드립니다.예스스팟 자체에서 만들어낸 데이터를 data manager를 통해(입력하여) 그것을 챠트에 같이 보거나 겹치게 한다던가 하면서 로직상으론 분석을 해서 그것으로 챠트상에는 신호가 나오도록 하고 그러고 싶었는데, 그것이 쉽지 않다면 떠오르는 대안으로는 생성한 데이터들을 엑셀로 보내서 엑셀에 저장하여 챠팅을 하고, 복잡한 분석도 하고, 그 결과값을 다시 예스스팟에서 읽어와서 주문에 활용하는 등의 흐름과 같이 우회적인 걸 생각하게 됩니다.그래서, 다음과 같은 질문 을 추가적으로 드리면,1) 예스스팟에서 엑셀 객체로 엑셀에 데이타를 양방향으로 처리 가능한 것 같은데, 예스스팟과 엑셀 파일이 연결된 상태에서 데이타메니저와 이 엑셀 파일이 DDE로 연결되서 data manager로 데이터를 입력해 줄 수 있을까요?2) chartex나 reqchartitem으로 data1 ~ dataN을 코드상에서 추가 변경 삭제가 가능할까요?3) 추가 삭제 등이 가능하다면, 개별 패널이 아니라 같은 패널에 중첩해서 볼 수 있게 설정할 수 있을까요? (예: data2, data3 등 추가시에 data1과 가격 공유하는 형태로)4) doc로 된 스팟 메뉴얼 뒷 부분에는 엑셀 객체를 사용한 참고용 코드가 없던데, 스팟에서 엑셀에 읽고 쓰는 것을 하는 예제를 얻을 수 있을까요?5) 월간옵션, 주간옵션을 선택하고자 할 경우, 스팟 코드 내에서 상품을 임의로 지정할 수 있나요? 대략 훑어본 바로는 월간, 주간(월), 주간(목)을 모두 보려면 객체를 미리 3개를 다 열어놓고 데이타에 접근해야 하는 걸까요?6) 특정 종목(예:옵션 특정 종목)의 현재 시고저종은 MarketData 객체로 받을 수 있는데, 1분이나 초단위 타임프레임으로의 과거(당일) 시세(특정 시간부터 원하는 시간까지)를 받는 것은 어떤 방법으로 할 수 있을까요? 예를 들어, 예스랭귀지에서 Close[10]과 같이 가져오려면 어떻게 가능할지, 그리고 하나씩이 아니라 아예 배열로 한꺼번에 가져올 수도 있는 지요? 7) 시세 데이타가 아니라 변수의 과거 데이타도 예스랭귀지처럼 조회하는 방법(예: tprice = (h + l + c)/3; 에서 tprice[3]을 조회하는 것처럼)이 예스스팟에서는 어떻게 해야할까요?8) 여러 옵션 종목들의 직전 봉 종가대비 현재가의 차이를 구하기 위해서 data1(예:선물)에서 새로운 봉이 발생했을 때 해당 복수의 옵션 종목들의 데이타들을 조회하려면 어떻게 해야 하나요? 메리 크리스마스 되세요~
프로필 이미지
온고지신
2025-12-24
70
글번호 229320
답변완료

조건검색 문의

조건검색식에서 환기종목 거를 수 있는 시스템은 없을까요?
프로필 이미지
사공하늘
2025-12-22
65
글번호 229270