커뮤니티

예스스팟 Q&A

답변완료

옵션 가격 형성후 주문되도록 하는 방법은 ?

안녕하세요. 선물신호를 받아 옵션 주문을 내고 있는데, 갭 하락/상승시 즉시 진입하는 수식이 있습니다. 이 경우 옵션 장이 형성되기전에 신호가 발생해서 현재가 +- 형태로 스팟주문을 내게되면 옵션의 어제 종가를 기준으로 현재가가 측정되어 원하는 가격대가 아닌 주문으로 체결이 안되는 경우가 발생하더라구요. 그래서 필요한 방법이 선물신호가 발생한 경우 옵션거래 첫 체결이후에 거래가 나가도록 하고 싶은데 방법이 없는지요 ? 만약 없다면 차선책으로 현재시간이 090001 이전에는 스팟이 1초간 멈추게 하는 함수가 있는지요 ? 답변부탁드립니다.
프로필 이미지
anyhelp
2015-11-16
2078
글번호 223719
답변완료

수식

해외선물(오일,금,유로 fx) 매매시 각각 차트를 2개씩띄워 놓고(차트주기는 동일) 1번차트와 2번 차트에 적용되는 시스템식은 다름 이때 1번차트의 신호를 메인으로 보고 1번차트가 매수면 2번차트는 매수신호에 의해진입 매도신호에의해 청산 1번차트가 매도면 2번차트는 매도신호에 의해진입 매수신호에의해 청산 물론 2번차트에 의해서 보유중이면 1번차트신호가 바뀔시 바로 청산하고요 그런데 예제6. 주기가 다른 여러 차트를 참조해 주문발생하기 중 OnRiseSignal은 연결된 차트에서 완성신호가 발생했을 때 호출되는 이벤트이고 완성신호 정보는 완성신호객체(Signal)가 제공합니다. (위부분이 핵심인듯 한데) 보고 해보려고 하니 비슷한 도움말인데 응용을 해보려니 좀 어렵내요 질문요약 1번차트 매매신호를 기준으로 매수면 2번차트의 매수신호에 의해 진입 매도에 청산 1번차트 매매신호를 기준으로 매도면 2번차트의 매도신호에 의해 진입 매수에 청산 2번차트 수식은 1번차트 수식과는 달라서 (신호가 각각 나옴) 1번신호가 바뀌면 보유중이면 무조건 청산 입니다. 해외선물 3가지 종목을 동시에 매매할겁니다. 감사합니다. 예로 GOLD 1번차트 macd (주기가 50) 골든일때 매수 신호 발생시 GOLD 2번차트 macd (주기가 10) 골든일때 매수해서 데드일때 청산 여기서 GOLD 1번차트 2번차트 주기는 동일 1번차트 macd (주기가 50) 데드일때 매도 신호 발생시 2번차트 macd (주기가 10) 데드일때 매도해서 골든일때 청산 진입에 의해 보유시 1번차트가 반대신호로 나오면 무조건청산 입니다. (((******1번차트의 위의 예시처럼 macd식을 이용할것이아니고 차트에 macd 수식을 적용했을때 발생되어지는 차트신호만 받아서 예제6번처럼 1번차트의 발생신호 이벤트만 받아들여서 2번차트신호에 의해 매매할겁니다******)2번차트는 직전봉이 스토케스틱 30이하침체진입후 현재봉이 앞봉값보다 높을때 매수,,직전봉이 스토케스틱 70이상 과열진입후 현재봉이 앞봉값보다 낮을때 매도)) 입니다. 1번차트에 발생된 신호만 2번차트에서 받아들여 2번차트는 스토케스틱 수식에의해 매매 골드,유로fx,오일 동시매매 ========================================================== ========================================================== 아래수식은 1번문의한 내용을 수식화한것입니다. 그런데 예스트레더작성한것을 예스스팟에서는 syntax 에러가 난다고해서 실행을 못해보고 있습니다. <<<<<<<<<<<<<<< 2번문의 >>>>>>>>>>>>>>>>> input : b_time1(000000),e_time1(240000),목표청산1(3); input : stoK_p11(150),stoK_p12(20),stoK_p13(30); input : ma_p11(15),ma_p12(5),ma_p13(10),ma_p14(80),ma_p15(10),ma_p16(40),ma_p17(35); input : sto1(10),sto2(5); Var:stoK1(0),stoD1(0),TRIXv(0),TRIXsig(0),stok2(0),T(0); stok2 = StochasticsK(sto1,sto2); If b_time1 <= Time and Time <= e_time1 Then { stoK1 = StochasticsK(stoK_p11,stoK_p12); stoD1 = StochasticsD(stoK_p11,stoK_p12,stoK_p13); If countif(ma(C,ma_p11)[1] < ma(C,ma_p11),1) == 1 and (ma(C,ma_p12)[1] <= ma(C,ma_p13)[1] and ma(C,ma_p12) > ma(C,ma_p13)) and countif(ma(C,ma_p14)[1] < ma(C,ma_p14),1) == 1 and countif(ma(C,ma_p15)[1] < ma(C,ma_p15),1) == 1 and countif(ma(C,ma_p16)[1] < ma(C,ma_p16),1) == 1 and countif(ma(C,ma_p17)[1] < ma(C,ma_p17),1) == 1 Then { T = 1; if MarketPosition == -1 Then ExitShort("매도1청산"); } If countif(ma(C,ma_p11)[1] > ma(C,ma_p11),1) == 1 and (ma(C,ma_p12)[1] >= ma(C,ma_p13)[1] and ma(C,ma_p12) < ma(C,ma_p13)) and countif(ma(C,ma_p14)[1] > ma(C,ma_p14),1) == 1 and countif(ma(C,ma_p15)[1] > ma(C,ma_p15),1) == 1 and countif(ma(C,ma_p16)[1] > ma(C,ma_p16),1) == 1 and countif(ma(C,ma_p17)[1] > ma(C,ma_p17),1) == 1 Then { T = -1; if MarketPosition == 1 Then ExitLong("매수1청산"); } } if T == 1 then{ if countif(stok2>stok2[1],2) == 1 and stok2[1] < 10 Then buy("매수2"); if countif(stok2<stok2[1],2) == 1 and stok2[1] > 90 Then ExitLong("매수2청산"); } if T == -1 then{ if countif(stok2<stok2[1],2) == 1 and stok2[1] > 90 Then sell("매도2"); if countif(stok2>stok2[1],2) == 1 and stok2[1] < 10 Then ExitShort("매도2청산"); } 답변을 메일로만 받을수있을까요 ? 444422ver@ naver.com
프로필 이미지
자라도
2015-11-22
2179
글번호 223718

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

