답변완료
선물과 등가옵션으로...
안녕하세요
1. 선물 시초가나 예상가를 기준으로 당일의 등가 콜풋옵션을 확장챠트로 만들고 싶습니다.
전의 질문란에 올려져 있는 것을 참조로 만들어 보았는데..
콜과 풋의 등가옵션이 그날그날 바뀌지 않겨 조회 처음부터 연결이 되어 있네요.
위의 그림은 오늘(4.3)의 시초가 기준,
2월 28일은 선물 시초가 257.8인 257.5 양옵션의 기준이 되어야 하는데...
시뮬레이션 항목의 시가기준 ATM을 만들고 싶습니다
해결방법을 좀 알려주세요
감사합니다.
옵션객체
종목객체.MarketData1
var Start;
var CallATM; var PutATM;
var OrderCode;
var MarketData1;
//스팟 시작시에
function Main_OnStart()
{
Start = 0;
OrderCode = Main.GetOrderCode(MarketData1.code);
//날자 및 시계계산
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//코스피200선물에 가장 가까운 콜/풋 종목 선정
var var1 = MarketData1.current;//expectedPrice
var var2 = parseInt(var1/10)*10;
var var3 = var1%10;
var ATM = -1;
if (var3 >= 8.75)
ATM = var2+10;
else if (var3 < 8.75 && var3 >= 6.25)
ATM = var2+7.5;
else if (var3 < 6.25 && var3 >= 3.75)
ATM = var2+5.0;
else if (var3 < 3.75 && var3 >= 1.25)
ATM = var2+2.5;
else
ATM = var2+0.0;
if (Start == 0 && HHMMSS >= 090000)
{
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
CallATM = -1;
for (var i = -LNum; i <= UNum; i++)
{
if (Option.GetExercisePrice(0, i) == ATM)
CallATM = Option.GetATMCallRecent(i);
}
PutATM = -1;
for (var i = -UNum; i <= LNum; i++)
{
if (Option.GetExercisePrice(1, i) == ATM)
PutATM = Option.GetATMPutRecent(i);
}
Main.MessageList("콜ATM",CallATM ,"풋ATM",PutATM);
//확장 차트객체 요청
var ChartSet3 = new ReqChartItem("00000000",60, CHART_PERIOD_TICK, 5000, CHART_REQCOUNT_BAR, false, false);
//시스템 설정
var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,1, 10000000,1, // 자산
0.003, 0.003,CALCMETHOD_PERCENT, // 진입/청산 수수료
0.05, 0.05,CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, //1000, // 최대진입수량
10); // 최대진입횟수
var SystemSet3 = new SystemInfo("OpFuture",YL_TYPE_NORMAL,null,TradeSet,null);
//참조데이터 추가
var R11 = new ReqChartItem(CallATM, 60, CHART_PERIOD_TICK, 5000, CHART_REQCOUNT_BAR, false, false);
var R12 = new ReqChartItem(PutATM, 60, CHART_PERIOD_TICK, 5000, CHART_REQCOUNT_BAR, false, false);
var ReferDataSet3 = new Array(R11,R12);
//지정한 설정으로 챠트 생성을 요청
Main.ReqChartEx(ChartSet3,SystemSet3,null,ReferDataSet3);
}
}
//요청한 차트객체 생성이 완료되면
function Main_OnRcvChartEx(ChartEx)
{
if ( ChartEx.GetCode(1) == OrderCode.code)
{
ChartEx3 = ChartEx;
Start = 1;
}
}
2014-04-05
1027
글번호 222913
확장챠트에서 시스템 설정에 문제가 있는지...
수고하십니다.
1. 지난번의 답변 감사합니다
3.시험가동에선 주문가격이 1.-2147483648 으로 이상하게 나오고 체결가격은 실체결에서만
나오는 건지 궁금합니다.
5. 예스랭기지 시스템에서의 한두종류의 신호와 수량을 스팟에서 이용하고 싶은데,
가능한 방법은 있는지요?
점검좀 부탁드립니다
감사합니다
var Start;
var UNum; var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var CallOrderCode; var PutOrderCode;
var vol1;var vol3;
var vol2;var vol4;
var CallStart;
var PutStart;
var ChartEx1 = null;
var ChartEx2 = null;
function Main_OnStart()
{
Start = 0;
vol1 = 0;
vol2 = 0;
CallStart = 0;
PutStart = 0;
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//9시 5분에
if (Start == 0 && HHMMSS >= 085500)// && HHMMSS >= 90030
{
Start = 1;
UNum = Option.uppersATM;
LNum = Option.lowersATM;
CallCode = new Array(UNum+LNum+1);
PutCode = new Array(UNum+LNum+1);
CallPrice = new Array(UNum+LNum+1);
PutPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option.GetExpectedPrice(0, i)-2.3);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
CC = 99999999;
// CallOrderCode = -1;
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum];
}
if (CallOrderCode == CallCode[i+LNum])
{
CallOrderCode1 = CallCode[i+LNum-1];
CallOrderCode2 = CallCode[i+LNum+1];
CallOrderCode3 = CallCode[i+LNum+2];
}
}
for (var ii = -UNum; ii <= LNum; ii++)
{
PutPrice[ii+UNum] = Math.abs(Option.GetExpectedPrice(1, ii)-2.3);
PutCode[ii+UNum] = Option.GetATMPutRecent(ii);
}
PP = 99999999;
// PutOrderCode = -1;
for (var ii = -UNum; ii < LNum; ii++)
{
if (PutPrice[ii+UNum] <= PP)
{
PP = PutPrice[ii+UNum];
PutOrderCode = PutCode[ii+UNum];
}
if (PutOrderCode == PutCode[ii+UNum])
{
PutOrderCode1 = PutCode[ii+UNum-1];
PutOrderCode2 = PutCode[ii+UNum+1];
PutOrderCode3 = PutCode[ii+UNum+2];
PutOrderCode4 = PutCode[ii+UNum+3];
}
}
Main.MessageList("콜",CallOrderCode ,"풋",PutOrderCode);
//확장 차트객체 요청
var ChartSet1 = new ReqChartItem(CallOrderCode,60, CHART_PERIOD_TICK, 1200, CHART_REQCOUNT_BAR, false, false);
var ChartSet2 = new ReqChartItem(PutOrderCode,60, CHART_PERIOD_TICK, 1200, CHART_REQCOUNT_BAR, false, false);
//시스템 설정
var TradeSet = new SystemTradeInfo(TRADE_FIXCAPITAL,1, 10000000,1, // 자산
0.07, 0.07,CALCMETHOD_PERCENT, // 진입/청산 수수료
0.01, 0.01,CALCMETHOD_POINT, // 진입/청산 슬리피지
PYRAMIDING_ENTRY, // 피라미딩 설정여부
1000, //1000, // 최대진입수량
10); // 최대진입횟수
var StopSet = new SystemStopInfo(new StopEndOfDay(150300));
var SystemSet1 = new SystemInfo("OpCall",YL_TYPE_NORMAL,null,TradeSet,null);
//참조데이터 추가
var R11 = new ReqChartItem(PutOrderCode, 60, CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false);
var R12 = new ReqChartItem(PutOrderCode1, 20, CHART_PERIOD_TICK, 1200, CHART_REQCOUNT_BAR, false, false);
var R13 = new ReqChartItem(PutOrderCode2, 60, CHART_PERIOD_TICK, 800, CHART_REQCOUNT_BAR, false, false);
var R14 = new ReqChartItem(CallOrderCode1, 20, CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false);
var R15 = new ReqChartItem(CallOrderCode2, 60, CHART_PERIOD_TICK, 800, CHART_REQCOUNT_BAR, false, false);
var R16 = new ReqChartItem("00000000", 60, CHART_PERIOD_TICK, 1500, CHART_REQCOUNT_BAR, false, false);
var R17 = new ReqChartItem(PutOrderCode3, 60, CHART_PERIOD_TICK, 600, CHART_REQCOUNT_BAR, false, false);
var R18 = new ReqChartItem(PutOrderCode4, 60, CHART_PERIOD_TICK, 600, CHART_REQCOUNT_BAR, false, false);
var R19 = new ReqChartItem(CallOrderCode3, 60, CHART_PERIOD_TICK, 600, CHART_REQCOUNT_BAR, false, false);
//var R20 = new ReqChartItem("EI735", 60, CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false);
var ReferDataSet1 = new Array(R11,R12,R13,R14,R15,R16,R17,R18,R19);
//지정한 설정으로 챠트 생성을 요청
Main.ReqChartEx(ChartSet1,SystemSet1,null,ReferDataSet1);
}
}
//요청한 차트객체 생성이 완료되면
function Main_OnRcvChartEx(ChartEx)
{
if ( ChartEx.GetCode(1) == CallOrderCode)
{
ChartEx1 = ChartEx;
CallStart = 1;
Main.MessageList("C코드",ChartEx1.GetCode(1));
}
}
//확장차트에서 신호나오면 주문
function Main_OnRiseSignal(ChartEx1, Signal)
{
//콜차트
if (CallStart == 1 && ChartEx1.GetCode(1) == CallOrderCode)
{
if (Signal.signalKind == 1)
{
vol1 = Math.abs(Signal.count);
Account1.OrderBuy(Signal.code,vol1,Option.GetAskByCode(Signal.code,0),0);
Main.MessageList("콜매수 : ", CallOrderCode);
}
if (Signal.signalKind == 2)
{
vol2 = Math.abs(Signal.count);
//PutOrderCode 종목 잔고 셋팅
Account1.SetBalanceItem(Main.GetOrderCode(CallOrderCode), 0);
//잔고수량이 0이상이고 매수포지션이면
if(Account1.Balance.count >= vol2 && Account1.Balance.code == Main.GetOrderCode(CallOrderCode)
&& Account1.Balance.position == 2)
{
//잔고수량과 진입수량 중 작은 값으로 청산실행
// Account1.OrderSell(Main.GetOrderCode(CallOrderCode), Math.max(Account1.Balance.count,vol2),Option.GetBidByCode(Main.GetOrderCode(CallOrderCode), 0), 0);
Account1.OrderSell(Signal.code,vol2,Option.GetBidByCode(Signal.code,0),0);
}
if(Account1.Balance.count < vol2 && Account1.Balance.position == 2)
{
//잔고수량과 진입수량 중 작은 값으로 청산실행
Account1.OrderSell(Main.GetOrderCode(CallOrderCode), Math.min(Account1.Balance.count,vol2),Option.GetBidByCode(CallOrderCode, 0), 0);
}
}
}
}
2014-04-05
702
글번호 222901