マルチファクター対トレンド・トレーディング・ストラテジー (Multi-Factor Counter-Trend Trading Strategy) は,市場の連続した価格上昇または下落後に潜在的な逆転点を特定するために設計された洗練されたアルゴリズムのトレーディングシステムである.この戦略は,ボリューム確認とチャネルバンド (ボリンジャーバンドまたはケルトナーチャネル) と連携して価格動向を分析し,過剰購入または過剰販売の条件で逆転機会を把握する.主な強みは,信号の信頼性と精度を高めるためのマルチファクタルのアプローチにある.
戦略は3つの基本的な要素に基づいて取引信号を生成します
トレードシグナルは,設定された条件が満たされたときに起動する. システムは三角形マーカーをプロットし,バーの確認後に対応するロング/ショートポジションを実行する. 戦略はポジションサイズ化のために口座資本の80%を使用し, 0.01%の取引手数料に因子を与える.
マルチファクター対トレンド取引戦略は,価格パターン,ボリューム変化,チャネルブレイクアウトの包括的な分析を通じて反転取引に体系的なアプローチを提供します.この戦略は柔軟な構成と多次元信号確認で優れているが,市場環境適応とリスク管理に注意を払う必要があります.提案された最適化方向は,ライブ取引パフォーマンスの潜在的な改善を提供します.
/*backtest start: 2024-12-03 00:00:00 end: 2024-12-10 00:00:00 period: 10m basePeriod: 10m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="The Bar Counter Trend Reversal Strategy [TradeDots]", overlay=true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 80, commission_type = strategy.commission.percent, commission_value = 0.01) // Initialize variables var bool rise_triangle_ready = false var bool fall_triangle_ready = false var bool rise_triangle_plotted = false var bool fall_triangle_plotted = false //Strategy condition setup noOfRises = input.int(3, "No. of Rises", minval=1, group="STRATEGY") noOfFalls = input.int(3, "No. of Falls", minval=1, group="STRATEGY") volume_confirm = input.bool(false, "Volume Confirmation", group="STRATEGY") channel_confirm = input.bool(true, "", inline="CHANNEL", group="STRATEGY") channel_type = input.string("KC", "", inline="CHANNEL", options=["BB", "KC"],group="STRATEGY") channel_source = input(close, "", inline="CHANNEL", group="STRATEGY") channel_length = input.int(20, "", inline="CHANNEL", minval=1,group="STRATEGY") channel_mult = input.int(2, "", inline="CHANNEL", minval=1,group="STRATEGY") //Get channel line information [_, upper, lower] = if channel_type == "KC" ta.kc(channel_source, channel_length,channel_mult) else ta.bb(channel_source, channel_length,channel_mult) //Entry Condition Check if channel_confirm and volume_confirm rise_triangle_ready := ta.falling(close, noOfFalls) and ta.rising(volume, noOfFalls) and high > upper fall_triangle_ready := ta.rising(close, noOfRises) and ta.rising(volume, noOfRises) and low < lower else if channel_confirm rise_triangle_ready := ta.falling(close, noOfFalls) and low < lower fall_triangle_ready := ta.rising(close, noOfRises) and high > upper else if volume_confirm rise_triangle_ready := ta.falling(close, noOfFalls) and ta.rising(volume, noOfFalls) fall_triangle_ready := ta.rising(close, noOfRises) and ta.rising(volume, noOfRises) else rise_triangle_ready := ta.falling(close, noOfFalls) fall_triangle_ready := ta.rising(close, noOfRises) // Check if trend is reversed if close > close[1] rise_triangle_plotted := false // Reset triangle plotted flag if close < close[1] fall_triangle_plotted := false //Wait for bar close and enter trades if barstate.isconfirmed // Plot triangle when ready and counts exceed threshold if rise_triangle_ready and not rise_triangle_plotted label.new(bar_index, low, yloc = yloc.belowbar, style=label.style_triangleup, color=color.new(#9CFF87,10)) strategy.entry("Long", strategy.long) rise_triangle_plotted := true rise_triangle_ready := false // Prevent plotting again until reset if fall_triangle_ready and not fall_triangle_plotted label.new(bar_index, low, yloc = yloc.abovebar, style=label.style_triangledown, color=color.new(#F9396A,10)) strategy.entry("Short", strategy.short) fall_triangle_plotted := true fall_triangle_ready := false // plot channel bands plot(upper, color = color.new(#56CBF9, 70), linewidth = 3, title = "Upper Channel Line") plot(lower, color = color.new(#56CBF9, 70), linewidth = 3, title = "Lower Channel Line")