トリプル移動平均シーケンス戦略:2/3エントリー+3/3ポジション増加

SMA EMA WMA RMA BB volatility
作成日: 2025-09-29 17:54:33 最終変更日: 2025-09-29 17:54:33
コピー: 13 クリック数: 263
2
フォロー
319
フォロワー

トリプル移動平均シーケンス戦略:2/3エントリー+3/3ポジション増加 トリプル移動平均シーケンス戦略:2/3エントリー+3/3ポジション増加

これは神仙の策略か?

この戦略は,赤緑の灯が点灯するのを待つようなものです! 一つの灯が点灯するのではなく,三つの灯が順番に点灯するのを待つことです. MA5がMA10を過ぎて (最初の灯),MA30を過ぎて (第二の灯),MA60を過ぎて (第三の灯) になります. 重点を絞りましょう! 2つの灯が点灯すると小牛試験刀が点灯し,3つの灯が全点灯すると重倉攻撃ができます!

の核心的な論理が明らかになった

この戦略の精髓は”,シーケンシャル・クロス”がドミノの骨盤のように,順番に倒れる必要があるという点にある!MA5 ((5周期平均線) は,先頭羊であり,MA10,MA30,MA60を順番に突破しなければならない. 2/3の突破を完了すると,戦略は小ポジションの試験水となり, 3/3の完全な突破を完了すると,さらにポジションが加えられる.

低波フィルター: 穴を避けるためのガイド

戦略は低波動環境でのみ起動し,ブリン帯域で判断する.なぜ?高波動市場では,偽の突破があまりにも多く,嵐の中で運転しているように,道路の状況がよくわからないので,車転がりやすいからです.風が静かであるときにのみ,この”赤緑灯”システムは最も信頼できます.

実戦ハイライト機能

スマート脱退価格がMA30に達すると,損失を拡大させる機会を与えず,即座に停止します.冷却期設計感情的な取引を避けるために,取引の後に15回の冷静期があります.K線保護:平日のポジションは,当日のポジションを開けることはできません.

ストラテジーソースコード
/*backtest
start: 2024-09-29 00:00:00
end: 2025-09-26 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Bybit","currency":"ETH_USDT","balance":500000}]
*/

//@version=6
strategy("顺序三连穿越:2/3先入 + 3/3加仓(仅低波动过滤)", overlay=true, initial_capital=100000,
     commission_type=strategy.commission.percent, commission_value=0.05,
     pyramiding=1, calc_on_order_fills=true, calc_on_every_tick=false,
     default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// ===== 参数 =====
len5  = input.int(5,  "MA5",  minval=1)
len10 = input.int(10, "MA10", minval=1)
len30 = input.int(30, "MA30", minval=1)
len60 = input.int(60, "MA60", minval=1)
maSrc = input.source(close, "均线价格源")
maType= input.string("SMA", "均线类型", options=["SMA","EMA","WMA","RMA"])

useShort        = input.bool(true,  "启用大死叉做空(含2/3先入)")
useIntrabarExit = input.bool(true,  "触及MA30当根平仓")
seqMaxBars      = input.int(200, "三穿最大跨度(超时重置)", minval=5)
cooldownBars    = input.int(15,  "平仓后冷却期", minval=0)

// —— 仅低波动过滤 ——
bbLen   = input.int(20, "BW长度", minval=5)
bbMult  = input.float(2.0, "BW倍数", step=0.1)
bwFloor = input.float(0.015, "带宽下限(仅过滤过小波动)", step=0.001)
useBW   = input.bool(true, "启用低波动过滤")

// —— 3/3是否加仓 ——
addOnFull = input.bool(true, "3/3确认时加一笔")
addQtyPct = input.float(100, "加仓占权益%", step=1.0, minval=1, maxval=100)

// ===== 均线 =====
ma(_src, _len) =>
    (maType == "EMA" ? ta.ema(_src, _len) :
     maType == "WMA" ? ta.wma(_src, _len) :
     maType == "RMA" ? ta.rma(_src, _len) :
     ta.sma(_src, _len))

ma5  = ma(maSrc, len5)
ma10 = ma(maSrc, len10)
ma30 = ma(maSrc, len30)
ma60 = ma(maSrc, len60)

// ===== 带宽(仅过滤过小波动) =====
basis = ta.sma(close, bbLen)
dev   = bbMult * ta.stdev(close, bbLen)
upper = basis + dev
lower = basis - dev
bw    = basis != 0 ? (upper - lower) / basis : 0.0
vol_ok = (not useBW) or (bw >= bwFloor)

// ===== 多头状态机 =====
var int  stL      = 0
var int  stL_bar0 = na
stL_prev = stL

advL1 = stL == 0 and ta.crossover(ma5, ma10)
advL2 = stL == 1 and ta.crossover(ma5, ma30)
advL3 = stL == 2 and ta.crossover(ma5, ma60)

if advL1
    stL := 1
    stL_bar0 := bar_index
else if advL2
    stL := 2
else if advL3
    stL := 3

if stL >= 3 and ta.crossunder(ma5, ma60)
    stL := 2
if stL >= 2 and ta.crossunder(ma5, ma30)
    stL := math.min(stL, 1)
if stL >= 1 and ta.crossunder(ma5, ma10)
    stL := 0
    stL_bar0 := na

if stL > 0 and not na(stL_bar0) and (bar_index - stL_bar0 > seqMaxBars)
    stL := 0
    stL_bar0 := na

long_early_raw = (stL_prev == 1 and stL == 2)   // 5↑10 与 5↑30 完成
long_full_raw  = (stL_prev == 2 and stL == 3)   // 追加 5↑60

// ===== 空头状态机(对称) =====
var int  stS      = 0
var int  stS_bar0 = na
stS_prev = stS

advS1 = stS == 0 and ta.crossunder(ma5, ma10)
advS2 = stS == 1 and ta.crossunder(ma5, ma30)
advS3 = stS == 2 and ta.crossunder(ma5, ma60)

if advS1
    stS := 1
    stS_bar0 := bar_index
else if advS2
    stS := 2
else if advS3
    stS := 3

if stS >= 3 and ta.crossover(ma5, ma60)
    stS := 2
if stS >= 2 and ta.crossover(ma5, ma30)
    stS := math.min(stS, 1)
if stS >= 1 and ta.crossover(ma5, ma10)
    stS := 0
    stS_bar0 := na

if stS > 0 and not na(stS_bar0) and (bar_index - stS_bar0 > seqMaxBars)
    stS := 0
    stS_bar0 := na

short_early_raw = (stS_prev == 1 and stS == 2)
short_full_raw  = (stS_prev == 2 and stS == 3)

// ===== 冷静期与同根重入控制(先平后开) =====
var int  coolUntil     = na
var bool closedThisBar = false

closedThisBar := false
if strategy.position_size > 0 and (useIntrabarExit ? close <= ma30 : close[1] <= ma30[1])
    strategy.close_all(comment="触及MA30平多")
    coolUntil     := bar_index + cooldownBars
    closedThisBar := true

if strategy.position_size < 0 and (useIntrabarExit ? close >= ma30 : close[1] >= ma30[1])
    strategy.close_all(comment="触及MA30平空")
    coolUntil     := bar_index + cooldownBars
    closedThisBar := true

canEnter = (na(coolUntil) or bar_index > coolUntil) and not closedThisBar

// ===== 最终信号(仅低波动过滤 + 冷静期) =====
long_early = long_early_raw and vol_ok and canEnter
long_full  = long_full_raw  and vol_ok and canEnter
short_early= useShort and short_early_raw and vol_ok and canEnter
short_full = useShort and short_full_raw  and vol_ok and canEnter

// ===== 执行:多头 =====
if long_early and strategy.position_size <= 0
    strategy.entry("LONG", strategy.long)

if long_full
    if strategy.position_size <= 0
        strategy.entry("LONG", strategy.long)
    else if addOnFull
        strategy.entry("LONG+", strategy.long, qty=addQtyPct)

// ===== 执行:空头 =====
if short_early and strategy.position_size >= 0
    strategy.entry("SHORT", strategy.short)

if short_full
    if strategy.position_size >= 0
        strategy.entry("SHORT", strategy.short)
    else if addOnFull
        strategy.entry("SHORT+", strategy.short, qty=addQtyPct)

// ===== 提醒 =====
alertcondition(long_early, "多头2/3先入", "MA5 依次上穿 MA10 与 MA30")
alertcondition(long_full,  "多头3/3确认", "MA5 上穿 MA60(可加仓)")
alertcondition(short_early,"空头2/3先入", "MA5 依次下穿 MA10 与 MA30")
alertcondition(short_full, "空头3/3确认", "MA5 下穿 MA60(可加仓)")
alertcondition(close <= ma30, "平多", "收盘≤MA30")
alertcondition(close >= ma30, "平空", "收盘≥MA30")