Phiên bản cực đoan của Noro's Trend Moving Averages Strategy

Tác giả:ChaoZhang, Ngày: 2024-01-31 17:00:53
Tags:

img

Tổng quan

Chiến lược này sử dụng hai chỉ số trung bình động để xác định hướng xu hướng và cơ hội dài / ngắn.

Chiến lược logic

  1. Tính toán hai đường trung bình động - MA chậm hơn với giai đoạn 21 để xác định xu hướng tổng thể, và MA nhanh hơn với giai đoạn 5 kết hợp với kênh giá để tìm cơ hội giao dịch.

  2. Kiểm tra xem giá hiện tại có vượt qua kênh giá được hình thành trong giai đoạn trước không.

  3. Đếm số lượng và hướng của nến gần đây. Ví dụ, một số nến giảm liên tiếp có thể báo hiệu cơ hội dài, trong khi nến tăng liên tiếp có thể báo hiệu cơ hội ngắn. Số lượng nến có thể được cấu hình thông qua tham số Bars.

  4. Kết hợp tất cả các yếu tố trên để tạo ra tín hiệu dài / ngắn. Một tín hiệu được kích hoạt khi chuyển động giá phù hợp với hướng xu hướng MA chậm hơn, MA nhanh hoặc kênh giá tạo ra tín hiệu và điều kiện chuyển động nến phù hợp.

Ưu điểm

  1. Hệ thống trung bình động kép theo dõi hiệu quả hướng xu hướng.

  2. MA nhanh hơn và kênh giá kết hợp phát hiện điểm đột phá sớm để nắm bắt cơ hội giao dịch.

  3. Cũng xem xét hướng nến và đếm để tránh bị mắc kẹt bởi sự đảo ngược thị trường.

  4. Các tham số MA có thể tùy chỉnh hoạt động cho các sản phẩm và khung thời gian khác nhau.

Rủi ro và giảm thiểu

  1. MAs kép có thể tạo ra tín hiệu sai trong các thị trường bên cạnh. Có thể thêm dao động hoặc ATR để tránh giao dịch thị trường hỗn loạn.

  2. Có nguy cơ bị mắc kẹt trong những động thái thị trường đặc biệt.

  3. Không thể tránh hoàn toàn sự đảo ngược, sẽ tiếp tục cải thiện logic và các thông số để làm cho chiến lược mạnh mẽ hơn.

Cơ hội gia tăng

  1. Thêm các chỉ số hỗ trợ như ADX, MACD để tránh giao dịch sai trong thị trường hỗn loạn.

  2. Tính toán stop loss động, ví dụ dựa trên ATR và ưu tiên rủi ro.

  3. Tối ưu hóa tham số thông qua máy học để có khả năng thích nghi.

  4. Các tham số điều chỉnh chi tiết dựa trên các đặc điểm của công cụ, ví dụ: thời gian ngắn hơn cho tiền điện tử.

Kết luận

Nhìn chung, chiến lược này hoạt động rất tốt trong việc theo dõi thị trường xu hướng, với các cơ hội vượt qua bổ sung. Với những cải tiến thích hợp, nó có thể được biến thành một chiến lược lượng chất lượng cao có khả năng kinh doanh. Chúng tôi sẽ tiếp tục cải thiện nó để giao dịch nhiều thị trường hơn một cách ổn định.


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

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.9 Extreme", shorttitle = "Trend MAs str 1.9 extreme", 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

//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)
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