Chiến lược giao dịch định lượng dựa trên EMA kép và các chỉ báo biến động giá


Ngày tạo: 2023-12-18 11:26:49 sửa đổi lần cuối: 2023-12-18 11:26:49
sao chép: 0 Số nhấp chuột: 651
1
tập trung vào
1621
Người theo dõi

Chiến lược giao dịch định lượng dựa trên EMA kép và các chỉ báo biến động giá

Tổng quan

Chiến lược này được gọi là chiến lược kết hợp chỉ số đường trung bình và biến động giá. Nó kết hợp các chỉ số chuyển động trung bình (Double Exponential Moving Average, DEMA) và chỉ số biến động giá để tạo ra một tín hiệu giao dịch tổng hợp.

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

Chiến lược này bao gồm hai phần:

  1. Chỉ số DEMA. Chỉ số này tính toán đường trung bình di chuyển chỉ số 20 ngày và 2 ngày, tạo ra tín hiệu giao dịch khi giá vượt qua đường 2 ngày từ phía trên xuống hoặc đường 20 ngày từ phía dưới.

  2. (Giá cao nhất - Giá thấp nhất) / Chỉ số biến động giá đóng cửa. Chỉ số này phản ánh mức độ biến động của giá trong một chu kỳ. Ở đây chúng tôi tính trung bình di chuyển đơn giản 16 ngày của chỉ số biến động của 20 đường K trong quá khứ, tạo ra tín hiệu giao dịch khi biến động của đường K hiện tại cao hơn hoặc thấp hơn giá trị trung bình.

Kết hợp hai bộ tín hiệu, tạo ra lệnh giao dịch đa đầu cuối cùng hoặc vô đầu nếu DEMA và chỉ số tỷ lệ dao động phát ra cùng một lúc.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Kết hợp nhiều chỉ số có thể làm giảm tín hiệu giả và tăng độ tin cậy của tín hiệu.

  2. Dòng 20 ngày có thể xác định hiệu quả xu hướng đường dài và đường dài, dây 2 ngày có thể nắm bắt biến động ngắn hạn, sử dụng kết hợp có thể đối phó với các môi trường thị trường khác nhau.

  3. Chỉ số biến động có thể phản ánh hiệu quả sự biến động của thị trường và cơ hội giao dịch.

  4. Bằng cách điều chỉnh các tham số, có thể thích ứng với thị trường của các giống và chu kỳ khác nhau.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Trong thị trường xu hướng có dao động thấp, chỉ số dao động có thể tạo ra tín hiệu sai. Có thể lọc kết hợp với các chỉ số thanh khoản khác.

  2. Trong trường hợp đơn phương nhanh, EMA đôi có thể bị tụt hậu. Các tham số có thể được rút ngắn thích hợp hoặc kết hợp với các chỉ số khác.

  3. Gói đa chỉ số làm tăng sự phức tạp của chiến lược và cũng làm tăng nguy cơ quá tối ưu. Cần phải thực hiện kiểm tra lại toàn diện và kiểm tra tính ổn định của tham số.

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

Chiến lược này cũng có thể được tối ưu hóa bằng cách:

  1. Tăng cơ chế ngăn chặn thiệt hại, có thể kiểm soát hiệu quả mỗi tổn thất.

  2. Các tham số được tối ưu hóa theo các tham số khác nhau về giống và chu kỳ, làm cho các tham số thích ứng hơn.

  3. Tăng tính lưu động và chỉ số tỷ lệ dao động để kết hợp, cải thiện chất lượng tín hiệu.

  4. Thêm thuật toán học máy, thực hiện tham số động và điều chỉnh trọng lượng.

Tóm tắt

Chiến lược này kết hợp hai chỉ số EMA và biến động, có thể đạt được hiệu suất giao dịch tốt trong cả thị trường xu hướng và biến động. Tuy nhiên, có một số rủi ro cần được tối ưu hóa và cải tiến hơn nữa. Nhưng nói chung, chiến lược này có ý tưởng rõ ràng và có giá trị hoạt động thực tế.

Mã nguồn chiến lược
/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/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 histogram displays (high-low)/close
//  Can be applied to any time frame.
//
//
// 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


HLCH(input_barsback,input_percentorprice,input_smalength) =>
    pos = 0.0
    xPrice = (high-low)/close
    xPriceHL = (high-low)
    xPrice1 = input_percentorprice ? xPrice * 100: xPriceHL
    xPrice1SMA = ta.sma(math.abs(xPrice1), input_smalength)
    pos := xPrice1SMA[input_barsback] > math.abs(xPrice1) ? 1 :
    	     xPrice1SMA[input_barsback] < math.abs(xPrice1) ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & (H-L)/C Histogram', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ (H-L)/C Histogram  ═════●'
input_barsback = input(20, title="Look Back", group=I2)
input_percentorprice = input(false, title="% change", group=I2)
input_smalength = input(16, title="SMA Length", 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)
prePosHLCH = HLCH(input_barsback,input_percentorprice,input_smalength)
iff_1 = posEMA20 == -1 and prePosHLCH == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosHLCH == 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)