Les ressources ont été chargées... Je charge...

Tendance multi-mode de prise de profit/arrêt de perte suivant une stratégie basée sur l'EMA, le ruban de Madrid et le canal de Donchian

Auteur:ChaoZhang est là., Date: 2025-01-10 16h24 et 30h
Les étiquettes:Le taux d'intérêtRRR

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

Résumé

Il s'agit d'une stratégie de suivi de tendance qui combine la moyenne mobile exponentielle (EMA), le ruban de Madrid et le canal de Donchian. L'unicité de la stratégie réside dans ses trois modes de prise de profit / stop-loss commutables: basé sur le tick, basé sur le dollar et basé sur le ratio risque-rendement.

Principes de stratégie

La stratégie utilise une triple combinaison d'indicateurs techniques pour identifier les opportunités de négociation: L'EMA de 200 périodes pour déterminer l'orientation générale de la tendance 2. ruban de Madrid (crossover de l'EMA à 5 périodes et à 100 périodes) pour le jugement de la tendance à moyen terme 3. La rupture du canal de Donchian pour un calendrier d'entrée spécifique

Conditions de négociation longues: prix au-dessus de 200 EMA, Madrid Ribbon haussier et dépassement des prix au-dessus du canal de Donchian. Conditions de négociation à court terme: prix inférieurs à 200 EMA, ruban de Madrid baissier et ruptures de prix inférieures au canal de Donchian. Pour réduire les faux signaux, les transactions ne sont exécutées qu'à la deuxième occurrence du signal valide.

Les avantages de la stratégie

  1. Système de gestion TP/SL flexible et adaptable à différents styles de négociation
  2. La combinaison de plusieurs indicateurs techniques fournit des signaux plus fiables
  3. Le mécanisme de double confirmation réduit efficacement les faux signaux
  4. La stratégie évite complètement les préjugés sans peinture
  5. Très personnalisable pour différents environnements de marché

Risques stratégiques

  1. Les retraits potentiellement importants lors d'inversions de tendance Solution: ajuster les paramètres de l'indicateur pour augmenter la sensibilité de la stratégie
  2. Une trop grande dépendance à l'égard des indicateurs techniques peut faire perdre certaines opportunités de marché Solution: recommander une combinaison avec l'analyse fondamentale
  3. Les TP/SL fixes peuvent ne pas convenir à toutes les conditions du marché Solution: ajuster dynamiquement les niveaux de TP/SL en fonction de la volatilité

Directions d'optimisation de la stratégie

  1. Mettre en place des indicateurs de volatilité pour l'ajustement dynamique TP/SL
  2. Ajouter une analyse de volume pour améliorer la fiabilité du signal
  3. Incorporer davantage d'indicateurs du sentiment du marché
  4. Développer un système d'optimisation adaptatif des paramètres
  5. Ajouter un module de gestion des risques, tel que le contrôle du tirage maximum

Résumé

Il s'agit d'une stratégie de suivi de tendance qui combine plusieurs indicateurs techniques classiques, améliorant la stabilité des transactions grâce à une gestion flexible du TP/SL et à un mécanisme de double confirmation.


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


Relationnée

Plus de