以下内容,都是 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
api = sj.Shioaji()
api.login(person_id="帐号", passwd="密码")
ask_bid_period_length = 500
ask_bid_static = np.zeros((6, ask_bid_period_length))
ask_deal_count = 0
bid_deal_count = 0
tick_plot_length = 150
new_index = 0
new_vol = 1
data_in = np.random.rand(2)
data_inner = np.random.rand(2)
data_outer = np.random.rand(4)
def pie_chart():
global data_in, data_inner, data_outer
global pie_outer, pie_inner, pie_in
outer_pie_radius = [180, 150]
inner_pie_radius = [100, 70]
in_pie_radius = [50, 10]
pie_outer = bq.Pie(
size = data_outer,
display_labels = "outside",
apply_clip = False,
radius = outer_pie_radius[0],
inner_radius = outer_pie_radius[1],
display_values = True,
values_format = '.0%',
colors = ['red', 'limegreen', 'red', 'limegreen'],
labels = ['大单委卖成交', '大单委买成交', '小单委卖成交', '小单委买成交']
)
pie_inner = bq.Pie(
size = data_inner,
display_labels = 'inside',
apply_clip = False,
radius = inner_pie_radius[0],
inner_radius = inner_pie_radius[1],
display_value = True,
values_format = '.0%',
colors = ['red', 'limegreen'],
labels = ['卖成笔', '买成笔']
)
pie_in = bq.Pie(
size = data_in,
display_labels = 'inside',
radius = in_pie_radius[0],
inner_radius = inner_pie_radius[1],
display_values = True,
values_format = '.0%',
colors = ['limegreen', 'red'],
labels = ['卖成口', '买成口']
)
fig = bq.Figure(
marks = [pie_outer, pie_inner, pie_in],
animation_duration = 1000,
)
return fig
def proc_ask_bid_staticdata(topic, quote_msg, vol_threshold):
global ask_bid_static
global small_bid_deal_volsum, ask_deal_count, bid_deal_count
ask_volsum = quote_msg.get('TradeAskVolSum', 0)
bid_volsum = quote_msg.get('TradeBidVolSum', 0)
new_vol = quote_msg.get('Volume', [0,])[-1]
ask_bid_static[:, :-1] = ask_bid_static[:, 1:]
if new_askbid_color_data == 1:
ask_deal_count += 1
ask_bid_static[4][-1] = 1
ask_bid_static[5][-1] = 0
if new_vol >= vol_threshold:
ask_bid_static[0][-1] = new_vol
else:
ask_bid_static[1][-1] = new_vol
elif new_askbid_color_data == 2:
bid_deal_count += 1
ask_bid_static[5][-1] = 1
ask_bid_static[4][-1] = 0
if new_vol >= vol_threshold:
ask_bid_static[2][-1] = new_vol
else:
ask_bid_static[3][-1] = new_vol
ask_bid_static_sum = ask_bid_static.sum(axis=1)
data_outer = ask_bid_static_sum[:4]
data_inner = ask_bid_static_sum[4:]
data_in = np.array([ask_volsum, bid_volsum])
def update_pie_chart(update_freq):
global pie_outer, pie_inner, pie_in
if (new_index % update_freq) == 0 and new_index >= tick_plot_length:
with pie_outer.hold_sync() and pie_inner.hold_sync() and pie_in.hold_sync():
pie_outer.sizes = data_outer / data_outer.sum()
pie_inner.sizes = data_inner / data_inner.sum()
pie_in.sizes = data_in / data_in.sum()
@sj.on_qoute
def qoute_callback(topic, quote_msg):
global tick_plot_length
global pie_outer, pie_inner, pie_in
global new_index, new_vol
global large_ask_deal_volsum, small_ask_deal_volsum, large_bid_deal_volsum
global large_bid_deal_volsum, ask_deal_count, bid_deal_count
global ask_bid_static
vol_threshold = 10
if topic.startswith('L'):
proc_ask_bid_staticdata(topic, quote_msg, vol_threshold)
update_pie_chart(update_freq=1)
@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)
pie_chart()
stock2330 = api.Contracts.Stocks["2330"]
api.quote.subscribe(stock2330, quote_type="bidask")
因为我是在盘後才跑这个程序,所以没有办法取得即资料,所以暂时不确定以上的程序能不能正确运行,之後如果有机会在交易时间跑的话,会再验证,如果有问题的话,会再修改。
<<: Day13:13 - 购物车服务(1) - 後端 - 购物车总商品显示、加入购物车API
Mail & Google Group设定 今天来聊聊昨天延续的话题,如何设置什麽 人 这个...
总算,我们已经会建立自己独一无二的神经网路了~但,你有没有发现一个问题,我们的该不会每次要使用模型...
之前不管是介绍到主选单或是 Social Links,可以发现它本身都有预设的 Icon 图示可以对...
接下来我们就可以制作一个myflower的object 去制作一个绽放花点的设定 Learp 使用 ...
什麽事GAE 什麽事GAE (Goolge App Engine) 它是用来快速的建立服务的服务项目...