
ダイナミック・ストップ・ストップ・トレンド・ストラテジーは,長期トレンドと短期回調を検知することで,低買い高売りを実現し,上昇トレンドを追求する目的である.このストラテジーは,同時に波動単位を使用して,利益損失の大きさを検知し,すべての通貨に適用し,パーセント変化を心配する必要がないようにする.
この戦略の買取の論理は,長期の上昇傾向 ((200日間のEMAが上昇し,200日間のRSIが51より大きい) と短期的な下落の回調 ((最後の2つのK線の終盤価格が下落した)) が出現したときに,買入して開口する.
sellingの論理は,価格が上昇すると1つの変動単位を超えるとストップし,価格が下がると2つの変動単位を超えるとストップする.
波動単位は,50日間の閉盘価格標準差の2倍を基本波動単位として計算する.これにより,パーセンテージを設定する必要なく,異なる通貨の自体の波動を検出することができる.
この戦略の最大の利点は,異なる通貨の変動の大きさを動的に検出でき,通貨自体の変動に応じてストップ・ストラスト・ユニットを設定できることです.これは,パーセントストップの固定設定の問題を回避し,より多くの通貨に自動的に適応できます.
もう一つの優位性は,長期短期判断と組み合わせて,偽の突破を効果的にフィルタリングできる ということです. 長期トレンドを利用して,将来の上昇の可能性のあるコインを判断し,短期リコールシグナルと組み合わせて,ブリン帯のスクリーゼなどの偽のシグナルを効果的に回避できます.
この戦略の最大のリスクは,ストップ・ストップ・ユニットの設定にある.もし波動が大きすぎれば,ストップ・距離が近すぎ,継続的に追いつくことができないかもしれない.もし波動が小さすぎれば,損失が早く過ぎるかもしれない.これは,波動ユニットの判断誤りを避けるために,より長い周期EMAを補助として使用する必要がある.
もう一つのリスクは,戦略が短期的なトレンド判断に依存することである.長期的に上昇するが,短期的に反転しない場合,入場時間を逃すことになる.これは,他の補助的な判断指標を加える必要があるかもしれない.
この戦略は以下の方向から最適化できます.
波動単位誤差を避けるため,より長い周期EMA判断を追加
トレンドを判断するための指標,取引量を増やし,短期k線への依存を減らす
ポジション開設とポジション条件の最適化,より厳格な入場規則の設定
機械学習のアルゴリズムと組み合わせたトレンドの方向性を判断し,より高い勝利率を実現します.
ダイナミックストップトラッキングトレンド戦略の全体的な考え方は明確で,その核心はダイナミック波動単位の設定である.この戦略は,パーセンテージを人工的に設定することなく,異なる通貨の設定の利回り単位に自動的に適応することができる.また,長期短期の二重判断と組み合わせて,偽信号を効果的に除することができる.さらに最適化することで,この戦略は高効率のトレンド追跡戦略になることができる.
/*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)