对于如何构建myquant量化策略这个问题而言,就是获取量化股票接口的基础数据,然后有了基础数据,才能对数据进行加工处理,构建量化策略,进行量化分析,回测和回溯。myquant量化策略主要是基于python进行量化投资的开发,获取数据的方式比较丰富,就比如说一些通常使用的数据接口进行掘金量化的开发文档:
一、逐笔成交量化策略:
TickRecord | 逐笔成交 |
OrderRecord | 逐笔委托 |
OrderQueueRecord | 委托队列 |
StockQuoteRecord | 股票十档行情 |
二、TickRecord (逐笔成交)
字段名 | 类型 | 备注 |
stock_exchange | uint32 | 证券市场,1-SH,2-SZ |
stock_code | string | 证券代码 |
created_at | int64 | 成交日期时间戳(毫秒) |
code | string | 成交编号 |
price | uint32 | 成交单价 |
volume | uint64 | 成交数量 |
amount | uint64 | 成交金额 |
tx_dir | uint32 | 交易方向:0-未知,1-买方成交,2-卖方成交 |
tx_kind | uint32 | 交易类型:0-成交,1-撤单 |
buy_order_seq | string | 买方委托序号 |
sell_order_seq | string | 卖方委托序号 |
也就是说,myquant量化策略需要通过这些股票数据接口来充当介质输出交易者满意的策略,直接在系统上定制,执行程序后,就能将自动交易系统实现委托下单。例如,交易者想精选股盈利,就可以通过挖掘股票数据的条件来满足,比如以下程序:
假如这里选用vn.py中的双均线策略demo,它的量化策略代码如下:
from vnpy.app.cta_strategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
class DemoStrategy(CtaTemplate):
"""演示用的简单双均线"""
# 策略作者
author = "Smart Trader"
# 定义参数
fast_window = 10
slow_window = 20
# 定义变量
fast_ma0 = 0.0
fast_ma1 = 0.0
slow_ma0 = 0.0
slow_ma1 = 0.0
# 添加参数和变量名到对应的列表
parameters = ["fast_window", "slow_window"]
variables = ["fast_ma0", "fast_ma1", "slow_ma0", "slow_ma1"]
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
""""""
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
# K线合成器:从Tick合成分钟K线用
self.bg = BarGenerator(self.on_bar)
# 时间序列容器:计算技术指标用
self.am = ArrayManager()
def on_init(self):
"""
当策略被初始化时调用该函数。
"""
# 输出个日志信息,下同
self.write_log("策略初始化")
# 加载10天的历史数据用于初始化回放
self.load_bar(10)
def on_start(self):
"""
当策略被启动时调用该函数。
"""
self.write_log("策略启动")
# 通知图形界面更新(策略最新状态)
# 不调用该函数则界面不会变化
self.put_event()
def on_stop(self):
"""
当策略被停止时调用该函数。
"""
self.write_log("策略停止")
self.put_event()
def on_tick(self, tick: TickData):
"""
通过该函数收到Tick推送。
"""
self.bg.update_tick(tick)
def on_bar(self, bar: BarData):
"""
通过该函数收到新的1分钟K线推送。
"""
am = self.am
Market市场代码: 0—深圳,1—上海
Stockcode:证券代码;
start :指定的范围开始位置;
count:要请求的 K 线数目,最大值为 800
比如以下语句表示获取获取股票深证的000001股票最近的10条1分钟数据;
api.get_security_bars(7, 0, '000001', 0, 10)
数据获取的接口一般返回list结构,如果需要转化为pandas Dataframe接口,可以使用 api.to_df 进行转化 如:
api.to_df(api.get_security_bars(7, 0, '000001', 0, 10)) # 返回普通list后转DataFrame;再进一步的调研函数程序,就完成myquant量化策略选股的操作了,将股票选股自选股中。
执行示例: