19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。
接下来会对于天勤平台介绍。
天勤(TqSdk)是国内知名的量化交易开发平台,专注于期货及衍生品的量化交易。其采用Python语言开发,提供简单易用的API接口,支持策略开发、回测和实盘交易功能,适合从入门到专业级别的量化交易者。
本文通过一个经典的“双均线策略”实例,详细介绍如何在天勤平台上进行量化交易策略开发与回测。
1. 策略背景:双均线策略
策略逻辑
双均线策略是一种趋势跟随型策略,通过短期均线和长期均线的交叉信号判断市场的多空状态:
- 买入信号:短期均线上穿长期均线(黄金交叉)。
- 卖出信号:短期均线下穿长期均线(死亡交叉)。
策略优劣
- 优点:适用于趋势性较强的市场,例如商品期货和股指期货。
- 缺点:在震荡行情中可能产生较多虚假信号。
2. 策略开发
天勤平台使用Python作为策略开发语言,以下是实现双均线策略的核心代码。
(1)策略初始化
在初始化部分,设置策略参数并加载行情数据。
from tqsdk import TqApi, TqSim
# 初始化API和模拟账户
api = TqApi(TqSim())
# 定义交易合约
symbol = "SHFE.au2306" # 以黄金期货为例
# 策略参数
short_window = 5 # 短期均线周期
long_window = 20 # 长期均线周期
position = 0 # 持仓状态:0表示空仓,1表示多头
# 获取K线数据
klines = api.get_kline_serial(symbol, 60) # 60秒K线
(2)计算均线
通过历史K线数据计算短期均线和长期均线。
def calculate_moving_average(kline, window):
"""
计算指定窗口的移动平均值
"""
if len(kline) < window:
return None
return sum(kline.close[-window:]) / window
(3)生成交易信号
根据均线交叉信号触发买卖操作。
while True:
api.wait_update() # 等待行情更新
# 确保K线数据足够
if len(klines) < long_window:
continue
# 计算短期均线和长期均线
short_ma = calculate_moving_average(klines, short_window)
long_ma = calculate_moving_average(klines, long_window)
# 买入逻辑:短期均线向上突破长期均线
if short_ma > long_ma and position == 0:
order = api.insert_order(symbol=symbol, direction="BUY", offset="OPEN", volume=1)
position = 1
print(f"买入开仓: {order}")
# 卖出逻辑:短期均线向下跌破长期均线
elif short_ma < long_ma and position == 1:
order = api.insert_order(symbol=symbol, direction="SELL", offset="CLOSE", volume=1)
position = 0
print(f"卖出平仓: {order}")
3. 策略回测
天勤平台提供了高效的回测功能,通过加载历史数据模拟策略的运行过程。
(1)配置回测环境
使用模拟账户和回测引擎设置回测的基础参数。
from tqsdk.backtest import TqBacktest
# 初始化回测环境
api = TqApi(TqSim(), backtest=TqBacktest(start_dt="2022-01-01", end_dt="2022-12-31"))
# 获取回测数据
klines = api.get_kline_serial(symbol, 60)
(2)运行回测
将策略逻辑嵌入到回测流程中。
while True:
api.wait_update() # 等待数据更新
# 确保有足够的K线数据
if len(klines) < long_window:
continue
# 计算均线
short_ma = calculate_moving_average(klines, short_window)
long_ma = calculate_moving_average(klines, long_window)
# 买入逻辑
if short_ma > long_ma and position == 0:
api.insert_order(symbol=symbol, direction="BUY", offset="OPEN", volume=1)
position = 1
# 卖出逻辑
elif short_ma < long_ma and position == 1:
api.insert_order(symbol=symbol, direction="SELL", offset="CLOSE", volume=1)
position = 0
回测完成后,平台会生成策略的回测报告,包括资金曲线、交易详情和绩效指标。
4. 策略优化
(1)参数调优
通过网格搜索方法优化短期和长期均线的参数组合。
# 参数网格
short_windows = range(3, 10)
long_windows = range(15, 30)
# 优化过程
for short in short_windows:
for long in long_windows:
if short >= long:
continue
# 设置参数并运行回测
short_window = short
long_window = long
api = TqApi(TqSim(), backtest=TqBacktest(start_dt="2022-01-01", end_dt="2022-12-31"))
klines = api.get_kline_serial(symbol, 60)
# 运行策略逻辑(省略,调用已有的策略代码)
(2)添加止盈止损
通过风险控制进一步优化策略性能。
# 止盈止损逻辑
profit_target = 0.1 # 止盈比例
loss_limit = -0.05 # 止损比例
# 检查当前持仓盈亏
if position > 0:
current_price = klines.close[-1]
cost_basis = api.get_position(symbol).price
pnl = (current_price - cost_basis) / cost_basis
# 触发止盈或止损
if pnl >= profit_target or pnl <= loss_limit:
api.insert_order(symbol=symbol, direction="SELL", offset="CLOSE", volume=1)
position = 0
print(f"止盈止损触发,当前盈亏: {pnl}")
通过以上步骤,完整实现了在天勤平台上开发和回测双均线量化交易策略的全过程,展示了策略开发、均线计算、信号生成、回测与优化的关键环节。