この戦略は,機械学習ベースの適応型スーパートレンド取引システムで,波動性クラスタリング,適応型ATRトレンド検出,構造化されたエントリー/エグジットメカニズムを統合することにより,従来のスーパートレンド指標の信頼性を高めます.コアコンセプトは,機械学習方法を通じて市場の波動性を分類し,適切な市場条件でトレンドに従う取引を実行し,リスク管理のために動的なストップ・ロストとテイク・プロフィートレベルを使用します.
この戦略は3つの主要コンポーネントで構成される: 1) トレンド方向とターニングポイントを決定するためにATRに基づく適応型スーパートレンド計算; 2) 市場状態を高,中,低波動環境に分類するK-meansベースの波動性クラスタリング; 3) 波動性環境に基づく差別化された取引規則. 高波動性条件では慎重を保ちながら低波動性環境でトレンド機会を探します. システムは,ta.crossunderおよびta.crossover関数を使用して,スーパートレンドラインとの関係での価格位置と組み合わせてトレンド逆転信号をキャプチャします.
この戦略は,機械学習技術を伝統的な技術分析方法と組み合わせて,スマートなトレンドフォローシステムを作成する.その主な利点は,適応性とリスク制御能力にあり,波動性クラスタリングを通じてインテリジェントな市場状態の識別を達成する.パラメータ敏感性などのリスクが存在する一方で,継続的な最適化と精製は,さまざまな市場環境で安定したパフォーマンスを維持するのに役立ちます.トレーダーは,ライブ取引で戦略を実行する際に,パラメータ敏感性を徹底的にテストし,特定の市場特性に基づいて最適化することをお勧めします.
/*backtest start: 2025-01-09 00:00:00 end: 2025-01-16 00:00:00 period: 10m basePeriod: 10m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("Adaptive SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=200) // Import Indicator Components atr_len = input.int(10, "ATR Length", group="SuperTrend Settings") fact = input.float(3, "SuperTrend Factor", group="SuperTrend Settings") training_data_period = input.int(100, "Training Data Length", group="K-Means Settings") // Volatility Clustering volatility = ta.atr(atr_len) upper = ta.highest(volatility, training_data_period) lower = ta.lowest(volatility, training_data_period) high_volatility = lower + (upper-lower) * 0.75 medium_volatility = lower + (upper-lower) * 0.5 low_volatility = lower + (upper-lower) * 0.25 cluster = volatility >= high_volatility ? 0 : volatility >= medium_volatility ? 1 : 2 // SuperTrend Calculation pine_supertrend(factor, atr) => src = hl2 upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand int _direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) _direction := 1 else if prevSuperTrend == prevUpperBand _direction := close > upperBand ? -1 : 1 else _direction := close < lowerBand ? 1 : -1 superTrend := _direction == -1 ? lowerBand : upperBand [superTrend, _direction] [ST, dir] = pine_supertrend(fact, volatility) // Entry Conditions longEntry = ta.crossunder(dir, 0) and cluster > 1 and close > ST shortEntry = ta.crossover(dir, 0) and cluster == 0 and close < ST // Stop Loss & Take Profit atr_mult = input.float(2, "ATR Multiplier for SL/TP", group="Risk Management") sl = atr_mult * ta.atr(atr_len) longStopLoss = close - sl longTakeProfit = close + (sl * 1.5) shortStopLoss = close + sl shortTakeProfit = close - (sl * 1.5) // Execute Trades if longEntry strategy.entry("Long", strategy.long) strategy.exit("Take Profit", from_entry="Long", limit=longTakeProfit, stop=longStopLoss) if shortEntry strategy.entry("Short", strategy.short) strategy.exit("Take Profit", from_entry="Short", limit=shortTakeProfit, stop=shortStopLoss) // Plot SuperTrend plot(ST, title="SuperTrend", color=dir > 0 ? color.green : color.red, linewidth=2) // Alerts alertcondition(longEntry, title="Long Entry Signal", message="Buy Signal - Trend Shift Up") alertcondition(shortEntry, title="Short Entry Signal", message="Sell Signal - Trend Shift Down")