Chiến lược trung bình phong bì đảo ngược có chủ đích


Ngày tạo: 2023-12-04 16:12:39 sửa đổi lần cuối: 2023-12-04 16:12:39
sao chép: 0 Số nhấp chuột: 759
1
tập trung vào
1619
Người theo dõi

Chiến lược trung bình phong bì đảo ngược có chủ đích

Tổng quan

Chiến lược giá trị trung bình của mạng lưới giao dịch ngược ý định là một chiến lược giao dịch ngược ý định dựa trên đường trung bình di chuyển. Chiến lược này sử dụng đường trung bình di chuyển của hai chỉ số làm cơ sở tính toán và thêm nhiều đường trung bình trên và dưới nó.

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

Chiến lược này sử dụng đường trung bình di chuyển hai chỉ số ((DEMA) làm chỉ số cơ bản. Đường trung bình di chuyển hai chỉ số là một đường trung bình di chuyển có độ nhạy cao đối với sự thay đổi giá. Dựa trên đó, chiến lược bổ sung nhiều dải giá trên hai bên trên và dưới, tạo thành một khu vực mạng lưới bao gồm đường trung bình.

Chiến lược này sẽ mở lỗ khi giá tăng gần vùng bao quanh phía trên; khi giá giảm chạm vào vùng bao quanh phía dưới, chiến lược sẽ mở thêm. Mỗi khi chạm vào một vùng giá mới, chiến lược sẽ tăng thêm một lần. Khi giá quay trở lại gần đường trung bình di chuyển, chiến lược sẽ xóa tất cả các vị trí.

Chiến lược này sử dụng các vùng bao quanh để nắm bắt sự biến động quá mức của giá và rút ra lợi nhuận khi có sự đảo ngược để đạt được mục tiêu giao dịch mua thấp và bán cao. Nó áp dụng cho các chu kỳ thị trường có đặc điểm quay trở lại trung bình rõ ràng, chẳng hạn như các loại tiền kỹ thuật số như bitcoin.

Lợi thế chiến lược

  • Sử dụng đường trung bình di chuyển hai chỉ số, nhạy cảm hơn với biến động giá ngắn hạn, có thể nhanh chóng nắm bắt biến động xu hướng.
  • Các vùng bao quanh được thiết lập gần đường trung bình, có thể nắm bắt chính xác hơn sự đảo ngược giá.
  • Các nhà đầu tư cũng có thể mở kho hàng loạt để tận dụng tối đa hiệu quả tài chính.
  • Chuyển đổi hướng nhanh chóng sau khi kiếm được lợi nhuận, linh hoạt đối phó với sự thay đổi của thị trường.
  • Có thể tự do tối ưu hóa bằng cách điều chỉnh các tham số.

Rủi ro chiến lược

  • Có một số người nói rằng họ không thể làm được điều đó.
  • Thiết lập tham số không đúng có thể dẫn đến giao dịch quá thường xuyên.
  • Cần có sự ổn định tương đối, không phù hợp với thị trường có biến động lớn.
  • Khu vực bao quanh quá nhỏ, có thể xảy ra tình huống không thể mở kho.

Có thể giảm rủi ro bằng cách mở rộng phạm vi của vùng mạng bao bì, tăng độ nhạy cảm với sự thay đổi giá. Đồng thời điều chỉnh tham số chiều dài đường trung bình di chuyển để phù hợp với các tình huống chu kỳ khác nhau.

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

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tối ưu hóa thuật toán đường trung bình di chuyển. Có thể kiểm tra hiệu quả của các loại chỉ số đường trung bình di chuyển khác nhau.

  2. Điều chỉnh tham số chiều dài đường trung bình. Chu kỳ ngắn hơn có thể cải thiện việc nắm bắt các thay đổi giá trong thời gian ngắn, nhưng cũng có thể làm tăng giao dịch ồn ào.

  3. Tối ưu hóa các tham số của mạng lưới. Bạn có thể thử nghiệm các thiết lập phần trăm khác nhau để tìm các tham số tốt nhất.

  4. Thêm chiến lược dừng lỗ. Thiết lập dừng di chuyển hoặc dừng rút lỗ, có thể kiểm soát hiệu quả tổn thất đơn lẻ.

  5. Tăng điều kiện lọc. Kết hợp với các tín hiệu chỉ số khác, tránh mở lệnh vô hiệu trong trường hợp không hợp lý.

Tóm tắt

Chiến lược giá trị trung bình của mạng lưới chuyển nhượng có ý định bằng cách xây dựng một kênh giá trung bình, để nắm bắt hiệu quả cơ hội biến đổi giá. Nó có thể điều chỉnh các tham số một cách linh hoạt và áp dụng cho các môi trường thị trường khác nhau. Chiến lược này có chi phí giao dịch thấp, tỷ lệ lợi nhuận cao và là một chiến lược giao dịch định lượng đáng được đề xuất.

Mã nguồn chiến lược
/*backtest
start: 2022-11-27 00:00:00
end: 2023-12-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Mean Reversion - Envelope Strategy", overlay=true )

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A MEAN REVERSION SYSTEM THAT USES A MOVING AVERAGE AS BASE CALCULATION AND A % OF THIS MOVING AVERAGE TO CALCULATE THE ENVELOPE
// BY DEFAULT, THE SYSTEM WILL PLACE LONG ORDERS ON THE MOVING AVERAGE -5% PER ENVELOPE COUNT (5%, 10% AND SO ON...)
// YOU CAN ENABLE THE SHORT ORDERS THAT WILL FOLLOW THE SAME LOGIC ON THE OPPOSITE SIDE
// THE SYSTEM WILL CLOSE EVERY ONGOING TRADE WHEN THE PRICE RETURNS TO THE MEAN

// ---------------------------------------------
// ---------------- SETTINGS -------------------
src = input(close, "Moving Average Source", group = "Moving Average")
ma_window = input.int(5, "Moving Average Window", step = 1, group = "Moving Average")
ma_type = input.string('4. DEMA', "Moving Average Type", options=['1. SMA', '2. EMA', '3. RMA', '4. DEMA'], group = "Moving Average")
enveloppe_step = input.float(0.05, "Delta Per Enveloppe", step = 0.01, group = "Envelope")
envelope_count = input.int(5, "Envelope count", options = [1, 2, 3, 4, 5], group = "Envelope")
use_longs = input.bool(true, 'Use Long Orders ?', group = "Orders") 
use_short = input.bool(false, 'Use Short Orders ?', group = "Orders")


// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_funct() =>
    if(ma_type == '1. SMA') 
        ta.sma(src, ma_window)
    if(ma_type == '2. EMA') 
        ta.ema(src, ma_window)
    if(ma_type == '3. RMA') 
        ta.rma(src, ma_window)
    if(ma_type == '4. DEMA') 
        2 * ta.ema(src, ma_window) - ta.ema(ta.ema(src, ma_window), ma_window)

ma_base = ma_funct()

ma_high_1 = envelope_count > 0 ? ma_base * (1 + enveloppe_step) : na
ma_high_2 = envelope_count > 1 ? ma_base * (1 + enveloppe_step * 2) : na
ma_high_3 = envelope_count > 2 ? ma_base * (1 + enveloppe_step * 3) : na
ma_high_4 = envelope_count > 3 ? ma_base * (1 + enveloppe_step * 4) : na
ma_high_5 = envelope_count > 4 ? ma_base * (1 + enveloppe_step * 5) : na

ma_low_1 = envelope_count > 0 ? ma_base * (1 - enveloppe_step) : na
ma_low_2 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 2) : na
ma_low_3 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 3) : na
ma_low_4 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 4) : na
ma_low_5 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 5) : na


// ---------------------------------------------
// --------------- STRATEGY --------------------
if use_longs
    if envelope_count > 0 and strategy.opentrades < 1
        strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / envelope_count))
    if envelope_count > 1 and strategy.opentrades < 2
        strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / envelope_count))
    if envelope_count > 2 and strategy.opentrades < 3
        strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / envelope_count))
    if envelope_count > 3 and strategy.opentrades < 4
        strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / envelope_count))
    if envelope_count > 4 and strategy.opentrades < 5
        strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / envelope_count))


if use_short
    if envelope_count > 0 and strategy.opentrades < 1
        strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / envelope_count))
    if envelope_count > 1 and strategy.opentrades < 2
        strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / envelope_count))
    if envelope_count > 2 and strategy.opentrades < 3
        strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / envelope_count))
    if envelope_count > 3 and strategy.opentrades < 4
        strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / envelope_count))
    if envelope_count > 4 and strategy.opentrades < 5
        strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / envelope_count))

strategy.exit('close', limit=ma_base)


// ---------------------------------------------
// ------------------ PLOT ---------------------
ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1)

ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1)
ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1)
ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1)
ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1)
ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1)

ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1)
ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1)
ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1)
ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1)
ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)