この戦略は,CCI指標とモメントインジケーターをRSI指標と組み合わせて,市場のトレンドを特定し,オーバーバイト/オーバーセールゾーンにギャップが現れるときに入力する.また,トレンドと平均リバーション範囲を認識するためにボリンジャーバンドを使用する.この戦略は,ブレイクアウトとプルバックを効果的に特定し,トレンド開始の早期に入れて,パラメータを調整することによって異なる製品に適応することができます.
第一に,戦略は,CCI指標やモメント指標によって 0線以上/下を横断する長信号と短信号を決定する.また,誤った信号を避けるために,RSIは過買い/過売れ区域,つまり過買いで65以上,過売れで35以下である必要があります.
さらに,戦略は,より信頼性の高い信号を確保するために,RSIの上昇/下落差を決定することを選択することができます.
CCIまたはモメントがロングシグナルをトリガーし,RSIがオーバーセールゾーンにある場合,戦略は以前の高値と低値がボリンジャーバンド平均線以上であるかどうかをチェックします.そうであれば,ロングシグナルが生成されます.逆に,ショートシグナルがトリガーされ,以前の高値と低値が平均線以下である場合,ショートシグナルが生成されます.
この戦略は,トレンドと振動指標の両方を利用し,トレンドを早期に取得し,平均逆転範囲で誤ったブレイクアウトを避ける.価格がボリンジャーバンドを突破すると,戦略は利益をロックし,さらなる引き下げを防ぐためにすべてのポジションを閉じる.
トレンドと振動指標を組み合わせることで,トレンドを早期に入力し,範囲市場の不必要なポジションを回避できます.
ボリンジャー・バンドの平均値を使って 価格格差をフィルタリングすることで 誤ったブレイクを効果的に処理できます
過去のRSIをチェックすると,間違った取引信号を生成しない.
手動による干渉なしで完全に自動化された取引 アルゴリズム取引に適しています
柔軟なパラメータ調整は,異なる取引製品に適応します.
損失を止め 利益をコントロールする リスクを効果的に
誤ったボリンジャー帯のパラメータは,無効な平均逆転識別を引き起こす可能性があります.
誤った指標パラメータは 誤った信号が多すぎる可能性があります
失敗したブレイクアウトは 価格が平均値に戻ったときに タイムリーストップ損失が必要です
流動性の低下は,不効率なブレイクアウト取引を引き起こす可能性があります.
曲線の不適切な調整を防ぐために十分な歴史的データを確保する.
偽のブレイクを避けるために 取引セッションに注意してください
より安定した平均逆転範囲のためにボリンガー帯のパラメータを最適化します.
より良い最適化のために,異なる製品でパラメータをテストします.
位置サイズを追加して,単一の位置の大きさを過大化しないようにします.
主にアクティブな時間に取引するために取引セッションフィルターを追加します.
よりインテリジェントな信号を生成するために 機械学習モデルを組み込む
市場全体の傾向を決定するためにより多くのデータ源を統合します.
より多くの指標を追加して 強力な指標を組み立てます
この戦略は,トレンドと振動指標を統合し,トレンドを早期に把握する.ボリンジャーバンド平均値と価格ギャップを使用して,誤ったブレイクアウトを効果的に回避する.柔軟なパラメータは,優れたバックテスト結果を持つ異なる製品に適応する.次のステップは,より堅牢なパラメータとモデルアンセルの最適化であり,長期的には一貫した過剰収益を達成することです.
/*backtest start: 2022-10-18 00:00:00 end: 2023-10-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='BroTheJo Strategy', shorttitle='BTJ', overlay=true) // Input settings ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum']) ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length') useDivergence = input.bool(false, title='Find Regular Bullish/Bearish Divergence') rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level') rsiOversold = input.int(35, minval=1, title='RSI Oversold Level') rsiLength = input.int(14, minval=1, title='RSI Length') plotMeanReversion = input.bool(true, 'Plot Mean Reversion Bands on the chart') emaPeriod = input(200, title='Lookback Period (EMA)') bandMultiplier = input.float(1.6, title='Outer Bands Multiplier') // CCI and Momentum calculation momLength = ccimomCross == 'Momentum' ? ccimomLength : 10 mom = close - close[momLength] cci = ta.cci(close, ccimomLength) ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0) ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci) // RSI calculation src = close up = ta.rma(math.max(ta.change(src), 0), rsiLength) down = ta.rma(-math.min(ta.change(src), 0), rsiLength) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought // Regular Divergence Conditions bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2] bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2] // Mean Reversion Indicator meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na // Entry Conditions prevHigh = ta.highest(high, 1) prevLow = ta.lowest(low, 1) longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion) shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion) // Plotting oldLongEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) oldShortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(oldShortEntryCondition, title='SELL', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) // Strategy logic if (longEntryCondition) strategy.entry("Buy", strategy.long) if (shortEntryCondition) strategy.entry("Sell", strategy.short) // Close all open positions when outside of bands closeAll = (high >= upperBand) or (low <= lowerBand) if (closeAll) strategy.close_all("Take Profit/Cut Loss") // Plotting plot(upperBand, title='Upper Band', color=color.fuchsia, linewidth=1) plot(meanReversion, title='Mean', color=color.gray, linewidth=1) plot(lowerBand, title='Lower Band', color=color.blue, linewidth=1)