
Chiến lược này sử dụng phương pháp theo dõi xu hướng cổ điển với hai đường EMA đồng nhất tạo thành các đường giao dịch vàng và vàng, các đường giao dịch chết và đường giao dịch trắng, và sử dụng chỉ số ATR và chỉ số ADX để lọc thêm, theo dõi khi có xu hướng mạnh và kiểm soát rủi ro khi có cú sốc.
Chiến lược này được xây dựng dựa trên các điểm sau:
Sử dụng đường trung bình EMA 8 chu kỳ ngắn hơn và đường trung bình EMA 20 chu kỳ dài hơn để tạo ra tín hiệu gai vàng và gai chết. Đường trung bình EMA tự nó có tính chất theo xu hướng.
Chỉ số ATR thể hiện mức dao động gần đây. Thông qua việc biến động ATR, bạn có thể điều chỉnh động các điều kiện lọc của đường chéo trung bình EMA, giảm yêu cầu khi theo dõi xu hướng mạnh, nâng cao yêu cầu lọc khi xảy ra biến động, kiểm soát rủi ro.
Chỉ số ADX đánh giá cường độ của xu hướng. Khi ADX lớn hơn 30, nó được coi là một xu hướng mạnh, tại thời điểm này nó sẽ dừng bảo vệ thiệt hại.
Trong thị trường bò, các con dao vàng làm nhiều, trong thị trường gấu, các con dao chết làm trống.
Lưu ý: Các giao dịch được lọc khi có lượng giao dịch lớn hơn.
Chỉ số USD chỉ đơn giản đánh giá USD mạnh hoặc yếu, và stop loss và stop loss mở rộng khi USD mạnh.
Kết hợp với chỉ số xu hướng siêu để đánh giá xu hướng chung của thị trường, hỗ trợ đánh giá thời gian để làm nhiều công việc.
Chiến lược này kết hợp đầy đủ các chỉ số xu hướng với các chỉ số biến động, có thể điều chỉnh các tham số động, kiểm soát rủi ro trong khi theo dõi xu hướng.
Sử dụng hệ thống hai đường EMA để đánh giá xu hướng, EMA có tính mịn mà có thể lọc hiệu quả các đột phá giả.
Chỉ số ATR động điều chỉnh các điều kiện lọc chéo đồng tuyến của EMA, cho phép chiến lược có thể thích ứng linh hoạt với các môi trường thị trường khác nhau.
Chỉ số ADX và khối lượng giao dịch được sử dụng như các chỉ số phán đoán hỗ trợ để tránh bị mắc kẹt trong tình huống biến động.
Cân nhắc về chỉ số đô la và chỉ số siêu xu hướng để đánh giá xu hướng lớn, nâng cao tính chính xác của quyết định.
Các tham số quản lý rủi ro sẽ tự động điều chỉnh khi đồng USD mạnh và tăng stop loss và stop loss khi đồng USD mạnh.
Sử dụng các tín hiệu giao dịch Forex trực quan và đơn giản, cũng như các chiến lược dừng lỗ, dễ thực hiện và phản hồi.
Hệ thống hai đường EMA loại bỏ các điểm mấu chốt của xu hướng để xác định sự chậm trễ.
Việc chọn tham số ATR không đúng có thể dẫn đến quá cực đoan hoặc bảo thủ.
Các tham số của chỉ số ADX cần được tối ưu hóa, lựa chọn điểm cao của ADX không đúng có thể bỏ lỡ xu hướng.
Chỉ số đô la và chỉ số siêu xu hướng có thể sai.
Giảm lỗ quá nhỏ có thể làm tăng lỗ; Giảm lỗ quá rộng có thể bị đặt.
Có thể xem xét kết hợp với các chỉ số khác như MACD để đánh giá điểm cực đoan xu hướng.
Sử dụng nhiều dữ liệu lịch sử hơn để đào tạo không gian tham số ATR và tìm phạm vi tham số tối ưu.
Kiểm tra các tham số ADX khác nhau, tối ưu hóa phán đoán điểm cao của ADX.
Thêm nhiều biến số để đánh giá chỉ số USD và thị trường nói chung.
Tính toán mức dừng lỗ tối ưu dựa trên dữ liệu đánh giá
Bạn có thể xem xét dừng lỗ bằng cách thay đổi dừng di chuyển hoặc dừng rung.
Tiếp tục tối ưu hóa quy mô mở kho và chu kỳ nắm giữ kho.
Chiến lược này tích hợp hệ thống hai đường EMA cổ điển với nhiều chỉ số phụ, thông qua tối ưu hóa tự động các tham số, để đạt được một chiến lược theo dõi xu hướng hoàn chỉnh hơn. Nó có thể thích ứng linh hoạt với sự thay đổi của môi trường thị trường, kiểm soát rủi ro trong khi theo dõi xu hướng. Tuy nhiên, vẫn cần thử nghiệm và tối ưu hóa thêm đối với các tham số dừng và tham số chỉ số để có được lợi nhuận ổn định tốt hơn.
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Refactored Advanced EMA Cross with Normalized ATR Filter, Controlling ADX", shorttitle="ALP V5", overlay=true)
// Initialize variables to track if a buy order has been placed and number of periods since the last buy
var bool hasBought = false
var int barCountSinceBuy = 0
// Define EMA periods
emaShort = ta.ema(close, 8)
emaLong = ta.ema(close, 20)
// Define ATR period and normalization
atrLength = 14
atrValue = ta.atr(atrLength)
maxHistoricalATR = ta.highest(atrValue, 20)
minHistoricalATR = ta.lowest(atrValue, 20)
normalizedATR = (atrValue - minHistoricalATR) / (maxHistoricalATR - minHistoricalATR)
// Define ADX parameters
adxValue = ta.rma(close, 14)
adxHighLevel = 30
isADXHigh = adxValue > adxHighLevel
// Initialize risk management variables
var float stopLossPercent = na
var float takeProfitPercent = na
var float trailingStop = na
// Calculate USD strength (simplified)
usd_strength = close / ta.ema(close, 50) - 1
// Adjust risk parameters based on USD strength
if (usd_strength > 0)
stopLossPercent := 3
takeProfitPercent := 6
else
stopLossPercent := 4
takeProfitPercent := 8
// Initialize position variable
var float positionPrice = na
// Volume filter
minVolume = ta.sma(volume, 14) * 1.5
isVolumeHigh = volume > minVolume
// Piyasa yönü için süper trend göstergesi
[supertrendValue, supertrendDirection] = ta.supertrend(4, 14) // Use a factor of 3 and ATR period of 10
bool isBullMarket = supertrendDirection < 0
bool isBearMarket = supertrendDirection > 0
// Yükselen piyasa için alım koşulu
buyConditionBull = isBullMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.2
// Düşen piyasa için alım koşulu
buyConditionBear = isBearMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.5
// Genel alım koşulu
buyCondition = buyConditionBull or buyConditionBear
// Yükselen ve düşen piyasalar için farklı satış koşulları
sellConditionBull = isBullMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellConditionBear = isBearMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
// Genel satış koşulu
sellCondition = sellConditionBull or sellConditionBear
// Buy condition
if (buyCondition)
strategy.entry("Buy", strategy.long)
positionPrice := close
hasBought := true // Set the flag to true when a buy order is placed
barCountSinceBuy := 0 // Reset the bar counter when a buy order is placed
// Increase the bar counter if a buy has been executed
if (hasBought)
barCountSinceBuy := barCountSinceBuy + 1
// Calculate stop-loss and take-profit levels
longStopLoss = positionPrice * (1 - stopLossPercent / 100)
longTakeProfit = positionPrice * (1 + takeProfitPercent / 100)
// Final Sell condition, now also checks if a buy has occurred before and if at least 5 periods have passed
finalSellCondition = sellCondition and hasBought and barCountSinceBuy >= 3 and isVolumeHigh
if (finalSellCondition)
strategy.close("Buy")
positionPrice := na
hasBought := false // Reset the flag when a sell order is placed
barCountSinceBuy := 0 // Reset the bar counter when a buy order is closed
// Implement stop-loss, take-profit, and trailing stop
strategy.exit("Stop Loss", "Buy", stop=longStopLoss)
strategy.exit("Take Profit", "Buy", limit=longTakeProfit)
//strategy.exit("Trailing Stop", "Buy", trail_price=close, trail_offset=trailingStop * close / 100)
var label l = na
if (buyCondition)
l := label.new(bar_index, high, text="buy triggered " + str.tostring(usd_strength))
label.delete(l[1])
if (finalSellCondition)
l := label.new(bar_index, high, text="sell triggered " + str.tostring(usd_strength))
label.delete(l[1])
// Plot signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=finalSellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")