【失敗】BB4本(だまし警戒でクロス継続で売買)

PineScript
// @version=6
strategy("4本BBで3段階MACD切り替え", overlay=true, initial_capital=1000000)

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

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

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

// 継続本数(だましを減らすためにクロスの継続本数を設定)
contBarsNormal = input.int(1, "継続本数(通常)", minval=1)
contBarsFast   = input.int(1, "継続本数(早い)", minval=1)
contBarsUltra  = input.int(1, "継続本数(激早)", 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)

// ボリンジャーバンド
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

// 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)

// 現在の価格ゾーンを判定
zone = 0 // 0=通常, 1=早い, 2=激早
zone_now = 0
if close > upper2 or close < lower2
    zone_now := 2
else if (close > upper1 and close <= upper2) or (close < lower1 and close >= lower2)
    zone_now := 1
else
    zone_now := 0

// 1本遅れゾーン
zone := nz(zone[1], 0)
zone := zone_now


// ゾーンに応じてMACDを選択
macdLine = zone == 2 ? macdLine3 : zone == 1 ? macdLine2 : macdLine1
signalLine = zone == 2 ? signalLine3 : zone == 1 ? signalLine2 : signalLine1
contBars = zone == 2 ? contBarsUltra : zone == 1 ? contBarsFast : contBarsNormal

// MACDクロス判定
//macdDead = ta.crossover(macdLine, signalLine)
//macdGolden = ta.crossunder(macdLine, signalLine)
bullCross = ta.crossover(macdLine, signalLine)
bearCross = ta.crossunder(macdLine, signalLine)
bullCount = 0
bearCount = 0

if macdLine > signalLine
    bullCount += 1
    bearCount := 0
else if macdLine < signalLine
    bearCount += 1
    bullCount := 0

bullEntry = bullCount >= contBars
bearExit = bearCount >= contBars

// 購入金額
buyAmount = input.float(100000, "購入金額", minval=0)

// 売買戦略
//if macdGolden
if bullEntry and strategy.position_size == 0
    strategy.entry("Long", strategy.long, qty=buyAmount / close)
//if macdDead
if bearExit and strategy.position_size > 0
    strategy.close("Long", comment="Sell")

// --- 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