Bootstrap

量化交易系统开发-实时行情自动化交易-8.16.天勤平台

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}")

通过以上步骤,完整实现了在天勤平台上开发和回测双均线量化交易策略的全过程,展示了策略开发、均线计算、信号生成、回测与优化的关键环节。

;