VeighNa量化社区
你的开源社区量化交易平台
330815977's Avatar
Member
离线
78 帖子
声望: 0

Exception in thread Thread-3:
Traceback (most recent call last):
File "C:\vnstudio\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\vnstudio\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "C:\vnstudio\lib\site-packages\vnpy-2.1.2-py3.7.egg\vnpy\event\engine.py", line 60, in _run
self._process(event)
File "C:\vnstudio\lib\site-packages\vnpy-2.1.2-py3.7.egg\vnpy\event\engine.py", line 73, in _process
[handler(event) for handler in self._handlers[event.type]]
File "C:\vnstudio\lib\site-packages\vnpy-2.1.2-py3.7.egg\vnpy\event\engine.py", line 73, in <listcomp>
[handler(event) for handler in self._handlers[event.type]]
File "C:\vnstudio\lib\site-packages\vnpy-2.1.2-py3.7.egg\vnpy\app\option_master\engine.py", line 173, in process_tick_event
portfolio.update_tick(tick)
File "C:\vnstudio\lib\site-packages\vnpy-2.1.2-py3.7.egg\vnpy\app\option_master\base.py", line 606, in update_tick
chain.update_tick(tick)
File "C:\vnstudio\lib\site-packages\vnpy-2.1.2-py3.7.egg\vnpy\app\option_master\base.py", line 436, in update_tick
option.update_tick(tick)
File "C:\vnstudio\lib\site-packages\vnpy-2.1.2-py3.7.egg\vnpy\app\option_master\base.py", line 279, in update_tick
self.calculate_option_impv()
File "C:\vnstudio\lib\site-packages\vnpy-2.1.2-py3.7.egg\vnpy\app\option_master\base.py", line 176, in calculate_option_impv
underlying_price = self.underlying.mid_price
AttributeError: 'NoneType' object has no attribute 'mid_price'

这个问题偶而会出现, 尤其是在交易的开市时段 启动vnpy时,有一定的概率会出现, 不知道是不是标的物合约还未设置,就有期权合约的Tick进来,然后就开始计算隐波了,
可不可以像calculate_cash_greeks那样, 在calculate_option_impv函数开头,加一个:

if not self.underlying:
return

我来试试看,

OptionMaster 怎样对冲组合持仓的Vega风险?
Delta可以自动对冲, 那么Vega是要怎么弄呢, 要手工进行对冲吗?

哦,还有一问,就是,对于股指期权,标的物是连续的,只是期权合约会跨月换月, 比较方便Vega期限结构对冲,
可是, 商品期权的标的物, 是不连续的,各个月分不同, 那它的Vega期限结构, 相当于算是基于不同的标的物了, 那Vega还可以正常对冲吗?

对冲引擎在计算对冲报单手数时, 可能会出现纯小数手数, 或非整数手数,
send_order(self, req: OrderRequest) 会把这个接直报给Gateway 的send_order去报单,

CTP Gateway 在send_order里面,对报单手数进行了取整 int(req.volume),
对于大于1的非整数手数, 取整之后的手数会>=1, 报单没有问题,
但对于纯小数手数, 取整之后的手数会变成0, 这样报单会不会被认为是废单/无效单?
如果这种废单/无效单?频繁报送, API那边会不会被封掉账号呢?,
不知道这种情况一般是怎么处理的?

现金希腊值的意义,在 Black-76 欧式期货期权 和 二叉树 美式期货期权 两种定价模型上 不一致
早前我曾请教过有关现金希腊值的:
https://www.vnpy.com/forum/topic/2634-qing-jiao-yi-xia-you-guan-vnpyqi-quan-xian-jin-xi-la-zhi-de-yi-xie-yi-wen
在那里,vnpy作者曾解答了我的疑惑,他是这么说的:
用Python的交易员 wrote:

现金Delta:价格上涨1%,合约的价值变动
现金Gamma:价格上涨1%,合约的现金Delta变动
现金Theta:每过去1天,合约价值的减少
现金Vega:隐波上涨1%,合约的价值变动

所有的数字,都直接反应你的账户盈亏,而不是那些理论数值。

好,这个我现在明白了。 非常感谢vnpy耐心的解答。
我现在的问题是,我在实际测试中发现,这个现金希腊值的意义,在 Black-76 欧式期货期权 和 二叉树 美式期货期权 两种定价模型上 不一致。
问题出在 二叉树 美式期货期权 定价模型中希腊值计算返回的只是传统意义上的理论希腊值,以Delta为例,它返回的是传统意义上的理论Delta, 而没有额外乘上了标的物价格的1%,
具体情况,我来说一说:
在OptionData 类 中有一个函数calculate_cash_greeks计算现金希腊值,这个函数中是调用了该期权的定价模型中的方法calculate_greeks去计算希腊值 ,在最开始的时候,我以为定价模型中calculate_greeks函数反回的就是理论希腊值,但是依照作者对现金希腊值的解答,我按照Delta的定义的计算公式推导了一下,发现定价模型中calculate_greeks函数反回的不能是传统意义上的理论Delta, 它返回的应该是 理论delta x (标的价格*0.01) ,即 在传统的理论希腊值Delta上 额外乘上了标的物价格的1%,它返回的是这个额外乘上了标的价格的1%之后的值, 只有这样,再乘上合约尺寸,得到的现金Delta,才符合vnpy作者说的意义:标的物价格上涨1%,期权合约的价值变动。
我进一步去看定价模型,果然如此,Black-76 欧式期货期权black_76.py,计算希腊值Delta返回的时候,确实是额外乘上了标的物价格的1%,
然而,在二叉树 美式期货期权定价模型binomial_tree.py,计算希腊值Delta返回的时候,直接返回Delta, 却并没有额外乘上了标的物价格的1%,
所以,这要一来, 在沪深300 IO股指期权, 上期所沪铜期权,上,现金希腊值,持仓希腊值的意义是正确的,
而在 豆粕期权, 白糖期权。。。。等其它商品期权上,现金希腊值,持仓希腊值的意义 ,比如在vnpy T型报价表上的希腊值, 持仓希腊值列表上的希腊值,它们就和那些欧式期货期权的意思不一样了,它们实际上是 “ 标的物价格变化 一个点/一个跳动/一块钱?时,相应期权合约价值变动多少钱? 而不是”标的物价格上涨1%,期权合约的价值变动。“

如此,我就有点困惑了,现金希腊值的意义,在 Black-76 欧式期货期权 和 二叉树 美式期货期权 两种定价模型上 不一致, 是程序设计本意就是如此?还是其它别的原因呢?
可能 商品期货不如股指波动剧烈? 也可能波动更剧烈? 用”标的物价格上涨1%“ 这个尺度来计量太大了,所以特别的以”标的物价格变动1块钱“这种尺度来计量更适合些?
请大师指点解惑,多谢~~

另外还有一个问题 vnpy-2.1.2,
(VN Studio) E:\vnpy-2.1.2\examples\vn_trader>python run.py
Traceback (most recent call last):
File "run.py", line 57, in <module>
from vnpy.app.option_master import OptionMasterApp
File "C:\vnstudio\lib\site-packages\vnpy-2.1.2-py3.7.egg\vnpy\app\option_master__init.py", line 3, in <module>
from .engine import OptionEngine, APP_NAME
File "C:\vnstudio\lib\site-packages\vnpy-2.1.2-py3.7.egg\vnpy\app\option_master\engine.py", line 33, in <module>
from .pricing import binomial_tree_cython as binomial_tree
File "
init__.pxd", line 918, in init binomial_tree_cython
ValueError: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216 from C header, got 192 from PyObject
这个不知道 是什么原因?

vnpy 2.x. BG怎样生成x秒 K线?

在电子眼交易时,这样会不会有自成交风险?
def do_trading(self) -> None:
""""""
if self.long_allowed and self.check_long_finished():
self.snipe_long() # 以卖价(对价)出击买入

    if self.short_allowed and self.check_short_finished():
        self.snipe_short()           # 同时以买价(对价)出击卖出

这样会不会有自成交风险呢?
假如在报单的过程中, 盘口已改变发生了变化(比如撤走了), 碰巧网速上又开个玩笑的话? ~~

Delta对冲, 在对冲阈值检查的时候, 用的是标的物的理论Delta, 不是现金Delta.

