Chiến lược Martingale động lượng đường trung bình động kép


Ngày tạo: 2023-12-25 17:01:28 sửa đổi lần cuối: 2023-12-25 17:01:28
sao chép: 0 Số nhấp chuột: 564
1
tập trung vào
1623
Người theo dõi

Chiến lược Martingale động lượng đường trung bình động kép

Tổng quan

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

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

Toàn bộ chiến lược sử dụng sự kết hợp của các vùng Brin và các kênh KC để xác định các giai đoạn co thắt và mở rộng của thị trường. Cụ thể, khi vùng Brin nằm trong kênh KC được coi là co thắt, và khi vùng Brin vượt qua kênh KC được coi là mở rộng. Co thắt đại diện cho khả năng gia tăng biến động và đảo ngược xu hướng, khi đó sử dụng sự hồi phục tuyến tính làm chỉ số tín hiệu giao dịch chính.

Nếu biểu đồ hồi quy tuyến tính là dương () và thanh là đường K màu đỏ () và thực thể K lớn hơn 13 so với trung bình của 30 đường K trước đó, thì tín hiệu kết hợp này sẽ làm nhiều hơn. Ngược lại, nếu biểu đồ hồi quy tuyến tính là âm và thanh là đường K màu xanh lá cây và thực thể cũng lớn hơn, thì sẽ không có gì.

Chiến lược này cũng cung cấp hình ảnh về bối cảnh nén và mở rộng, hỗ trợ đánh giá giai đoạn thị trường.

Phân tích lợi thế chiến lược

  • Sử dụng nhiều chỉ số kết hợp để lọc hiệu quả các tín hiệu giả
  • Sự nén đại diện cho một bước ngoặt có thể làm tăng hiệu quả chiến lược.
  • Bộ lọc thực thể có thể tránh bị đánh lừa bởi sự đột phá giả của băng tần nhỏ
  • Dễ dàng đạt được kết quả tốt hơn bằng cách tối ưu hóa tham số

Phân tích rủi ro chiến lược

  • Phục hồi tuyến tính dễ phát tín hiệu sai và có thể gây ra tổn thất
  • Blink và KC channel không thấy hiệu quả của việc nén.
  • Điều kiện lọc quá khắc nghiệt, có thể bỏ lỡ điểm vào tốt hơn
  • Sự rút lui có thể lớn hơn, cần phải chịu đựng một mức độ chịu đựng.

Có thể giảm nguy cơ bằng cách điều chỉnh các tham số chỉ số, tối ưu hóa các điều kiện lọc.

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 theo các khía cạnh sau:

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

Tóm tắt

Chiến lược này tổng hợp một số chỉ số, tăng điều kiện lọc đồng thời xác định cơ hội nén, tạo thành một chiến lược đường ngắn hiệu quả và hiệu quả hơn. Hiệu quả tốt hơn có thể đạt được thông qua tối ưu hóa các tham số và điều kiện lọc. Và khung chiến lược này linh hoạt, dễ điều chỉnh để sử dụng trong các giống khác nhau, đáng để thử nghiệm và tối ưu hóa thêm.

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