예스스탁
예스스탁 답변
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개 매도 진입)
즐거운 하루 되시기 바랍니다.
감사합니다.