Chiến lược này sử dụng đường chéo trung bình động và chỉ số ATR để thực hiện xu hướng tự động sau khi giao dịch. Nó đi dài khi EMA nhanh vượt qua trên EMA chậm, và đi ngắn khi EMA nhanh vượt qua dưới EMA chậm. Đồng thời, nó sử dụng chỉ số ATR để đánh giá hướng xu hướng và chỉ gửi tín hiệu giao dịch khi ATR chỉ ra rằng một xu hướng hiện diện.
Chiến lược chủ yếu dựa trên hai chỉ số kỹ thuật:
Đường EMA: Nó sử dụng hai đường EMA với các thông số khác nhau, nhanh và chậm. Khi EMA nhanh vượt qua trên EMA chậm, nó được coi là tín hiệu dài. Khi EMA nhanh vượt qua dưới EMA chậm, nó được coi là tín hiệu ngắn.
Chỉ số ATR: Chỉ số ATR đo cường độ và sức mạnh của biến động giá để đánh giá xu hướng của động thái hiện tại. Giá trị ATR nhỏ cho thấy hợp nhất trong khi giá trị ATR tăng lớn cho thấy xu hướng tăng và giá trị ATR giảm lớn cho thấy xu hướng giảm.
Bằng cách kết hợp các giao dịch chéo EMA để xác định các cơ hội giao dịch và bộ lọc ATR để tránh các chế độ xu hướng thấp, chiến lược nhằm tránh bị đánh đập trong thời gian thị trường hỗn loạn.
Những lợi thế của chiến lược này bao gồm:
Chỉ giao dịch khi ATR xác định xu hướng, giúp tránh bị chọc trong các chế độ không hướng.
Sử dụng logic chéo EMA nhanh và chậm đơn giản để xác định tín hiệu giao dịch.
Độ nhạy và độ mượt mà EMA có thể tùy chỉnh thông qua các điều chỉnh tham số.
Hệ thống giao dịch tự động hoàn chỉnh được xây dựng chỉ với hai chỉ số đơn giản, dễ dàng thực hiện trong Pine editor.
Cần tối thiểu cho các tham số liên tục điều chỉnh,
Một số rủi ro cần lưu ý bao gồm:
EMA crossover có thể tạo ra tín hiệu sai, dẫn đến tổn thất không cần thiết.
Việc đánh giá xu hướng ATR cũng có thể dễ mắc lỗi, bỏ lỡ cơ hội giao dịch.
Không xem xét các cơ bản khung thời gian cao hơn. Các sự kiện tin tức lớn có thể kích hoạt sự đảo ngược mà các đường chéo EMA nhanh có thể bỏ lỡ, đòi hỏi sự can thiệp thủ công.
Những rủi ro này có thể được giảm thiểu thông qua tối ưu hóa.
Các hướng tối ưu hóa chính bao gồm:
Thêm các chỉ số khác để tạo ra một hệ thống kết hợp và cải thiện độ chính xác tín hiệu.
Chọn các thông số EMA và ATR phù hợp hơn với thị trường cụ thể dựa trên biểu tượng và khung thời gian giao dịch.
Thực hiện tối ưu hóa tham số động thông qua học máy để điều chỉnh các chỉ số dựa trên điều kiện thị trường hiện tại thay vì sử dụng các giá trị tĩnh cố định.
Nhìn chung, đây là một chiến lược theo xu hướng rất thực tế. Chỉ với một sự kết hợp đơn giản của hai chỉ số, nó xây dựng một hệ thống giao dịch tương đối hoàn chỉnh. Thông qua các điều chỉnh tham số, nó có thể được điều chỉnh cho các nhà giao dịch có sở thích và phong cách khác nhau. Đồng thời, việc mở rộng và tối ưu hóa hơn nữa có thể làm cho hiệu suất chiến lược thậm chí còn tốt hơn.
/*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)