프로필 이미지
재령
2015-11-06
0
글번호 223710
답변완료

시스템 로직상에서 가원장 갱신 가능 방법 문의

안녕하세요. 예스스팟 장마감 동시호가 예제를 사용하고 있습니다. 예스트레이더가 아닌 증권사 스마트폰 어플을 통해 수동 매매해서 잔고 발생경우, 예스스팟 장마감 동시호가 잔고에서는 해당 잔고가 반영 되지 않아서 동시호가 청산이 안되고 있습니다. 가원장 갱신이 안되어서 그런가 싶은데요, 제 경우 전략은 예스랭귀지를 사용하고 예스스팟에서 해당 전략을 불러와 확장차트 생성후 주문하고 있는 형태 입니다. 전략 시스템 로직에서 장마감 전에 잔고를 갱신하면 가능할런지요? 만약 이 경우가 가능하다면 해당 예제 문의 드립니다. 감사합니다.
프로필 이미지
lucky93
2015-11-06
2168
글번호 223707
답변완료

수식 수정부탁합니다

뭐가 문제일까요? 당일 14:30분에 매도 진입은 잘 되는데 다음날 매수 청산이 13:30분에 안됩니다. var CallOrderCode,PutOrderCode; var Entry, Exit; function Main_OnStart() { Entry = false; Exit = false; Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { if (nEventID <= 1) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //14시 30분 if (Entry == false && HHMMSS >= 143000 ) { Entry = true; //차트가 무포지션 if (Chart1.GetOpenContracts() == 0) { Main.SetUserValue("CallOrderCode", ""); Main.SetUserValue("PutOrderCode", ""); } //차트가 매수유지봉 if (Chart1.GetOpenContracts() > 0) { Main.MessageList("--------------------------------------------"); Main.MessageList("매수신호유지"); var UNum = Option.uppersATM; var LNum = Option.lowersATM; //콜옵션중 3.0에 가장 가까운 종목 //콜옵션 모든 종목을 현재가-3.0을 해서 절대값을 취해 저장 var CallCode = new Array(UNum+LNum+1); var CallPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-3.0); CallCode[i+LNum] = Option.GetATMCallRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var CC = 99999999; CallOrderCode = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //풋옵션중 3.0에 가장 가까운 종목 //풋옵션 모든 종목을 현재가-3.0을 해서 절대값을 취해 저장 var PutCode = new Array(UNum+LNum+1); var PutPrice = new Array(UNum+LNum+1); for (var i = -UNum; i <= LNum; i++) { PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-3.0); PutCode[i+UNum] = Option.GetATMPutRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var PP = 99999999; PutOrderCode = ""; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] < PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } //종목을 찾았으면 if (CC < 99999999 && PP < 99999999) { Account1.OrderSell(PutOrderCode1, Vo1, Option.GetBid(PutOrderCode, 3), 0); Account1.OrderSell(CallOrderCode, Vo1, Option.GetBid(CallOrderCode, 3), 0); Main.SetUserValue("PutOrderCode", PutOrderCode); Main.SetUserValue("CallOrderCode", CallOrderCode); =================== 중 략 ========================================================= //13시 30분 if (Exit == false && HHMMSS >= 133000 ) { Exit = true; //내부파일의 값을 가져와 변수에 저장 var PreDayCall = Main.GetUserValue("CallOrderCode"); var PreDayPut = Main.GetUserValue("PutOrderCode"); //PreDayCall에 값이 있으면 if (PreDayCall != "") { //잔고셋팅후 매도포지션이면 청산하고 //내부파일의 값을 빈공간으로 만듬 Account1.SetBalanceItem(PreDayCall,0) if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); Main.SetUserValue("CallOrderCode", ""); } } //PreDayPut에 값이 있으면 if (PreDayPut != "") { //잔고셋팅후 매도포지션이면 청산하고 //내부파일의 값을 빈공간으로 만듬 Account1.SetBalanceItem(PreDayPut,0) if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); Main.SetUserValue("PutOrderCode", ""); } } //모두 수행후 값을 빈공간으로 만듬 Main.SetUserValue("CallOrderCode", ""); Main.SetUserValue("PutOrderCode", ""); }
프로필 이미지
팡팡
2015-11-03
2312
글번호 223704

지나리 님에 의해서 삭제되었습니다.

프로필 이미지
지나리
2015-11-02
1
글번호 223703
답변완료

DDE 와 관련해서 확인을 부탁드립니다

안녕하세요 DDE 와 관련해서 확인을 부탁드립니다. 1. DDE 객체의 속성을 코드 상에서 설정이 불가능한 것 같습니다 스크립트 속성 화면에서 설정하는 것은 적용이 되지만, 아래처럼 코드 상에서 직접 속성값을 설정하면 적용되지 않습니다. (Read 만 가능하고 Write 는 불가능) DDE1.service = "DDEServ"; DDE1.topic = "Data"; 코드 상으로는 속성 변경이 안되는지 궁금합니다. 2. DDE 객체의 OnRcvItem 함수가 동작이 안되는 것 같습니다. 검증을 위해, 예스스팟 이외에 별도의 DDE 클라이언트를 함께 사용해서 테스트를 해봤습니다. 1. Excel 테스트 A1 셀의 값을 가져오기 위해 그림 1 처럼 DDE1 객체 속성에서 Service 를 EXCEL, Topic 을 지정한 후 DDE1.Request("R1C1") 를 실행했지만, 그림 1 의 디버깅 화면처럼, DDE 객체의 OnRcvItem 함수가 실행되지 않았습니다. (Topic 설정은 "C:Test.xls" 과 "[Test.xls]sheet1" 두 가지를 해봤습니다) 엑셀 파일은 문제가 없었는데, 그림 2 처럼 다른 DDE Client 프로그램을 이용해서 테스트했을 때는 정상적으로 값이 조회되었기 때문입니다. 2. DDE 서버를 이용한 테스트 원인을 찾기 위해, 그림 3 처럼 별도의 DDE 서버 프로그램을 가지고 확인한 결과 예스스팟에서 보낸 Request 가 정상적으로 수신되었고, 이에 대한 응답으로 Item 데이타를 전송하는 것까지는 확인했습니다. 하지만 DDE 객체의 OnRcvItem 함수는 마찬가지로 실행되지 않았는데, (그림 3 처럼, DDE 클라이언트를 가지고 확인했을 때는 정상적으로 값이 조회되었습니다) DDE 서버쪽에서 정상적으로 데이타를 전송해서, OnRcvItem 함수가 실행이 안되는 것 같은데, 확인을 부탁드립니다. 3. 참고로 2 번 테스트에 사용한 코드를 보입니다. var Count; function GetCurrentTime() { d = new Date(); return d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds(); } function Main_OnStart() { Main.MessageLog("시작 - " + GetCurrentTime()); // 1 초마다 DDE Request 요청 Count = 0; Main.SetTimer(1, 1000); } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.MessageLog("타이머 - " + GetCurrentTime()); // String1 아이템 요청 (정상적인 리턴값은 "123" 의 문자열) DDE1.Request("String1"); if (++Count >= 3) { Main.KillTimer(1); } } } function DDE1_OnRcvItem(sItem, sData) { Main.MessageLog("OnRcvItem"); }
프로필 이미지
날빛2
2015-10-30
2488
글번호 223702
답변완료

예스스팟 관련 문의

안녕하세요! 늘 도와주심에 감사드리며 두 가지 질문이 있습니다 1. 예스스팟 사용시 아래와 같이 초기 포지션을 확인해보면 매도 보유시에도 Position이 1로 확인됩니다. 코드상 문제가 있는건가요? function Main_OnStart() { Main.MessageLog("시작"); ordCode = Main.GetOrderCode(MarketData1.code); Position = 0; itemNum = Account1.GetTheNumberOfBalances(); for(var i = 0; i < itemNum; i++) { //순서대로 잔고셋팅 Account1.SetBalanceIndex(i); if (Account1.Balance.code == ordCode) { Position = Account1.Balance.position; balCount = Account1.Balance.count; } } Main.MessageLog("시작시 종목:"+ordCode+" 현재 포지션:"+Position+" 갯수:"+balCount); } 2. 예스스팟 수식을 수정후 예스스팟을 작동시키면 수식을 수정하기 전에 있던 코드에 있던 오류에 대해 계속 오류가 발생합니다. 즉, 오류를 수정하고 나서도 해당 오류에 대해 계속 표시가 되는데 예스스팟을 삭제했다가 다시 시작을 반복하다 보면 어느 순간 오류가 사라집니다. 무엇이 문제인가요? 감사합니다.
프로필 이미지
빌딩오너
2015-10-29
2353
글번호 223701
답변완료

수식 요청 드립니다.

안녕하세요. 아래 수식 요청 드립니다. 1. 코스피 200 선물 5EA 당일청산 시스템을 예스스팟을 이용 미니선물 5계약으로 동일계좌로 거래할경우 동일계좌의 당일손실제한(외부변수), 당월손실제한(외부변수) 예스스팟 수식 부탁드립니다. 2. 계좌가 다를경우에도 당일손실제한(외부변수), 당월손실제한(외부변수) 가능한지 예스스팟수식 부탁드립니다. 감사합니다.
프로필 이미지
dandy
2015-10-26
2233
글번호 223698
답변완료

예스스팟 수식 문의 드립니다.

차트에서 매수 신호가 발생했을 때 비율을 활용하여 분산진입할 예정인데, 처음 매수 때는 총 금액의 25%를 진입하고 두번 째 매수는 해당 매수 평균단가에서 -10%가 되기 바로 전의 호가에서 첫 매수 때 체결된 주문과 같은량을 매수하고 세번 째 매수는 첫번째와 두번째 때 매수된 종목 평균단가에서, 똑같이 -10%가 되기 바로 전의 호가에서 지금까지 체결된 주문과 같은량을 매수 하는 시스템을 만들고 싶습니다. 즉 전량이 체결 된다고 가정할 때, 잔고의 25% 25% 50% 이런 식으로 주문이 들어가도록 하고 싶습니다. 또 14시 정각에 들어간 매수 주문을 전량 취소하고 14시 45분에 포지션에 있는 수량을 전부 청산하는 시스템을 만들고 싶습니다. 도움 부탁드립니다.
프로필 이미지
대가북극곰
2015-10-25
2092
글번호 223697