Lợi nhuận từ chiến lược xu hướng

Tác giả:ChaoZhang, Ngày: 2023-09-26 11:22:04
Tags:

Tổng quan

Chiến lược Take Profit on Trend nhằm mục đích phát hiện các xu hướng dài hạn và rút ngắn hạn, nắm giữ các vị trí dài trong xu hướng tăng tổng thể trong khi nắm bắt giảm ngắn hạn, với mức dừng lỗ hợp lý và lấy lợi nhuận được thiết lập để theo xu hướng và lấy lợi nhuận kịp thời.

Chiến lược logic

Chiến lược này chủ yếu sử dụng EMA và RSI để xác định xu hướng dài hạn và ngắn hạn. Cụ thể, nó sử dụng EMA 50 ngày và EMA 200 ngày để đánh giá xu hướng dài hạn, và RSI để đánh giá sức mạnh xu hướng. Khi dài hạn đang trong xu hướng tăng (200 ngày EMA tăng) và mạnh mẽ (RSI trên 50), và ngắn hạn thấy pullback (hai ngọn nến cuối cùng đóng thấp hơn), một vị trí dài được thực hiện.

Sau khi nhập vào một vị trí, chiến lược thiết lập các điều kiện dừng lỗ và lấy lợi nhuận. Khi giá tăng hơn 2x đơn vị BHD so với giá nhập cảnh, lợi nhuận được lấy. Khi giá giảm hơn 3x đơn vị BHD dưới giá nhập cảnh, vị trí được dừng lại. Đơn vị BHD được tính dựa trên chiều rộng của 200 ngọn nến cuối cùng.

Bằng cách này, chiến lược xem xét đầy đủ các đặc điểm xu hướng dài hạn và ngắn hạn, tăng lợi nhuận trong khi kiểm soát rủi ro, theo xu hướng trong khi kiếm lợi nhuận kịp thời.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. Xem xét các xu hướng dài hạn và ngắn hạn, kết hợp với các chỉ số sức mạnh, tránh nhập cảnh mù quáng vào các thị trường khác nhau.

  2. Các mục nhập theo hướng xu hướng, tỷ lệ thắng cao hơn.

  3. Lấy lợi nhuận và điểm dừng lỗ cho phép lấy lợi nhuận kịp thời và kiểm soát rủi ro.

  4. TP và SL là năng động dựa trên biến động, tương đối hợp lý.

  5. Các thử nghiệm ngược lại cho thấy lợi nhuận tốt và ổn định qua các biểu tượng và khung thời gian.

  6. Logic đơn giản và rõ ràng, dễ hiểu và thực hiện cho tất cả các cấp độ kỹ năng.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Một sự đánh giá sai về dài hạn/gắn hạn dẫn đến sai hướng vào.

  2. Các vụ sụp đổ thị trường có thể xuyên qua các điểm dừng.

  3. Các thiết lập tham số kém ảnh hưởng tiêu cực đến hiệu suất.

  4. TP đặt quá chặt, có thể thoát sớm.

  5. Backtest ≠ hiệu suất trực tiếp, tối ưu hóa liên tục cần thiết.

Giải pháp:

  1. Tối ưu hóa các tham số, điều chỉnh thời gian MA, thêm các chỉ số xác thực chéo.

  2. Dừng rộng hơn, kích thước vị trí, kiểm soát rủi ro khác.

  3. Kiểm tra hậu quả để đánh giá các thông số.

  4. Tối ưu hóa TP động dựa trên điều kiện thị trường.

  5. Tiếp tục kiểm tra, tối ưu hóa, điều chỉnh trực tiếp.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa thêm bằng cách:

  1. Điều chỉnh tham số, thời gian MA, thời gian đơn vị BHD vv.

  2. Thêm các chỉ số, MACD, KD vv để có độ chính xác ngắn hạn tốt hơn.

  3. Tối ưu hóa TP / SL, kích thước động dựa trên biến động vv

  4. Thêm kích thước vị trí dựa trên sức mạnh xu hướng.

  5. Kiểm tra độ bền trên nhiều biểu tượng và khung thời gian.

  6. Thêm các bộ lọc như giá đóng > mở để tránh bẫy.

  7. Kết hợp máy học để tự động hóa và thông minh hơn.

Chúng có thể cải thiện tỷ lệ thắng, lợi nhuận, ổn định, thích nghi v.v.

Kết luận

Nhìn chung, chiến lược Take Profit on Trend có những lợi thế là xem xét xu hướng dài / ngắn, theo xu hướng, rõ ràng TP / SL. Đây là một cách tiếp cận theo xu hướng ổn định và hiệu quả. Nhưng rủi ro tồn tại, đòi hỏi tối ưu hóa liên tục và điều chỉnh trực tiếp. Logic rõ ràng và dễ thực hiện. Đáng nghiên cứu và áp dụng cho các nhà giao dịch. Với tối ưu hóa hơn nữa, nó có thể trở thành một chiến lược lượng mạnh mẽ.


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

// @version=5
strategy(
 shorttitle            = 'Take Profit On Trend',
 title                 = 'Take Profit On Trend (by BHD_Trade_Bot)',
 overlay               = true,
 calc_on_every_tick    = true,
 calc_on_order_fills   = true,
 use_bar_magnifier     = true,
 initial_capital       = 1000,
 default_qty_type      = strategy.percent_of_equity,
 default_qty_value     = 100,
 commission_type       = strategy.commission.percent,
 commission_value      = 0.1)



// Backtest Time Period
start_year   = input(title='Start year'   ,defval=2021)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_time = timestamp(start_year, start_month, start_day, 00, 00)

end_year     = input(title='end year'     ,defval=2050)
end_month    = input(title='end month'    ,defval=1)
end_day      = input(title='end day'      ,defval=1)
end_time = timestamp(end_year, end_month, end_day, 23, 59)

is_back_test_time() => true



// EMA
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)

// RSI
rsi200 = ta.rsi(close, 200)

// EMA_CD
emacd = ema50 - ema200
emacd_signal = ta.ema(emacd, 50)
hist = emacd - emacd_signal

// BHD Unit
bhd_unit = ta.rma(high - low, 200) * 2
bhd_upper = ema200 + bhd_unit
bhd_lower = ema200 - 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 CONDITIONS

// Long-term uptrend
entry_condition1 = rsi200 > 51 and hist > 0

// Short-term downtrend
entry_condition2 = all_body_decrease(2)

ENTRY_CONDITIONS = entry_condition1 and entry_condition2

if ENTRY_CONDITIONS and is_back_test_time()
    strategy.entry('entry', strategy.long)


// CLOSE CONDITIONS

// Price increase 2 BHD unit
take_profit = close > strategy.position_avg_price + bhd_unit * 2

// Price decrease 3 BHD unit
stop_loss = close < strategy.position_avg_price - bhd_unit * 3

CLOSE_CONDITIONS = take_profit or stop_loss

if CLOSE_CONDITIONS
    strategy.close('entry')



// Draw
plot(ema50, color=color.orange, linewidth=2)
plot(ema200, color=color.purple, linewidth=2)
bhd_upper_line = plot(bhd_upper, color=color.teal)
bhd_lower_line = plot(bhd_lower, color=color.teal)
fill(bhd_upper_line, bhd_lower_line, color=color.new(color.teal, 90))


Thêm nữa