【失敗】BB4本(パラメータを切り替えたら1本で通常PMにもどす)

PineScript
// @version=6
strategy("4本BBで一時的MACD切り替え", overlay=true, initial_capital=500000)

// === MACD パラメータ ===
macdSlow = input.int(73, "MACD長期(通常)", minval=1)
macdFast = input.int(65, "MACD短期(通常)", minval=1)
macdSignal = input.int(2, "MACDシグナル(通常)", minval=1)

macdSlow2 = input.int(6, "MACD長期(早い)", minval=1)
macdFast2 = input.int(5, "MACD短期(早い)", minval=1)
macdSignal2 = input.int(5, "MACDシグナル(早い)", minval=1)

macdSlow3 = input.int(4, "MACD長期(激早)", minval=1)
macdFast3 = input.int(5, "MACD短期(激早)", minval=1)
macdSignal3 = input.int(5, "MACDシグナル(激早)", minval=1)

// === ボリンジャーバンド ===
bbLength1 = input.int(25, "内側BB期間", minval=1)
bbMultUpper1 = input.float(2.1, "内側BB上側倍率", minval=0.1, step=0.1)
bbMultLower1 = input.float(1.8, "内側BB下側倍率", minval=0.1, step=0.1)

bbLength2 = input.int(25, "外側BB期間", minval=1)
bbMultUpper2 = input.float(3.1, "外側BB上側倍率", minval=0.1, step=0.1)
bbMultLower2 = input.float(1.9, "外側BB下側倍率", minval=0.1, step=0.1)

// === BB計算 ===
basis1 = ta.sma(close, bbLength1)
dev1 = ta.stdev(close, bbLength1)
upper1 = basis1 + bbMultUpper1 * dev1
lower1 = basis1 - bbMultLower1 * dev1

basis2 = ta.sma(close, bbLength2)
dev2 = ta.stdev(close, bbLength2)
upper2 = basis2 + bbMultUpper2 * dev2
lower2 = basis2 - bbMultLower2 * dev2

// === ゾーン判定(1本限定のトリガー) ===
var int zone = 0
var int triggerBar = na  // トリガー発生バーを記録

// BB抜けを検出
if (close > upper2 or close < lower2)
    zone := 2
    triggerBar := bar_index
else if (close > upper1 or close < lower1)
    zone := 1
    triggerBar := bar_index

// トリガーから1本経過したら通常に戻す
if not na(triggerBar) and bar_index > triggerBar + 0
    zone := 0

// MACD値の計算
[macdLine1, signalLine1, _] = ta.macd(close, macdFast, macdSlow, macdSignal)
[macdLine2, signalLine2, _] = ta.macd(close, macdFast2, macdSlow2, macdSignal2)
[macdLine3, signalLine3, _] = ta.macd(close, macdFast3, macdSlow3, macdSignal3)

// MACD選択
macdLine = zone == 2 ? macdLine3 : zone == 1 ? macdLine2 : macdLine1
signalLine = zone == 2 ? signalLine3 : zone == 1 ? signalLine2 : signalLine1

// クロス判定
macdDead = ta.crossover(macdLine, signalLine)
macdGolden  = ta.crossunder(macdLine, signalLine)

// 売買
buyAmount = input.float(100000, "購入金額", minval=0)
if macdGolden and strategy.position_size == 0
    strategy.entry("Long", strategy.long, qty=buyAmount / close)
    label.new(bar_index, low * 0.995, "🚀", yloc=yloc.price, style=label.style_label_up, color=color.new(color.green, 100))
if macdDead and strategy.position_size > 0
    strategy.close("Long", comment="Sell")
    label.new(bar_index, high * 1.005, "💣", yloc=yloc.price, style=label.style_label_down, color=color.new(color.red, 100))

// 売買矢印を絵文字に変更
//plotshape(macdGolden, title="Buy Signal", style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), text="🚀", textcolor=color.white, size=size.small)
//plotshape(macdDead, title="Sell Signal", style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), text="💣", textcolor=color.white, size=size.small)

// BB描画
plot(basis1, "内側BB Basis", color=color.new(color.green, 0))
plot(upper1, "内側BB Upper", color=color.new(color.purple, 0))
plot(lower1, "内側BB Lower", color=color.new(color.purple, 0))

plot(basis2, "外側BB Basis", color=color.new(color.teal, 0))
plot(upper2, "外側BB Upper", color=color.new(color.orange, 0))
plot(lower2, "外側BB Lower", color=color.new(color.orange, 0))
BACK