Chiến lược trung bình di chuyển kép

Tác giả:ChaoZhang, Ngày: 2024-02-21 14:43:26
Tags:

img

Tổng quan

Chiến lược này sử dụng các đường trung bình động kép để tạo ra một kênh và nắm bắt hướng xu hướng. Các tín hiệu giao dịch được tạo ra khi giá phá vỡ kênh. Chỉ số RSI cũng được kết hợp để lọc các đột phá sai. Nó chỉ giao dịch trong phiên London với tối đa 5 giao dịch mỗi ngày và tối đa 2% lỗ hàng ngày.

Chiến lược logic

Chiến lược này sử dụng hai đường trung bình động có chiều dài 5, một được tính từ giá cao nhất và giá thấp nhất, để tạo thành kênh giá.

Để tránh phá vỡ sai, chỉ số RSI được thêm vào để đo mức mua quá mức / bán quá mức. Chỉ mua dài nếu RSI trên 80, và chỉ mua ngắn nếu RSI dưới 20.

Ngoài ra, chiến lược chỉ giao dịch trong phiên London (3 giờ sáng - 11 giờ sáng), với tối đa 5 lệnh mỗi ngày và tối đa 2% mất vốn mỗi ngày.

Phân tích lợi thế

Hãy bắt kịp xu hướng

Kênh MA kép có thể phát hiện hiệu quả hướng xu hướng giá.

Giảm thoát giả

Sử dụng bộ lọc mua quá mức / bán quá mức RSI làm giảm một số tín hiệu phá vỡ sai do biến động giá.

Kiểm soát rủi ro hiệu quả

Giao dịch chỉ trong phiên chính và có lệnh tối đa mỗi ngày giới hạn tần suất giao dịch.

Phân tích rủi ro

Phá vỡ giả với biến động

Sự biến động giá đáng kể có thể gây ra một số tín hiệu phá vỡ sai, dẫn đến tổn thất không cần thiết. Các thông số có thể được tối ưu hóa và thêm các bộ lọc để giảm rủi ro như vậy.

Rủi ro SL/TP cố định

Sử dụng pips cố định cho SL / TP có nguy cơ dừng lại / mất lợi nhuận trong thị trường biến động.

Rủi ro phiên giao dịch hạn chế

Mở các vị trí chỉ trong các phiên cố định có nguy cơ bỏ lỡ các giao dịch tiềm năng trong các giờ khác.

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

Chế độ điều chỉnh tham số

Tối ưu hóa các thông số như chiều dài MA, số liệu RSI, các điểm SL / TP cố định vv để tìm sự kết hợp tốt nhất.

Các bộ lọc bổ sung

Thêm thêm các chỉ số hoặc điều kiện để xác minh tín hiệu, ví dụ: âm lượng cao hơn, chiều rộng BB giảm, v.v., để tránh sự đột phá sai.

SL/TP động

Sử dụng stop loss / take profit dựa trên tỷ lệ phần trăm hoặc động thay vì pips cố định để xử lý tốt hơn các chuyển động thị trường một chiều.

Xem xét bằng tay

Hướng tay kiểm tra tín hiệu, hoặc chỉ vào khi xác nhận thoát để tránh bị mắc kẹt.

Kết luận

Chiến lược này khá đơn giản và thực tế nói chung, sử dụng kênh MA kép để xác định xu hướng và RSI để lọc các đột phá sai. Quản lý rủi ro thông qua giờ giao dịch và giới hạn lỗ cũng xác định khả năng dung nạp rủi ro. Vẫn còn nhiều chỗ để cải thiện, ví dụ như điều chỉnh tham số, cơ chế SL / TP tốt hơn vv.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-16 23:59:59
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/
// © SoftKill21
//@version=4
strategy(title="Moving Average", shorttitle="MA", overlay=true)
timeinrange(res, sess) => time(res, sess) != 0
len = input(5, minval=1, title="Length")
src = input(high, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out = sma(src, len)
plot(out, color=color.white, title="MA", offset=offset)

len2 = input(5, minval=1, title="Length")
src2 = input(low, title="Source")
offset2 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out2 = sma(src2, len2)
plot(out2, color=color.white, title="MA", offset=offset2)

length = input( 5 )
overSold = input( 10 )
overBought = input( 80 )
price = input(close, title="Source RSI")

vrsi = rsi(price, length)

longcond= close > out and close > out2 and vrsi > overBought
shortcont = close < out and close < out2 and vrsi < overSold
tp=input(150,title="tp")
sl=input(80,title="sl")


strategy.entry("long",1,when=longcond)
//strategy.close("long",when= close < out2)
strategy.exit("long_exit","long",profit=tp,loss=sl)

strategy.entry("short",1,when=shortcont)
//strategy.close("short",when=close >out)
strategy.exit("short_exit","short",profit=tp,loss=sl)

// maxOrder = input(6, title="max trades per day")
// maxRisk = input(2,type=input.float, title="maxrisk per day")
// strategy.risk.max_intraday_filled_orders(maxOrder)

// strategy.risk.max_intraday_loss(maxRisk, strategy.percent_of_equity)


// strategy.close_all(when =not timeinrange(timeframe.period, "0300-1100"))






Thêm nữa