量化入门 | 多因子交易策略:多头趋势 + 分批加码 + RSI 平仓

松鼠Quant
2025-10-17

图片

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

工具推荐

👉· 参数筛选工具

👉 ·Ai帮你编写策略

👉· 订单流图表

👉· 加入2025俱乐部

👉· Ai投研助手课程


『正文』

ˇ

一、策略核心逻辑

策略以趋势为基础、指标为信号、风控为底线,融合 4 类核心指标构建交易体系,仅针对多头方向产生信号,避免逆势操作:

1.趋势判断:以 21 日均线为核心,要求价格站在均线上方且收盘价开盘价,确认多头趋势成立;

2.信号验证:结合威廉指标(W% R)金叉、RSI 指标状态,过滤虚假信号,提升入场可靠性;

3.入场与加码:设置买进价加码价双价格阈值,满足条件时触发首次开仓或分批加码;

4.退出规则:以 RSI 超买信号(从≥84 回落)作为平仓依据,锁定盈利。

二、关键指标与参数

指标类型

核心参数

作用说明

移动平均线

5/10/20/21/6/18 日均线

判断趋势、计算开仓 / 加码价格基准

威廉指标(W% R

长周期 21、短周期 6、平滑 34

生成金叉信号(VAR2 上穿 VAR3 6 日均线)

RSI 指标

周期 6

识别超买(≥84)和平仓信号

风控参数

最大加码次数 3

限制过度加仓,控制仓位风险


三、交易流程

1.开仓条件:满足以下任一情况,且当前无持仓时触发首次开仓:

多头趋势(价格≥21 日均线 + 收盘价开盘)+ 威廉指标金叉;

价格突破买进价,且买进价呈上升趋势。

1.加码条件:已有多头持仓、价格突破加码价且加码次数未达上限(≤3 次),执行分批加仓。

2.平仓条件:持仓状态下,RSI 指标从≥84 回落,触发全部平仓。

四、核心特点

1.多信号共振:融合趋势、震荡指标,降低单一指标误判风险;

2.仓位控制:限制同向重复开仓和最大加码次数,避免仓位集中;

3.逻辑清晰:入场、加码、平仓规则明确,可追溯性强;

4.适用场景:适用于趋势明确的多头市场,依托均线和指标过滤震荡行情。

图片
源码








































































































































//由松鼠 Quant.Ai 生成,来源: ai.kanpan789.com
//------------------------------------------------------------------------// 简称: MultiIndicatorStrategy// 名称: 多指标综合交易策略// 类别: 公式应用// 类型: 内建应用// 输出:// 策略说明:基于21日均线的趋势判断、RSI超买超卖信号、威廉指标和移动平均组合信号、价格突破买进价/加码价条件// 限制有持仓时不开同向仓位//------------------------------------------------------------------------Params    Numeric ma_period_short(5); // 短周期均线    Numeric ma_period_mid(10);   // 中周期均线    Numeric ma_period_long(20); // 长周期均线    Numeric ma_period_21(21);   // 21日均线    Numeric rsi_period(6);      // RSI周期    Numeric hhv_period(21);     // 威廉指标周期    Numeric hhv_short(6);       // 短周期威廉指标    Numeric max_add_times(3);   // 最大加码次数Vars    Series<Numeric> ma5;        // 5日均线    Series<Numeric> ma10;       // 10日均线    Series<Numeric> ma20;       // 20日均线    Series<Numeric> ma21;       // 21日均线    Series<Numeric> var1;       // 威廉指标VAR1    Series<Numeric> var2;       // 威廉指标VAR2    Series<Numeric> var3;       // 威廉指标VAR3    Series<Numeric> rsi;        // RSI指标    Series<Numeric> buy_price;   // 买进价    Series<Numeric> add_price;   // 加码价    Numeric minpoint;           // 最小价格变动单位Series<Numeric> lc;Series<Numeric> price_change;Series<Numeric> gain;Series<Numeric> loss;Series<Numeric> ma6;Series<Numeric> ma8;Series<Numeric> ma18;Series<Numeric> var3_ma6;Series<bool> strong_buy_signal;Series<bool> add_position_signal;Series<bool> exit_signal;Series<Numeric> jiacang(0);Events    OnBar(ArrayRef<Integer> indexs)    {        // 计算最小价格变动单位        minpoint = Minmove * PriceScale;        // 计算移动平均线        ma5 = Average(Close, ma_period_short);        ma10 = Average(Close, ma_period_mid);        ma20 = Average(Close, ma_period_long);        ma21 = Average(Close, ma_period_21);        // 计算威廉指标 VAR1, VAR2        var1 = 100 - (90 * (Highest(High, hhv_period) - Close) / (Highest(High, hhv_period) - Lowest(Low, hhv_period)));        var2 = var1;   // 原公式中VAR2与VAR1相同        // 计算VAR3        var3 = Average(100 - (100 * (Highest(High, hhv_short) - Close) / (Highest(High, hhv_short) - Lowest(Low, hhv_short))), 34);        // 计算RSI指标        lc = Close[1];   // 前一日收盘价        price_change = Close - lc;        gain = Max(price_change, 0);        loss = Abs(Min(price_change, 0));        rsi = 100 - (100 / (1 + (Average(gain, rsi_period) / (Average(loss, rsi_period)))));        // 计算买进价和加码价        ma6 = Average(Close, 6);        ma18 = Average(Close, 18);        buy_price = ((Close - ma6[1]) / 6 + ma6) * 1.004;        add_price = ((Close - ma18[1]) / 18 + ma18) * 1.004;        // 交易信号逻辑        // 信号1: 价格在21日均线之上且收盘>=开盘 (多头趋势)        Bool trend_signal = (Close >= ma21) And (Close >= Open);        // 信号2: VAR2上穿VAR3的6日均线 (威廉指标金叉)        var3_ma6 = Average(var3, 6);        Bool cross_signal = (var2[1] <= var3_ma6[1]) And (var2 > var3_ma6);        // 信号3: RSI超买信号 (84下穿RSI)        Bool rsi_signal = (rsi[1] >= 84) And (rsi < 84);        // 信号4: 价格突破买进价条件        Bool buy_condition = (Close > buy_price) And (buy_price > buy_price[1]);        // 信号5: 价格突破加码价条件        Bool add_condition = (Close > add_price) And (add_price > add_price[1]);        // 综合交易决策        strong_buy_signal = (trend_signal And cross_signal) Or buy_condition;        add_position_signal = add_condition ;        exit_signal = rsi_signal;   // RSI超买时考虑退出Commentary("MarketPosition"+text(MarketPosition));        // 执行交易        If (strong_buy_signal[1])        {            // 检查当前持仓状态,避免在有同向持仓时重复开仓            If (MarketPosition == 0)            {                // 开多仓                Buy(1, Open);                Commentary("买入开仓: 价格" + Text(Open) + ", 趋势+指标信号");                jiacang=0;            }            Else            {                // 已有同向持仓,记录但不执行开仓                Commentary("已有" + Text(MarketPosition) + "手多单持仓,跳过开仓信号");            }        }        If (add_position_signal[1] And MarketPosition > 0)        {            // 加码条件满足且已有持仓            // 限制加码次数,避免过度加仓            If (jiacang <= max_add_times)            {                Buy(1, Open);                jiacang=jiacang+1;                Commentary("加码买入: 价格" + Text(Open) + ", 当前持仓" + Text(MarketPosition + 1) + "手");            }            Else            {                Commentary("已达到最大加码次数" + Text(max_add_times) + "次,跳过加码");            }        }        If (exit_signal[1] and MarketPosition>0)        {            // RSI超买信号,平多仓            Sell(0, Open);            jiacang=0;            Commentary("RSI超买平仓: 价格" + Text(Open) + ", RSI:" + Text(rsi));        }    }//------------------------------------------------------------------------// 编译版本GS2014.10.25// 来源:ai.kanpan789.com// 更改声明TradeBlazer Software保留对TradeBlazer平台每一版本的TradeBlazer公式修改和重写的权利//------------------------------------------------------------------------//由 Ai 生成的内容仅作为学习参考,不能保证正确性,不构成任何投资意见,风险自负。//制作一个自己的Ai编写助手与投研助手...
//详情链接:https://mp.weixin.qq.com/s/Y-XAbLLN7EwfKHHBp4AYdQ

防迷路


           图片

微   信|小松鼠-松鼠Quant

微信号|viquant01

25俱乐部源码VIP24》

加入2025量化俱乐部


分享