커뮤니티

예스스팟 Q&A

답변완료

옵션 4종목으로 양매도 구죽

예스트레더로 매매를 하면서 많이 배우고 있는데 예스스팟으로 양매도 구축을 해보고 싶습니다 양매도 식으로는 9시 1분에 콜 가격이 1.5보다 작은것중 제일 가까운값 1.4 1.3 1.2 이라면 1.4선택 9시 1분에 풋 가격이 1.5보다 작은것중 제일 가까운값 1.3 1.1 1.0 이라면 1.3선택 9시 1분에 콜 가격이 0.5보다 작은것중 제일 가까운값 0.4 0.3 0.2 이라면 0.4선택 9시 1분에 풋 가격이 0.5보다 작은것중 제일 가까운값 0.5 0.4 0.1 이라면 0.5선택 4종목을 선택하여 콜 1.4+0.4 = 1.8 풋 1.3+0.5 = 1.8 이렇게 4종목을 선택하여 양매도를 하고 싶습니다. 챠트를 띄워서 보고싶습니다.바쁘신데 부탁드립니다.
프로필 이미지
구름달
2019-04-10
2982
글번호 224798

스팟 문의드립니다

항상 감사드립니다. 수식 문의드리겠습니다. 차트상의 직전신호명이 Buy 이고 직전신호가격 보다 현재신호가격이 낮으면 이란 조건을 식으로 표현하려고 합니다. Signal.price를 이용하면 될꺼같은데 도움 부탁드립니다.
프로필 이미지
수다리
2019-04-10
3157
글번호 224795

문의 드립니다

