資源の読み込みに... 荷物...

マドリードリボンとドンチアン・チャネルをベースにした戦略をフォローする多モードの収益/損失停止傾向

作者: リン・ハーンチャオチャン, 日付: 2025-01-10 16:24:30
タグ:エイマRRR

 Multi-Mode Take Profit/Stop Loss Trend Following Strategy Based on EMA, Madrid Ribbon and Donchian Channel

概要

この戦略は,指数移動平均 (EMA),マドリードリボン,ドンチアンチャネルを組み合わせたトレンドフォロー戦略である.この戦略のユニークさは,切り替え可能な3つのテイク・プロフィート/ストップ・ロストモードである.ティックベース,ドルベース,リスク・リワード比率ベース.二重確認メカニズムを通じて信頼性を高め,第2の有効信号のみで取引を実行する.

戦略の原則

この戦略は,取引機会を特定するために3つの技術指標を組み合わせています. 1. 200 期間の EMA は,全体的な傾向の方向性を決定する マドリード・リボン (5期と100期EMAのクロスオーバー) 中期トレンド判断 3. ドンチアン運河の突破

長期取引条件: 200 EMAを超える価格,マドリッドリボン上昇,ドンキアン・チャネル以上の価格ブレイク. ショート・トレード条件: 200 EMA以下の価格,下落マドリード・リボン,ドンチアン・チャンネル以下の価格ブレイク. 誤った信号を減らすため,取引は第二の有効な信号発生時にのみ実行されます.

戦略 の 利点

  1. 柔軟なTP/SL管理システム,異なる取引スタイルに適応可能
  2. 複数の技術指標の組み合わせによりより信頼性の高いシグナルが得られる
  3. 双重確認メカニズムは誤った信号を効果的に減少させる
  4. 戦略は,再塗装なしで完全に前向きな偏見を避ける
  5. 異なる市場環境のために高度に調整可能

戦略リスク

  1. トレンド逆転時の潜在的な重要な引き上げ 解決策: 戦略の敏感性を高めるために指標パラメータを調整する
  2. 技術指標への過度な依存は,ある種の市場機会を逃す可能性があります 解決策: 基本分析と組み合わせることを推奨する
  3. 固定 TP/SL は,すべての市場条件に適合しない可能性があります. 解決策: 変動に基づいて TP/SL レベルを動的に調整する

戦略の最適化方向

  1. 動的 TP/SL 調整のための変動指標を導入する
  2. 信号信頼性を向上させるため,音量分析を追加
  3. 市場情勢の指標を増やす
  4. アダプティブパラメータ最適化システムを開発
  5. リスク管理モジュールを追加します.最大引き上げ制御など.

概要

これは,複数のクラシックな技術指標を組み合わせ,柔軟なTP/SL管理とダブル確認メカニズムを通じて取引安定性を向上させるトレンドフォロー戦略である.この戦略の高いカスタマイズ可能性は,異なる市場環境と取引スタイルに適応することを可能にします.ライブ取引の前に徹底的な歴史的データバックテストを行い,特定の市場の特徴に応じてパラメータを調整することが推奨されます.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Pamplona Enhanced TP/SL Toggleable", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Input settings
use_tick_based = input.bool(false, title="Use Tick-Based TP/SL")
use_dollar_based = input.bool(false, title="Use Dollar-Based TP/SL")
use_risk_reward = input.bool(true, title="Use Risk-Reward TP/SL") // Default option

tick_size = input.float(0.1, title="Tick Size (for Tick-Based)", minval=0.0001, step=0.0001)
ticks = input.int(10, title="Ticks (for Tick-Based TP/SL)", minval=1)
dollar_tp = input.float(10.0, title="Dollar Take Profit (for Dollar-Based)", minval=0.01, step=0.01)
dollar_sl = input.float(10.0, title="Dollar Stop Loss (for Dollar-Based)", minval=0.01, step=0.01)
risk_reward_ratio = input.float(2.0, title="Risk-Reward Ratio (for Risk-Reward TP/SL)", minval=0.1, step=0.1)
contract_size = input.int(1, title="Contract Size", minval=1)

// Retrieve indicators
ema200 = ta.ema(close, 200)
src = close
ma05 = ta.ema(src, 5)
ma100 = ta.ema(src, 100)
madrid_green = ma05 > ma100
dlen = input.int(20, title="Donchian Channel Period")
highest_d = ta.highest(high, dlen)
lowest_d = ta.lowest(low, dlen)
donchian_green = close > highest_d[1]
donchian_red = close < lowest_d[1]

// Track signals
var int long_signal_count = 0
var int short_signal_count = 0

// Conditions
long_condition_raw = madrid_green and donchian_green and close > ema200
short_condition_raw = not madrid_green and donchian_red and close < ema200

// Update signal counters
if long_condition_raw
    long_signal_count += 1
else
    long_signal_count := 0

if short_condition_raw
    short_signal_count += 1
else
    short_signal_count := 0

// Final conditions to enter on the second signal
long_condition = long_signal_count == 2
short_condition = short_signal_count == 2

// Ensure exactly one TP/SL mode is enabled
tp_sl_mode_count = (use_tick_based ? 1 : 0) + (use_dollar_based ? 1 : 0) + (use_risk_reward ? 1 : 0)
if tp_sl_mode_count != 1
    runtime.error("Enable exactly ONE TP/SL mode (Tick-Based, Dollar-Based, or Risk-Reward).")

// Function to calculate TP/SL based on active mode
calc_tp_sl(entry_price, is_long) =>
    float tp = na
    float sl = na
    if use_tick_based
        tp := is_long ? entry_price + ticks * tick_size : entry_price - ticks * tick_size
        sl := is_long ? entry_price - ticks * tick_size : entry_price + ticks * tick_size
    else if use_dollar_based
        tp := is_long ? entry_price + (dollar_tp / contract_size) : entry_price - (dollar_tp / contract_size)
        sl := is_long ? entry_price - (dollar_sl / contract_size) : entry_price + (dollar_sl / contract_size)
    else if use_risk_reward
        risk = is_long ? close - low : high - close
        tp := is_long ? close + (risk * risk_reward_ratio) : close - (risk * risk_reward_ratio)
        sl := is_long ? close - risk : close + risk
    [tp, sl]

// Entry logic
if long_condition
    [take_profit, stop_loss] = calc_tp_sl(close, true)
    strategy.entry("Long", strategy.long, qty=contract_size)
    strategy.exit("Take Profit", from_entry="Long", limit=take_profit, stop=stop_loss)

if short_condition
    [take_profit, stop_loss] = calc_tp_sl(close, false)
    strategy.entry("Short", strategy.short, qty=contract_size)
    strategy.exit("Take Profit", from_entry="Short", limit=take_profit, stop=stop_loss)

// Plot indicators
plot(ema200, title="200 EMA", color=color.white, linewidth=2)
bgcolor(long_condition ? color.new(color.green, 90) : short_condition ? color.new(color.red, 90) : na)


関連性

もっと