Chiến lược này dựa trên đường trung bình di chuyển và chỉ số ATR để thực hiện giao dịch theo dõi xu hướng tự động. Khi đường EMA nhanh vượt qua đường EMA chậm, hãy thực hiện vị trí đầu nhiều; Khi đường EMA nhanh vượt qua đường EMA chậm, hãy thực hiện vị trí đầu ngắn.
Chiến lược này chủ yếu dựa trên hai chỉ số kỹ thuật:
EMA trung bình: EMA trung bình với hai tham số khác nhau, được coi là tín hiệu đa đầu khi đi qua đường chậm trên đường nhanh và tín hiệu trống khi đi qua.
Chỉ số ATR: Chỉ số ATR có thể đánh giá mức độ và sức mạnh của biến động giá, từ đó đánh giá xu hướng của xu hướng hiện tại. Khi giá trị ATR thấp hơn, nó cho thấy hiện tại đang cân bằng, lúc này không nên đặt hàng; Khi giá trị ATR lớn hơn và hướng lên, cho thấy hiện tại đang ở thị trường xu hướng, lúc này chờ đợi EMA Gold Fork làm nhiều; Khi giá trị ATR lớn hơn và hướng xuống, cho thấy hiện tại đang ở thị trường xu hướng, lúc này chờ đợi EMA Dead Fork làm trống.
Tìm kiếm cơ hội mua và bán thông qua giao dịch giữa đường trung bình EMA và kết hợp với chỉ số ATR để lọc các tín hiệu giao dịch yếu theo xu hướng và tránh bị mắc kẹt trong sự kết thúc của thị trường.
Chiến lược này có những ưu điểm sau:
Giao dịch chỉ khi chỉ số ATR cho thấy xu hướng, giúp tránh bị giam giữ khi không rõ biến động.
Sử dụng các nguyên tắc chéo của đường tròn để tìm điểm mua và bán, đơn giản và hiệu quả.
Thông qua điều chỉnh tham số, độ nhạy và độ mịn của đường trung bình EMA có thể được điều chỉnh theo sở thích cá nhân.
Chỉ cần sử dụng hai chỉ số đơn giản để thực hiện hệ thống giao dịch tự động hoàn chỉnh, có thể dễ dàng phát triển và tối ưu hóa chiến lược thông qua trình soạn thảo Pine.
Không cần phải điều chỉnh các tham số thường xuyên, để thực hiện các chính sách ParameterSet và Forget đơn giản.
Chiến lược này cũng có một số rủi ro cần lưu ý:
EMA cross dễ tạo ra tín hiệu sai và có thể gây ra tổn thất không cần thiết. Một số chỉ số có thể được làm mượt bằng cách điều chỉnh tham số EMA.
Chỉ số ATR đôi khi có thể bị sai lệch trong việc đánh giá tổng hợp và xu hướng, dẫn đến việc bỏ lỡ cơ hội giao dịch.
Chính chiến lược này không tính đến phân tích yếu tố quy mô lớn, rất khó để đánh giá thị trường qua một đường chéo nhanh chóng và trung bình nếu xảy ra một sự đảo ngược quan trọng, khi đó cần có sự can thiệp của con người.
Các tác động của những rủi ro này có thể được giảm bớt bằng cách tối ưu hóa.
Chiến lược này cũng có một số ưu điểm chính:
Bạn có thể xem xét thêm các chỉ số khác để tạo ra hệ thống kết hợp các chỉ số để cải thiện độ chính xác của tín hiệu. Ví dụ, kết hợp với chỉ số RSI để tránh nguy cơ mua quá mức.
Các tham số phù hợp hơn có thể được lựa chọn cho các loại giao dịch khác nhau, các khu vực giao dịch khác nhau, để tham số của EMA và ATR phù hợp hơn với đặc điểm thị trường hiện tại.
Các tham số động có thể được tối ưu hóa thông qua các phương pháp như học máy. Các tham số chỉ số có thể được điều chỉnh theo tình hình thị trường thực tế thay vì sử dụng các giá trị tĩnh cố định.
Chiến lược này nói chung là một chiến lược theo dõi xu hướng rất thực tế. Chỉ cần kết hợp hai chỉ số đơn giản để thực hiện một hệ thống giao dịch hoàn chỉnh. Có thể thích nghi với các nhà giao dịch có sở thích khác nhau thông qua điều chỉnh tham số.
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This strategy has been created for GMT trade 4h by Zhukov
//@version=5
strategy('ZhukovTrade', overlay=true, calc_on_every_tick=true, currency=currency.USD)
// INPUT:
// Options to enter fast and slow Exponential Moving Average (EMA) values
emaFast = input.int(title='Fast EMA', defval=100, minval=1, maxval=9999)
emaSlow = input.int(title='Slow EMA', defval=200, minval=1, maxval=9999)
// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both')
// Options that configure the backtest date range
startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00'))
endDate = input(title='End Date', defval=timestamp('31 Dec 2023 23:59'))
// CALCULATIONS:
// Use the built-in function to calculate two EMA lines
fastEMA = ta.ema(close, emaFast)
slowEMA = ta.ema(close, emaSlow)
emapos = ta.ema(close,200)
// PLOT:
// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2)
plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2)
plot(series=emapos, color=color.new(color.red, 0), linewidth=2)
// CONDITIONS:
// Check if the close time of the current bar falls inside the date range
inDateRange = true
// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'
// Decide if we should go long or short using the built-in functions
longCondition = ta.crossover(fastEMA, slowEMA)
shortCondition = ta.crossunder(fastEMA, slowEMA)
// ORDERS:
// Set take profit and stop loss percentages
take_profit_percent = input(0, title="Take Profit Percent")
stop_loss_percent = input(0, title="Stop Loss Percent")
// Submit entry (or reverse) orders
atrPeriod = input(12, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)
if longCondition and inDateRange
if longOK and direction<0
strategy.entry(id='long', direction=strategy.long, alert_message = "LONG")
if shortCondition and inDateRange
if shortOK and direction>0
strategy.entry(id='short', direction=strategy.short, alert_message = "SHORT")
// Submit exit orders in the cases where we trade only long or only short
if strategy.position_size > 0 and take_profit_percent
strategy.exit(id='tp long',from_entry ="long",profit = take_profit_percent)
if strategy.position_size > 0 and stop_loss_percent
strategy.exit(id='sl long',from_entry="long",loss=stop_loss_percent)
if strategy.position_size < 0 and stop_loss_percent
strategy.exit(id='sl short',from_entry="short",loss=stop_loss_percent)
if strategy.position_size < 0 and take_profit_percent
strategy.exit(id='tp short',from_entry="short",profit = take_profit_percent)