수고 많으십니다 아래의 내용으로 예스스팟 전략을 작성하였는데 작동이 문제됩니다 하고자 하는 내용은 1. 차트 2개를 이용하여 미완성 신호가 동일방향에서 오면 매수,매도는 지정가로 하고, 청산은 시 장가로 전략을 작성코자 합니다. 2. 예스스팟 자체 전략으로 스톱로스를 걸고 싶은데 어떻게 하는 것인지 궁금합니다. Q&A와 예제를 이용하여 작성해 보았지만 아래 식으로 해도 에러메시지만 뜹니다 감사합니다 //======================================================================== 미완성신호 /*1. 봉 하나에서 발생하는 미완성 신호를 카운트 하여 처음 발생한 미완성 신호에 신호가 발생. 2.청산시에 미체결잔고를 셋팅하여 직전에 미체결된 주문이 있으면 주문을 취소하고 잔고의 수량만큼만 청산되게 작성했습니다. 3.모든 주문은 시장가 설정.기존에 작성한 주문가격은 모두 지정가로 현재가나 매수/매도 2호가 주문. 4.시험적용은 주문을 내지 않으므로 수식내용 중 주문과 관련된 내용은 시험적용에서는 동작을 하지 않습니다. 5 아래식 참고하셔서 수정/보완해 사용하시기 바랍니다. */ /*스크립트시작-----------------------------------------------------*/ var Position; var BID; var SID; var Snum; var Bnum; var InCnt; var Pb; var Ps; var pst; function Main_OnStart() { Main.MessageLog("시작"); Position = 0; pst=0; } function C1_OnBarAppended(nData) //봉완성(다음봉 시가수신) 새로운봉 시가 수신되면 직전봉이 완성됨 { InCnt = 0;//봉의 시가가 수신되면 미완성신호 카운트를 0으로 초기화 Main.MessageList("봉완성",InCnt); } function C1_OnRiseIncompleteSignal(IncompleteSignal)//미완성 신호 발생 { Main.MessageList("미완성신호 발생 - 종류 :"+IncompleteSignal.signalKind); if (InCnt == 0 && IncompleteSignal.signalKind == 1 && Position <= 0 && Chart2.GetOpenContracts()>=1 )//Position이 0이하에서 buy미완성 신호 발생하면 { pst=1; InCnt = InCnt+1//카운트는 1 Position = 1;//Position은 1 BID = A1.OrderBuy(MarketData1.code,Signal.count,MarketData1.Ask(1),2);//신호에서 발생한 수량으로 지정가로 매수주문 Main.MessageList("매수진입",Position); Pb = IncompleteSignal.price; //최초매수가 } if (pst==1 && InCnt == 0 && IncompleteSignal.signalKind == 2 && Position == 1 )//Position은 1이고 ExitLong 미완성 신호가 발생하면 { InCnt = InCnt+1;//카운트 증가 A1.SetUnfillOrderNumber(BNum);//BNum 번호에 대해 미체결객체 셋팅 if (A1.Unfill.count > 0 )//셋팅된 미체결객체의 수량이 0이상이면 취소주문 A1.OrderCancel(BNum); A1.SetBalanceIndex(Main.GetOrderCode(M1.code)); //선물 잔고 셋팅 if (A1.Balance.count > 0 && A1.Balance.position == 2)//선물 잔고수량이 0이상이고 잔고가 매수포지션이면 { A1.OrderSell(Main.GetOrderCode(M1.code), A1.Balance.count,0,1);//잔고의 수량 전량을 시장가로 모두 청산 Main.MessageList("매수청산실행",Position); pst=0; } } if (InCnt == 0 && IncompleteSignal.signalKind == 3 && Position >= 0 && Chart1.GetOpenContracts()>=1) )//Position이 0이상에서 Sell미완성 신호 발생하면 { pst=-1; InCnt = InCnt+1//카운트는 1 Position = -1;//Position은 -1 SID = A1.OrderSell(MarketData1.code,Signal.count,MarketData1.Ask(1),2);//신호에서 발생한 수량으로 지정가로 매도주문 Main.MessageList("매도진입",Position); Ps = IncompleteSignal.price; //최초매도가 } if (pst==-1 && InCnt == 0 && IncompleteSignal.signalKind == 4 && Position == -1 )//Position은 -1이고 ExitShort 미완성 신호가 발생하면 { pst=0; InCnt = InCnt+1;//카운트 증가 A1.SetUnfillOrderNumber(SNum);//SNum 번호에 대해 미체결객체 셋팅 if (A1.Unfill.count > 0) A1.OrderCancel(BNum);//셋팅된 미체결객체의 수량이 0이상이면 취소주문 A1.SetBalanceIndex(Main.GetOrderCode(M1.code));//선물 잔고 셋팅 if (A1.Balance.count > 0 && A1.Balance.position == 1)//선물 잔고수량이 0이상이고 잔고가 매도포지션이면 { A1.OrderBuy(Main.GetOrderCode(M1.code), A1.Balance.count,0,1);//잔고의 수량 전량을 시장가로 모두 청산(매수주문) Main.MessageList("매도청산실행",Position); } } } StopLoss(Pb-0.25); //자동으로 스톱로스 걸고 싶습니다 StopLoss(Ps+0.25); //자동으로 스톱로스 걸고 싶습니다 function Main_OnOrderResponse(OrderResponse) //주문응답 { if (Position == 1 && OrderResponse.orderID == BID)//Position이 1인 상태에서 주문응답아이디와 BID가 같으면 BNum에 주문번호 저장 { BNum = OrderResponse.orderNum; } if (Position == -1 && OrderResponse.orderID == SID)//Position이 -1인 상태에서 주문응답아이디와 SID가 같으면 SNum에 주문번호 저장 { SNum = OrderResponse.orderNum; } } /*스크립트끝-------------------------------------------------------*/
프로필 이미지
파도여
2019-04-09
3372
글번호 224792

new Date() 문의

현재 시각을 가져오는 방법이 예제에서 보니 var d = new Date() 이던데요, 1) 변수 d의 scope 특성상 다른 함수에서도 사용하려면 d를 글로벌변수로 선언하거나 각 변수별로 다시 선언하거나 해야할 거 같은데, d가 로컬변수로 사용되다면 함수를 종료할 때 자연히 소멸자가 불리워져서 메모리 문제가 없어질 거 같은데 맞나요? 2) 글로벌변수로 선언할 경우 delete d와 같은 문장으로 수동으로 소멸자를 불러해줘야 할 거 같은데, 문법이 맞는지요? 일단 아래 예1과 같이 해보았는데, 굳이 이렇게 할 필요없이 d를 각 함수의 local 변수로 선언해주고 예2와 같이 해도 문제가 없을까요? 동작은 되겠으나 메모리 문제가 발생하지 않는 깔끔한 방법을 선택하고자 합니다. 답변 부탁드립니다. //tdelay는 입력변수로 3이라고 입력하면 3초로 인식하도록 하였습니다. //예1 var d; function Main_OnStart() { d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); var MMM = d.getMilliseconds(); Main.MessageList(HHMMSS+"."+MMM); Main.SetTimer(1, tdelay*1000); delete d; } function Main_OnTimer(nEventID) { d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); var MMM = d.getMilliseconds(); Main.MessageList(HHMMSS+"."+MMM);tdelay Main.MessageList(tdelay+"초경과"); delete d; } //예1 function Main_OnStart() { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); var MMM = d.getMilliseconds(); Main.MessageList(HHMMSS+"."+MMM); Main.SetTimer(1, tdelay*1000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); var MMM = d.getMilliseconds(); Main.MessageList(HHMMSS+"."+MMM);tdelay Main.MessageList(tdelay+"초경과"); }
프로필 이미지
온고지신
2019-04-08
3369
글번호 224783

