モメントカメトレンドトラッキング戦略は,カメトレードルールに基づくトレンドフォロー戦略である.トレンドを特定するためにカメ指標を使用し,いくつかのノイズトレードをフィルタリングするためにモメントメトリックを組み合わせます.この戦略の主な利点は,強い価格トレンドを把握し,過剰なリターンを達成する能力です.
この戦略は,トレンド方向を決定するためにタートル指標のブレイクアウトシステムを使用します.特に,閉値が過去20日間の最高値よりも高くなった場合,それは上昇信号であり,ロングになります.閉値が過去20日間の最低値よりも低くなった場合,それは下落信号であり,戦略はショートになります.
この戦略は,いくつかのノイズトレードをフィルタリングするために,モメンタムファクタも組み込む.価格変動が5ATR未満の場合,戦略はトレードに入らない.これは横向市場でのウィップソーによる損失を回避する.
ストップ・ロスの戦略では,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,スト・ロスは,スト・ロスは,スト・ロスは,スト・ロスは,スト・ロスは,スト・ロスは,スト・ロスは,スト
この戦略の最大の利点は,トレンドフォローとモメントマネジメントの両方を組み合わせることである.タートルシステムは,市場の騒音に混乱することなく,価格の中期トレンドを正確に把握することができる.追加のATRモメントフィルターは,不要な取引数をさらに削減し,それによって利益の可能性を大幅に増加させる.
具体的には,この戦略には以下の強みがあります.
この戦略には,さらなる最適化の可能性が大きいが,以下のようなリスクも伴います.
上記のリスクに基づいて,主な最適化機会は以下のとおりです.
モメントム・タートルトレンド・トラッキング戦略は,中期から長期間のトレンドフォローのための強力なシステムである. 強いトレンドを捉えるためにトレンド識別のためのタートル指標と波動性管理のためのATRフィルタを組み合わせている. さらに,リスク制御とパラメータチューニングは引き下げを減らすために堅牢である. ダイナミックサイジング,逆転,利益採取などのさらなる強化はパフォーマンスを改善することができる.
/*backtest start: 2023-10-23 00:00:00 end: 2023-11-22 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Heiken Ashi BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075) /////////////// Time Frame /////////////// testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2029, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// HA ///////////// haTicker = heikinashi(syminfo.tickerid) haOpen = security(haTicker, "D", open) haHigh = security(haTicker, "D", high) haLow = security(haTicker, "D", low) haClose = security(haTicker, "D", close) ///////////// Rate Of Change ///////////// source = close roclength = input(30, minval=1) pcntChange = input(7.0, minval=1) roc = 100 * (source - source[roclength]) / source[roclength] emaroc = ema(roc, roclength / 2) isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2)) /////////////// Strategy /////////////// long = haOpen < haClose and isMoving() short = haOpen > haClose and isMoving() last_long = 0.0 last_short = 0.0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) last_open_long_signal = 0.0 last_open_short_signal = 0.0 last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1]) last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1]) last_long_signal = 0.0 last_short_signal = 0.0 last_long_signal := long_signal ? time : nz(last_long_signal[1]) last_short_signal := short_signal ? time : nz(last_short_signal[1]) in_long_signal = last_long_signal > last_short_signal in_short_signal = last_short_signal > last_long_signal last_high = 0.0 last_low = 0.0 last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1]) last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1]) sl_inp = input(2.0, title='Stop Loss %') / 100 tp_inp = input(5000.0, title='Take Profit %') / 100 take_level_l = strategy.position_avg_price * (1 + tp_inp) take_level_s = strategy.position_avg_price * (1 - tp_inp) since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na slShort = strategy.position_avg_price * (1 + sl_inp) long_sl = in_long_signal ? slLong : na short_sl = in_short_signal ? slShort : na /////////////// Execution /////////////// if testPeriod() strategy.entry("L", strategy.long, when=long) strategy.entry("S", strategy.short, when=short) strategy.exit("L SL", "L", stop=long_sl, limit=take_level_l, when=since_longEntry > 0) strategy.exit("S SL", "S", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0) /////////////// Plotting /////////////// plotcandle(haOpen, haHigh, haLow, haClose, title='HA Candles', color = haOpen < haClose ? color.lime : color.red) bgcolor(isMoving() ? long ? color.lime : short ? color.red : na : color.white, transp=70) bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50)