我们从一个简简单单的小菜,逐渐变成丰富的菜肴,今天要做的是选择权。看看会是怎样的食谱吧~
本日程序码使用:d22_change_option.py
跟前几天的做法雷同,不一样的是改变我们的素材,也就是我们主要的味道,从小台变成选择权。
在主程序上面要做些调整,首先把sleep的时间改成60秒,因为最近夜盘的交易量明显变少,所以拉长时间给他有反应的机会。尽管如此,在行情中收到31笔大台的资料,但是选择权却只收到2笔...
接着是订阅选择权,在那之前先看看选择权的合约要怎麽列。
不外乎使用api.Contracts
来看看有什麽,里面有Indexs=(OTC, TSE), Stocks=(OES, OTC, TSE), Futures=(...省略), Options=(..., TX1, TX2, TXO)
,我们需要的就是Options
和里面的TX
开头的。
最後我们需要的是TX2.TX2202110016300C
,也就是:
Option(code='TX216300J1', symbol='TX2202110016300C', name='台指选择权10W2月 16300C', category='TX2', delivery_month='202110', strike_price=16300.0, option_right=<OptionRight.Call: 'C'>, underlying_kind='I', unit=1, limit_up=1860.0, limit_down=0.1, reference=228.0, update_date='2021/10/06')
知道我们的选择权点位目标後,就改写主程序的执行逻辑。
timer = threading.Thread(target=sleeper) # 建立执行绪
t = trader()
t.login()
t.subscribe(t.api.Contracts.Futures.TXF["TXF202110"]) # 订阅台指期-2021/10
t.subscribe(t.api.Contracts.Options.TX2.TX2202110016300C) # 订阅台指选择权10W2月 16300C
t.api.quote.set_quote_callback(t.quote_callback) # 设定处理回报的功能
timer.start() # 执行thread
timer.join() # 等待结束thread
t.unsubscribe(t.api.Contracts.Futures.TXF["TXF202110"]) # 取消订阅台指期-2021/10
t.unsubscribe(t.api.Contracts.Options.TX2.TX2202110016300C) # 取消订阅台指选择权10W2月 16300C
其实除了秒数从30秒变成60秒外,就是小台改订阅台指选,最主要的逻辑是在改点数的部分。
废话不多说,直接看程序码:
def quote_callback(self, topic: str, quote: dict):
"""Get the quote info and change the oder price.
The quote's format is v0: quote is a dict and the value is a list.
"""
print(
f"{topic}-Price:[{quote['Close']}]Diff:[{quote['DiffPrice']}]volumn:[{quote['Volume']}]"
)
if topic.find("TFE/TXF") > 0:
self.diff = quote["DiffPrice"][0]
elif topic.find("OPT/TX") > 0:
reduced_point = 1
# 设定要减少的点数
if self.diff < quote["Close"][0]:
reduced_point = self.diff # 比市价还要低的数字
else:
# 当变动很多时,要剪去的价格会比较大,但比现价还要小
reduced_point = quote["Close"][0] - reduced_point
self.change_price(quote["Close"], True, reduced_point) # 价格比现价还要低,
def change_price(self, price, diff, points):
"""Simulate to change the price of the order."""
self.mxf_price = price[0] - points if diff else price[0] + points
print(f"选择权:current price:{price[0]}-new price:{self.mxf_price}")
其实变动是在quote_callback()
中,这边就只是简单的点数修改。首先我们先取得大台的变动数量,接着根据目前的选择权点数进行删减。比较的逻辑是,当大台的变动点数小於选择权点数,我们就用变动点数当作减值,用该选择权点数减去变动数;但是当大台变动点数大於或是等於选择权点数时,我们就把选择权点数减去设定的1,把它当作减数,然後用选择权的点数减去那个减数,就变成新的值了。
这样做,确保我们的欲购买价格低於市价,并且随着波动而动。
这边会遇到一些问题,像是选择权的点为要选哪个,而且选择权跟股票一样,在不同的区间,跳动的单位不同,像是10以下的点数,就是0.1一个跳动单位,但是50以上却都是为1为跳动单位。再加上有Call、Put和买卖方,让这些组合和变动有更多样貌,所以单以这样的模式很难处理这些案例,只能从中简化很多很多很多来展示。
<<: 【把玩Azure DevOps】Day24 设定Build Pipeline与Release Pipeline的执行权限
>>: 【Day21-滤波】图片也有频率?影像资料如何做滤波?
游戏示意 swift - Point 与 胜负提示 新增一个Label Text输入: Point:...
无限风光在险峰 结案会议 to-do-List PLus 可以多人协作 to-do-list , 在...
第一天的简介中, 我们提到会整合training、tracking与serving(如下图). 现在...
前言: 今天来看一下TensorFlow Lite 功能与特色 和开发流程 大纲 : TensorF...
前面说到深度学习(Deep Learning)是实现机器学习(ML)的一个技术,它使用的算法类似於人...