Chiến lược kết hợp đường trung bình động kép và đường trung bình động Williams


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

Chiến lược kết hợp đường trung bình động kép và đường trung bình động Williams

Tổng quan

Chiến lược này tạo thành một hệ thống tổng hợp để theo dõi xu hướng và tạo ra tín hiệu đảo ngược xu hướng bằng cách kết hợp các đường trung bình di chuyển của hai chỉ số và ba đường trung bình Williams. Nó có hiệu quả giữ vị trí tốt, có thể lọc hiệu quả các tín hiệu giả.

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

Chiến lược này bao gồm hai chiến lược con:

  1. Chỉ số này kết hợp tính năng theo dõi xu hướng của chỉ số di chuyển đơn, và sự chậm trễ của chỉ số di chuyển đôi. Khi giá tăng, nó có thể làm nhiều hơn nhanh hơn; khi giá giảm, nó cũng có thể nhanh hơn.

  2. Ba đường trung bình của Williams. Chỉ số này bao gồm đường dài, đường trung và đường ngắn. Nó sử dụng sự giao thoa của các đường trung bình khác nhau để đánh giá sự thay đổi trong xu hướng để tạo ra tín hiệu giao dịch.

Tín hiệu giao dịch của chiến lược này là tính toán kết quả của hai chiến lược con trên bằng cách sử dụng các hoạt động so sánh so sánh. Nói cách khác, chiến lược này sẽ chỉ ra lệnh khi hai chiến lược con phát đi cùng một lúc. Điều này có thể làm giảm hiệu quả tín hiệu giả và tăng sự ổn định của vị trí.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là có thể lọc hiệu quả các tín hiệu sai, điều này được quyết định bởi cấu trúc chiến lược của nó. Mặc dù đường trung bình di chuyển đôi và đường trung bình Williams có những nhược điểm riêng, nhưng kết hợp cả hai có thể sử dụng lợi thế của mỗi người, bù đắp cho nhau. Điều này làm cho chiến lược này có thể nắm giữ vị trí hiệu quả trong tình huống xu hướng, trong khi có thể dừng lỗ trong tình huống toàn bộ.

Ngoài ra, các tham số của chiến lược này có nhiều không gian để tối ưu hóa, có thể điều chỉnh các tham số của đường trung bình di chuyển đôi và các tham số của đường trung bình ba đường Williams để thích ứng với các đặc điểm của thị trường ở các giống và chu kỳ khác nhau, có khả năng thích ứng mạnh mẽ.

Phân tích rủi ro

Rủi ro chính của chiến lược này là khi thị trường bị biến động mạnh, điểm dừng có thể bị phá vỡ, gây ra tổn thất lớn. Đây là vấn đề phổ biến của chiến lược trung bình di chuyển. Ngoài ra, trong bối cảnh biến động, chiến lược này có thể thường xuyên mở lỗ và tăng chi phí giao dịch.

Để kiểm soát những rủi ro này, nên sử dụng phương pháp Walk Forward Analysis khi tối ưu hóa các tham số và thiết lập điểm dừng hợp lý. Đồng thời, bạn cũng có thể giới thiệu các chỉ số bổ sung để đánh giá tình trạng thị trường và tạm dừng giao dịch trong trường hợp biến động.

Hướng tối ưu hóa

Chiến lược này có một số hướng tối ưu hóa:

  1. Điều chỉnh các tham số của đường trung bình di chuyển kép để phù hợp với các giống và chu kỳ khác nhau.

  2. Điều chỉnh chu kỳ ba đường của trung bình Williams để phù hợp với tần suất biến động của thị trường.

  3. Tăng điều kiện mở vị trí, lọc tín hiệu giao dịch trong giai đoạn cụ thể của thị trường. Ví dụ: không giao dịch trong biến động mạnh.

  4. Tăng chỉ số dừng để kiểm soát lỗ. Bạn có thể thử nghiệm các phương pháp theo dõi dừng, dừng trung bình.

  5. Giới thiệu các tham số tối ưu hóa tự động của thuật toán học máy.

Tóm tắt

Chiến lược này thực hiện lọc hiệu quả các tín hiệu giao dịch bằng cách kết hợp lợi thế của đường trung bình di chuyển đôi và đường trung bình Williams, có thể làm giảm tín hiệu giả và nâng cao hiệu quả giữ vị trí. Nó có thể đạt được hiệu suất tốt hơn thông qua tối ưu hóa tham số theo thị trường. Nó có tiềm năng ứng dụng lớn.

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"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 21/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
// This indicator calculates 3 Moving Averages for default values of
// 13, 8 and 5 days, with displacement 8, 5 and 3 days: Median Price (High+Low/2).
// The most popular method of interpreting a moving average is to compare 
// the relationship between a moving average of the security's price with 
// the security's price itself (or between several moving averages).
//
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


BWA3Lines(LLength,MLength,SLength,LOffset,MOffset,SOffset) =>
    pos = 0.0
    xLSma = ta.sma(hl2, LLength)[LOffset]
    xMSma = ta.sma(hl2, MLength)[MOffset]
    xSSma = ta.sma(hl2, SLength)[SOffset]
    pos := close < xSSma and xSSma < xMSma and xMSma < xLSma ? -1 :
    	     close > xSSma and xSSma > xMSma and xMSma > xLSma ? 1 : nz(pos[1], 0) 
    pos

strategy(title='Combo 2/20 EMA & Bill Williams Averages. 3Lines', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ 3Lines ═════●'
LLength = input.int(13, minval=1, group=I2)
MLength = input.int(8,minval=1, group=I2)
SLength = input.int(5,minval=1, group=I2)
LOffset = input.int(8,minval=1, group=I2)
MOffset = input.int(5,minval=1, group=I2)
SOffset = input.int(3,minval=1, group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosBWA3Lines = BWA3Lines(LLength,MLength,SLength,LOffset,MOffset,SOffset)
iff_1 = posEMA20 == -1 and prePosBWA3Lines == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBWA3Lines == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)