FAQ > 金融建模 > 应用案例 > 数据提取

Q:提取品种期权系列指标    

  • A:品种期权系列指标说明,参考:FAQ:2023-09-25-应用专题-期权系列06:品种期权系列指标算法与提取说明(更新版)
     批量循环提取指标的方法可参考:FAQ:Q:取数Demo-取一段时间内多个股票的指标值

    实现案例
    特别说明:由于模型计算数据量较大,执行时间会较长,想要提高效率可以使用网格计算或减少单次执行的标的代码数量。
    网格计算说明:FAQ:Q:天软网格计算
    范例一:取日线数据
    获取20240725所有期权标的的日线指标
      endt:=20240725t;
      pzs:=OP_GetUnderlyingSecurity(); //获取所有期权品种
      stocks:=array();
      for i,pz in pzs do
        stocks&=OP_GetOptionChain(pz,endt);
      //按期权标的对代码列表分组
      stocks:=select ["标的证券代码"],sselect ["StockID"] from thisgroup end as "代码列表"
          from stocks group by ["标的证券代码"] end;

      setsysparam(pn_cycle(),cy_day());
      setsysparam(pn_date(),endt);
      strt:=datetostr(endt);
      rt:=array();
      x:=0;
      for i in stocks do
      begin
        stock:=stocks[i,"标的证券代码"];
        echo i$"--"$stock;
        OptionArr:=stocks[i,"代码列表"];
        setsysparam(pn_stock(),stock);

        rt[x,'StockID']:=stock;
        rt[x,'StockName']:=stockName(stock);
        rt[x,'Date']:=strt;

        //获取期权标的行情指标
        rt[x,'收盘价']:=close();
        rt[x,'成交量']:=vol();
        rt[x,'成交金额']:=amount();
        //获取多个期权指标
        rt[x,'成交量之和']:=Options_Vol_Sum(OptionArr,0);
        rt[x,'成交量PCR']:=Options_Vol_PCR(OptionArr);
        rt[x,'持仓量之和']:=Options_OpenInterest_Sum(OptionArr,0);
        rt[x,'持仓量PCR']:=Options_OpenInterest_PCR(OptionArr);
        rt[x,'成交金额之和']:=Options_Amount_Sum(OptionArr,0);
        rt[x,'成交金额PCR']:=Options_Amount_PCR(OptionArr);
        rt[x,'隐含波动率']:=Options_IV(OptionArr,0,0);
        rt[x,'Skew']:=Options_Skew(OptionArr,0,'spline');
        rt[x,'隐波差(%)']:=Options_PCIVD(OptionArr,0);
        //还可以继续添加其它指标
        //rt[k,'xxx']:=funcxxx(...);
        x++;
      end
      return rt;

    结果展示:


    范例二:取分钟线数据
    获取20240725指定cu品种期权标的的分钟线指标
      endt:=20240725t;
      begt:=specall(ref(sp_time(),1),array(pn_stock():"SH000001",pn_date():endt,pn_cycle():cy_day()));
      pz:="cu";
      stocks:=OP_GetOptionChain(pz,endt);
      //按期权标的对代码列表分组
      stocks:=select ["标的证券代码"],sselect ["StockID"] from thisgroup end as "代码列表"
          from stocks group by ["标的证券代码"] end;
      setsysparam(pn_cycle(),cy_1m()); //设置周期
      rt:=array();
      x:=0;
      for i in stocks do
      begin
        stock:=stocks[i,"标的证券代码"];
        echo i$"---"$stock;
        OptionArr:=stocks[i,"代码列表"];
        setsysparam(pn_stock(),stock);
        daylist:=stocktradedayqk(begt+18/24,endt+18/24);//获取指定日交易时间序列
        
        for j,dendt in daylist do
        begin
          setsysparam(pn_date(),dendt);
          rt[x,'StockID']:=stock;
          rt[x,'StockName']:=stockName(stock);
          rt[x,'Date']:=datetimetostr(dayEnd);
          
          //获取期权标的行情指标
          rt[x,'收盘价']:=close();
          rt[x,'成交量']:=vol();
          rt[x,'成交金额']:=amount();
          //获取多个期权指标
          rt[x,'成交量之和']:=Options_Vol_Sum(OptionArr,0);
          rt[x,'成交量PCR']:=Options_Vol_PCR(OptionArr);
          rt[x,'持仓量之和']:=Options_OpenInterest_Sum(OptionArr,0);
          rt[x,'持仓量PCR']:=Options_OpenInterest_PCR(OptionArr);
          rt[x,'成交金额之和']:=Options_Amount_Sum(OptionArr,0);
          rt[x,'成交金额PCR']:=Options_Amount_PCR(OptionArr);
          rt[x,'隐含波动率']:=Options_IV(OptionArr,0,0);
          rt[x,'Skew']:=Options_Skew(OptionArr,0,'spline');
          rt[x,'隐波差(%)']:=Options_PCIVD(OptionArr,0);
          //还可以继续添加其它指标
          //rt[k,'xxx']:=funcxxx(...);
          x++;
        end
      end
      return rt;

    结果展示: