当前位置: 首页 > article >正文

量化交易系统开发-实时行情自动化交易-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日均线显示为蓝色}

步骤说明

  1. 创建新公式:打开通达信公式编辑器,选择“新建”,将上述代码粘贴到公式中。
  2. 保存并应用:命名为“均线交叉策略”,保存后可直接加载到K线图中查看。
(2)回测数据准备
  • 在通达信“数据管理”功能中,选择目标股票或指数。
  • 下载并导入历史数据,确保数据完整性。

3. 回测实现

通达信不支持复杂的回测逻辑,但可通过“条件选股”功能模拟策略表现。

条件选股公式

编写选股公式以筛选符合策略的交易信号。

{条件选股公式:买入信号}
CROSS(MA(CLOSE, 5), MA(CLOSE, 20));  {短期均线向上穿过长期均线}
回测流程
  1. 加载公式:在“条件选股”中选择上述公式。
  2. 设置筛选范围:选择股票池(如沪深300或全市场),设置时间范围(如最近一年)。
  3. 运行选股:执行筛选,输出符合条件的股票。

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)
策略扩展
  1. 多因子融合:结合RSI、布林带等指标。
  2. 风险管理:加入止盈止损规则。
  3. 多市场测试:验证策略在其他标的上的表现。

7. 总结

本实例展示了通达信平台结合Python的量化策略开发和回测流程:

  • 公式开发:使用通达信的公式编辑器快速实现基础策略。
  • 回测实现:通过条件选股和Python代码完成性能评估。
  • 优化扩展:在参数优化和多因子融合中提升策略表现。

通达信平台简单易用,适合初学者快速入门,而结合Python可实现更复杂的量化策略设计和回测分析,为实盘应用打下坚实基础。


http://www.kler.cn/a/420898.html

相关文章:

  • python脚本:Word文档批量转PDF格式
  • 前端:localstorage, session
  • Google Cloud 混合云部署连接方式最佳实践案例讲解
  • lua download
  • unity读取mysql5.7版本示例
  • 【C++】编程题目分析与实现回顾:从浮点数运算到整型转换的全面解读
  • docker部署RustDesk自建服务器
  • 【自用】管材流转项目前端重部署流程 vue2 webpackage4 vuecli4
  • Webpack开发模式及处理样式资源
  • Hyperf jsonrpc
  • 利用 Redisson 实现分布式主键生成
  • echarts 实时 vue 使用方法
  • Python学习------第十五天
  • 12.02 深度学习-卷积
  • 东方隐侠网安瞭望台第8期
  • 手游手游手游手游手游手游手游
  • c语言基础之二维数组
  • node.js基础学习-fs模块-文件操作(六)
  • 深度学习常用测试命令解释
  • 数据分析:探索数据背后的秘密与挑战
  • 3d/伪3d统计图形
  • ISO26262-(Timing Monitoring)在多核MCU的TPU上功能安全ASILB与ASILD有什么区别
  • MacOS 命令行详解使用教程
  • LlaSMol—— 建立一个大型、高质量的指令调整数据集 SMolInstruct 用于开发一个化学任务的大语言模型
  • Flink面试题推荐
  • Springboot(四十九)SpringBoot3整合jetcache缓存