ダイナミック・テイク・プロフィット・フォロー・トレンド戦略は,低価格で購入し,高価格で販売することを目的として,長期的トレンドと短期的な引き下げを検出する.この戦略は,収益と損失の大きさを検出するために波動性単位を使用し,パーセント変化を心配することなくすべてのコインに適用することができます.
この戦略の購買ロジックは,長期上向きのトレンドが現れ (200日間のEMAが上昇し,200日間のRSIが51を超えると) 短期的な引き下げが起こると (最後の2つのキャンドルスタイクが閉じる価格を下げている) ロングポジションが開かれます.
価格が1ボラティリティユニット以上上昇すると利益を得 2ボラティリティユニット以上下がるとストップ損失
変動単位は,過去50日間の閉店価格の標準偏差の2倍で計算されます.これは,手動のパーセント設定を必要とせずに,異なるコインの変動状態を自動的に検出できます.
この戦略の最大の利点は,異なるコインの変動量を動的に検出し,それに応じてストップ・ロスト/テイク・プロフィートレベルを設定できるということです.これは固定パーセント設定の問題を回避し,より多くのコインに自動的に適応できます.
また,長期と短期判断を組み合わせることで,誤ったブレイクアウトを効果的にフィルタリングできます.長期トレンドを使用して潜在的に上昇傾向のコインを判断し,短期的なプルバック信号と組み合わせることで,ボリンジャー・プレッシャーのような誤った信号を回避できます.
この戦略の最大のリスクは,ストップ・ロスト/テイク・プロフィートユニット設定である.波動性が高すぎると,テイク・プロフィート距離は上昇傾向を追いかけるためにあまりにも近い可能性があります.波動性が低すぎると,ストップ・ロスはあまりにも速く起動する可能性があります.これは波動性ユニット判断の誤りを避けるための支援として,より長い期間のEMAが必要です.
また,短期的なトレンドに依存するリスクもあります.短期的な引き下げなしの長期的上昇傾向がある場合,エントリータイミングが見逃されます.これには追加のサポート指標が必要かもしれません.
戦略は以下の方向で最適化できる:
波動性単位エラーを避けるため,長期間のEMA判断を追加する.
トレーディング・ボリュームなどの指標を追加して 傾向を判断し 短期的なキャンドルスタイクへの依存を減らす
入国・退出条件を最適化し,より厳しい入国規則を設定する
機械学習アルゴリズムを組み合わせて 傾向の方向性を決定し より高い勝利率を達成します
ダイナミック・テイク・プロフィット・フォロー・トレンド戦略は,その核心に明確な論理がある.この戦略は,手動のパーセント入力を必要とせずにコインの設定を自動的に調整することができます.一方,長期および短期トレンドの二重確認を組み合わせることで,誤った信号を効果的にフィルタリングすることができます.さらなる最適化により,この戦略は非常に効率的なトレンド追いかける戦略になることができます.
/*backtest start: 2022-12-22 00:00:00 end: 2023-12-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © BHD_Trade_Bot strategy(shorttitle='Take Profit On Trend', title='Take Profit On Trend (by BHD_Trade_Bot)', overlay=true, initial_capital = 15, default_qty_type = strategy.cash, default_qty_value = 15, commission_type=strategy.commission.percent, commission_value=0.1) //Backtest Time start_day = 1 start_month = 1 start_year = 2021 end_day = 1 end_month = 1 end_year = 2050 start_time = timestamp(start_year, start_month, start_day, 00, 00) end_time = timestamp(end_year, end_month, end_day, 23, 59) is_back_test_time() => time >= start_time and time <= end_time ? true : false // Last bar h1_last_bar = (timenow - time)/1000/60/60 < 2 // EMA ema50 = ema(close, 50) ema200 = ema(close, 200) // RSI length 200 rsi200 = rsi(close, 200) // Bollinger Bands length 50 bb50 = 2 * stdev(close, 50) // BHD Unit bhd_unit = sma(bb50, 100) bb50_upper = ema50 + bhd_unit bb50_lower = ema50 - bhd_unit // All n candles is going down all_body_decrease(n) => isValid = true for i = 0 to (n - 1) if (close[i] > close[i + 1]) isValid := false break isValid // ENTRY // Long-term uptrend entry_condition1 = rsi200 > 51 // Short-term downtrend entry_condition2 = all_body_decrease(2) ENTRY_CONDITION = entry_condition1 and entry_condition2 if (ENTRY_CONDITION and is_back_test_time()) strategy.entry("entry", strategy.long) // CLOSE CONDITIONS // Price increase 1 BHD unit TAKE_PROFIT = close > strategy.position_avg_price + bhd_unit // Price decrease 2 BHD unit STOP_LOSS = close < strategy.position_avg_price - bhd_unit * 2 CLOSE_CONDITION = TAKE_PROFIT or STOP_LOSS if (CLOSE_CONDITION or h1_last_bar) strategy.close("entry") // Draw plot(ema50) plot(ema200, color=color.yellow) plot(bb50_upper) plot(bb50_lower)