『正文』
ˇ
一、策略核心逻辑
策略以“趋势为基础、指标为信号、风控为底线”,融合 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.适用场景:适用于趋势明确的多头市场,依托均线和指标过滤震荡行情。

Params Numeric ma_period_short(5); Numeric ma_period_mid(10); Numeric ma_period_long(20); Numeric ma_period_21(21); Numeric rsi_period(6); Numeric hhv_period(21); Numeric hhv_short(6); Numeric max_add_times(3); Vars Series<Numeric> ma5; Series<Numeric> ma10; Series<Numeric> ma20; Series<Numeric> ma21; Series<Numeric> var1; Series<Numeric> var2; Series<Numeric> var3; Series<Numeric> 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 = 100 - (90 * (Highest(High, hhv_period) - Close) / (Highest(High, hhv_period) - Lowest(Low, hhv_period))); var2 = var1; var3 = Average(100 - (100 * (Highest(High, hhv_short) - Close) / (Highest(High, hhv_short) - Lowest(Low, hhv_short))), 34); 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; Bool trend_signal = (Close >= ma21) And (Close >= Open); var3_ma6 = Average(var3, 6); Bool cross_signal = (var2[1] <= var3_ma6[1]) And (var2 > var3_ma6); Bool rsi_signal = (rsi[1] >= 84) And (rsi < 84); Bool buy_condition = (Close > buy_price) And (buy_price > buy_price[1]); 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; 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) { Sell(0, Open); jiacang=0; Commentary("RSI超买平仓: 价格" + Text(Open) + ", RSI:" + Text(rsi)); } }
微 信|小松鼠-松鼠Quant
微信号|viquant01