Chiến lược giao dịch định lượng dựa trên EMA đôi và chỉ số biến động giá

Tác giả:ChaoZhang, Ngày: 2023-12-18 11:26:49
Tags:

img

Tổng quan

Chiến lược này được gọi là Chỉ số trung bình chuyển động và Chiến lược kết hợp biến động giá . Nó kết hợp trung bình chuyển động nhân đôi (DEMA) và chỉ số biến động giá để tạo ra một tín hiệu giao dịch toàn diện.

Nguyên tắc

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

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

  2. (Giá cao nhất - Giá thấp nhất) / Chỉ số biến động giá đóng. Chỉ số này phản ánh phạm vi biến động của giá trong một khoảng thời gian. Ở đâ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 trong 20 thanh qua. Khi biến động của thanh hiện tại cao hơn hoặc thấp hơn giá trị trung bình này, nó tạo ra tín hiệu giao dịch.

Các tín hiệu từ hai phần được kết hợp. Nếu DEMA và chỉ số biến động cung cấp tín hiệu cùng một lúc, các lệnh giao dịch dài hoặc ngắn cuối cùng sẽ được tạo ra.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

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

  2. Dòng 20 ngày có thể xác định hiệu quả xu hướng trung bình đến dài hạn, và đường 2 ngày có thể nắm bắt biến động ngắn hạn, làm cho sự kết hợp thích nghi với môi trường thị trường khác nhau.

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

  4. Bằng cách điều chỉnh các tham số, nó có thể thích nghi với các sản phẩm và thị trường 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 xu hướng biến động thấp, chỉ số biến động có thể tạo ra các tín hiệu sai.

  2. Trong các thị trường một chiều nhanh chóng, EMA đôi có thể chậm lại.

  3. Sự phức tạp ngày càng tăng của nhiều chỉ số cũng làm tăng nguy cơ tối ưu hóa quá mức.

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

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

  1. Thêm các cơ chế dừng lỗ có thể kiểm soát hiệu quả mỗi lệnh mất.

  2. Tối ưu hóa các tham số cho các sản phẩm và chu kỳ khác nhau để cải thiện khả năng thích nghi.

  3. Tăng các chỉ số thanh khoản và biến động để cải thiện chất lượng tín hiệu.

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

Kết luận

Bằng cách kết hợp hai EMA và chỉ số biến động, chiến lược này 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. Ngoài ra còn có một số rủi ro cần tối ưu hóa và cải thiện hơn nữa. Nhưng nói chung, ý tưởng chiến lược là rõ ràng và có giá trị thực tế.


/*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)

Thêm nữa