Chiến lược giao dịch kết hợp dựa trên EMA kép và bộ lọc thông dải


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

Chiến lược giao dịch kết hợp dựa trên EMA kép và bộ lọc thông dải

Tổng quan

Chiến lược này kết hợp hai chỉ số bằng cách sử dụng Đường trung bình di chuyển kép theo cấp số nhân (DEMA) và Bộ lọc băng thông (BPF) để phá vỡ bộ lọc kép của mua và mua quá mức, tạo ra tín hiệu giao dịch ổn định, theo đuổi tối đa hóa lợi nhuận.

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

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

  1. Chiến lược của DEMA

Sử dụng đường trung bình di chuyển chỉ số kép ngày 2 và ngày 20 để tạo ra tín hiệu mua và bán vàng. Chỉ số này lọc một phần tiếng ồn của giá, có lợi cho việc phát hiện xu hướng.

  1. Chiến lược của BPF

Chỉ số BPF kết hợp các biến động toán học, phát hiện các thành phần quay vòng trong giá, tạo thành khu vực mua quá mức trong một chu kỳ nhất định, phát ra tín hiệu giao dịch. Chiến lược này được thiết lập với chu kỳ 20 ngày, tham số chính xác hóa là 0.5.

Khi sử dụng cả hai kết hợp, các tín hiệu đồng thời nhiều lần đồng thời xuất hiện, cho thấy cả yếu tố xu hướng và chu kỳ đều được xác minh, do đó độ tin cậy cao hơn, dẫn đến điểm vào và thoát ổn định hơn.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là lọc hai chỉ số, làm cho tín hiệu ổn định và đáng tin cậy hơn. DEMA làm mịn giá, nhận ra hướng xu hướng; BPF nhận ra các đặc điểm vòng lặp, xác định vùng quá mua quá bán. Hai xác minh chéo có thể làm giảm đáng kể khả năng tín hiệu giả do tiếng ồn giá và điều chỉnh chu kỳ.

Ngoài ra, chiến lược tự nó không giao dịch thường xuyên, tránh mất tiền và phí xử lý giao dịch quá mức. Thời gian giữ vị trí chủ yếu là đường dài và trung bình, có lợi cho việc tránh tác động của biến động ngẫu nhiên.

Phân tích rủi ro

Rủi ro lớn nhất của chiến lược này là đánh giá sai tình trạng thị trường. Trong tình huống biến động, dễ tạo ra tín hiệu sai; khi xu hướng đảo ngược, dừng lỗ có thể lớn hơn. Ngoài ra, các vấn đề về thiết lập tham số cũng có thể ảnh hưởng lớn đến hiệu suất của chiến lược.

Những rủi ro này có thể được kiểm soát và cải thiện bằng cách tối ưu hóa các tham số chỉ số, thiết lập chặn lỗ và kết hợp với các chỉ số khác. Khi đánh giá thị trường bước vào giai đoạn chấn động và thay đổi tay, bạn có thể xem xét chiến lược tạm dừng để tránh sự gián đoạn của tình huống bất lợi.

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

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

  1. Tối ưu hóa chu kỳ thời gian. Kiểm tra các thiết lập tham số DEMA và BPF khác nhau để xác định kết hợp chu kỳ tối ưu.

  2. Tăng thiết lập dừng lỗ. Thiết lập mức dừng lỗ hợp lý, tránh tổn thất mở rộng; Giới hạn thích hợp, khóa một phần lợi nhuận.

  3. Thêm các bộ lọc cho các chỉ số khác, chẳng hạn như Volume, MACD, v.v., để tránh tín hiệu bị sai lệch bởi số lượng lớn các trò chơi giảm cược.

  4. Các tham số tự thích ứng được tối ưu hóa. Cho phép các tham số của DEMA và BPF được điều chỉnh động theo tình trạng thị trường mới nhất, đảm bảo tính thực tế của chỉ số.

Tóm tắt

Chiến lược này tích hợp lợi thế của hai chỉ số EMA và BPF, lọc kép để cải thiện chất lượng tín hiệu, theo đuổi lợi nhuận trung bình ổn định. Rủi ro chủ yếu đến từ lỗi đánh giá tình trạng thị trường và cài đặt tham số không đúng. Bằng cách xác minh nhiều chỉ số, tham số tối ưu hóa động, các phương pháp khác, chiến lược có thể được linh hoạt và thích ứng hơn, chi phí cao hơn.

Mã nguồn chiến lược
/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 05/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
// The related article is copyrighted material from
// Stocks & Commodities Mar 2010
//
//
// 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


BPF(Length,Delta,SellZone,BuyZone) =>
    pos = 0.0
    xPrice = hl2
    beta = math.cos(3.14 * (360 / Length) / 180)
    gamma = 1 / math.cos(3.14 * (720 * Delta / Length) / 180)
    alpha = gamma - math.sqrt(gamma * gamma - 1)
    BP = 0.0
    BP := 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(BP[1]) - alpha * nz(BP[2])
    pos:= BP > SellZone ? 1 :
    	   BP <= BuyZone? -1 : nz(pos[1], 0) 
    pos

strategy(title='Combo 2/20 EMA & Bandpass Filter', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ Bandpass Filter  ═════●'
LengthBPF = input.int(20, minval=1, group=I2)
Delta = input(0.5, group=I2)
SellZone = input.float(5, step = 0.01, group=I2)
BuyZone = input.float(-5, step = 0.01, 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)
prePosBPF = BPF(LengthBPF,Delta,SellZone,BuyZone)
iff_1 = posEMA20 == -1 and prePosBPF == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBPF == 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)