Chiến lược này tận dụng tối đa lợi thế của các đường trung bình động và chỉ số sức mạnh tương đối để xác định và theo dõi xu hướng. Nó chỉ cần hai chỉ số để xác định xu hướng và tìm thời gian vào / ra thích hợp. Chiến lược nhằm mục đích nắm bắt xu hướng giá trung hạn đến dài hạn trong khi tránh tiếng ồn thị trường ngắn hạn.
Chiến lược này sử dụng ba EMA với các khoảng thời gian khác nhau, với EMA-A có khoảng thời gian ngắn nhất, EMA-B trung bình và EMA-C dài nhất. Khi EMA-A ngắn hơn vượt qua trên EMA-B dài hơn, nó báo hiệu xu hướng tăng, do đó đi dài. Ngược lại, khi EMA-A vượt qua dưới EMA-B, nó báo hiệu xu hướng giảm, do đó đi ngắn. Để lọc các tín hiệu sai, nó cũng sử dụng EMA-C dài nhất - chỉ xem xét nhập cảnh sau khi giá phá vỡ EMA-C.
Chiến lược này cũng sử dụng chỉ số RSI để xác định điểm thoát. Khi dài, nó đóng vị trí nếu chỉ số RSI vượt trên 70. Khi ngắn, nó thoát nếu chỉ số RSI giảm dưới 30. Điều này khóa lợi nhuận xu hướng và ngăn chặn tổn thất mở rộng hơn nữa.
Những rủi ro này có thể được giảm bằng cách tối ưu hóa các thông số RSI, thêm các bộ lọc và kết hợp với phân tích xu hướng.
Chiến lược này kết hợp các chỉ số theo xu hướng và dao động để xác định và nắm bắt xu hướng. Với các thông số đơn giản và tối ưu hóa logic, nó có thể được cải thiện đáng kể trong khi giữ sự đơ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)