Chiến lược nén động cơ trung bình hai lần

Tác giả:ChaoZhang, Ngày: 2023-12-25 17:01:28
Tags:

img

Tổng quan

Chiến lược này kết hợp ba chỉ số kỹ thuật khác nhau và tạo ra các tín hiệu giao dịch bằng cách sử dụng một hệ thống trung bình động kép, với các bộ lọc bổ sung dựa trên màu sắc và cơ thể của nến, để xây dựng một chiến lược giao dịch ngắn hạn tương đối ổn định và hiệu quả.

Chiến lược logic

Chiến lược này sử dụng Bollinger Bands và kênh KC kết hợp để xác định các giai đoạn nén và mở rộng trên thị trường. Cụ thể, khi Bollinger Bands nằm trong kênh KC, nó được coi là nén; khi Bollinger Bands phá vỡ kênh KC, nó được coi là mở rộng.

Nếu biểu đồ hồi quy tuyến tính là dương tính (đại diện cho xu hướng tăng) và thanh là một ngọn nến màu đỏ (đại diện cho mức đóng thấp hơn), đồng thời thân nến lớn hơn 1/3 so với thân trung bình của 30 ngọn nến trước đó, một tín hiệu kết hợp như vậy sẽ dài. Ngược lại, nếu biểu đồ hồi quy tuyến tính là âm, thanh là một ngọn nến màu xanh lá cây, và thân nến cũng lớn, nó sẽ ngắn.

Chiến lược cũng cung cấp hình ảnh của nền nén và mở rộng để giúp đánh giá giai đoạn thị trường.

Phân tích lợi thế

  • Sử dụng nhiều chỉ số cho sự kết hợp có thể lọc hiệu quả các tín hiệu sai
  • Nén đại diện cho các điểm đảo ngược tiềm năng và cải thiện hiệu suất chiến lược
  • Bộ lọc cơ thể tránh bị đánh lừa bởi những làn sóng nhỏ của các sự đột phá giả
  • Dễ dàng đạt được kết quả tốt hơn thông qua tối ưu hóa tham số

Phân tích rủi ro

  • Phục hồi tuyến tính có thể dễ dàng phát ra tín hiệu sai, có thể dẫn đến tổn thất
  • Hiệu ứng của Bollinger Bands và kênh KC để đánh giá nén không lý tưởng
  • Các tiêu chí lọc quá khắc nghiệt, có thể thiếu các điểm nhập tốt hơn
  • Lưu lượng có thể lớn hơn, cần phải chịu được một mức độ dung nạp nhất định

Rủi ro có thể được giảm bằng cách điều chỉnh các tham số chỉ số, tối ưu hóa các tiêu chí lọc, v.v.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Hãy thử các kết hợp tham số khác nhau và chiều dài để tìm các tham số tối ưu
  2. Tăng hoặc giảm điều kiện lọc để tìm mức lọc tối ưu
  3. Sử dụng các phương pháp học máy để tự động tìm các thông số tối ưu
  4. Hiệu ứng thử nghiệm trong các giống cụ thể và điều chỉnh các thông số theo các giống khác nhau
  5. Thêm chiến lược dừng lỗ để kiểm soát lỗ duy nhất

Kết luận

Chiến lược này kết hợp nhiều chỉ số, trong khi xác định các cơ hội nén, nó làm tăng điều kiện lọc để hình thành một chiến lược ngắn hạn tương đối mạnh mẽ và hiệu quả. Thông qua các thông số và tối ưu hóa điều kiện lọc, có thể đạt được kết quả tốt hơn. Ngoài ra, khung chiến lược linh hoạt và dễ điều chỉnh để sử dụng trong các loại khác nhau, đáng để thử nghiệm và tối ưu hóa thêm.


/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2017

//@version=2
strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, 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")
length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = true
usecolor = input(true, defval = true, title = "Use color of candle")
usebody = input(true, defval = true, title = "Use EMA Body")
needbg = input(false, defval = false, title = "Show trend background")
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")

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)

bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray 

trend = val > 0 ? 1 : val < 0 ? -1 : 0

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//EMA Body
body = abs(close - open)
emabody = ema(body, 30) / 3

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false)
dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false)

if up
    strategy.entry("Long", strategy.long)

if dn
    strategy.entry("Short", strategy.short)

Thêm nữa