量化交易系统开发-实时行情自动化交易-8.9.通达信平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。
接下来会对于通达信平台介绍。
通达信是一款广泛使用的行情分析和交易平台,其强大的定制公式编写和量化交易功能,适合投资者开发和测试量化策略。以下是基于通达信平台的一个完整开发实例,涵盖策略设计、回测与优化的全过程。
1. 实例背景:基于均线交叉的交易策略
策略逻辑
均线交叉策略是一种经典的趋势跟随策略,依赖短周期均线和长周期均线的交叉来生成买卖信号:
- 当短周期均线向上穿过长周期均线时,生成买入信号(Golden Cross)。
- 当短周期均线向下穿过长周期均线时,生成卖出信号(Death Cross)。
适用市场
适用于A股市场和基金、ETF等趋势性品种。
2. 数据准备与公式编辑
在通达信中,量化策略通常通过编写自定义指标公式实现。首先,创建一个新公式以计算均线并生成交易信号。
(1)公式代码实现
以下是策略的指标公式代码,计算5日和20日均线及交易信号:
{均线计算}
MA_SHORT := MA(CLOSE, 5); {5日均线}
MA_LONG := MA(CLOSE, 20); {20日均线}
{信号生成}
BUY_SIGNAL := CROSS(MA_SHORT, MA_LONG); {买入信号:短期均线上穿长期均线}
SELL_SIGNAL := CROSS(MA_LONG, MA_SHORT); {卖出信号:短期均线下穿长期均线}
{输出}
DRAWLINE(BUY_SIGNAL, LOW, SELL_SIGNAL, HIGH, RGB(255, 0, 0)); {信号标注}
MA_SHORT, COLORRED; {5日均线显示为红色}
MA_LONG, COLORBLUE; {20日均线显示为蓝色}
步骤说明
- 创建新公式:打开通达信公式编辑器,选择“新建”,将上述代码粘贴到公式中。
- 保存并应用:命名为“均线交叉策略”,保存后可直接加载到K线图中查看。
(2)回测数据准备
- 在通达信“数据管理”功能中,选择目标股票或指数。
- 下载并导入历史数据,确保数据完整性。
3. 回测实现
通达信不支持复杂的回测逻辑,但可通过“条件选股”功能模拟策略表现。
条件选股公式
编写选股公式以筛选符合策略的交易信号。
{条件选股公式:买入信号}
CROSS(MA(CLOSE, 5), MA(CLOSE, 20)); {短期均线向上穿过长期均线}
回测流程
- 加载公式:在“条件选股”中选择上述公式。
- 设置筛选范围:选择股票池(如沪深300或全市场),设置时间范围(如最近一年)。
- 运行选股:执行筛选,输出符合条件的股票。
4. 使用Python实现高级回测
通达信原生回测功能较为简单,以下用Python实现更精细的回测分析。
数据导出
在通达信中,导出目标股票的历史数据为CSV文件。使用Python加载并进行回测。
回测代码
import pandas as pd
import matplotlib.pyplot as plt
# 加载数据
data = pd.read_csv('example_stock.csv') # 替换为实际导出的文件
data['datetime'] = pd.to_datetime(data['datetime'])
data = data.sort_values('datetime')
# 计算均线
data['MA_SHORT'] = data['close'].rolling(window=5).mean()
data['MA_LONG'] = data['close'].rolling(window=20).mean()
# 生成信号
data['signal'] = 0
data.loc[data['MA_SHORT'] > data['MA_LONG'], 'signal'] = 1 # 买入信号
data.loc[data['MA_SHORT'] <= data['MA_LONG'], 'signal'] = -1 # 卖出信号
data['position'] = data['signal'].shift(1) # 次日开盘执行信号
# 策略收益计算
data['daily_return'] = data['close'].pct_change() # 每日收益率
data['strategy_return'] = data['position'] * data['daily_return'] # 策略收益
data['cumulative_return'] = (1 + data['strategy_return']).cumprod() # 策略累计收益
data['benchmark_return'] = (1 + data['daily_return']).cumprod() # 基准累计收益
# 回测结果
print("策略最终收益率:", data['cumulative_return'].iloc[-1] - 1)
print("基准最终收益率:", data['benchmark_return'].iloc[-1] - 1)
# 可视化表现
plt.figure(figsize=(12, 6))
plt.plot(data['datetime'], data['cumulative_return'], label='Strategy', color='blue')
plt.plot(data['datetime'], data['benchmark_return'], label='Benchmark', color='gray')
plt.legend()
plt.title('Cumulative Returns')
plt.show()
5. 回测结果分析
- 总收益率:策略和基准的收益率对比。
- 最大回撤:评估风险,通过
data['cumulative_return'] / data['cumulative_return'].cummax() - 1
计算。 - 胜率:统计信号正确的比例。
- 交易频率:评估策略的执行效率。
6. 优化与扩展
参数优化
通过网格搜索优化短期和长期均线的参数组合。
short_windows = range(5, 15)
long_windows = range(20, 50)
best_params = None
best_performance = -float('inf')
for short in short_windows:
for long in long_windows:
if short >= long:
continue
data['MA_SHORT'] = data['close'].rolling(window=short).mean()
data['MA_LONG'] = data['close'].rolling(window=long).mean()
data['signal'] = 0
data.loc[data['MA_SHORT'] > data['MA_LONG'], 'signal'] = 1
data.loc[data['MA_SHORT'] <= data['MA_LONG'], 'signal'] = -1
data['position'] = data['signal'].shift(1)
data['strategy_return'] = data['position'] * data['daily_return']
cumulative_return = (1 + data['strategy_return']).cumprod().iloc[-1]
if cumulative_return > best_performance:
best_performance = cumulative_return
best_params = (short, long)
print("最佳参数:", best_params)
策略扩展
- 多因子融合:结合RSI、布林带等指标。
- 风险管理:加入止盈止损规则。
- 多市场测试:验证策略在其他标的上的表现。
7. 总结
本实例展示了通达信平台结合Python的量化策略开发和回测流程:
- 公式开发:使用通达信的公式编辑器快速实现基础策略。
- 回测实现:通过条件选股和Python代码完成性能评估。
- 优化扩展:在参数优化和多因子融合中提升策略表现。
通达信平台简单易用,适合初学者快速入门,而结合Python可实现更复杂的量化策略设计和回测分析,为实盘应用打下坚实基础。