커뮤니티

예스스팟 Q&A

답변완료

부탁드립니다.

차트 C1 에서 이동평균선 이 var1 = ema(c,P1) 이라면 아래의 조건에 맞도록 예스스팟 수식을 작성해 주시면 감사 하겠습니다. 1. 피라미딩 허용안함. 2. C 가 var1을 crossup 후 N 초를 초과하도록 C 가 var1을 crossdown 하지 아니하면 매수 3. C 가 var1을 crossdown 후 N 초를 초과하도록 C 가 var1을 crossup 하지 아니하면 매도
프로필 이미지
너무조아
2016-02-19
2185
글번호 223822
답변완료

양매도 문의

안녕하세요~ 항상 답변 감사히 받고 있습니다. 아래식은 선물매도시 콜풋양매도, 선물매도청산시 양매도 청산 스팟식입니다. 다음과 같이 변경하고 싶습니다. 당일 양매도 전략인데요 ㅁㅁ진입 - 선물매도신호 --> 스팟 콜,풋 양매도 ---> 12시 이전이고 포지션 평균수익이 0.1P 이상이면 ---> 스팟 콜, 풋 양매도 1SET 추가 ---> 이후 12시 이전이고 포지션 평균수익(총수익/4계약) 0.13P 이상이면 ---> 스팟 콜, 풋 양매도 1SET 추가(최대3SET) *첫진입, 추가진입하는 옵션의 종목은 항상 설정값(0.7~2.9) 사이에 있음 ㅁㅁ청산 - 1SET 양매도 진입후 포지션 평균수익이 -0.15P이상이면 양매도 청산(2계약 청산) - 2SET 양매도 진입후 포지션 평균수익이 -0.10P이상이면 양매도 청산(4계약 청산) - 3SET 양매도 진입후 포지션 평균수익이 -0.05P이상이면 양매도 청산(6계약 청산) - 선물매도청산 신호시 옵션 모든 포지션 청산 - 한번 청산하면 당일 재진입 없음 ㅁ 코딩 실력이 많이 부족하오니 주석도 부탁드립니다. 진심으로 미리 감사합니다. ============================================================================ var Start = 0; var BC; var BP; var Bcount; var SC; var SP; var Scount; var upv = 2.9; var dnv = 0.7; function Main_OnStart() { Start = 0; Main.MessageList("시작",Start); } function Chart1_OnRiseSignal(Signal) { //차트에서 매도신호 발생 if (Signal.signalKind == 3) { //ATM위 행사가 갯수 var UNum = Option.uppersATM; //ATM아래 행사가 갯수 var LNum = Option.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 var CallCode = new Array(UNum+LNum+1); //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 var CallPrice = new Array(UNum+LNum+1); //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 var PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 var PutPrice = new Array(UNum+LNum+1); //콜종목 찾기 //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함 for (var i = -LNum; i <= UNum; i++) { //값이 0.7~2.9사이이면 if (Option.GetCurrent(0, i) >= dnv && Option.GetCurrent(0, i) <= upv) { //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장 CallPrice[i+LNum] = Option.GetCurrent(0, i); //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장 CallCode[i+LNum] = Option.GetATMCallRecent(i); //주의 //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터 //저장하도록 작성해야 함 } else//0.7~2.9 사이가 아니면 { //배열변수 CallPrice의 방번호 i+LNum에 -1 저장 CallPrice[i+LNum] = -1; //배열변수 CallCode의 방번호 i+LNum에 -1 저장 CallCode[i+LNum] = -1; } } //풋종목 찾기 //풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로 //for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함 for (var i = -UNum; i <= LNum; i++) { //값이 0.7~2.9사이이면 if (Option.GetCurrent(1, i) >= dnv && Option.GetCurrent(1, i) <= upv ) { //해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장 PutPrice[i+UNum] = Option.GetCurrent(1, i); //해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장 PutCode[i+UNum] = Option.GetATMPutRecent(i); } else //2.0보다 크면 { //배열변수 PutPrice의 방번호 ii+LNum에 -1 저장 PutPrice[i+UNum] = -1; //배열변수 PutCode의 방번호 ii+LNum에 -1 저장 PutCode[i+UNum] = -1; } } //배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고 //CallCode의 동일 방번호의 값을 CallOrderCode에 저장 var CC = -1; var CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] > CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고 //PutCode의 동일 방번호의 값을 PutOrderCode에 저장 var PP = -1; var PutOrderCode = -1; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] > PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } if (CC > 0 && PP > 0) { Start = -1; SC = CallOrderCode; SP = PutOrderCode; Scount = Signal.count; Account1.OrderSell(SC,Scount,Option.GetBidByCode(SC,3),0); Account1.OrderSell(SP,Scount,Option.GetBidByCode(SP,3),0); } } //차트에서 매도청산신호 발생 if (Start == -1 && Signal.signalKind == 4) { Start = 0; Account1.OrderBuy(SC,Scount,Option.GetAskByCode(SC,3),0); Account1.OrderBuy(SP,Scount,Option.GetAskByCode(SP,3),0); } } =================================================================================
프로필 이미지
탄젠트80
2016-02-18
2205
글번호 223818

관리자에 의해 프로그램 사용법 QnA로 이동되었습니다

프로필 이미지
plasma
2016-02-14
11
글번호 223817
0
답변완료

DB 연결 방법 문의 드립니다.

DB 객체를 사용하여 ACCESS DB와 연결하는 방법을 알고 싶습니다. (DSN명 등록 방법 등 사용예제가 있다면 더욱 좋겠습니다.)
프로필 이미지
고가행진
2016-02-10
2291
글번호 223815
답변완료

문의드립니다.

OrderStopBuy OrderStopSell 기능과 Parameter에 대한 설명 종 부탁드릴께요. 감사합니다.
프로필 이미지
우니쮸니
2016-02-06
2085
글번호 223814
답변완료

문의드립니다

안녕하세요. 예스스팟 매뉴얼을 이용하여 공부하고 있는데 자바스크립트 언어가 첨이라 그런지 생소합니다. 예제를 좀 많이 만들어 주셨으면 많은 도움이 되었을텐데 초보자에게는 많이 공부해야할 것 같습니다. 다음과 같은 스크립트를 부탁드립니다. 챠트에서 발생되는 신호를 이용하는 스크립트입니다. 매수신호가 발생하게되면 1. 이전 챠트신호로 주문되었으나 미체결된 상태이면 취소하고 2. 신규 발생한 매수신호로 주문하되 주문가격은 챠트신호가격으로 주문한다. 3. 주문가격이 체결됨과 동시에 주문가격의 +15호가로 청산주문한다 4. 청산주문이 미체결된 상태에서 매수청산 신호발생하면 미체결된 청산주문은 취소하고 매수청산신호로 주문하되 주문가격은 매수청산신호 가격으로 주문한다. 매도신호가 발생하는 경우에도 매수신호의 경우와 같습니다. 수고하세요.
프로필 이미지
bigdeal
2016-02-04
2005
글번호 223810

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

프로필 이미지
난이
2016-02-04
13
글번호 223809
답변완료

오류메세지??

NO. 1337 호의 연속입니다. 예스글러벌 모의시장에서 테스트결과 주문함수의 가격구분을 아래의 시스템식과 같이 지정가 2로 변경 하였으나 동일한 오류메세지가 발생 합니다. 원인이 다른 데에 있는 것 같습니다. 그리고 위 그림과 같이 오류메세지를 확인 크릭 후에는 스크립트메세지에서는 다음단계로 진행은 되나 체결 통보가 발생하지 아니 합니다. 또한 예스글러벌 모의시장 차트의 오류사항을 NH선물에 수차례 시정을 요구 하였으나 분봉차트의 경우에는 업데이트가 되지 아니하여 시험작동을 할 수가 없습니다. 그리고 예스글러벌 리얼시장의 차트는 분봉차트는 5000 바 틱차트는 1000 바로 시스템을 구현하기에는 너무 짧아 보입니다. * 오류 메세지 내용 1. 종목코드값을 확인하시기바랍니다. 2. 미체결 내역에서 주문번호를 찾을 수 없어서 주문이 자체 거부 되었습니다. 참조사항 차트객체명 : C1 차트아이디 : D101 (자동매매 활성화 됨) 종목객체명 : SP 종목명 : E-mini S&P 500(2016.3) 종목코드 : ESH 16 var Position; var OrderCode; var BID; var SID; var SNum; var BNum; var BuyFill; var SellFill; function Main_OnStart() { Main.MessageLog("시작"); Position = 0; OrderCode = Main.GetOrderCode(SP.Code); } function C1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); if (Signal.signalKind == 1) { Position = 1; BID = A1.OrderBuy(SP.Code, 1, SP.Ask(2),2); Main.MessageLog("매수진입"); BuyFill = 0; } if (Position == 1 && Signal.signalKind == 2) { if (BuyFill == 1) { A1.OrderSell(SP.Code, 1, SP.Bid(2),2); Main.MessageLog("매수청산실행"); } if (BuyFill == 0) { A1.OrderCancel(BNum); Main.MessageLog("매수청산취소"); } } if (Signal.signalKind == 3) { Position = -1; SellFill = 0; SID = A1.OrderSell(SP.Code, 1, SP.Bid(2), 2); Main.MessageLog("매도진입"); } if (Position == -1 && Signal.signalKind == 4) { if (SellFill == 1) { A1.OrderBuy(SP.Code, 1, Ask(2), 2); Main.MessageLog("매도청산"); } if (SellFill == 0) { A1.OrderCancel(SNum); Main.MessageLog("매도청산취소"); } } } function Main_OnOrderResponse(OrderResponse) { if (Position == 1 && OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; } if (Position == -1 && OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; } } function Main_OnNotifyFill(NotifyFill) { if (Position == 1 && NotifyFill.orderNum == BNum) { BuyFill = 1; } if (Position == -1 && NotifyFill.orderNum == SNum) { SellFill = 1; } }
프로필 이미지
너무조아
2016-02-10
2214
글번호 223808
답변완료

확장차트에서 강제청산 시점

안녕하세요? 확장차트에 시스템을 적용할 경우 강제청산 설정을 해놓을 경우 시점은 봉완성시에만 발생하는것 같은데요.. 매수, 매도처럼 OnRiseIncompleteSignal 함수에 들어오게 할 수는 없는지요?
프로필 이미지
goodasi
2016-01-29
2240
글번호 223803

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

프로필 이미지
goodasi
2016-01-29
5
글번호 223802