예스스탁
예스스탁 답변
2014-05-15 17:48:07
안녕하세요
예스스탁입니다.
1.
예 정상적으로 작성되었습니다.
다만 round는 반올림이 되므로 floor를 사용하시는게 좋습니다.
Callcode = Option.GetATMCallRecent(1, 0);
Bvol = Math.floor((3000000/(Option.GetCurrentByCode(Callcode)*500000)));
A1.OrderBuy(Callcode, Bvol, Option.GetAskByCode(Callcode, 3), 0);
2.
아래식 참고하시기 바랍니다.
차트에서 매수신호 발생하면 2.5이하 콜/풋 옵션을 골라 매수
차트에서 매도신호 발생하면 2.5이하 콜/풋 옵션을 골라 매도
하는 식입니다.
//스크립트 객체설정
//chart1 차트객체
//Option 객체
//Account1 계좌객체
var S1;
var Entry;
var CallOrderCode;
var PutOrderCode;
function Main_OnStart()
{
S1 = 0;
Entry = 0;
Main.MessageLog("시작");
}
function Chart1_OnRiseSignal(Signal)
{
S1 = Signal.signalKind;
//Buy신호 발생하면 양옵션매수(2.5이하중 가장 큰 종목))
if (S1 == 1 )
{
var UNum = Option.uppersATM;
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);
for (var i = -LNum; i <= UNum; i++)
{
if (Option.GetCurrent(0, i) <= 2.5)//2.5지정
{
CallPrice[i+LNum] = Option.GetCurrent(0, i);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = -1;
CallCode[i+LNum] = -1;
}
}
for (var ii = -UNum; ii <= LNum; ii++)
{
if (Option.GetCurrent(1, ii) <= 2.5)//2.5 지정
{
PutPrice[ii+UNum] = Option.GetCurrent(1, ii);
PutCode[ii+UNum] = Option.GetATMPutRecent(ii);
}
else
{
PutPrice[ii+UNum] = -1;
PutCode[ii+UNum] = -1;
}
}
var CC = -1;
CallOrderCode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
CallOrderCode = CallCode[iii+LNum]
}
}
var PP = -1;
PutOrderCode = -1;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] > PP)
{
PP = PutPrice[iiii+UNum];
PutOrderCode = PutCode[iiii+UNum];
}
}
if (CC > 0 && PP > 0)
{
Entry = 1;
Account1.OrderBuy(CallOrderCode, 1,Option.GetAskByCode(CallOrderCode, 3), 0);
Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 3), 0);
}
}
//매수진입 중에 exitlong신호 발생하면 buy신호시 매수한 양옵션 청산
if (Entry == 1 && S1 == 2)
{
Account1.OrderSell(CallOrderCode, 1,Option.GetBidByCode(CallOrderCode, 3), 0);
Account1.OrderSell(PutOrderCode, 1, Option.GetBidByCode(PutOrderCode, 3), 0);
}
//Sell신호 발생하면 양옵션매도(2.5이하 중 가장 큰 종목))
if (S1 == 3)
{
var UNum = Option.uppersATM;
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);
for (var i = -LNum; i <= UNum; i++)
{
if (Option.GetCurrent(0, i) <= 2.5)// 2.5 지정
{
CallPrice[i+LNum] = Option.GetCurrent(0, i);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = -1;
CallCode[i+LNum] = -1;
}
}
for (var ii = -UNum; ii <= LNum; ii++)
{
if (Option.GetCurrent(1, ii) <= 2.5 )//2.5지정
{
PutPrice[ii+UNum] = Option.GetCurrent(1, ii);
PutCode[ii+UNum] = Option.GetATMPutRecent(ii);
}
else
{
PutPrice[ii+UNum] = -1;
PutCode[ii+UNum] = -1;
}
}
var CC = -1;
CallOrderCode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
CallOrderCode = CallCode[iii+LNum]
}
}
var PP = -1;
PutOrderCode = -1;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] > PP)
{
PP = PutPrice[iiii+UNum];
PutOrderCode = PutCode[iiii+UNum];
}
}
if (CC > 0 && PP > 0)
{
Entry = -1;
Account1.OrderSell(CallOrderCode, 1,Option.GetBidByCode(CallOrderCode, 3), 0);
Account1.OrderSell(PutOrderCode, 1, Option.GetBidByCode(PutOrderCode, 3), 0);
}
}
//매수진입 중에 exitshort신호 발생하면 sell신호시 매도한 양옵션 청산
if (Entry == -1 && S1 == 4)
{
Account1.OrderBuy(CallOrderCode, 1,Option.GetAskByCode(CallOrderCode, 3), 0);
Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 3), 0);
}
}
즐거운 하루되세요
> 지나리 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 1. 조건 만족 시 아래와 같은 수식을 사용하여 콜옵션을 매수하고 있는데요.
"등가 +1 항목인 당월물 콜옵션을 시장가에 300만원만큼의 수량으로 매수한다"
Callcode = Option.GetATMCallRecent(1, 0);
Bvol = Math.round((3000000/(Option.GetCurrentByCode(Callcode)*500000)));
A1.OrderBuy(Callcode, Bvol, Option.GetAskByCode(Callcode, 3), 0);
2. 조건 만족 시 상기 식을 다음과 같이 수정 부탁드립니다.
(1) "당월물 콜옵션 중 2에 가까운 콜옵션을 시장가에 300만원만큼의 수량으로 매수한다"
(2) "당월물 풋옵션 중 2에 가까운 풋옵션을 시장가에 300만원만큼의 수량으로 매수한다"
감사합니다.