A:通过模型
OptionZLId3获取指定日期权主力平值合约后,再获取对应的行情即可。
实现范例
范例01:获取指定品种指定日主力平值期权的分钟线行情数据
//获取玉米品种标的在20251125日期权主力平值合约的分钟线数据
setsysparam(pn_stock(),"C");
setsysparam(pn_cycle(),cy_1m());
endt:=20251125t;
begt:=specall(ref(sp_time(),1),array(pn_cycle():cy_day(),pn_stock():"QI000001",PN_Date():endt));
stock:=OptionZLId3(endt,0,0,1,0,0,1); //认沽期权平值主力合约
pz:=DefaultStockID();
rt:= select pz as "标的品种",
["StockID"] as "期权主力平值合约",
FormatDateTime("YYYY-MM-DD hh:nn:ss:zzz",["date"])as "datetime",
["open"],["high"],["low"],["close"],["vol"],["amount"]
from markettable datekey begt+18/24 to endt+18/24 of stock end;
return rt;
范例02:获取指定品种指定区间主力平值期权的分钟线行情数据
期权主力平值合约在不同日期会发生调整,需要在指定日获取对应的主力合约行情后合并
//获取SH000300标的在20251101-20251125日期权主力平值合约的分钟线数据
pz:="SH000300";
setsysparam(pn_stock(),pz);
setsysparam(pn_cycle(),cy_1m());
begt:=20251101t;
endt:=20251125t;
tarr := specall(MarketTradeDayQk(begt,endt),array(pn_cycle():cy_day()));
rt := array();
for i,t in tarr do
begin
stock:=OptionZLId3(t,0,0,1,0,0,1); //认沽期权平值主力合约
lt := specall(ref(sp_time(),1),array(pn_cycle():cy_day(),pn_stock():"QI000001",PN_Date():t));
rt&=select pz as "标的品种",
["StockID"] as "期权主力平值合约",
FormatDateTime("YYYY-MM-DD hh:nn:ss:zzz",["date"])as "datetime",
["open"],["high"],["low"],["close"],["vol"],["amount"]
from markettable datekey lt+18/24 to t+18/24 of stock end;
end
return rt;
20251119之前的实现说明:
20251119天软提供获取期权主力的模型
OptionZLId3,保留之前的实现说明如下:
期权主力平值合约在不同日期会发生调整,需要在指定日获取对应的主力合约行情后合并。
获取
指定日期权主力平值合约参考:FAQ:
Q:如何获取期权主力、平值、虚值与实值合约代码?
其中:
1.获取商品期权主力平值合约需要使用标的主力合约代码
2.获取指数期权主力平值合约需要使用指数代码
3.获取ETF期权主力平值合约需要使用ETF代码
获取所有期权标的代码:FAQ:
OP_GetUnderlyingSecurity
获取期货标的主力代码:FAQ:
Q:期货代码、名称(连续合约、主力合约、指数合约)编制规则
实现模型:opMarket
function opMarket(begt,endt,cy,stockid);
begin
{
说明:获取指定标的品种期权主力平值合约在指定日期序列与周期下的行情数据
参数:
begt:datetime 开始日期
endt: datetime 截止日期
cy:string 周期
stockid:string 标的品种代码
返回:数组,行情数据列表
}
tarr := specall(MarketTradeDayQk(begt,endt),array(pn_cycle():cy_day()));
rt := array();
for i,t in tarr do
begin
lt := specall(ref(sp_time(),1),array(pn_cycle():cy_day(),pn_stock():"SH000001",PN_Date():t));
zlid := spec(base(708004),stockid); //主力代码
bdstock := zlid?ZLToFuturesID(zlid,t):stockid; //标的合约
SetSysParam(pn_cycle(),cy_day());
stock := OptionFlatZLId(bdstock,t,1,0); //认沽期权平值主力合约
if not isstock(stock)then continue;
SetSysParam(pn_cycle(),cy);
rt &= select stockid as "标的品种",
bdstock as "标的合约",
stock as "期权主力平值合约",
FormatDateTime("YYYY-MM-DD hh:nn:ss:zzz",["date"])as "datetime",
["open"],
["high"],
["low"],
["close"]
from markettable datekey lt+16/24 to t+16/24 of stock end;
end
return rt;
end
使用范例
范例一:获取商品期权主力平值合约行情
return opMarket(20231214t,20231215t,cy_30m(),"c");
范例二:获取指数期权主力平值合约行情
return opMarket(20231214t,20231215t,cy_30m(),"SH000300");
范例三:获取ETF期权主力平值合约行情
return opMarket(20231214t,20231215t,cy_30m(),"SH510300");