You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在趋势交易系统中遍历移动平均线参数组合

解决方案

核心思路

通过生成所有参数组合,循环调用策略函数并收集结果,最终整合为包含参数信息的对比数据框。

修改后的完整代码

import pandas as pd
import numpy as np
from itertools import product

def trendfunc(f1, fastnum, slownum):
    f1['Change'] = f1['Close'].pct_change()
    f1['Fast'] = f1['Close'].rolling(window=fastnum, center=False).mean() 
    f1['Slow'] = f1['Close'].rolling(window=slownum, center=False).mean() 
    f1['Trend'] = f1['Fast'] - f1['Slow'] 
    f1['Position'] = np.where(f1['Trend'].shift(2) > 0, 1, 0) 
    f1['Result'] = f1['Position'] * f1['Change']
    f1 = f1.dropna()
    
    # 计算市场基准VAMI与最大回撤
    f1['MktVAMI'] = f1['Change'] + 1
    f1['MktVAMI'].iloc[0] = 1000
    f1['MktVAMI'] = f1['MktVAMI'].cumprod()
    f1['MktHi'] = f1['MktVAMI'].cummax()
    f1['MktDD'] = (f1['MktVAMI'] / f1['MktHi']) - 1
    f1['MktMaxDD'] = f1['MktDD'].cummin()
    
    # 计算策略系统VAMI与最大回撤
    f1['SysVAMI'] = f1['Result'] + 1
    f1['SysVAMI'].iloc[0] = 1000
    f1['SysVAMI'] = f1['SysVAMI'].cumprod()
    f1['SysHi'] = f1['SysVAMI'].cummax()
    f1['SysDD'] = (f1['SysVAMI'] / f1['SysHi']) - 1
    f1['SysMaxDD'] = f1['SysDD'].cummin()
    
    keep = ['Date', 'MktVAMI', 'MktMaxDD', 'SysVAMI', 'SysMaxDD']
    f2 = f1[keep].tail(1)
    return f2

tkrs = ['spy']
# 定义待测试的参数组合
fast_params = [10, 20, 30]
slow_params = [100, 200, 300]

# 初始化空数据框用于存储所有结果
final_results = pd.DataFrame()

for tkr in tkrs:
    df1 = pd.read_csv(f'C:\\Path\\To\\Date\\{tkr}.csv')
    # 遍历所有参数组合(用product避免嵌套循环)
    for fast_ma, slow_ma in product(fast_params, slow_params):
        # 传入数据副本,避免原数据被多次修改
        single_result = trendfunc(df1.copy(), fast_ma, slow_ma)
        # 添加当前参数组合标识
        single_result['FastMA'] = fast_ma
        single_result['SlowMA'] = slow_ma
        # 追加到总结果数据框
        final_results = pd.concat([final_results, single_result], ignore_index=True)

# 导出对比结果到CSV文件
final_results.to_csv('ma_strategy_comparison.csv', index=False)

关键细节说明

  • 用itertools.product一键生成所有参数组合,替代手动嵌套循环,代码更简洁易维护。
  • 每次调用策略函数时传入df1.copy(),防止原数据被多次修改引发计算错误。
  • 使用pd.concat合并结果(替代已弃用的append方法),保证数据框操作的规范性。
  • 最终结果包含FastMA、SlowMA参数列与绩效指标,直接满足对比分析需求。

内容的提问来源于stack exchange,提问作者GC123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:45:38