Tài nguyên đang được tải lên... tải...

Xu hướng thu lợi nhuận/dừng lỗ đa chế độ theo chiến lược dựa trên EMA, Madrid Ribbon và kênh Donchian

Tác giả:ChaoZhang, Ngày: 2025-01-10 16:24:30
Tags:EMARRR

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

Tổng quan

Đây là một chiến lược theo xu hướng kết hợp trung bình chuyển động biểu số (EMA), băng Madrid và kênh Donchian. Tính độc đáo của chiến lược nằm trong ba chế độ lấy lợi nhuận / dừng lỗ có thể chuyển đổi: dựa trên dấu chấm, dựa trên đô la và dựa trên tỷ lệ rủi ro-lợi nhuận. Nó tăng độ tin cậy thông qua một cơ chế xác nhận kép, chỉ thực hiện giao dịch trên tín hiệu hợp lệ thứ hai.

Nguyên tắc chiến lược

Chiến lược sử dụng một sự kết hợp ba chỉ số kỹ thuật để xác định các cơ hội giao dịch: 1. 200 thời kỳ EMA để xác định hướng xu hướng tổng thể 2. Madrid Ribbon (crossover của EMA 5 giai đoạn và 100 giai đoạn) để đánh giá xu hướng trung hạn 3. Thanh tra Donchian để xác định thời gian nhập cảnh

Các điều kiện giao dịch dài: giá trên 200 EMA, Ribbon Madrid tăng và giá phá vỡ trên kênh Donchian. Điều kiện giao dịch ngắn: giá dưới 200 EMA, Ribbon Madrid giảm và giá phá vỡ dưới kênh Donchian. Để giảm các tín hiệu sai, giao dịch chỉ được thực hiện vào lần phát hiện tín hiệu hợp lệ thứ hai.

Ưu điểm chiến lược

  1. Hệ thống quản lý TP/SL linh hoạt thích nghi với các kiểu giao dịch khác nhau
  2. Kết hợp nhiều chỉ số kỹ thuật cung cấp tín hiệu đáng tin cậy hơn
  3. Cơ chế xác nhận hai lần làm giảm hiệu quả các tín hiệu sai
  4. Chiến lược hoàn toàn tránh thiên vị nhìn về phía trước mà không có sơn lại
  5. Có khả năng tùy chỉnh cao cho các môi trường thị trường khác nhau

Rủi ro chiến lược

  1. Khả năng rút vốn đáng kể trong quá trình đảo ngược xu hướng Giải pháp: Điều chỉnh các tham số chỉ số để tăng độ nhạy của chiến lược
  2. Sự phụ thuộc quá mức vào các chỉ số kỹ thuật có thể bỏ lỡ một số cơ hội thị trường Giải pháp: Đề nghị kết hợp với phân tích cơ bản
  3. TP/SL cố định có thể không phù hợp với tất cả các điều kiện thị trường Giải pháp: Điều chỉnh động mức TP/SL dựa trên biến động

Hướng dẫn tối ưu hóa chiến lược

  1. Đưa ra các chỉ số biến động cho điều chỉnh động TP/SL
  2. Thêm phân tích âm lượng để cải thiện độ tin cậy tín hiệu
  3. Bao gồm nhiều chỉ số tâm lý thị trường hơn
  4. Phát triển hệ thống tối ưu hóa tham số thích nghi
  5. Thêm mô-đun quản lý rủi ro, chẳng hạn như kiểm soát thu hút tối đa

Tóm lại

Đây là một chiến lược theo xu hướng kết hợp nhiều chỉ số kỹ thuật cổ điển, tăng cường sự ổn định giao dịch thông qua quản lý TP / SL linh hoạt và cơ chế xác nhận kép. Khả năng tùy biến cao của chiến lược cho phép nó thích nghi với các môi trường thị trường và phong cách giao dịch khác nhau.


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


Có liên quan

Thêm nữa