A:
【报表实现】
样本:某个标的在具体某个月份下的所有期权合约
指标:价格,涨幅(%),成交量,持仓量,日增仓,GAMA,Delta,买一价,卖一价等
数据展示:一个行权价为一行数据,左边认购,右边认沽,同时展示相关指标
【实现代码】
1、下载FAQ_GetOptionsData01.fun附件,并导入用函数:
附件:FAQ_GetOptionsData01.fun
导入用户函数方法请参考:FAQ:
Q:如何导入函数
或复制第3步中源代码,自行进行封装,面后调用。
2、调用:
return FAQ_GetOptionsData01("SH510300",20260414T,2604);
结果展示(部分结果展示):
3、FAQ_GetOptionsData01函数定义说明:
定义:FAQ_GetOptionsData01(BDid="SH000300",endt=today(),YYDD)
说明:获取指定日指定标的期权认购认沽对照指标数据
参数:
BDid:标的代码,缺省时为"SH000300"
endt:指定日,缺省时为今天
YYDD:指定到期年月,整型,如2604,表示只取2026年4月份到期的期权合约样本,不指定时,不做这个筛选
返回:数组,左边看涨合约指标,右边看跌合约指标,中间是行权价,具体可参与上面示例
实现原码:
Function FAQ_GetOptionsData01(BDid="SH000300",endt=today(),YYDD);
Begin
//某个标的在具体某个月份下的所有期权合约
QQStocks:= OP_GetOptionList(BDid,endt);
DEndt:=datetoint(endt);
List:=select ["StockID"],["截止日"],["合约简称"],["合约交易代码"],["期权类型"],["行权价"],["到期日"]
,(["到期日"] div 100)%10000 as "YYDD"
from infotable 720 of QQStocks where ["截止日"]=dEndt end;
if ifnumber(YYDD) then
List:=select * from List where ["YYDD"]=YYDD end;
//取指标--价格,涨幅(%),成交量,持仓量,日增仓,GAMA,Delta,买一价,卖一价,
setsysparam(pn_date(),endt);
setsysparam(pn_cycle(),cy_day());
for i:=0 to length(list)-1 do
begin
setsysparam(pn_stock(),list[i,"StockID"]);
list[i,"价格"]:=close();
list[i,"涨幅(%)"]:=StockZf7(endt,endt); //(截止日收盘价-开始日前结算价)/开始日前结算价*100%
list[i,"涨跌"]:=close()-Prev_Settlement();
list[i,"成交量"]:=vol();
list[i,"持仓量"]:=OpenInterest();
list[i,"日增量"]:=OpenInterest()-ref(OpenInterest(),1);
list[i,"买一价"]:=buy1();
list[i,"卖一价"]:=sale1();
list[i,"Gama"]:=OP_Gamma();
list[i,"Delta"]:=OP_delta();
end
//--拼报表
t:= select ["行权价"],select * from thisgroup end as "GRP" from List group by ["行权价"] order by ["行权价"] desc end;
re:=array();
//展示的指标及先后位置
//看涨
hzRow:=array("StockID","合约交易代码","Gama","Delta","日增量","涨幅(%)","持仓量","成交量","卖一价","买一价","涨跌","价格","看涨");
//看跌
hdRow:= reverse(hzRow); //倒置
hdRow::=mcell<>"看涨"?mcell:"看跌"; //看涨改成看跌
// hdRow:=array("看跌","价格","涨跌","买一价","卖一价","成交量","持仓量","涨幅(%)","日增量","Delta","Gama","合约交易代码");
for i:=0 to length(t)-1 do
begin
tmp:=t[i,"GRP"];
hz:=select *,"C" as "看涨" from tmp where ["期权类型"]="认购" end;
hd:=select *,"P" as "看跌" from tmp where ["期权类型"]="认沽" end;
hzR:= Field_AddPrefix(hz[:,hzRow],"看涨@",0);
hdR:= Field_AddPrefix(hd[:,hdRow],"看跌@",0);
re&= hzR|array(("行权价":t[i,"行权价"]))|hdR;
end
return re;
End;