一、前言
趋势跟踪是量化交易中最经典的策略类型。通过识别和跟踪市场趋势,可以在趋势行情中获得稳定收益。本文将介绍各种趋势跟踪策略的实现方法。
本文将介绍:
- 趋势跟踪基本原理
- 移动平均策略
- 突破策略
- 动量策略
- 趋势确认方法
二、为什么选择天勤量化(TqSdk)
TqSdk趋势跟踪支持:
| 技术指标 | 内置多种趋势指标 |
| 实时数据 | 支持实时行情数据 |
| 回测框架 | 支持策略回测 |
| 灵活扩展 | 支持自定义策略 |
安装方法:
pip install tqsdk pandas numpy
三、趋势跟踪基础
3.1 趋势类型
| 上升趋势 | 价格持续上涨 | 高点更高,低点更高 |
| 下降趋势 | 价格持续下跌 | 高点更低,低点更低 |
| 横盘整理 | 价格震荡 | 无明显趋势 |
3.2 趋势识别方法
| 移动平均 | 均线方向判断趋势 |
| 趋势线 | 连接高低点 |
| 动量指标 | 价格变化速度 |
| ADX | 趋势强度指标 |
四、移动平均策略
4.1 双均线策略
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
功能:双均线趋势跟踪
说明:本代码仅供学习参考
"""
from tqsdk import TqApi, TqAuth
from tqsdk.tafunc import ma
import pandas as pd
def dual_ma_strategy(api, symbol, fast_period=5, slow_period=20):
"""双均线策略"""
klines = api.get_kline_serial(symbol, 3600, 200)
api.wait_update()
ma_fast = ma(klines['close'], fast_period)
ma_slow = ma(klines['close'], slow_period)
# 金叉买入,死叉卖出
if ma_fast.iloc[–1] > ma_slow.iloc[–1] and ma_fast.iloc[–2] <= ma_slow.iloc[–2]:
return 1 # 买入
elif ma_fast.iloc[–1] < ma_slow.iloc[–1] and ma_fast.iloc[–2] >= ma_slow.iloc[–2]:
return –1 # 卖出
return 0 # 持有
# 使用示例
api = TqApi(auth=TqAuth("快期账户", "快期密码"))
signal = dual_ma_strategy(api, "SHFE.rb2510")
print(f"交易信号: {signal}")
api.close()
4.2 多均线策略
def multi_ma_strategy(api, symbol):
"""多均线策略"""
klines = api.get_kline_serial(symbol, 3600, 200)
api.wait_update()
ma5 = ma(klines['close'], 5)
ma10 = ma(klines['close'], 10)
ma20 = ma(klines['close'], 20)
ma60 = ma(klines['close'], 60)
# 均线多头排列
if ma5.iloc[–1] > ma10.iloc[–1] > ma20.iloc[–1] > ma60.iloc[–1]:
return 1 # 买入
# 均线空头排列
elif ma5.iloc[–1] < ma10.iloc[–1] < ma20.iloc[–1] < ma60.iloc[–1]:
return –1 # 卖出
return 0
五、突破策略
5.1 通道突破
def channel_breakout_strategy(api, symbol, window=20):
"""通道突破策略"""
klines = api.get_kline_serial(symbol, 3600, 200)
api.wait_update()
high_max = klines['high'].rolling(window).max()
low_min = klines['low'].rolling(window).min()
current_price = klines['close'].iloc[–1]
# 突破上轨买入
if current_price > high_max.iloc[–2]:
return 1
# 突破下轨卖出
elif current_price < low_min.iloc[–2]:
return –1
return 0
5.2 布林带突破
from tqsdk.tafunc import boll
def bollinger_breakout_strategy(api, symbol):
"""布林带突破策略"""
klines = api.get_kline_serial(symbol, 3600, 200)
api.wait_update()
boll_data = boll(klines['close'], 20, 2)
upper = boll_data['upper']
lower = boll_data['lower']
middle = boll_data['middle']
current_price = klines['close'].iloc[–1]
# 突破上轨买入
if current_price > upper.iloc[–1]:
return 1
# 突破下轨卖出
elif current_price < lower.iloc[–1]:
return –1
return 0
六、动量策略
6.1 RSI动量策略
from tqsdk.tafunc import rsi
def rsi_momentum_strategy(api, symbol, period=14, overbought=70, oversold=30):
"""RSI动量策略"""
klines = api.get_kline_serial(symbol, 3600, 200)
api.wait_update()
rsi_value = rsi(klines['close'], period)
current_rsi = rsi_value.iloc[–1]
prev_rsi = rsi_value.iloc[–2]
# RSI从超卖区向上突破
if prev_rsi < oversold and current_rsi > oversold:
return 1
# RSI从超买区向下突破
elif prev_rsi > overbought and current_rsi < overbought:
return –1
return 0
6.2 MACD动量策略
from tqsdk.tafunc import macd
def macd_momentum_strategy(api, symbol):
"""MACD动量策略"""
klines = api.get_kline_serial(symbol, 3600, 200)
api.wait_update()
macd_data = macd(klines['close'], 12, 26, 9)
macd_line = macd_data['macd']
signal_line = macd_data['signal']
hist = macd_data['hist']
# MACD金叉
if macd_line.iloc[–1] > signal_line.iloc[–1] and macd_line.iloc[–2] <= signal_line.iloc[–2]:
return 1
# MACD死叉
elif macd_line.iloc[–1] < signal_line.iloc[–1] and macd_line.iloc[–2] >= signal_line.iloc[–2]:
return –1
return 0
七、趋势确认
7.1 ADX趋势确认
def adx_trend_confirmation(api, symbol, min_adx=25):
"""ADX趋势确认"""
klines = api.get_kline_serial(symbol, 3600, 200)
api.wait_update()
# 计算ADX(简化版)
# 实际应用中需要使用完整的ADX计算
# 如果ADX > 25,趋势明确
# 结合其他指标判断趋势方向
return True
7.2 多指标确认
def multi_indicator_confirmation(api, symbol):
"""多指标趋势确认"""
# 获取多个指标信号
ma_signal = dual_ma_strategy(api, symbol)
macd_signal = macd_momentum_strategy(api, symbol)
# 多个信号一致才交易
if ma_signal == 1 and macd_signal == 1:
return 1
elif ma_signal == –1 and macd_signal == –1:
return –1
return 0
八、总结
8.1 趋势跟踪要点
| 趋势识别 | 准确识别趋势 |
| 趋势确认 | 确认趋势有效性 |
| 止损止盈 | 设置止损止盈 |
| 趋势转换 | 及时识别趋势转换 |
8.2 注意事项
免责声明:本文仅供学习交流使用,不构成任何投资建议。期货交易有风险,入市需谨慎。
更多资源:
- 天勤量化官网:https://www.shinnytech.com
- GitHub开源地址:https://github.com/shinnytech/tqsdk-python
- 官方文档:https://doc.shinnytech.com/tqsdk/latest

