> 파문일기 님이 쓴 글입니다.
> 제목 : 시초가기준 등가옵션에서
> 안녕하세요
1. 연결선물 기준으로 시초가 생성시 등가옵션을 구하고,
양옵션의 위아래 행사가 2개씩 포함 콜 5개 풋 5개의 옵션으로 확장챠트를 만듭니다.
2-11번까지의 옵션참조데이타는 일봉을 포함한 종목생성을 한후에
2. 양옵션의 행사가 중심으로 최근 5일전까지의 전일 고가저가를 비교한후,
콜일봉고가와 풋일봉고가가 0.2 이내에 근접한경우 이의 수치를 구하고
일봉저가의 경우도 마찬가지로 수치를 구하고 싶습니다.
-->
3. 가장 최근의 것부터 순서대로 수치를 구하고 싶습니다.
----------------------------------------
1. 시초가기준 등가옵션을 위아래 하나씩 확장챠트로 구성, 6개의 참조데이타
2. 최근 6일까지의 전일고가저가 기준으로 양옵션을 비교 --- 요 단계가 맞는지, 않맞는지..
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;
Nth = 1;
//날자 및 시계계산
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 R31 = new ReqChartItem(CallATM1, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R32 = new ReqChartItem(CallATM2, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R33 = 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 R34 = new ReqChartItem(PutATM1, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R35 = new ReqChartItem(PutATM2, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false);
var R36 = 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);
//지정한 설정으로 챠트 생성을 요청
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(3) == CallATM2 && ChartEx3.GetCode(6) == PutATM2)
{
for (var i = 2; i < 8; i++)
{
Main.ReqMarketData(ChartEx3.GetCode(i),7,0);//CallItem =
}
}
}
}
function Main_OnRcvMarketData(MarketData)
{
Main.MessageList("종목수신",MarketData.code);
Nth = Nth +1;
if (MarketData.code == ChartEx3.GetCode(Nth))
{
Main.MessageList(Nth,"번째","생성완료 : ",ChartEx3.GetCode(Nth));
ItemObject[Nth] = MarketData;
}
{
if (ItemObject[Nth] == MarketData && Nth < 5)
{
CallItem[Nth] = ItemObject[Nth];
}
if (ItemObject[Nth] == MarketData && Nth >= 5)
{
PutItem[Nth-3] = ItemObject[Nth];
}
}
for (var j = 1; j <= 6; j++)
{
if (CallItem == MarketData && PutItem == MarketData)
{
for (var i = 2; i <= 4; i++)
{
CallHigh[i,j] = CallItem[i].GetPrevHigh(j);
CallLow[i,j] = CallItem[i].GetPrevLow(j);
PutHigh[i,j] = PutItem[i].GetPrevHigh(j);
PutLow[i,j] = PutItem[i].GetPrevLow(j);
}
}
{
Main.MessageList("종완료 : ",CallHigh[i,j],CallLow[i,j],PutHigh[i,j],PutLow[i,j]);
if (Math.abs(CallHigh[i,j]-PutHigh[i,j]) <= 0.2 && CallHigh[i,j] >= PutHigh[i,j])
{
HHPrice[i,j] = CallHigh[i,j];
}
else if (Math.abs(CallHigh[i,j]-PutHigh[i,j]) <= 0.2 && CallHigh[i,j] < PutHigh[i,j])
{
HHPrice[i,j] = PutHigh[i,j];
}
if (Math.abs(CallLow[i,j]-PutLow[i,j]) <= 0.2 && CallLow[i,j] >= PutLow[i,j])
{
LLPrice[i,j] = CallLow[i,j];
}
else if (Math.abs(CallLow[i,j]-PutLow[i,j]) <= 0.2 && CallLow[i,j] < PutLow[i,j])
{
LLPrice[i,j] = PutLow[i,j];
}
}
}
Main.MessageList("고저가 :",HHPrice[i,j],LLPrice[i,j]);
}
----------------------------------------
i와 j 두 변수에 따른 수치를 잡아주지 못하네요.
for (var j = 1; j <= 5; j++)//일간고가
{
if (CallItem == MarketData && PutItem == MarketData)
{
for (var i = 2; i <= 4; i++)//행사가
{
CallHigh[i,j] = CallItem[i].GetPrevHigh(j);
CallLow[i,j] = CallItem[i].GetPrevLow(j);
PutHigh[i,j] = PutItem[i].GetPrevHigh(j);
PutLow[i,j] = PutItem[i].GetPrevLow(j);
}
}
//for (var j = 5; j >= 1; j--)
{
Main.MessageList("종완료 : ",CallHigh[i,j],CallLow[i,j],PutHigh[i,j],PutLow[i,j]);
if (Math.abs(CallHigh[i,j]-PutHigh[i,j]) <= 0.2 && CallHigh[i,j] >= PutHigh[i,j])
{
HHPrice[i,j] = CallHigh[i,j];
}
else if (Math.abs(CallHigh[i,j]-PutHigh[i,j]) <= 0.2 && CallHigh[i,j] < PutHigh[i,j])
{
HHPrice[i,j] = PutHigh[i,j];
}
if (Math.abs(CallLow[i,j]-PutLow[i,j]) <= 0.2 && CallLow[i,j] >= PutLow[i,j])
{
LLPrice[i,j] = CallLow[i,j];
}
else if (Math.abs(CallLow[i,j]-PutLow[i,j]) <= 0.2 && CallLow[i,j] < PutLow[i,j])
{
LLPrice[i,j] = PutLow[i,j];
}
}
}
Main.MessageList("고저중심가 :",HHPrice[i,j],LLPrice[i,j]);