Chiến lược phá vỡ xu hướng MA kép

Tác giả:ChaoZhang, Ngày: 2024-01-08 16:43:38
Tags:

img

Tổng quan

Chiến lược Breakout xu hướng MA kép là một chiến lược giao dịch định lượng sử dụng hai trung bình động của các giai đoạn khác nhau để xác định xu hướng và tạo ra tín hiệu nhập cảnh. Nó chủ yếu đánh giá hướng xu hướng tổng thể thông qua MA chậm và sử dụng MA nhanh để lọc nhập cảnh. Khi hướng của xu hướng khung thời gian lớn hơn là phù hợp, nó chọn thanh đảo để nhập, để theo đuổi tỷ lệ thắng và lợi nhuận cao hơn.

Chiến lược logic

Chiến lược bao gồm các phần chính sau:

Đánh giá xu hướng: Tính toán MA 21 giai đoạn, được định nghĩa là MA chậm. Vị trí của nó tương đối ổn định và có thể được sử dụng để đánh giá hướng xu hướng tổng thể. Khi giá tăng gần MA này, đó là xu hướng tăng. Khi giá giảm gần MA này, đó là xu hướng giảm.

Việc lọc mục nhập: Tính toán MA 5 giai đoạn, được định nghĩa là MA nhanh. Chỉ khi giá vượt qua cả MA chậm và MA nhanh, tín hiệu giao dịch được kích hoạt. Thiết kế này chủ yếu lọc thêm khả năng phá vỡ sai.

Bộ lọc nến: Chiến lược chỉ đi dài khi nến hiện tại giảm, hoặc đi ngắn khi nến hiện tại tăng. Điều này xem xét rằng sử dụng thanh đảo để vào có thể đạt được tỷ lệ thành công cao hơn. Nó cũng kết hợp chỉ số RSI nhanh để tránh bước vào các khu vực mua quá mức hoặc bán quá mức.

Bộ lọc kim tự tháp: Đối với thị trường tiền điện tử, chiến lược bổ sung bao gồm một điều kiện đột phá biến động gấp ba để nắm bắt các cơ hội bán quá mức trong xu hướng giảm đáng kể.

Dừng Loss: Chiến lược hỗ trợ dừng lỗ di chuyển. Sau khi mở các vị trí, mức dừng lỗ sẽ được cập nhật trong thời gian thực dựa trên tỷ lệ phần trăm đã thiết lập.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Thiết kế hai MA đơn giản và thực tế, dễ hiểu và nắm vững;
  2. Đánh giá xu hướng đáng tin cậy bằng cách chải các MA nhanh và chậm;
  3. Nhập thanh đảo cải thiện tỷ lệ chiến thắng giao dịch;
  4. Phương pháp tổng thể là bảo thủ và ổn định, phù hợp với tất cả các khung thời gian;
  5. Hỗ trợ chuyển dừng lỗ để kiểm soát rủi ro;
  6. Đặc biệt xem xét các đặc điểm của thị trường tiền điện tử bằng cách thêm các cơ hội kim tự tháp bán quá mức để có được lợi nhuận dư thừa.

Phân tích rủi ro

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

  1. Trong các giai đoạn MA kép giới hạn phạm vi, sẽ có nhiều chiến thắng và thua lỗ nhỏ.
  2. Nhập thanh đảo có thể có tỷ lệ thắng thấp trong một số khung thời gian.
  3. Thị trường tiền điện tử có sự biến động cao và cơ hội dừng lỗ cao.
  4. Cơ hội bán kim tự tháp quá mức không nhiều, với sự biến động lợi nhuận cao.

Để đối phó với những rủi ro này, tối ưu hóa có thể được thực hiện trong các khía cạnh sau:

  1. Thêm thêm các điều kiện nhập để tránh các whipsaws không hiệu quả;
  2. Điều chỉnh khung thời gian hoặc thêm các chỉ số khác để lọc;
  3. Tối ưu hóa các thuật toán dừng lỗ để theo dõi gần đường giữa;
  4. Đánh giá hiệu suất thực tế của các chiến lược kim tự tháp bán quá mức.

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

Các khía cạnh chính để tối ưu hóa chiến lược này bao gồm:

  1. Tối ưu hóa tham số: Kiểm tra hệ thống để tìm kết hợp thời gian MA nhanh và chậm tối ưu để cải thiện lợi nhuận điều chỉnh rủi ro.

  2. Nhận dạng mô hình: Thêm các chỉ số khác như KDJ, MACD để xác định các tín hiệu đảo ngược đáng tin cậy hơn.

  3. Dừng Loss Optimization: Phát triển các thuật toán dừng lỗ nổi hoặc kéo theo để giảm nguy cơ bị dừng lại.

  4. Học máy: Thu thập và gắn nhãn nhiều dữ liệu lịch sử hơn để tự động tạo các quy tắc giao dịch bằng ML.

  5. Định kích thước vị trí: Điều chỉnh động kích thước vị trí dựa trên điều kiện thị trường.

Kết luận

Dual MA Trend Breakout Strategy thường là một chiến lược theo xu hướng đơn giản và thực tế. So với các thuật toán máy học phức tạp, chiến lược này dễ hiểu và nắm vững hơn, với độ tin cậy cao hơn. Với điều chỉnh tham số, mở rộng tính năng và tăng cường ML, chiến lược này có tiềm năng cải thiện rất lớn và là điểm khởi đầu tuyệt vời cho giao dịch định lượng.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.0 +CB", shorttitle = "Trend MAs str 2.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")

src = useohlc4 == true ? ohlc4 : close

//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2

//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2

//Trend
trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Fast RSI
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//CryptoBottom
mac = sma(close, 10)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0

//Signals
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0

up2 = high < center and high < center2 and bar == -1 ? 1 : 0
dn2 = low > center and low > center2 and bar == 1 ? 0 : 0

//Lines
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2")

//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')

//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

longCondition = up == 1 or (up2 == 1 and needex == true) or up3 == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
    strategy.exit("Stop Long", "Long", stop = stoplong)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    strategy.exit("Stop Short", "Short", stop = stopshort)

Thêm nữa