关于期权希腊字母的bug

只要公式中有涉及到期权希腊字母,交易就不正常,这是什么原因?麻烦老师答复一下,谢谢

Vars

   Global Integer id(0);

   Global Bool subFlag(False);


Events

   OnReady()

   {

       if(!subFlag)

       {

           id = SubscribeBar(RelativeSymbol(), "1d", BeginDateTime);

           subFlag = True;

       }

   }


   OnBar(ArrayRef<Integer> indexs)

   {

       Buy(1, Open);

       Sell(1, Open);

       Numeric volty = Volatility(data[id].Close);

       Print("Delta:" + Text(Delta(TradingDayLeft, StrikePrice, data[id].Close, 5, volty, OptionType, OptionStyle)));

}

关于期权希腊字母的函数计算的问题
关于股指期权的映射倍数设置
关于tbquant3中期权板块的问题
关于期权的VIX指数
Bug!Bug!Bug!Bug!Bug!Bug!Bug!Bug!
关于当日持仓代理的一个小bug反馈
卖方期权的 函数
关于投资分析功能无法获取完整期权交易信息的问题
期权回测架构的尝试
期权

和研发人员确认了一下,不是bug

就是因为maxbarsback导致的信号被过滤掉

前面三根有信号,是因为volatility函数内部,直到第三根bar开始才执行含有回溯的操作,而之前两根因为没有回溯操作,所以不会过滤信号。

感谢大佬回复,但是貌似还有问题,当我加载更多K线,比如改成5分钟周期,就只有第一天有信号,后面就没有了

然后我用CurrentBar去限制前期不开仓,后面也是一样没有信号,只在当天以及第二天的第一根K线有信号

这个可能是因为,钱亏完了......

你可以输出一下portfolio_currentequity看看

不会的,这里写的是以open开多平多,只亏手续费的,我看了报告也只亏了几千

发代码复现

Params

//此处添加参数


Vars

   Global Integer id(0);

   Global Bool subFlag(False);


Events

   OnReady()

   {

       if(!subFlag)

       {

           id = SubscribeBar(RelativeSymbol(), "5m", BeginDateTime);

           subFlag = True;

       }

   }


   OnBar(ArrayRef<Integer> indexs)

   {

    if(CurrentBar < 100)

Return;

       Buy(1, Open);

       Sell(1, Open);

       Numeric volty = Volatility(data[id].Close);

       Print("Delta:" + Text(Delta(TradingDayLeft, StrikePrice, data[id].Close, 5, volty, OptionType, OptionStyle)));

}

原因是一样的。

你可以通过commentary一下maxbarsback来查看当前bar的最大回溯根数。

在你信号消失的地方,这个最大回溯根数发生了突变,变得非常大。

主要原因还是volatility这个函数的问题。

首先第一,这个函数计算波动率,理论上应该是通过标的物数据去计算,而不是通过期权数据计算,你虽然参数使用的是data[id],但实际上正确写法应该是在volatility函数前面家data[id]。

其次,波动率数据计算的单位是日,参数数字实际上表示的是日。所以理论上如果执行正确,你没有加参数,那就是默认30,30日内的数据,都应该没信号的。

最后,你这个写法也非常怪异。任何一个模型,都是先做数据处理,再判断开平信号。数据处理的部分,如果发现数据不够计算正确的结果,那就不应该执行开平信号判断部分。

你的这个问题,本质上还是因为tb机制里是动态判断最大回溯数量从而进行信号过滤所导致的,原因跟上面完全一致。如果你是正常写模型,自己做一个控制,基本上是不会出现这个问题的


解决问题了,感谢大佬,我先写交易部分就为了验证是函数的问题,和交易的逻辑没关系,我的结论是,volatility引用数据的图层不能交易

这个主要是由于volatility这个函数存在回溯周期的缘故

tb有一个很老的机制,就是如果策略中使用了回溯调用,比如需要最多回溯10根bar来计算,那么图表最开始的10根bar是不会作图,也不会出信号的

而volatility是默认回溯30根的

你如果修改了参数会发现信号显示也会变化

但是这个数字和根数没有对上,这个会和产品研发确认看是不是bug