
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ó.
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.
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.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
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.
Đ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.
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.
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ẻ.
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ý.
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.
/*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)