Chiến lược đảo ngược theo dõi xu hướng là một chiến lược giao dịch xu hướng dựa trên đường trung bình động và đường cực giá. Chiến lược sử dụng hai đường trung bình động để theo dõi xu hướng giá và mở các vị trí ngược khi xu hướng đảo ngược. Đồng thời, nó cũng tính toán kênh giá dựa trên giá cao nhất và thấp nhất của các đường K gần đây để dừng lỗ khi giá tiếp cận ranh giới kênh, kiểm soát thêm rủi ro.
Chiến lược sử dụng trung bình động điểm cao và thấp 3 giai đoạn hma và lma để theo dõi xu hướng giá. Khi giá vượt trên hma, nó được giải thích là tăng; khi giá giảm dưới lma, nó được giải thích là giảm.
Chiến lược cũng tính toán các đường ray trên và dưới (uplevel và dnlevel) của kênh giá dựa trên giá cao nhất và thấp nhất trong các thanh K-line gần đây. uplevel là giá cao nhất trong các thanh K-line gần đây cộng với hệ số khôi phục lên; dnlevel là giá thấp nhất trong các thanh K-line gần đây trừ hệ số khôi phục xuống. Đây tạo thành phạm vi kênh giá.
Khi mở các vị trí dài, giá dừng lỗ được thiết lập ở đường ray trên của kênh; khi mở các vị trí ngắn, giá dừng lỗ được thiết lập ở đường ray dưới của kênh. Điều này kiểm soát hiệu quả rủi ro thua lỗ từ sự đảo ngược giá.
Khi một tín hiệu đảo ngược xuất hiện, chiến lược sẽ ngay lập tức đảo ngược các vị trí mở để theo dõi xu hướng giá mới.
Cải tiến:
Có chỗ cho việc tối ưu hóa thêm:
Các chỉ số khác có thể được giới thiệu để lọc một số tín hiệu không hợp lệ, chẳng hạn như MACD, KD, v.v.
Logic dừng lỗ thích nghi có thể được thêm vào, chẳng hạn như dừng lỗ di chuyển, dừng lỗ cân bằng, vv để kiểm soát rủi ro hơn nữa.
Kiểm tra tác động của các tham số khác nhau đối với hiệu suất chiến lược và tối ưu hóa sự kết hợp các tham số, chẳng hạn như chiều dài chu kỳ MA, kích thước hệ số khôi phục, v.v.
Chiến lược hiện đang giao dịch trong các phiên theo thời gian. Nó cũng có thể được điều chỉnh để giao dịch cả ngày. Điều này có thể yêu cầu các quy tắc lọc bổ sung.
Tóm lại, đây là một chiến lược giao dịch đảo ngược xu hướng kết hợp các kênh giá và trung bình động. Bằng cách theo dõi xu hướng và các vị trí mở ngược kịp thời, nó có thể theo dõi hiệu quả các biến động giá. Đồng thời, các biện pháp kiểm soát rủi ro của các kênh giá và mở ngược cũng cho phép nó kiểm soát hiệu quả các lỗ đơn lẻ. Ý tưởng chiến lược đơn giản và rõ ràng, và đáng để thử nghiệm và tối ưu hóa hơn nữa trong giao dịch trực tiếp.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=3 strategy(title = "Noro's 3Bars Strategy by Larry Williams", shorttitle = "3Bars", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") corr = input(0.0, title = "Correction, %") bars = input(1, minval = 1) revers = input(false, defval = false, title = "revers") showll = input(true, defval = true, title = "Show Levels") showos = input(true, defval = true, title = "Show Levels one side") showcl = input(false, defval = false, title = "Show Levels continuous line") showbg = input(false, defval = false, title = "Show Background") showar = input(false, defval = false, title = "Show Arrows") 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") len = input(3) hma = sma(high, len) lma = sma(low, len) plot(hma) plot(lma) //Levels hbar = 0 hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0 lbar = 0 lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0 uplevel = 0.0 dnlevel = 0.0 hh = highest(high, bars + 1) ll = lowest(low, bars + 1) uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1] dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1] //Background size = strategy.position_size trend = 0 trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1] col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na bgcolor(col) //Lines upcol = na upcol := showll == false ? na : uplevel != uplevel[1] and showcl == false ? na : showos and trend[1] == 1 ? na : lime plot(uplevel, color = upcol, linewidth = 2) dncol = na dncol := showll == false ? na : dnlevel != dnlevel[1] and showcl == false ? na : showos and trend[1] == -1 ? na : red plot(dnlevel, color = dncol, linewidth = 2) //Arrows longsignal = false shortsignal = false longsignal := size > size[1] shortsignal := size < size[1] plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0) //Trading lot = 0.0 lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1] if uplevel > 0 and dnlevel > 0 and revers == false strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel) strategy.entry("Long stop", strategy.short, 0, stop = lma) strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel) strategy.entry("Short stop", strategy.long, 0, stop = hma) // if time > timestamp(toyear, tomonth, today, 23, 59) // strategy.close_all()