iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
永豐金融APIs

永豐證API X Python系列 第 20

【D20】修改食譜#1:根據市價,模擬改價

  • 分享至 

  • xImage
  •  

前言

假日沒有行情,所以只能平日來做取得行情資料的工作,所以今天的文章是根據期貨行情,模擬價格修改的委託策略。這邊先不實作送單的作業。

參考網站: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()中,讓程式可以取得資料,並且處理。當然最後要取消訂閱囉~


後記

先做簡單的修改價格,後續再繼續玩更複雜的東西。


上一篇
【D19】嘗試料理#2:取得所有指數清單
下一篇
【D21】修改食譜#2:根據市價,模擬小台改價
系列文
永豐證API X Python31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言