Chiến lược này sử dụng sự kết hợp của đường trung bình nhanh và đường trung bình chậm để đánh giá hướng xu hướng, để nắm bắt xu hướng đường trung bình dài để giao dịch xu hướng. Làm nhiều khi đi qua đường trung bình chậm trên đường trung bình nhanh và làm trống khi đi qua đường trung bình chậm dưới đường trung bình nhanh là một chiến lược theo dõi xu hướng điển hình.
Chiến lược này dựa chủ yếu vào đường trung bình để đánh giá xu hướng thị trường. Cụ thể, chiến lược sử dụng đường trung bình nhanh 5 chu kỳ và đường trung bình chậm 21 chu kỳ.
Khi đường trung bình nhanh vượt qua đường trung bình chậm, thị trường có xu hướng chuyển nhiều hơn, chiến lược này sẽ làm nhiều hơn khi mở cửa K tiếp theo; khi đường trung bình nhanh vượt qua đường trung bình chậm, thị trường có xu hướng chuyển hướng, chiến lược này sẽ làm trống khi mở cửa K tiếp theo.
Ngoài ra, chiến lược cũng thiết lập tham số bars để lọc phá vỡ giả. Giá trị mặc định của tham số này là 2, nghĩa là đường trung bình nhanh cần 2 đường K liên tiếp trên đường trung bình chậm để phát ra nhiều tín hiệu, có thể lọc phá vỡ giả hiệu quả.
Đối với tiền điện tử, chiến lược này cũng thêm vào logic phán đoán cực đoan. Chỉ khi đường trung bình nhanh và đường trung bình chậm cùng ở khu vực cực đoan, tín hiệu giao dịch sẽ được phát ra.
Chiến lược thoát khỏi quy tắc đơn giản và trực tiếp, khi giá kích hoạt điểm dừng lỗ, bạn sẽ thoát khỏi vị trí hiện tại.
Bạn có thể làm giảm nguy cơ bằng cách:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Bạn có thể thử nghiệm nhiều hơn để tìm các tham số đường trung bình phù hợp hơn với thị trường hiện tại. Ví dụ: điều chỉnh đường nhanh là 10 chu kỳ, đường chậm là 50 chu kỳ.
Có thể thử nghiệm thêm các chỉ số khác như MACD, KDJ, và đặt các điều kiện nghiêm ngặt hơn để tránh phá vỡ giả.
Việc nhập học hiện tại quá đơn giản và phụ thuộc vào đường trung bình, có thể được tối ưu hóa như sau:
Có thể thử nghiệm các phương thức dừng khác, chẳng hạn như theo dõi dừng theo giá để tránh dừng bị kích hoạt quá sớm.
Khi vị trí bị dừng lại, bạn có thể quay trở lại, điều này sẽ làm giảm các trường hợp bị dừng lại và bỏ lỡ xu hướng.
Chiến lược này là một chiến lược theo dõi xu hướng cơ bản, ý tưởng cốt lõi đơn giản và trực tiếp, sử dụng định hướng định hướng xu hướng bằng hai đường thẳng và dừng lỗ di động để kiểm soát rủi ro. Ưu điểm là dễ hiểu và thực hiện, có thể tuân theo xu hướng và lợi nhuận, rủi ro cũng có thể được kiểm soát. Nhưng đồng thời có một số thiếu sót, tín hiệu không chính xác trong thị trường và dừng lỗ dễ bị kích hoạt quá sớm. Điều này đòi hỏi chúng tôi phải liên tục điều chỉnh tối ưu hóa trong thực tế và lọc các chỉ số kỹ thuật khác để chiến lược phù hợp hơn với môi trường thị trường khác nhau.
/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.3", shorttitle = "Trend MAs str 2.3", 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, %")
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?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
src = 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)
//Signals
up1 = trend == 1 and (low < center2 or usefastsma == false) and redbars == 1
dn1 = trend == -1 and (high > center2 or usefastsma == false) and greenbars == 1
up2 = high < center and high < center2 and bar == -1 and needex
dn2 = low > center and low > center2 and bar == 1 and needex
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0
//Lines
plot(center2, color = red, linewidth = 3, transp = 0, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Trading
stoplong = up1 == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn1 == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]
if up1 or up2 or up3
strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
strategy.exit("Stop Long", "Long", stop = stoplong)
if dn1
strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
strategy.exit("Stop Short", "Short", stop = stopshort)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()