Ai全自动编写策略:趋势追涨加减仓策略(通达信&python双源码)

松鼠Quant
2025-10-15


图片
量化策略开发,高质量社群,交易思路分享等相关内容

工具推荐

👉· 参数筛选工具

👉 ·Ai帮你编写策略

👉· 订单流图表

👉· 加入2025俱乐部

👉· Ai投研助手课程


『正文』

ˇ

Ai编写策略是量化领域的新常态,松鼠Quant在早些时候推出了开源项目《gitee官方推荐,松鼠QuantAi+回测框架详细版教程(图文)让Ai自动编写策略,自动回测,给出总结和迭代意见。
现在我们将通达信指标:《趋势追涨加减仓策略》,让Ai自动完成python编写,然后自动回测总结。
图片
通达信源码:













































MA1:MA(CLOSE,5);MA2:MA(CLOSE,10);MA3:MA(CLOSE,20);廿一:MA(CLOSE,21),COLORRED,LINETHICK2;STICKLINE(C>=廿一 AND C>=O,C,O,3,0),COLORRED;注意:STICKLINE(C>=廿一 AND C>=O,H,L,0,0),COLORRED;VAR1:=(100 - ((90 * (HHV(HIGH,21) - CLOSE)) / (HHV(HIGH,21) - LLV(LOW,21))));VAR2:=(100 - ((90 * (HHV(HIGH,21) - CLOSE)) / (HHV(HIGH,21) - LLV(LOW,21))));VAR3:=(100 - MA(((100 * (HHV(HIGH,6) - CLOSE)) / (HHV(HIGH,6) - LLV(LOW,6))),34));DRAWTEXT(CROSS(VAR2,MA(VAR3,6)),(LOW * 0.984),'★ '),COLORRED;LC:=REF(CLOSE,1);RSI:=SMA(MAX(CLOSE-LC,0),6,1)/SMA(ABS(CLOSE-LC),6,1)*100;IF(CROSS(84,RSI) , HIGH,HIGH+1),POINTDOT,LINETHICK7,COLORYELLOW ;HIGH+1,POINTDOT,LINETHICK7,COLOR000000 ;HH:=HHV(H,250);LL:=LLV(L,250);E:=(HH-LL)/100;GJ:=IF(C>=100,(C+H+L+O)/4,AMOUNT/(V+0.01)/100);VARE1:=EMA(C,3);VARE2:=EMA(C,5);VARE3:=EMA(C,10);VAR4:=EMA(C,20);VAR5:=EMA(C,30);VAR6:=(VAR2+VAR3+VAR4+VAR5)/4;VAR7:=(VAR6-REF(VAR6,15))/REF(VAR6,15)*100;VAR8:=(VAR6-REF(VAR6,15))/REF(VAR6, 15)*100;VAR9:=EMA(VAR7,8);买进价:=((C-REF(MA(C,6),1))/6+MA(C,6))*1.004;买进条件:=CROSS(C,买进价) AND 买进价>REF(买进价,1);STICKLINE(买进条件,H,L,0,1),COLORWHITE,LINETHICK2;STICKLINE(买进条件,O,C,3,0),COLORWHITE,LINETHICK2;加码价:=((C-REF(MA(C,18),1))/18+MA(C,18))*1.004;加码条件:=CROSS(C,加码价) AND 加码价>REF(加码价,1);STICKLINE(加码条件,H,L,0,1),COLORYELLOW,LINETHICK2;STICKLINE(加码条件,O,C,3,0),COLORYELLOW,LINETHICK2;TY:=C;A1:=REF(TY,10)=HHV(TY,2*10+1); B1:=FILTER(A1,10);C1:=BACKSET(B1,10+1); HD:=FILTER(C1,10);A2:=REF(TY,10)=LLV(TY,2*10+1); B2:=FILTER(A2,10);C2:=BACKSET(B2,10+1); LD:=FILTER(C2,10);A:=REF(C,BARSLAST(HD));Z:=REF(L,BARSLAST(LD));T1:=BARSLAST(HD)<BARSLAST(LD) AND NOT(HD) ;T2:=BARSLAST(HD)>BARSLAST(LD) AND NOT(LD);峰:IF(T1,A,A),COLORYELLOW,LINETHICK1,POINTDOT;底:IF(T2,Z,Z),COLORWHITE,LINETHICK1,POINTDOT;
接下来让Ai帮我们转化到松鼠Quant回测框架内,我们不需要写一行代码!!!

