Chiến lược giao dịch trung bình chuyển động nhanh chậm

Tác giả:ChaoZhang, Ngày: 2023-10-27 16:41:24
Tags:

img

Tổng quan

Chiến lược giao dịch trung bình di chuyển kép tạo ra tín hiệu giao dịch bằng cách tính toán trung bình di chuyển nhanh và chậm và theo dõi các đường chéo. Khi trung bình di chuyển nhanh vượt qua trên trung bình di chuyển chậm, một vị trí dài được thực hiện. Khi trung bình di chuyển nhanh vượt qua dưới trung bình di chuyển chậm, một vị trí ngắn được thực hiện. Chiến lược có thể được sử dụng cho cả giao dịch xu hướng và giao dịch phản xu hướng.

Chiến lược logic

Chiến lược đầu tiên thiết lập chiều dài của trung bình di chuyển nhanh maFastLength và trung bình di chuyển chậm maSlowLength. Sau đó nó tính toán trung bình di chuyển nhanh fastMA và trung bình di chuyển chậm slowMA.

Khi đường trung bình chuyển động nhanh vượt qua đường trung bình chuyển động chậm, một tín hiệu đầu vào dài goLong() được tạo ra. Khi đường trung bình chuyển động nhanh vượt qua đường trung bình chuyển động chậm, các vị trí dài hiện có sẽ được đóng bằng tín hiệu killLong().

Chiến lược có thể được thiết lập chỉ dài, chỉ ngắn, hoặc cho phép cả hai giao dịch dài và ngắn.

Trong chế độ chỉ dài, các vị trí dài được nhập trên tín hiệu goLong() và thoát ra trên tín hiệu killLong().

Trong chế độ chỉ ngắn, các vị trí ngắn được nhập vào tín hiệu killLong() và thoát ra trên tín hiệu goLong().

Trong chế độ trao đổi, các vị trí dài được nhập vào goLong ((), đóng và đảo ngược sang ngắn vào killLong (().

Chiến lược cũng bao gồm dừng lỗ, dừng kéo dài, nhắn tin và các tính năng tùy chọn khác.

Ưu điểm

  1. Đơn giản và dễ thực hiện.

  2. Sự linh hoạt để đi dài, ngắn hoặc cả hai.

  3. Các tính năng dừng lỗ và dừng kéo theo tùy chọn.

  4. Thông điệp tùy chỉnh để cảnh báo giao dịch.

  5. Nhạy cảm với sự thay đổi xu hướng trên thị trường.

  6. Các thông số điều chỉnh thích nghi với các thị trường khác nhau.

Rủi ro

  1. Có thể tạo ra giao dịch quá mức trong thị trường hỗn loạn hoặc dao động.

  2. Chậm để phản ứng với các sự kiện tin tức đột ngột.

  3. Lựa chọn tham số ảnh hưởng đến hiệu suất chiến lược.

  4. Phải tuân theo tín hiệu một cách nghiêm ngặt, tránh giao dịch tùy ý.

  5. Chi phí giao dịch có thể làm xói mòn lợi nhuận nếu không được xem xét.

Những cải tiến

  1. Thêm các bộ lọc như RSI để tránh tín hiệu sai.

  2. Thực hiện tối ưu hóa tham số để tìm các thiết lập tốt nhất.

  3. Sử dụng dừng động để khóa lợi nhuận và điều chỉnh.

  4. Kết hợp máy học để hỗ trợ dự đoán xu hướng.

  5. Tối ưu hóa thông điệp cho thói quen giao dịch cá nhân.

Kết luận

Chiến lược trung bình di chuyển kép tương đối đơn giản và hữu ích để nắm bắt xu hướng mạnh. Tuy nhiên, nên cẩn thận để tránh các whipsaws trong môi trường xu hướng thấp. Các thông số điều chỉnh tinh tế và thêm các chỉ số phụ trợ hoặc cải tiến có thể cải thiện thêm độ bền và khả năng thích nghi.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy("SMA Strategy", shorttitle="SMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === Inputs ===
// short ma
maFastSource = input(defval=close, title="Fast MA Source")
maFastLength = input(defval=3, title="Fast MA Period", minval=1)

// long ma
maSlowSource = input(defval=close, title="Slow MA Source")
maSlowLength = input(defval=9, title="Slow MA Period", minval=1)

// Trade direction
shorting = input(defval=false, title="Short only?")
longonly = input(defval=true, title="Long only?")
swapping = input(defval=false, title="Swap orders?")
// risk management
useStop = input(defval=false, title="Use Initial Stop Loss?")
slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1)
useTS = input(defval=false, title="Use Trailing Stop?")
tslPoints = input(defval=120, title="Trail Points", minval=1)
useTSO = input(defval=false, title="Use Offset For Trailing Stop?")
tslOffset = input(defval=20, title="Trail Offset Points", minval=1)

// Messages for buy and sell
message_long_entry  = input("Long entry message", title="Long entry message")
message_long_exit   = input("Long exit message", title="Long exit message")
message_short_entry = input("Short entry message", title="Short entry message")
message_short_exit  = input("Short exit message", title="Short exit message")

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time)
 
time_cond  = true
// === Vars and Series ===
fastMA = sma(maFastSource, maFastLength)
slowMA = sma(maSlowSource, maSlowLength)

plot(fastMA, color=color.blue)
plot(slowMA, color=color.purple)

goLong() =>
    crossover(fastMA, slowMA)
killLong() =>
    crossunder(fastMA, slowMA)
    
// Long only
if longonly
    strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry)
    strategy.close("Buy", when=killLong() and time_cond, alert_message = message_long_exit)

// Short only
if shorting
    strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry)
    strategy.close("Sell", when=goLong() and time_cond, alert_message = message_short_exit)
    
// Order Swapping
if swapping
    strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry)
    strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry)

if useStop
    strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08, alert_message = message_long_exit)
    strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08, alert_message = message_short_exit)



Thêm nữa