【D20】修改食谱#1:根据市价,模拟改价

前言

假日没有行情,所以只能平日来做取得行情资料的工作,所以今天的文章是根据期货行情,模拟价格修改的委托策略。这边先不实作送单的作业。

参考网站:Futures

本日程序码使用:d20_change_price_by_tick.py


修改class

trader中新增两个function,其中一个是quote_callback(topic, quote),另一个是change_price(price, diff, points)

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']}]rate:[{quote['DiffRate']}]volumn:[{quote['Volume']}]"
    )

    self.change_price(
        quote["Close"], True if quote["DiffRate"][0] > 0 else False, 10
    )

def change_price(self, price, diff, points):
    """Simulate to change the price of the order."""

    print(
        f"current price:{price[0]}-new price:{price[0]-points if diff else price[0]+points}"
    )

quote_callback是参考文件,使用传统的做法,在主程序中使用set_quote_callback()(下面会说明),把收到的行情资料,丢到这个function进行处理。而我们这边处理的方式是经由change_price()进行修改价格,但这个价格是模拟修改动作,并不是真的把价格修改掉。

  • set_quote_callback():在其中用quote["DiffRate"][0]进行判断,看变动率是正数还是负数,当为负数时,就表示False,正数为True,作为後续改价的依据。
  • change_price():这个功能中有收到目前的价格,变动的正负号,以及点数要修改多少这三个变数,而修改价格的逻辑是,当变动为正数,表示上涨。以期货来说,有买进和卖出两个方向,假设我们的策略是:上涨时,我们买进期货,下跌时,我们卖出期货。所以当diff为正数时,我们要用比较低的价格购买(低买高卖才会赚钱),所以就是「用现在的价格减去要变动的点数」,假设目前是16000所以就会是16000-10,也就是15990;反之,负数表示下跌,我们要高卖低买,所以就是16000+10的价格去卖这期货。

主程序

主要执行的程序也是有个sleeper(),进行给30秒的时间取回报。

def sleeper():
    """进行执行绪睡觉功能,用来等待并且处理价格"""
    print("-start sleep...")
    time.sleep(30)
    print("-Wake up!!!!")


timer = threading.Thread(target=sleeper)  # 建立执行绪

t = trader()
t.login()

t.subscribe(t.api.Contracts.Futures.TXF["TXF202110"])  # 订阅台指期-2021/10

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

其中,呼叫api.quote.set_quote_callback(function名)的功能,把处理行情资料的功能回呼到我们的quote_callback()中,让程序可以取得资料,并且处理。当然最後要取消订阅罗~


後记

先做简单的修改价格,後续再继续玩更复杂的东西。


<<:  Day19 PHP的常用函数-4:文件处理函数、Json

>>:  [Day 29] 试验看看Regression方法

D2 - 先生 帮您带位元运算子

前言 JavaScript 运算子大概可以分为几大类:算数运算子、逻辑运算子、赋值运算子、比较运算子...

Day 3 - Rancher 架构与安装方式介绍

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...

IOS、Python自学心得30天 Day-18 影像训练大小

前言: 经过这几天的测试 我一直想让 val_accuracy 提升 但前面的方法几乎都不太管用 所...

[Day30]用Canvas打造自己的游乐场-挑战心得

30天的挑战就这样结束了,现在的心情怎麽有些空虚呢?? 哈哈哈,为什麽会这样呢??我想跟题目有关吧,...

追求JS小姊姊系列 Day1 --- 30天是能追什麽?

为何我要写这篇 嗨,大家好(其实没人) 大部分的人应该都有追求的经验(2D,3D我都很理解),那在追...