Chiến lược này tận dụng lợi thế của đường trung bình di chuyển và các chỉ số tương đối mạnh để nhận diện và theo dõi xu hướng. Chỉ cần hai chỉ số để có thể đánh giá xu hướng và chọn thời điểm của các bước vào / thoát ra. Chiến lược này nhằm mục đích nắm bắt xu hướng giá của đường dài và trung bình, tránh bị lừa dối bởi tiếng ồn của thị trường ngắn hạn.
Chiến lược này sử dụng đường trung bình EMA của ba chu kỳ khác nhau, EMA-A là chu kỳ ngắn nhất, EMA-B tiếp theo, EMA-C dài nhất. Khi chu kỳ ngắn trên EMA-A đi qua EMA-B của chu kỳ dài hơn, cho thấy giá đang trong xu hướng tăng, thì có thể làm nhiều hơn; ngược lại, khi EMA-A đi qua EMA-B, cho thấy giá chuyển sang xu hướng giảm, thì có thể làm trống.
Chiến lược này cũng kết hợp với chỉ số RSI để định vị thời điểm thoát. Khi giữ nhiều đầu, nếu RSI vượt qua 70 đường thì sẽ bị phá vỡ; Khi giữ một vị trí trống, nếu RSI giảm 30 đường thì sẽ bị phá vỡ. Điều này có thể khóa lợi nhuận theo xu hướng và ngăn chặn tổn thất mở rộng hơn nữa.
Các rủi ro này có thể được giảm thiểu bằng cách tối ưu hóa các tham số RSI hoặc thêm các điều kiện lọc bổ sung. Các phương pháp phân tích kỹ thuật như xu hướng, hỗ trợ kháng cự cũng có thể được kết hợp để cải thiện hiệu suất chiến lược.
Chiến lược này tích hợp theo dõi xu hướng và chỉ số bán tháo, chỉ cần hai chỉ số đơn giản để có thể đánh giá và bắt được xu hướng. Bằng cách tối ưu hóa tham số và tối ưu hóa quy tắc, hiệu quả có thể được tăng lên đáng kể trong khi vẫn đơn giản.
/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@author Alorse
//@version=5
// strategy(title='Tendency EMA + RSI [Alorse]', shorttitle='Tendece EMA + RSI [Alorse]', overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01)
// Bollinger Bands
len = input.int(14, minval=1, title='Length', group='RSI')
src = input.source(close, 'Source', group='RSI')
rsi = ta.rsi(src, len)
// Moving Averages
len_a = input.int(10, minval=1, title='EMA A Length', group='Moving Averages')
out_a = ta.ema(close, len_a)
plot(out_a, title='EMA A', color=color.purple)
len_b = input.int(20, minval=1, title='EMA B Length', group='Moving Averages')
out_b = ta.ema(close, len_b)
plot(out_b, title='EMA B', color=color.orange)
len_c = input.int(100, minval=1, title='EMA C Length', group='Moving Averages')
out_c = ta.ema(close, len_c)
plot(out_c, title='EMA B', color=color.green)
// Strategy Conditions
stratGroup = 'Strategy'
showLong = input.bool(true, title='Long entries', group=stratGroup)
showShort = input.bool(false, title='Short entries', group=stratGroup)
closeAfterXBars = input.bool(true, title='Close after X # bars', tooltip='If trade is in profit', group=stratGroup)
xBars = input.int(24, title='# bars')
entryLong = ta.crossover(out_a, out_b) and out_a > out_c and close > open
exitLong = rsi > 70
entryShort = ta.crossunder(out_a, out_b) and out_a < out_c and close < open
exitShort = rsi < 30
bought = strategy.opentrades[0] == 1 and strategy.position_size[0] > strategy.position_size[1]
entry_price = ta.valuewhen(bought, open, 0)
var int nPastBars = 0
if strategy.position_size > 0
nPastBars := nPastBars + 1
nPastBars
if strategy.position_size == 0
nPastBars := 0
nPastBars
if closeAfterXBars
exitLong := nPastBars >= xBars and close > entry_price ? true : exitLong
exitLong
exitShort := nPastBars >= xBars and close < entry_price ? true : exitShort
exitShort
// Long Entry
strategy.entry('Long', strategy.long, when=entryLong and showLong)
strategy.close('Long', when=exitLong)
// Short Entry
strategy.entry('Short', strategy.short, when=entryShort and showShort)
strategy.close('Short', when=exitShort)