绘图 - 即时五笔

以下内容,都是 shioaji 的官网文件的内容,只是加了一些我自己的理解,感谢永丰提供这麽完整的 sample code

绘图会用到 numpy, pandas, bqplot...等套件,如果之前没有安装,可以先行安装

pip install numpy pandas bqplot
  • 引用套件
import json
import datetime as dt
import numpy as np
import pandas as pd
import bqplot as bq
import shioaji as sj
  • 登入 shioaji
api = sj.Shioaji()
api.login(person_id="帐号", passwd="密码")
  • 建立表格的资料集
bid_color = '#ff0000'
ask_color = '#03ba00'
x_bar_data = np.zeros(10)
y_bar_data = np.zeros(10, dtype=np.int64)
color_bar_data = np.array(['#000000' for i in range(10)])
y_bar_data_diff = np.zeros(10, dtype=np.int64)
  • 建立绘图的方法
def bidask_bar_chart():
    global x_bar_data, y_bar_data, color_bar_data, y_data_diff
    global bar_bidask, bar_bidask_diff
    x_ord = bq.OrdinalScale()
    y_sc = bq.LinearScale()
    stroke_color = '#000000'
    
    bar_bidask = bq.Bars(
        x = x_bar_data,
        y = y_bar_data,
        scales = {'x': x_ord, 'y': y_sc},
        stroke = stroke_color,
        color_mode = 'group',
        padding = 0,
        colors = color_bar_data.tolist(),
        type = 'stacked',
        orientation = 'horizontal',
        opacities = [0.7 for _ in x_bar_data]
    )

    bar_bidask_diff = bq.Bars(
        x = x_bar_data,
        y = y_bar_data_diff,
        scale = {'x': x_ord, 'y': y_sc},
        stroke = stroke_color, 
        color_mode = 'group', 
        padding = 0, 
        colors = color_bar_data.tolist()[::-1],
        type = 'stacked', 
        orientation = 'horizontal',
        opacities=[0.7 for _ in x_bar_data],
    )
    
    ax_x = bq.Axis(scale=x_ord, orientation='vertical')
    ax_y = bq.Axis(scale=y_sc, tick_format='0.0f')

    fig = bq.Figure(marks=[bar_bidask, bar_bidask_diff])

    return fig

  • 建立资料处理方法
def proc_ask_bid_bardata(topic, quote_msg):
    global x_bar_data, y_bar_data, color_bar_data, y_data_diff
    ask_price = quote_msg.get('AskPrice', [0])[0]
    bid_price = quote_msg.get('BidPrice', [0])[0]

    x_bar_data[:5] = quote_msg['BidPrice'][::-1]
    x_bar_data[5:] = quote_msg['AskPrice']

    y_bar_data[:5] = quote_msg['BidVolume'][::-1]
    y_bar_data[5:] = quote_msg['AskVolume']
    y_bar_data[5:] *= -1
    
    y_bar_data_diff[5:] = quote_msg["DiffAskVol"]
    y_bar_data_diff[:5] = quote_msg["DiffBidVol"][::-1]
    color_bar_data[:5] = bid_color
    color_bar_data[5:] = ask_color

  • 建立图表更新方法
def update_barchart(x_bar_data, y_bar_data, color_bar_data, y_bar_data_diff):
    global bar_bidask, bar_bidask_diff
    with bar_bidask.hold_sync() and bar_bidask_diff.hold_sync():
        bar_bidask.x = x_bar_data.copy()
        bar_bidask.y = y_bar_data.copy()
        bar_bidask.colors = color_bar_data.tolist()
        bar_bidask_diff.x = x_bar_data.copy()
        bar_bidask_diff.y = y_bar_data_diff.copy()
        bar_bidask_diff.colors = color_bar_data.tolist()[::-1]
  • 建立取得价格後的回呼方法
@sj.on_quote
def quote_callback(topic, quote_msg):
    global x_bar_data, y_bar_data, color_bar_data, y_data_diff
    if topic.startswith('Q'):
        proc_ask_bid_bardata(topic, quote_msg)
        update_barchart(x_bar_data, y_bar_data, color_bar_data, y_bar_data_diff)
  • 建立 solace 事件回呼方法
@sj.on_event
def event_callback(resp_code, event_code, event):
    print("Response Code: {} | Event Code: {} | Event: {}".format(resp_code, event_code, event))
  • 设定回呼方法
api.quote.set_callback(quote_callback)
api.quote.set_event_callback(event_callback)
  • 绘图
bidask_bar_chart()
  • 订阅报价
stock2330 = api.Contracts.Stocks["2330"]
api.quote.subscribe(stock2330, quote_type="bidask")

因为我是在盘後才跑这个程序,所以没有办法取得即资料,所以暂时不确定以上的程序能不能正确运行,之後如果有机会在交易时间跑的话,会再验证,如果有问题的话,会再修改。


<<:  html 输入框

>>:  Day 25 优化你的广告帐户

【Day 17】递回 Recursion

前言 在解题时可能会遇到一些问题不是正常的回圈就可以解决的,可能需要用到前面的答案来运算,像是计算阶...

[Day 24] Leetcode 416. Partition Equal Subset Sum (C++)

前言 今天继续挑战top 100 liked中sum相关的题目─416. Partition Equ...

仿Trello - Apollo client cache 操作

本系列文以制作专案为主轴,纪录小弟学习React以及GrahQL的过程。主要是记下重点步骤以及我觉...

C# 入门之代码结构初解

前面因为演示写了一些示例代码,对于初学者,可能不是很了解每一行代码的意思,今天我们就来大概的了解一下...

[Day12] Face Detection - 使用OpenCV & Dlib:Dlib MMOD

好酒沉瓮底,精彩在最後;只是要付出一点点代价。 本文开始 前面提到过,使用OpenCV &...