종목객체의 종목을 코드에서 변경 가능한가요?

ReqMarketData는 TR방식으로 시세정보를 요청하는거 같네요. 그래서 계속 실시간에 호가나 현재가에 반응하는 걸 만들려고 하는데, 그건 MarketData 객체에 종목을 지정해놓고 timer를 걸어서 데이타를 조회하는 방법 밖엔 없나요? 그리고, 옵션 실시간 데이타에 반응하는 로직을 구현하려고 하는데 종목이 매일 동적으로 바뀌어야해서 사전에 미리 MarketData객체에 종목코드를 고정시키지 못하고 코드상에서 변수로 바꾸고 싶은데, 메소드를 봐서는 불가능해 보이네요. 어떻게 하면 내가 원하는 종목의 실시간 데이터를 코드상에서 지정하고 받을 수 있나요? (ReqMarketData는 TR방식으로 요청하는 것 같으니 이 방식 말고 다른 방법이 필요합니다) 그리고, OnUp*dateMarekt에 대한 설명을 찾아보니 종목객체를 설정하면 현재가, 호가, 예상체결가(이건 현재준비중이라고 메뉴얼에 되어있던데 아직도 준비중인지요?)가 변할때마다 이 이벤트함수가 불리워지는거 같은데, 위에 문의한 것처럼 종목객체의 종목을 수동으로 말고 코드상에서 바꿀 수 있는 방법은 없을지요?
프로필 이미지
온고지신
2019-04-08
3405
글번호 224782

검색 이후 자동매매 부탁드립니다.

매번 많은 도움 감사드립니다. 아래 조건 만족하는 수식 작성 부탁드립니다. 1. 파워종목 검색 (검색식 명: test)으로 10분마다 종목 검색 2. 검색된 종목들을 거래량으로 sorting 3. sorting 된 결과에서 상위 3종목 매수주문 --> 3종목 모두 매수한 뒤, 이후 검색조건 만족하는 종목이 나올 시, 거래량 상위 3종목 추가 선정하여 매수, 단, 이전에 매수한 종목과 안겹치게... 4. 검색된 종목들에서 매도신호 발생 시(yeslang. 전략명: temp) 매도주문 (미완성 봉에서 매도주문) 5. 장종료 동시호가 때, 남은 잔량 전부 매도 꼭 부탁드립니다. 감사합니다.
프로필 이미지
adino30
2019-04-07
3501
글번호 224781
답변완료

옵션객체에서 호가데이터 값을 얻는 방법 문의

GetAsk나 GetBid류의 함수를 쓰면 될 거는 같은데 이건 매번 조회하는 방법일테니 timer를 사용해서 해야할 거 같은데 timer를 사용하지 않고 하려면 main에서 onupdat emarket()을 사용하면 되나요? onupdat emarket()를 사용하려면 reqmarketdata()로 호출할 종목에 대해서 실시간에 데이타가 onupdat emarket()으로 도달하나요? 그리고 request한 것을 중지시키거나 수정하고 싶을땐 어떤 함수를 사용하면 되나요? 그리고, 메인에서 reqmarketdata()를 사용하는 방법과 MarketData 객체를 사용해서 실시간 데이터를 받는 방법은 어떤 차이가 있는지요? 15초 60회 규칙에 문제 일으키지 않고 서버나 피씨에도 부하가 적절한 방법을 고르고자 해서 보다 구체적인 이해를 위해 질문드립니다. 그리고, 각각의 사용법에 대한 예제를 찾아보는 중인데, 예를 들어, 장 시작전 및 장 중에 호가, 호가잔량, 총잔량, 총건수 및 체결시세(현재가)를 보고자 하는 종목들을 가격의 크기 여부에 따라 교체해 가면서 시세를 받고자 하는 코드를 작성하고자 합니다. 참고할 만한 글 번호 또는 예제 부탁드립니다.
프로필 이미지
온고지신
2019-04-05
3352
글번호 224777

문의드립니다.

