この戦略は,トレンドフォローとレンジトレーディングを組み合わせる適応システムで,市場状況を決定するためにチャッピネスインデックス (CI) を使用し,対応する取引論理を適用する.トレンド市場では,戦略は EMAクロスオーバーとRSIオーバーバイト/オーバーセールシグナルを使用して取引する.レンジ市場では,主にRSI極端値に依存する.戦略には,リスクを制御し利益をロックするためのストップ・ロストとテイク・プロフィートメカニズムも含まれる.
この戦略の核心は,市場をトレンド (CI<38.2) とレンジング (CI>61.8) の状態に分類するために,チャッピネス・インデックス (CI) を利用することにある.トレンド市場では,速いEMA (9期) がスローEMA (21期) を越えてRSIが70以下になるとロングポジションが開かれ,スローEMAが速いEMAを越えてRSIが30以上になるとショートポジションが開かれ.レンジング市場では,RSIが30以下になるとロングポジション,RSIが70以上になるとショートポジションが開かれ.この戦略には,2%ストップ・ロストと4%テイク・プロフィートレベルの対応した退出条件が含まれている.
この戦略は,複数の技術指標を組み合わせて,さまざまな市場環境で安定したパフォーマンスを維持することで,適応性の高い取引システムを構築する.その主な利点は,市場の適応性と包括的なリスク管理メカニズムにある.一方で,パラメータ最適化と市場状況依存性に注意を払わなければならない.継続的な最適化と改善を通じて,戦略はさまざまな市場状況でより良い取引結果を達成するための約束を示している.
/*backtest start: 2024-12-19 00:00:00 end: 2024-12-26 00:00:00 period: 45m basePeriod: 45m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © nopology //@version=6 strategy("CI, EMA, RSI", overlay=false) // Input parameters lengthCI = input(14, title="CI Length") lengthRSI = input(14, title="RSI Length") fastLength = input(9, title="Fast EMA Length") slowLength = input(21, title="Slow EMA Length") // Calculate CI atr = ta.atr(lengthCI) highLowRange = math.log10(math.max(high[lengthCI], high) - math.min(low[lengthCI], low)) sumATR = math.sum(atr, lengthCI) ci = 100 * (math.log10(sumATR / highLowRange) / math.log10(lengthCI)) // Calculate RSI rsi = ta.rsi(close, lengthRSI) // Calculate EMAs fastEMA = ta.ema(close, fastLength) slowEMA = ta.ema(close, slowLength) // Define conditions trendingMarket = ci < 38.2 rangingMarket = ci > 61.8 bullishSignal = ta.crossover(fastEMA, slowEMA) and rsi < 70 bearishSignal = ta.crossover(slowEMA, fastEMA) and rsi > 30 // Plot indicators for visualization plot(ci, title="Choppiness Index", color=color.purple, linewidth=2) plot(fastEMA, title="Fast EMA", color=color.blue) plot(slowEMA, title="Slow EMA", color=color.red) // Strategy Execution if (trendingMarket) if (bullishSignal) strategy.entry("Long", strategy.long) if (bearishSignal) strategy.entry("Short", strategy.short) else if (rangingMarket) if (rsi < 30) strategy.entry("Long", strategy.long) if (rsi > 70) strategy.entry("Short", strategy.short) // Close positions when conditions no longer met or reverse if (trendingMarket and not bullishSignal) strategy.close("Long") if (trendingMarket and not bearishSignal) strategy.close("Short") if (rangingMarket and rsi > 40) strategy.close("Long") if (rangingMarket and rsi < 60) strategy.close("Short") // Optional: Add stop loss and take profit stopLossPerc = input.float(2, title="Stop Loss (%)", minval=0.1, step=0.1) / 100 takeProfitPerc = input.float(4, title="Take Profit (%)", minval=0.1, step=0.1) / 100 strategy.exit("Exit Long", "Long", stop=close*(1-stopLossPerc), limit=close*(1+takeProfitPerc)) strategy.exit("Exit Short", "Short", stop=close*(1+stopLossPerc), limit=close*(1-takeProfitPerc))