
Chiến lược đảo ngược theo xu hướng là một chiến lược giao dịch theo xu hướng dựa trên đường trung bình di chuyển và giá trị cực đoan. Chiến lược này sử dụng hai đường trung bình di chuyển để theo dõi xu hướng giá, mở vị trí đảo 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 một vài đường K gần nhất, thiết lập dừng lỗ khi giá gần biên giới kênh, kiểm soát rủi ro hơn nữa.
Chiến lược này sử dụng đường trung bình di chuyển hma và lma với chiều cao 3 và đường trung bình di chuyển thấp để theo dõi xu hướng giá. Khi giá vượt qua hma, Interpret là bullish; Khi giá vượt qua lma, Interpret là bearish.
Chiến lược này cũng sẽ tính toán đường dẫn giá lên và xuống dựa trên giá cao nhất và giá thấp nhất trong đường K gốc bar gần nhất. Uplevel và dnlevel.
Khi mở nhiều lệnh, giá dừng là kênh lên đường; khi mở đơn trống, giá dừng là kênh xuống đường. Điều này có thể kiểm soát hiệu quả rủi ro tổn thất do đảo ngược giá.
Khi một tín hiệu đảo ngược xuất hiện, chiến lược này sẽ ngay lập tức mở vị trí đảo ngược và theo dõi xu hướng giá mới. Đây là nguyên tắc theo dõi đảo ngược.
Cách tối ưu hóa:
Chiến lược này có thể được tối ưu hóa hơn nữa:
Có thể giới thiệu các chỉ số khác để lọc ra một số tín hiệu vô hiệu. Ví dụ MACD, KD, v.v.
Có thể thêm logic dừng lỗ thích ứng, chẳng hạn như dừng di chuyển, dừng số dư, để kiểm soát rủi ro hơn nữa.
Có thể kiểm tra ảnh hưởng của các tham số khác nhau đối với hiệu quả của chiến lược, tối ưu hóa các tham số. Ví dụ: độ dài chu kỳ MA, kích thước của hệ số điều chỉnh trở lại, v.v.
Chiến lược hiện nay là giao dịch theo giờ hoặc có thể được điều chỉnh để giao dịch cả ngày. Điều này có thể cần các quy tắc lọc khác.
Chiến lược này nói chung là một chiến lược giao dịch đảo ngược xu hướng kết hợp với đường dẫn giá với đường trung bình di chuyển. Bằng cách theo dõi xu hướng và mở vị trí đảo ngược kịp thời, nó có thể theo dõi hiệu quả sự di chuyển của giá. Đồng thời, các biện pháp kiểm soát rủi ro của đường dẫn giá và mở vị trí đảo ngược cũng cho phép nó kiểm soát hiệu quả tổn thất đơn lẻ.
/*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()