
Chiến lược này đánh giá xu hướng thị trường bằng cách tính toán sự giao nhau của đường trung bình EMA của hai chu kỳ khác nhau và dựa trên đó tạo ra tín hiệu giao dịch. Khi thị trường đi vào xu hướng tăng trên EMA ngắn hạn, chiến lược này sẽ mở nhiều vị trí; khi thị trường đi vào xu hướng giảm dưới EMA dài hạn, chiến lược này sẽ rút khỏi vị trí bằng phẳng.
Chiến lược này chủ yếu áp dụng lý thuyết giao thoa vàng của hai đường trung bình EMA. đường trung bình EMA được chia thành đường dài EMA và đường ngắn EMA. tham số EMA ngắn được đặt là 10 ngày và tham số EMA dài là 21 ngày.
Khi đường ngắn EMA vượt qua đường dài EMA, tạo ra tín hiệu mua; khi đường ngắn EMA vượt qua đường dài EMA, tạo ra tín hiệu bán. Chiến lược này đồng thời thiết lập ngưỡng tăng trưởng, chỉ mở thêm vị trí khi tăng trưởng vượt quá ngưỡng, và chỉ đóng cửa khi giảm vượt quá ngưỡng.
Cụ thể, điều kiện mua là EMA ngắn cao hơn EMA dài, và tăng trưởng giá cổ phiếu vượt quá ngưỡng tiêu cực được đặt; điều kiện bán bằng là EMA ngắn thấp hơn EMA dài, và tăng trưởng giá cổ phiếu thấp hơn ngưỡng tiêu cực được đặt.
Chiến lược này nói chung là đơn giản và đáng tin cậy, đánh giá xu hướng giá thông qua chéo hai EMA và thiết lập mức giảm tốc độ tăng trưởng để phát tín hiệu giao dịch. Tuy nhiên, đường trung bình EMA có vấn đề về sự chậm trễ, kết hợp với các chỉ số khác hoặc điều chỉnh động lực có thể nâng cao hiệu quả chiến lược hơn nữa.
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)
useTimeLimit = input(defval = false, title = "Use Start Time Limiter?")
startYear = input(defval = 2016, title = "Start From Year", minval = 0, step = 1)
startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1)
startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1)
startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1)
startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1)
startTimeOk() => true
lenght0 = input(10)
lenght1 = input(21)
source = close
EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)
growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)
if( startTimeOk() )
buy_condition = EmaShort > EmaLong and growth > thresholdUp
buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
strategy.close(id='buy', when=buy_exit_condition)