Chiến lược đường trung bình động xu hướng Noro cực đoan


Ngày tạo: 2024-01-31 17:00:53 sửa đổi lần cuối: 2024-01-31 17:00:53
sao chép: 1 Số nhấp chuột: 608
1
tập trung vào
1617
Người theo dõi

Chiến lược đường trung bình động xu hướng Noro cực đoan

Tổng quan

Chiến lược này sử dụng hai chỉ số đường trung bình để xác định hướng xu hướng và thời gian thả nhiều. Trong đó, đường trung bình chậm (đường xanh) được sử dụng để xác định hướng xu hướng tổng thể, đường trung bình nhanh (đường đỏ) kết hợp với kênh giá để phát hiện thời gian thả nhiều.

Nguyên tắc chiến lược

  1. Tính toán hai đường trung bình chậm. Chu kỳ đường trung bình chậm là 21, để xác định xu hướng tổng thể; Chu kỳ đường trung bình nhanh là 5, kết hợp với kênh giá, để phát hiện thời gian giao dịch.

  2. Tính toán liệu giá hiện tại có phá vỡ kênh giá của chu kỳ trước không. Nếu giá phá vỡ kênh, chúng tôi coi đó là một cơ hội giao dịch.

  3. Tính hướng và số lượng của đường K. Nếu cuối cùng N gốc K là đường dương, thì có thể làm cho thời gian tròn; Nếu cuối cùng N gốc K là đường dương, thì có thể làm cho thời gian trống. Số lượng của N được thiết lập thông qua tham số Bars.

  4. Kết hợp một số yếu tố trên, phát đi nhiều tín hiệu tháo lỗ. Nếu thị trường phù hợp với hướng đường trung bình chậm, và đường trung bình nhanh hoặc kênh giá phát đi tín hiệu, và đường K cũng phù hợp, thì phát đi tín hiệu giao dịch.

Lợi thế chiến lược

  1. Sử dụng hệ thống hai đường đồng nhất, có thể theo dõi hiệu quả hướng xu hướng.

  2. Kết hợp giữa đường trung bình nhanh và đường dẫn giá giúp phát hiện điểm phá vỡ sớm và nắm bắt thời gian giao dịch.

  3. Ngoài ra, các nhà đầu tư cũng cần cân nhắc về chiều hướng và số lượng đường K để tránh bị mắc kẹt trong thị trường đảo ngược.

  4. Các tham số đường trung bình có thể được điều chỉnh tự do, áp dụng cho các giống và chu kỳ khác nhau.

Rủi ro chiến lược và giải pháp

  1. Đường cân bằng đôi dễ phát ra tín hiệu sai khi di chuyển ngang. Có thể sử dụng chỉ số chênh lệch giá hoặc chỉ số ATR để hỗ trợ phán đoán, tránh giao dịch trong tình trạng biến động.

  2. Trong trường hợp bất thường, nó cũng có thể được đặt. Bạn có thể thiết lập điểm dừng thích hợp để giảm tổn thất đơn lẻ.

  3. Chúng tôi sẽ tiếp tục tối ưu hóa các cơ chế và tham số để làm cho chiến lược ổn định hơn.

Hướng tối ưu hóa chiến lược

  1. Thêm các chỉ số hỗ trợ như ADX, MACD, v.v. để tránh giao dịch sai lầm khi xảy ra biến động.

  2. Động thái điều chỉnh điểm dừng lỗ. Bạn có thể tính toán kỳ vọng rủi ro dựa trên ATR và thiết lập tỷ lệ dừng lỗ hợp lý.

  3. Tự thích ứng các tham số tối ưu hóa. Có thể sử dụng phương pháp học máy để hệ thống tự động tối ưu hóa các tham số.

  4. Điều chỉnh các tham số tùy thuộc vào đặc tính của giống. Ví dụ: các tham số cryptocurrency phù hợp với chu kỳ ngắn hơn.

Tóm tắt

Chiến lược này nói chung rất phù hợp để theo dõi xu hướng. Đồng thời, nó cũng tăng cơ hội giao dịch đột phá. Bằng cách tối ưu hóa hợp lý, chiến lược có thể hoạt động ổn định trong nhiều thị trường hơn. Chúng tôi sẽ tiếp tục cải thiện và cố gắng xây dựng nó thành một chiến lược định lượng chất lượng cao cấp.

Mã nguồn chiến lược
/*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)