시초가기준 등가옵션에서
안녕하세요
1. 연결선물 기준으로 시초가 생성시 등가옵션을 구하고,
양옵션의 위아래 행사가 2개씩 포함 콜 5개 풋 5개의 옵션으로 확장챠트를 만듭니다.
2-11번까지의 옵션참조데이타는 일봉을 포함한 종목생성을 한후에
2. 양옵션의 행사가 중심으로 최근 5일전까지의 전일 고가저가를 비교한후,
콜일봉고가와 풋일봉고가가 0.2 이내에 근접한경우 이의 수치를 구하고
일봉저가의 경우도 마찬가지로 수치를 구하고 싶습니다.
-->
3. 가장 최근의 것부터 순서대로 수치를 구하고 싶습니다.
감사합니다.
var Start;
var CallATM; var PutATM;
var Nth = 1;
var CallObject; var PutObject;
var OrderCode;
var MarketData1;
var CallHigh = new Array(300);
var CallLow = new Array(300);
var PutHigh = new Array(300);
var PutLow = new Array(300);
var HHPrice = new Array(100);
var LLPrice = new Array(100);
var ItemObject = new Array(100);//갯수
var CallItem = new Array(100);//갯수
var PutItem = new Array(100);//갯수
var CoPutItem = new Array(100);//갯수
//스팟 시작시에
function Main_OnStart()
{
Start = 0;
//날자 및 시계계산
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//코스피200선물에 가장 가까운 콜/풋 종목 선정
var var1 = MarketData1.open;//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+2,0);
CallATM1 = Option.GetATMCallRecent(i+1,0);
CallATM2 = Option.GetATMCallRecent(i,0);
CallATM3 = Option.GetATMCallRecent(i-1,0);
CallATM4 = Option.GetATMCallRecent(i-2,0);
}
}
//PutATM = -1;
for (var i = -UNum; i <= LNum; i++)
{
if (Option.GetExercisePrice(1, i) == ATM)
{
PutATM = Option.GetATMPutRecent(i-2,0);
PutATM1 = Option.GetATMPutRecent(i-1,0);
PutATM2 = Option.GetATMPutRecent(i,0);
PutATM3 = Option.GetATMPutRecent(i+1,0);
PutATM4 = Option.GetATMPutRecent(i+2,0);
}
}
Main.MessageList("콜ATM :",CallATM2 ,"풋ATM :",PutATM2);
//확장 차트객체 요청
var ChartSet3 = new ReqChartItem("00000000",1, CHART_PERIOD_MINUTE, 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 R31 = new ReqChartItem(CallATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R32 = new ReqChartItem(CallATM1, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R33 = new ReqChartItem(CallATM2, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R34 = new ReqChartItem(CallATM3, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R35 = new ReqChartItem(CallATM4, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R36 = new ReqChartItem(PutATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R37 = new ReqChartItem(PutATM1, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R38 = new ReqChartItem(PutATM2, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R39 = new ReqChartItem(PutATM3, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R40 = new ReqChartItem(PutATM4, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var ReferDataSet3 = new Array(R31,R32,R33,R34,R35,R36,R37,R38,R39,R40);
//지정한 설정으로 챠트 생성을 요청
Main.ReqChartEx(ChartSet3,SystemSet3,null,ReferDataSet3);
}
}
//요청한 차트객체 생성이 완료되면
function Main_OnRcvChartEx(ChartEx)
{
if ( ChartEx.GetCode(1) == MarketData1.code)
{
ChartEx3 = ChartEx;
Start = 1;
OrderCode = Main.GetOrderCode(MarketData1.code);
if (ChartEx3.GetCode(4) == CallATM2 && ChartEx3.GetCode(9) == PutATM2)
{
for (var i = 2; i < 12; i++)
{
Main.ReqMarketData(ChartEx3.GetCode(i),12,0);//CallItem =
}
}
}
}
function Main_OnRcvMarketData(MarketData)
{
Main.MessageList("종목객체수신",MarketData.code);
for (var i = 2; i < 12; i++)
{
if (MarketData.code == ChartEx3.GetCode(i))
{
Main.MessageList(i,"번째","종목객체생성완료 : ",ChartEx3.GetCode(i));
ItemObject[i] = MarketData;
}
{
if (ItemObject[i] == MarketData && i < 7)
{
CallItem[i] = MarketData;
CoPutItem[i+5] = MarketData;
}
if (ItemObject[i] == MarketData && i >= 7)
{
PutItem[i] = MarketData;
}
}
}
if (CallItem == MarketData && CoPutItem == MarketData )//&& PutATM2 == MarketData)
{
for (var ii = 0; ii <= 120; ii++)
{
for (var iii = 1; iii <= 5; iii++)
{
CallHigh[ii] = MarketData.GetPrevHigh(iii);
CallLow[ii] = MarketData.GetPrevLow(iii);
PutHigh[ii] = MarketData.GetPrevHigh(iii);
PutLow[ii] = MarketData.GetPrevLow(iii);
}
}
}
/*
if (CoPutItem == sItemCode && lU*pdateID == 20001)
{
for (var iii = 1; iii <= 5; iii++)
{
PutHigh[ii] = MarketData.GetPrevHigh(iii);
PutLow[ii] = MarketData.GetPrevLow(iii);
}
}
*/
{
if (Math.abs(CallHigh[ii]-PutHigh[ii]) <= 0.2 && CallHigh[ii] >= PutHigh[ii])
{
HHPrice[ii] = CallHigh[ii];
}
else if (Math.abs(CallHigh[ii]-PutHigh[ii]) <= 0.2 && CallHigh[ii] < PutHigh[ii])
{
HHPrice[ii] = PutHigh[ii];
}
if (Math.abs(CallLow[ii]-PutLow[ii]) <= 0.2 && CallLow[ii] >= PutLow[ii])
{
LLPrice[ii] = CallLow[ii];
}
else if (Math.abs(CallLow[ii]-PutLow[ii]) <= 0.2 && CallLow[ii] < PutLow[ii])
{
LLPrice[ii] = PutLow[ii];
}
}
Main.MessageList("고저가 :",HHPrice[ii],LLPrice[ii]);
}
2014-04-14
1300
글번호 222929