【D22】修改食谱#2:根据市价,模拟选择权下单

前言

我们从一个简简单单的小菜,逐渐变成丰富的菜肴,今天要做的是选择权。看看会是怎样的食谱吧~

本日程序码使用: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-滤波】图片也有频率?影像资料如何做滤波?

[Day21] swift & kotlin 游戏篇!(3) 小鸡BB-游戏制作-分数与提示排版

游戏示意 swift - Point 与 胜负提示 新增一个Label Text输入: Point:...

无限风光在险峰 结案会议

无限风光在险峰 结案会议 to-do-List PLus 可以多人协作 to-do-list , 在...

安装MLFlow

第一天的简介中, 我们提到会整合training、tracking与serving(如下图). 现在...

Kotlin Android 第25天,从 0 到 ML - TensorFlow Lite 功能与特色

前言: 今天来看一下TensorFlow Lite 功能与特色 和开发流程 大纲 : TensorF...

[D18] DL 深度学习(1)

前面说到深度学习(Deep Learning)是实现机器学习(ML)的一个技术,它使用的算法类似於人...