커뮤니티

수식 문의 드립니다.

프로필 이미지
삼룡이
2019-02-16 08:47:03
3074
글번호 224738
답변완료
안녕하세요. 스프레드 매매 식을 작성 하고자 합니다. 1. 차트1에서 매수 신호 완성 시, 3.0과 가장 가까운 Call옵션을 매수(수량은 차트 신호 수량과 동일)하고 동시에 바로 위 행사가 높은 종목(Call종목+1)을 매도(수량은 차트 신호 수량과 동일)합니다. 2. 피라미딩으로 추가 매수 신호 완성 시, 가격과 무관하게 처음 진입한 Call옵션 종목과 동일한 종목을 추가 매수(수량은 차트 신호 수량과 동일)하고 동시에 바로 위 행사가 높은 종목을 추가 매도(수량은 차트 신호 수량과 동일) 합니다. 3. 매수청산 신호 완성 시, 진입 종목의 콜을 각각 매도,매수로 청산(수량은 차트 신호 수량과 동일)합니다. 4. 옵션 만기일 15:00시에 잔고 모두를 청산하고 동시에 차월물에 동일 포지션으로 3.0과 가까운 종목에 매수/매도를 진입합니다.(예 : 근월물 콜 10개 매수, 콜+1 10개 매도로 잔고가 유지 될 시, 15:00에 청산 후, 동시에 차월물 3.0과 가까운 종목 콜 10개 매수,콜+1 10개 매도 진입) 즐거운 하루 되시기 바랍니다. 감사합니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-03-13 15:48:38

안녕하세요 예스스탁입니다. 스팟은 자바스크립트로 코딩가능한 분들이 사용하시는 프로그램으로 스팟의 수식 답변은 단순히 가이드 정도의 내용만 작성해 드립니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체설정 차트객체추가 --> 속성에서 객체명은 Chart1, 신호나오는 차트와 아이디연결 계좌객체추가 --> 속성에서 객체명은 Account1, 주문 계좌로 지정 옵션객체추가 --> 속성에서 객체명은 Option1, 주가지수옵션으로 지정 var S1= 0,S2 = 0,CallCode1,CallCode2; var RemainDays,entry; function Main_OnStart() { Main.MessageList("Start"); RemainDays = Option1.GetRemainDays(0,0); entry = true; if (RemainDays == 1) { Main.SetTimer(1, 1000); } } function Chart1_OnRiseSignal(Signal) { S2 = S1; S1 = Signal.signalKind; if (S1 == 1 && entry == true) { if (S2 != 1) { var HNum = Option1.uppersATM; var LNum = Option1.lowersATM; var CP = []; var CD1 = []; var CD2 = []; for (var i = -LNum; i <= HNum; i++) { CP[i+LNum] = Math.abs(Option1.GetCurrent(0, i)-3.0); CD1[i+LNum] = Option1.GetATMCallRecent(i); CD2[i+LNum] = Option1.GetATMCallRecent(i+1); } var MinV = CP[0]; CallCode1 = CD1[0]; CallCode2 = CD2[0]; for (var i = 0; i < CP.length; i++) { if (CP[i] < MinV) { MinV = CP[i]; CallCode1 = CD1[i]; CallCode2 = CD2[i]; } } Account1.OrderBuy(CallCode1, Signal.count,0,1); Account1.OrderSell(CallCode2, Signal.count,0,1); } if (S1 == S2) { Account1.OrderBuy(CallCode1, Signal.count,0,1); Account1.OrderSell(CallCode2, Signal.count,0,1); } } if (S1 == 2) { Account1.OrderSell(CallCode1, Signal.count,0,1); Account1.OrderBuy(CallCode2, Signal.count,0,1); } } function Main_OnTimer(nEventID) { if (nEventID == 1) { var d = new Date(); var T1 = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (T1 >= 150000) { Main.KillTimer(1); entry = false; Account1.SetBalance(CallCode1); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { var vol1 = Account1.Balance.count; Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } Account1.SetBalance(CallCode2); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { var vol2 = Account1.Balance.count; Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } var HNum = 30; var LNum = 30; var CP = []; var CD1 = []; var CD2 = []; for (var i = -LNum; i <= HNum; i++) { if (Option1.GetCurrent(2, i) > 0) { CP[i+LNum] = Math.abs(Option1.GetCurrent(2, i)-3.0); CD1[i+LNum] = Option1.GetATMCallRecent(i,1); CD2[i+LNum] = Option1.GetATMCallRecent(i+1,1); } else { CP[i+LNum] = 999; CD1[i+LNum] = ""; CD2[i+LNum] = ""; } } var MinV = CP[0]; CallCode1 = CD1[0]; CallCode2 = CD2[0]; for (var i = 0; i < CP.length; i++) { if (CP[i] < MinV) { MinV = CP[i]; CallCode1 = CD1[i]; CallCode2 = CD2[i]; } } Account1.OrderBuy(CallCode1,vol1,0,1); Account1.OrderSell(CallCode2,vol2,0,1); } } } 즐거운 하루되세요 > 삼룡이 님이 쓴 글입니다. > 제목 : 수식 문의 드립니다. > 안녕하세요. 스프레드 매매 식을 작성 하고자 합니다. 1. 차트1에서 매수 신호 완성 시, 3.0과 가장 가까운 Call옵션을 매수(수량은 차트 신호 수량과 동일)하고 동시에 바로 위 행사가 높은 종목(Call종목+1)을 매도(수량은 차트 신호 수량과 동일)합니다. 2. 피라미딩으로 추가 매수 신호 완성 시, 가격과 무관하게 처음 진입한 Call옵션 종목과 동일한 종목을 추가 매수(수량은 차트 신호 수량과 동일)하고 동시에 바로 위 행사가 높은 종목을 추가 매도(수량은 차트 신호 수량과 동일) 합니다. 3. 매수청산 신호 완성 시, 진입 종목의 콜을 각각 매도,매수로 청산(수량은 차트 신호 수량과 동일)합니다. 4. 옵션 만기일 15:00시에 잔고 모두를 청산하고 동시에 차월물에 동일 포지션으로 3.0과 가까운 종목에 매수/매도를 진입합니다.(예 : 근월물 콜 10개 매수, 콜+1 10개 매도로 잔고가 유지 될 시, 15:00에 청산 후, 동시에 차월물 3.0과 가까운 종목 콜 10개 매수,콜+1 10개 매도 진입) 즐거운 하루 되시기 바랍니다. 감사합니다.