Chiến lược đảo ngược xu hướng


Ngày tạo: 2024-01-03 16:34:28 sửa đổi lần cuối: 2024-01-03 16:34:28
sao chép: 0 Số nhấp chuột: 654
1
tập trung vào
1621
Người theo dõi

Chiến lược đảo ngược xu hướng

Tổng quan

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.

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

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.

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

  • Chiến lược này tận dụng lợi thế của việc theo dõi xu hướng của đường trung bình di chuyển để nắm bắt xu hướng giá một cách nhanh chóng.
  • Sử dụng các kênh giá và mở cửa ngược để kiểm soát rủi ro và khóa lợi nhuận một cách hiệu quả;
  • Lập luận của chiến lược đơn giản, rõ ràng, dễ hiểu và dễ thực hiện.
  • Các tham số có thể tùy chỉnh như độ dài của xu hướng, hệ số điều chỉnh, v.v., phù hợp với các giống khác nhau;
  • Hỗ trợ tăng giá đồng thời để nắm bắt cơ hội xu hướng.

Rủi ro chiến lược

  • Những con số này có thể là những con số mà các nhà đầu tư đã đưa ra.
  • Trong một số trường hợp, các nhà đầu tư sẽ không thể kiểm soát được mức độ lỗ hổng mà họ có thể gây ra.
  • Thiết lập tham số không đúng có thể dẫn đến quá nhạy cảm hoặc chậm trễ;
  • Chọn loại thích hợp và thời gian để có hiệu quả.

Cách tối ưu hóa:

  1. Kết hợp các chỉ số khác để lọc các tín hiệu vô hiệu;
  2. Tăng lỗ hổng di chuyển để khóa lợi nhuận và thu hẹp mức thu hồi tối đa;
  3. Kiểm tra và tối ưu hóa các tham số cho các giống và chu kỳ khác nhau.

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

Chiến lược này có thể được tối ưu hóa hơn nữa:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Tóm tắt

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ẻ.

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