
Chiến lược này được gọi là MADEFlex, một chiến lược giao dịch định lượng linh hoạt dựa trên phong bì trung bình di chuyển và dừng chân theo mức trung bình thực tế. Chiến lược này kết hợp các chỉ số phong bì trung bình di chuyển và cơ chế dừng chân theo mức trung bình thực tế, để thực hiện một giải pháp giao dịch định lượng linh hoạt và có thể kiểm soát được.
Trung tâm của chiến lược này là chỉ số MADE. Chỉ số MADE được hình thành bằng cách nhân các yếu tố phần trăm thực hiện sự dịch chuyển của chỉ số Moving Average (EMA). Khi giá phá vỡ đường mòn, tạo ra tín hiệu bán; khi giá giảm đường mòn, tạo ra tín hiệu mua.
Cụ thể, chỉ số MADE chứa 3 tham số: chu kỳ, phần trăm trên đường perAb và phần trăm dưới đường perBl. Chu kỳ, thời gian quyết định độ dài chu kỳ của EMA. Phạm vi của khoảng cách trên đường theo EMA được kiểm soát bởi yếu tố phần trăm.
Cuối cùng, bằng cách kết hợp các tín hiệu chỉ số MADE và ATR theo các điều kiện lọc dừng lỗ, tạo ra các tín hiệu mua và bán. Hoạt động ngược lại có thể được thực hiện bằng cách chuyển đổi đầu vào giao dịch ngược.
Chiến lược MADEFlex có những ưu điểm sau:
Kết hợp tín hiệu chỉ số và cơ chế dừng, đáng tin cậy hơn. Các chỉ số MADE tự nó dễ tạo ra tín hiệu sai. Kết hợp với ATR dừng theo dõi có thể lọc một phần tiếng ồn hiệu quả.
Các tham số có thể điều chỉnh, điều khiển linh hoạt. Các tham số của chỉ số MADE và tham số ATR có thể điều chỉnh, điều khiển số lượng và chất lượng tín hiệu.
Hỗ trợ hoạt động ngược. Có thể giao dịch ngược thông qua chuyển đổi ngược, làm phong phú các trường hợp sử dụng chiến lược.
Hình ảnh stopper trực quan. Bằng cách vẽ đường dừng, trực quan đánh giá hiệu quả dừng.
MADEFlex cũng có những rủi ro sau:
Các tham số chỉ số MADE không phù hợp có thể tạo ra nhiều tín hiệu sai. Cần thử nghiệm cẩn thận để xác định các tham số phù hợp.
ATR dừng quá nhẹ có thể bỏ lỡ cơ hội dừng.
Hoạt động ngược có nguy cơ cao. Đặc biệt là trong tình trạng biến động cao, hoạt động ngược có thể làm tăng nguy cơ thua lỗ. Cần thận trọng.
Không có bảo vệ dừng có thể gây thiệt hại lớn hơn. Trong trường hợp cực đoan, không có bảo vệ dừng có thể gây thiệt hại lớn hơn.
Chiến lược MADEFlex có thể được tối ưu hóa theo các hướng sau:
Tối ưu hóa tham số MADE, cải thiện chất lượng tín hiệu. Có thể thử nghiệm các tham số khác nhau về chu kỳ, phần trăm, tìm các tham số kết hợp đáng tin cậy hơn.
Tối ưu hóa các tham số dừng ATR để đạt được hiệu quả dừng tốt hơn. Bạn có thể thử nghiệm chu kỳ ATR và nhân ATR để xác định sự kết hợp phù hợp hơn.
Thêm các điều kiện lọc khác để giảm thêm tín hiệu sai. Ví dụ: kết hợp với chỉ số dao động để lọc thêm tín hiệu.
Thêm chiến lược dừng, dừng rút ra sau khi lợi nhuận đạt đến một mức nhất định. Có thể khóa lợi nhuận, kiểm soát rủi ro.
Phương pháp học máy kết hợp các tham số tối ưu hóa động. Các tham số tối ưu hóa thời gian thực sử dụng các phương pháp như học tập tăng cường, làm cho chiến lược trở nên linh hoạt hơn.
Chiến lược MADEFlex đã kết hợp thành công các tín hiệu giao dịch của chỉ số phong bì trung bình di động và phương pháp dừng thua lỗ theo dõi phạm vi trung bình thực. Một giải pháp giao dịch định lượng linh hoạt và có thể kiểm soát được thông qua các tham số có thể điều chỉnh được. Chiến lược này có độ tin cậy cao, khả năng kiểm soát mạnh mẽ, phù hợp để sử dụng và tối ưu hóa cho người dùng có cơ sở định lượng nhất định.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 27/09/2022
// Moving Average Displaced Envelope. These envelopes are calculated
// by multiplying percentage factors with their displaced expotential
// moving average (EMA) core.
// How To Trade Using:
// Adjust the envelopes percentage factors to control the quantity and
// quality of the signals. If a previous high goes above the envelope
// a sell signal is generated. Conversely, if the previous low goes below
// the envelope a buy signal is given.
//
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort
// The related article is copyrighted material from Stocks & Commodities Jun 2009
//
// ATR TS used by filter for MADE signals.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title='Moving Average Displaced Envelope & ATRTS', shorttitle='MADE+ATR', overlay=true)
tradeDirection = input.string('Both', title='Trade Direction', options=['Both', 'Long', 'Short'])
Price = input(title='Source', defval=close)
Period = input.int(defval=9, minval=1)
perAb = input.float(title='Percent above', defval=.5, minval=0.01, step=0.1)
perBl = input.float(title='Percent below', defval=.5, minval=0.01, step=0.1)
disp = input.int(title='Displacement', defval=13, minval=1)
nATRPeriod = input(15)
nATRMultip = input(2)
useATR = input(false, title='ATR Filter')
reverse = input(false, title='Trade reverse')
longAllowed = tradeDirection == 'Long' or tradeDirection == 'Both'
shortAllowed = tradeDirection == 'Short' or tradeDirection == 'Both'
pos = 0
sEMA = ta.ema(Price, Period)
top = sEMA[disp] * ((100 + perAb) / 100)
bott = sEMA[disp] * ((100 - perBl) / 100)
xATR = ta.atr(nATRPeriod)
xHHs =ta.sma(ta.highest(nATRPeriod), nATRPeriod)
xLLs =ta.sma(ta.lowest(nATRPeriod),nATRPeriod)
nSpread = (xHHs - xLLs) / 2
nLoss = nATRMultip * xATR
var xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) :
close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) :
close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss
ATRLong = close > xATRTrailingStop ? true : false
ATRShort = close < xATRTrailingStop ? true : false
iff_1 = close > top ? 1 : pos[1]
pos := close < bott ? -1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
clr = strategy.position_size
if possig == 1
if longAllowed and ATRLong
strategy.entry('Long', strategy.long)
else
if ATRLong or strategy.position_size > 0
strategy.close_all()
if possig == -1
if shortAllowed and ATRShort
strategy.entry('Short', strategy.short)
else
if ATRShort or strategy.position_size < 0
strategy.close_all()
if possig == 0
strategy.close_all()
plot(xATRTrailingStop[1], color=color.blue, title='ATR Trailing Stop')
barcolor(clr < 0 ? #b50404 : clr > 0 ? #079605 : #0536b3)