トレンド戦略をフォローするダイナミックな収益

作者: リン・ハーンチャオチャン開催日:2023年12月29日16時06分54秒
タグ:

img

概要

ダイナミック・テイク・プロフィット・フォロー・トレンド戦略は,低価格で購入し,高価格で販売することを目的として,長期的トレンドと短期的な引き下げを検出する.この戦略は,収益と損失の大きさを検出するために波動性単位を使用し,パーセント変化を心配することなくすべてのコインに適用することができます.

戦略の論理

この戦略の購買ロジックは,長期上向きのトレンドが現れ (200日間のEMAが上昇し,200日間のRSIが51を超えると) 短期的な引き下げが起こると (最後の2つのキャンドルスタイクが閉じる価格を下げている) ロングポジションが開かれます.

価格が1ボラティリティユニット以上上昇すると利益を得 2ボラティリティユニット以上下がるとストップ損失

変動単位は,過去50日間の閉店価格の標準偏差の2倍で計算されます.これは,手動のパーセント設定を必要とせずに,異なるコインの変動状態を自動的に検出できます.

利点分析

この戦略の最大の利点は,異なるコインの変動量を動的に検出し,それに応じてストップ・ロスト/テイク・プロフィートレベルを設定できるということです.これは固定パーセント設定の問題を回避し,より多くのコインに自動的に適応できます.

また,長期と短期判断を組み合わせることで,誤ったブレイクアウトを効果的にフィルタリングできます.長期トレンドを使用して潜在的に上昇傾向のコインを判断し,短期的なプルバック信号と組み合わせることで,ボリンジャー・プレッシャーのような誤った信号を回避できます.

リスク分析

この戦略の最大のリスクは,ストップ・ロスト/テイク・プロフィートユニット設定である.波動性が高すぎると,テイク・プロフィート距離は上昇傾向を追いかけるためにあまりにも近い可能性があります.波動性が低すぎると,ストップ・ロスはあまりにも速く起動する可能性があります.これは波動性ユニット判断の誤りを避けるための支援として,より長い期間のEMAが必要です.

また,短期的なトレンドに依存するリスクもあります.短期的な引き下げなしの長期的上昇傾向がある場合,エントリータイミングが見逃されます.これには追加のサポート指標が必要かもしれません.

オプティマイゼーションの方向性

戦略は以下の方向で最適化できる:

  1. 波動性単位エラーを避けるため,長期間のEMA判断を追加する.

  2. トレーディング・ボリュームなどの指標を追加して 傾向を判断し 短期的なキャンドルスタイクへの依存を減らす

  3. 入国・退出条件を最適化し,より厳しい入国規則を設定する

  4. 機械学習アルゴリズムを組み合わせて 傾向の方向性を決定し より高い勝利率を達成します

結論

ダイナミック・テイク・プロフィット・フォロー・トレンド戦略は,その核心に明確な論理がある.この戦略は,手動のパーセント入力を必要とせずにコインの設定を自動的に調整することができます.一方,長期および短期トレンドの二重確認を組み合わせることで,誤った信号を効果的にフィルタリングすることができます.さらなる最適化により,この戦略は非常に効率的なトレンド追いかける戦略になることができます.


/*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)


もっと