检查用户界面设定的对冲阈值是否小于标的物理论Delta的60% (underlying.theo_delta (widget.py, Line 665668)
而对冲引擎在判断是否执行对冲的时候, 用的却又是整个组合的现金Delta. portfolio.pos_delta (engine.py Line 429
432)

1, 为什么在对冲阈值检查的时候, 是用标的物的Delta的60%? 而不是用整个组合的 Delta?
2, 为什么在对冲阈值检查的时候, 是用标的物的理论Delta? (underlying.theo_delta), 而不是用现金Delta?
3, 那么, 用户界面上输入的Delta目标 和 对冲阈值(这个好像是容忍Delta偏离范围?) , 这用户输入的 那又是什么Delta呢? theo_delta? pos_delta? underlying delta? 还是指整个组合的Delta? theo_delta? pos_delta?
哈哈哈~ 我转迷糊了

widget.py, Line 665~~668......:

Check delta of underlying

    underlying = self.option_engine.get_instrument(vt_symbol)
    min_range = int(underlying.theo_delta * 0.6)
    if delta_range < min_range:
        msg = f"Delta对冲阈值({delta_range})低于对冲合约"\
            f"Delta值的60%({min_range}),可能导致来回频繁对冲!"
        QtWidgets.QMessageBox.warning(
            self,
            "无法启动自动对冲",
            msg,
            QtWidgets.QMessageBox.Ok
        )
        return
#

engine.py Line 429~~432...:

Do nothing if portfolio delta is in the allowed range

    portfolio = self.option_engine.get_portfolio(self.portfolio_name)
    if delta_min <= portfolio.pos_delta <= delta_max:
        return

OptionMaster电子眼只能盯一个品种组合吗?有没有办法可以盯多个品种组合呢?
比如,IO股指期权, 还有几个商品期权,比如铜期权, 豆粕,菜粕,白糖,PTA,棉花,铁矿石,甲醇, 橡胶........ 可不可以同时监测描扫呀~
我看到算法代码写法,好像是有考虑到多实例的, 感觉一个期权大师就这样只盯一个品种组合有点浪费哈哈哈~~

再问,如果用多进程的方式来, 那那啥CTP这些目录路径啥的, 是怎样指定的? 不区分目录的话,多进程直接启会不会有什么问题?

Delta对冲,对冲引擎只自动对冲买入/卖出标的物合约吗? 如果是看涨看跌期权对冲就不支持自动对冲是吧?
我看代码,好像是这样的,

我看vnpy代码,结合期权书上,大致上的理解是:

1, Delta 表示标的资产价格变动一个单位,期权价格变动的数值, 比如豆粕的某期权合约delta为0.5意味着豆粕价格上涨10块钱,该期权的价格上涨5块钱.
vnpy T型报价表中显示的 Delta 好像是还乘上了合约乘数, 这样的delta 的意义是?
标的物价格上涨1元, 则1手期权的 持仓的 市值 上涨Delta元?

2, Gamma值为0.05,则表示标的价格上升1元,所引起delta增加量为0.05. delta将从0.6增加到0.65。
vnpy T型报价表中显示的Gamma, 也是乘上了合约乘数,,
设Gamma=0.05, 合约乘数为10,标的物价格上涨1元, 所引起delta增加量为0.05, 继而所引起的1手期权的 市值的增量为0.05 *10 =0.5元
这样的vnpy T型报价表中Gamma的意义就是:
标的物价格上涨1元, 所引起 1手期权的 持仓的 市值 上涨Gamma 元? 下跌同理?

3, vega是期权的一种风险度量指标,度量的是动率对期权价格的影响,表示当标的物价格波动率变化一个百分点时期权价格的变化值,计算方法是权利金的变动值/波动率变动值。就是波动率变化1%, 期权权利金会变化Vega元
vnpy T型报价表中显示的Vega, 也是乘上了合约乘数,这个Vega的意义就是:
当波动率变化1%, 1手期权持仓的市值会变化Vega元?

4, theta表示时间(vnpy中指的是交易日)减少一天, 期权价格的变化值(减少值 )
vnpy T型报价表中显示的Theta, 也是乘上了合约乘数, 这个Theta的意义就是:?
表示时间(vnpy中指的是交易日)每减少一天, 1手期权持仓的市值的变化值(减少值 ),也就是1手期权持仓,拿一天会亏多少钱(在时间价值上)

但是我发现, 以上的理解好像和实际不符,好像说不通?:
比如: 沪深300指数4205,
IO2003-C-4150, vnpy T 型报价显示 Delta = 2492 (实值)
IO2003-C-4200, vnpy T 型报价显示 Delta = 2119 (实值)
IO2003-C-4250, vnpy T 型报价显示 Delta = 1735 (平值)
这怎么理解呢?
是说 沪深300指数变动一个点, 一手IO期权的市值变化2492元, 2119元,1735元?
还是说 沪深300指数变动100点, 一手IO期权的市值变化2492元, 2119元,1735元?
但是, 平值期权的delta=0.5, 沪深300指数变动100点, 平值期权价格变动50点(暂不考虑Gamma和其它), 那一手IO期权的市值变化那应是50 x 100(合约乘数)=500元 , 这和vnpy T 型报价显示 Delta却不是, 哈哈哈, 这个没法儿解释了~
请求哪位懂的大师科普一下

情景分析那个 波动率曲面一定要有持仓才能显示出来吗?

电子眼定价
Traceback (most recent call last):
File "C:\vnstudio\lib\site-packages\vnpy-2.1.0.1-py3.7.egg\vnpy\app\option_master\ui\manager.py", line 132, in on_clicked
self.manager.start_algo_pricing(self.vt_symbol)
File "C:\vnstudio\lib\site-packages\vnpy-2.1.0.1-py3.7.egg\vnpy\app\option_master\ui\manager.py", line 412, in start_algo_pricing
self.algo_engine.start_algo_pricing(vt_symbol, params)
File "C:\vnstudio\lib\site-packages\vnpy-2.1.0.1-py3.7.egg\vnpy\app\option_master\engine.py", line 583, in start_algo_pricing
result = algo.start_pricing(params)
File "C:\vnstudio\lib\site-packages\vnpy-2.1.0.1-py3.7.egg\vnpy\app\option_master\algo.py", line 61, in start_pricing
self.calculate_price()
File "C:\vnstudio\lib\site-packages\vnpy-2.1.0.1-py3.7.egg\vnpy\app\option_master\algo.py", line 265, in calculate_price
ref_price = option.calculate_ref_price()
File "C:\vnstudio\lib\site-packages\vnpy-2.1.0.1-py3.7.egg\vnpy\app\option_master\base.py", line 221, in calculate_ref_price
self.option_type
File "binomial_tree_cython.pyx", line 77, in binomial_tree_cython.calculate_price
File "binomial_tree_cython.pyx", line 40, in binomial_tree_cython.generate_tree
ZeroDivisionError: float division

请教一下,vnpy有哪个接口可以接入能看到恒生指数期权的? 包括大型恒生指数期货/期权, 小型恒生指数期货/期权.,,,, 免费还是收费的呢?

波动率微笑曲线里面的三条曲线: 看涨,看跌,定价
但仅有看涨,看跌两条曲线确实是在微笑着的, 定价波动率曲线始终是水平的? 在哪里打开这条曲线?
我看到源代码里面,这个定价波动率曲线,好像只是看涨期权的 call.pricing_impv * 100, 有什么讲究吗?为什么不是看跌期权的呢? 嘿嘿,

举个例子,比如IO股指期权,升贴水那个字段显示的值是0.2,那么:
1, 这是不是说,如果用当前的平值期权,来合成标的物的多头头寸的话, 其合成成本 要比直接开仓标的物的仓位的成本要贵了0.2个指数点位?
2, 如果是这样的话,那是否意味着,如果反过来,用当前的平值期权,来合成标的物的空头头寸的话, 其合成的空头,成本上是不是就有了0.2个指数点的优势呢?(相对于直接开空建仓标的物合约)

vnpy-master, vnpy-2.1.0 期权模块,情景分析,点了按钮“执行分析”之后,界面未刷新
一定要在改变窗口大小之后,才会显示分析结果的图形出来,
option_master/ui/chart.py 的最后一行
也就是update_chart 函数的最后一行,的后面,应该调用一下 基类QWidget的update函数 QWidget::update ():
self.update()

看了源代码,这个电子眼的用法,是不是就是
设定一个价差范围,隐波范围,持仓目标,程序实时计算出一个理论价格, 然后就程序监控,等报价到了范围内了就自动下单交易?
是这样吧?

option.net_pos , self.target_pos, self.max_pos ,没有看明白,
这几个pos的意思, 是有符号数吗还是无符号数呢?
和CTA里面的pos 正负号代表多空持仓有什么区别的,
option.net_pos , 什么是净仓啊
self.target_pos, 目标持仓?
self.max_pos 持仓上限?
在snipe_long函数中:
pos_up_limit = self.target_pos + self.max_pos
volume_left = pos_up_limit - option.net_pos
在snipe_short函数中又成了:
pos_down_limit = self.target_pos - self.max_pos
volume_left = option.net_pos - pos_down_limit
没有看懂,

vnpy-2.1.0-py3.7-linux-x86_64.egg/vnpy/app/option_master/base.py", line 169, in calculate_option_impv
underlying_price = self.underlying.mid_price
AttributeError: 'NoneType' object has no attribute 'mid_price'
奇怪了,这个报错莫名其妙~~~
难道 是在 set_underlying 之前调用到了calculate_option_impv??

vnpy-2.1.0 期权启动 有抱怨:Faile to import cython option pricing model, please rebuild with cython in cmd.
但是好像没有看出有什么影响?

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】