マルチインジケーター収束取引戦略は,RSI,TDシーケンス,MACD,ボリンジャー帯からの信号を組み合わせて,トレンド市場における高い確率設定を特定します.
戦略論理:
14期間のRSIを計算する.RSI差異パラメータを買い/売るシグナルの
MACD インディケーターを計算します. 5つの連続した正のMACD ヒストグラムバーは購入信号を表示します. 5つの連続した負のバーは販売信号を表示します.
2つの連続した TD 棒が買い信号を 2つの連続した TS 棒が売り信号を 与えます
20 期間のボリンジャー帯を計算します. 上部帯の上の値が買いを示唆します. 下部帯の下の値が売りを示唆します.
RSI,MACD,TD Sequential が方向性について合意し,ボリンジャー帯が矛盾しない場合にのみ取引を行う.
入力パラメータに基づいて 利益目標とストップ損失を設定します
この戦略は,誤った信号を避けるために複数の指標の強みを組み合わせます.ボリンガー帯は,トレンド中に高い確率設定をフィルタリングするのに役立ちます.しかし,指標パラメータは徹底的な最適化が必要です.
全体的に,このマルチインジケーター戦略は,強いトレンドの間に高い確率のセットアップを捉えることができますが,過剰な取引を避けるために注意深くパラメータを調整し,インジケーター信号を保守的に使用する必要があります.
/*backtest start: 2022-09-05 00:00:00 end: 2023-09-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("RSI, TD Seq, MACD, BB Strategy - Calculation",overlay=true) RSIDifference = input(-7, minval=-50, maxval=50, title="RSI Difference") TD = close > close[4] ?nz(TD[1])+1:0 TS = close < close[4] ?nz(TS[1])+1:0 TDUp = TD - valuewhen(TD < TD[1], TD , 1 ) TDDn = TS - valuewhen(TS < TS[1], TS , 1 ) TDcheckUP = iff(TD == 2, true, false) TDCheckDOWN = iff(TS == 2, true, false) [_, _, histLine] = macd(close, 12, 26, 9) MACDCheckDown = iff(histLine > 0 and histLine[1] > 0 and histLine[2] > 0 and histLine[3] > 0 and histLine[4] > 0, true, false) MACDCheckUp = iff(histLine < 0 and histLine[1] < 0 and histLine[2] < 0 and histLine[3] < 0 and histLine[4] < 0, true, false) RSICal = rsi(close, 14) RSICalNewUp = 50 + RSIDifference RSICalNewDown = 50 - RSIDifference RSICheckUp = iff(RSICal <= RSICalNewUp, true, false) RSICheckDown = iff(RSICal >= RSICalNewDown, true, false) basis = sma(close, 20) dev = 2 * stdev(close, 20) upperBB = basis + dev lowerBB = basis - dev BBCheckUp = iff(close > upperBB, true, false) BBCheckDown = iff(close < lowerBB, true, false) //BBCheckUp = false //BBCheckDown = false BuyCheck = iff(TDcheckUP == true and MACDCheckUp == true and RSICheckUp == true and BBCheckUp == false, true, false) SellCheck = iff(TDCheckDOWN == true and MACDCheckDown == true and RSICheckDown == true and BBCheckDown == false, true, false) ProfitStratA = input(50, minval=0, maxval=10000, title="Profit", step=0.5) useStopLoss = input(false, title="Use Stop Loss?") LossstratA = input(145, minval=0, maxval=10000, title="Stop Loss", step=0.5) ProfitStrat = ProfitStratA * 10 Lossstrat = useStopLoss ? LossstratA * 10 : 1000000 if (strategy.position_size > 0) strategy.exit("BuyClose", "Buy", profit=ProfitStrat, loss=Lossstrat) if (strategy.position_size < 0) strategy.exit("SellClose", "Sell", profit=ProfitStrat, loss=Lossstrat) if (BuyCheck == true and strategy.position_size == 0) strategy.entry("Buy", strategy.long, comment="Long Entry") if (SellCheck == true and strategy.position_size == 0) strategy.entry("Sell", strategy.short, comment="Short Entry") //plotshape(BuyCheck, color=blue, transp=0, style=shape.arrowup, text="Buy\n", location=location.belowbar) //plotshape(SellCheck, color=orange, transp=0, style=shape.arrowdown, text="Sell\n", location=location.abovebar)