해외 선물신호로 해외옵션 매수신호 내려면 어떻게 해야 하나요. 국내 옵션수식은 예제로 몇개 있는데요. 해외옵션 수식은 다른가요?
프로필 이미지
잡다백수
2019-04-05
3355
글번호 224776
답변완료

옵션 객체 및 날짜 객체 사용

예스트레이더에서 옵션 객체 사용과 관련하여 문의 드립니다. (예스글로벌의 옵션 객체는 메소드나 멤버가 달라서 별도로 문의 드리겠습니다) Q1) 장 시작 전에 옵션 예상체결가 또는 호가상황을 파악하여 원하는 조건(적정 가격 또는 적정 그릭스값)을 갖는 종목을 선정하여 장 시작 전에 미리 주문을 낼 수 있을까요? 즉, 체결데이타로 시세가 들어오기 전에도 조회할 수 있는 데이타가 있을런지요? Q2) lowersATM과 uppersATM의 값은 언제 갱신되나요? 즉, 전일 지수가 급격히 급등락 하였을 경우 새로운 종목이 생길 수 있는때, 당일 장 시작 전에 새로 생성된 종목에 체결데이타가 들어오지 않아도 값이 미리 바뀌는 지 아니면 장 시작해서 새로운 종목에 체결이 들어올 때 갱신되는 지 등 정확한 시점에 대해 문의드립니다. Q3) GetImpliedVolatility()와 Volatility멤버의 결과값은 각각 어떤 변동성을 반환시키는 것인지요? 그리고 내재변동성을 계산할때 입력값이 여러개 있는데 그것들을 별도로 입력시키는 방법은 없는지요? 그리고 GetImpliedVolatility()가 두개가 있던데 이것은 ATM중심으로 순번을 입력하는 것이든 아니면 특정 종목 코드를 입력하는 것이든 동일한 종목이라면 결과값은 같겠지요? 그렇다면, 추정컨데 신규종목코드는 9시가 아니라 그 전에 생성되니 lowersATM값이나 ATM에서의 순번째 등도 그 전에 반영될 거 같은데 맞나요? Q4) 장 시작 전에 미리 원하는 범위의 시세를 가질 것으로 예상되거나(예상체결가) 호가의 상태를 보고자 할 경우 1) 전 종목의 옵션 호가 시세를 처리할 수 있도록 하거나 2) 지수 또는 선물의 예상가격을 근거로 대상이 될 법한 종목들을 MarketData객체에 설정하여 데이타를 받아야 할 것 같은데 1번의 경우 아직 예스스팟으로 하는 방법을 모르겠고 2번으로 하고자 할 경우에도 제한된 수의 종목에 대해서도 장 시작 전에 데이타를 조회할 수 있어야 하는데 가능한지요? 1번으로 하는 방법이 가능하다면, 그 방법을, 그리고 1번은 불가능하다고 하는 경우 2번으로 하는 예제 부탁드립니다. Q5) 과거에 올려주신 예들을 찾아보다보니 new date()를 사용하면 날짜 객체를 사용해서 밀리세컨드까지 현재시각을 계속 조회할 수 있는 것 같던데, new에 의해서 생성한 날짜 객체는 별도로 delete를 시켜준다거나 해야하는지, 아니면 함수나 객체 내에서 사용이 끝나면 자동으로 소멸되는지요? 자동으로 소멸되지 않고 계속 동일 변수에 new를 반복해 주다보면 메모리 에러가 나지 않을까 하는 염려 때문에 main에서 한번만 생성시켜 준 후 글로벌 변수로 해서 다른 데서는 생성시키지 말고 메소드들로 조회만 해야할 지, 사용 방법에 대한 가이드 부탁드립니다.
프로필 이미지
온고지신
2019-04-05
3428
글번호 224773
답변완료

주문에러에 따른 주문수정 문의

안녕 하세요 스팟 사용중에 문의사항 있습니다. 주문 후 에러발생시 OnOrderResponse 에서 OrderResponse.error 로 에러내용은 확인 가능하지만 OrderResponse.orderNum 이나 OrderResponse.orderID 등 어떤 정보도 나오지 않아 어느 주문의 에러인지 파악할 수 가 없어 주문수정을 할 수 가 없습니다. 주문 후 에러발생시(OrderResponse.orderKind 값 -1) 어느 주문의 에러인지 알 수 있는 방법이 있을까요? orderNum 또는 orderID 만 알 수 있어도 수정주문이 가능 할텐데요.
프로필 이미지
흰수염고래
2019-04-04
3187
글번호 224772