github地址(国外):

https://github.com/songshuquant/ssquant-ai

gitee地址(国内):

https://gitee.com/ssquant/ssquant-ai

如何使用,手把手教程:《gitee官方推荐,松鼠QuantAi+回测框架详细版教程(图文)
提出需求:
图片
自动修复BUG:
图片
回测完成:
图片
Python源码:
图片
图片
图片















































































































































































import pandas as pdimport numpy as npfrom ssquant.backtest.multi_source_backtest import MultiSourceBacktesterfrom ssquant.api.strategy_api import StrategyAPIdef initialize(api: StrategyAPI):    """策略初始化函数"""    api.log("多指标综合策略初始化完成")def strategy_function(api: StrategyAPI):    """    多指标综合交易策略    主要交易逻辑:    1. 基于21日均线的趋势判断    2. RSI超买超卖信号    3. 威廉指标和移动平均组合信号    4. 价格突破买进价/加码价条件    5. 限制有持仓时不开同向仓位    """        # 获取当前索引和数据    current_idx = api.get_idx()    close = api.get_close()    high = api.get_high()    low = api.get_low()    open_price = api.get_open()        # 数据验证    if close is None or len(close) == 0:        return    if current_idx < 30:   # 需要足够的历史数据计算指标        return        # 策略参数    ma_period_short = 5    ma_period_mid = 10    ma_period_long = 20    ma_period_21 = 21    rsi_period = 6    hhv_period = 21    hhv_short = 6        # 计算移动平均线    ma5 = close.rolling(ma_period_short).mean()    ma10 = close.rolling(ma_period_mid).mean()    ma20 = close.rolling(ma_period_long).mean()    ma21 = close.rolling(ma_period_21).mean()        # 计算威廉指标 VAR1, VAR2    hhv_21 = high.rolling(hhv_period).max()    llv_21 = low.rolling(hhv_period).min()    var1 = 100 - ((90 * (hhv_21 - close)) / (hhv_21 - llv_21))    var2 = var1   # 原公式中VAR2与VAR1相同        # 计算VAR3    hhv_6 = high.rolling(hhv_short).max()    llv_6 = low.rolling(hhv_short).min()    var3_temp = 100 - ((100 * (hhv_6 - close)) / (hhv_6 - llv_6))    var3 = var3_temp.rolling(34).mean()        # 计算RSI指标    lc = close.shift(1)   # 前一日收盘价    price_change = close - lc    gain = np.maximum(price_change, 0)    loss = np.abs(np.minimum(price_change, 0))        avg_gain = gain.rolling(rsi_period).mean()    avg_loss = loss.rolling(rsi_period).mean()    rsi = 100 - (100 / (1 + (avg_gain / (avg_loss + 1e-8))))        # 计算买进价和加码价    ma6 = close.rolling(6).mean()    ma18 = close.rolling(18).mean()    buy_price = ((close - ma6.shift(1)) / 6 + ma6) * 1.004    add_price = ((close - ma18.shift(1)) / 18 + ma18) * 1.004        # 获取当前持仓    current_pos = api.get_pos()        # 交易信号逻辑        # 信号1: 价格在21日均线之上且收盘>=开盘 (多头趋势)    trend_signal = (close.iloc[current_idx] >= ma21.iloc[current_idx]) and (close.iloc[current_idx] >= open_price.iloc[current_idx])        # 信号2: VAR2上穿VAR3的6日均线 (威廉指标金叉)    var3_ma6 = var3.rolling(6).mean()    cross_signal = (var2.iloc[current_idx-1] <= var3_ma6.iloc[current_idx-1]) and (var2.iloc[current_idx] > var3_ma6.iloc[current_idx])        # 信号3: RSI超买信号 (84下穿RSI)    rsi_signal = (rsi.iloc[current_idx-1] >= 84) and (rsi.iloc[current_idx] < 84)        # 信号4: 价格突破买进价条件    buy_condition = (close.iloc[current_idx] > buy_price.iloc[current_idx]) and (buy_price.iloc[current_idx] > buy_price.iloc[current_idx-1])        # 信号5: 价格突破加码价条件    add_condition = (close.iloc[current_idx] > add_price.iloc[current_idx]) and (add_price.iloc[current_idx] > add_price.iloc[current_idx-1])        # 综合交易决策    strong_buy_signal = (trend_signal and cross_signal) or buy_condition    add_position_signal = add_condition and current_pos > 0    exit_signal = rsi_signal   # RSI超买时考虑退出        # 执行交易    if strong_buy_signal:        # 修改:检查当前持仓状态,避免在有同向持仓时重复开仓        if current_pos <= 0:            # 平空仓并开多仓            if current_pos < 0:                api.close_all(order_type='next_bar_open')                api.log(f"平空仓: 价格{close.iloc[current_idx]:.2f}")                        # 开多仓            api.buy(volume=1, order_type='next_bar_open')            api.log(f"买入开仓: 价格{close.iloc[current_idx]:.2f}, 趋势+指标信号")        else:            # 修改:已有同向持仓,记录但不执行开仓            api.log(f"已有{current_pos}手多单持仓,跳过开仓信号")        elif add_position_signal and current_pos > 0:        # 加码条件满足且已有持仓        # 修改:限制加码次数,避免过度加仓        max_add_times = 3   # 最大加码次数        if current_pos <= max_add_times:            api.buy(volume=1, order_type='next_bar_open')            api.log(f"加码买入: 价格{close.iloc[current_idx]:.2f}, 当前持仓{current_pos+1}手")        else:            api.log(f"已达到最大加码次数{max_add_times}次,跳过加码")        elif exit_signal and current_pos > 0:        # RSI超买信号,平多仓        api.close_all(order_type='next_bar_open')        api.log(f"RSI超买平仓: 价格{close.iloc[current_idx]:.2f}, RSI:{rsi.iloc[current_idx]:.2f}")if __name__ == "__main__":    # 导入API认证信息    try:        from ssquant.config.auth_config import get_api_auth        API_USERNAME, API_PASSWORD = get_api_auth()    except ImportError:        print("警告:未找到 auth_config.py 文件,请在下方填写您的认证信息:API_USERNAME和API_PASSWORD")        API_USERNAME = ""        API_PASSWORD = ""    # 创建多数据源回测器    backtester = MultiSourceBacktester()        # 设置基础配置    backtester.set_base_config({        'username': API_USERNAME,       # 使用配置文件中的用户名        'password': API_PASSWORD,       # 使用配置文件中的密码        'use_cache': True,              # 是否使用缓存数据        'save_data': True,              # 是否保存数据        'align_data': False,            # 是否对齐数据        'fill_method': 'ffill',         # 填充方法        'debug': True                   # 启用调试模式    })        # 添加品种配置    backtester.add_symbol_config(        symbol='au888',        config={   # 品种配置            'start_date': '2024-01-01',      # 回测开始日期            'end_date': '2025-12-31',        # 回测结束日期            'initial_capital': 100000.0,     # 初始资金,单位:元            'commission': 0.0003,            # 手续费率,例如:0.0003表示万分之3            'margin_rate': 0.1,              # 保证金率,例如:0.1表示10%            'contract_multiplier': 1000,     # 合约乘数,黄金期货每点1000元            'periods': [                     # 周期配置                {'kline_period': '1d', 'adjust_type': '1'},   # K线周期,后复权            ]        }    )        # 运行回测    results = backtester.run(        strategy=strategy_function,        initialize=initialize,        strategy_params={},   # 本策略使用固定参数    )
没错,整个开发过程我们没有手写一行代码,松鼠QuantAi助手会编写,回测,分析,修改。基于松鼠Quant的MCP服务器+Deepseek开启全新量化学习的路径,即使0基础也能完成策略的编写与验证!
如果你喜欢这个系列,请点赞,转发,在看三连。我们根据受欢迎程度决定是否继续更新,感谢您的支持。

github地址(国外):

https://github.com/songshuquant/ssquant-ai

gitee地址(国内):

https://gitee.com/ssquant/ssquant-ai

如何使用,手把手教程:《gitee官方推荐,松鼠QuantAi+回测框架详细版教程(图文)

防迷路


           图片

微   信|小松鼠-松鼠Quant

微信号|viquant01


加入2025量化俱乐部



分享