Đây là một chiến lược giao dịch động lực dựa trên các chỉ số RSI và EMA, kết hợp phân tích kỹ thuật trên nhiều khung thời gian. Chiến lược thực hiện giao dịch dựa trên các tín hiệu mua quá mức / bán quá mức RSI với xác nhận xu hướng EMA và sử dụng kích thước vị trí năng động. Khái niệm cốt lõi nằm trong việc kết hợp các tín hiệu RSI ngắn hạn (2 giai đoạn) với tín hiệu RSI trung hạn (14-thời gian), trong khi sử dụng ba EMA giai đoạn khác nhau (50/100/200) để xác nhận hướng xu hướng.
Chiến lược này sử dụng một cơ chế xác thực đa lớp cho các quyết định giao dịch. Các điều kiện dài đòi hỏi RSI14 dưới 31 và RSI2 vượt trên 10, cùng với EMA50, EMA100 và EMA200 trong sự liên kết giảm. Các điều kiện ngắn đòi hỏi RSI14 trên 69 và RSI2 vượt dưới 90, với EMA trong sự liên kết tăng. Chiến lược bao gồm một cơ chế lấy lợi nhuận dựa trên RSI, tự động đóng các vị trí khi RSI đạt đến các giá trị cực và chuyển động giá ủng hộ vị trí. Một tính năng đáng chú ý là hệ thống định kích thước vị trí tài khoản năng động dựa trên vốn chủ sở hữu, tính toán kích thước vị trí phù hợp cho mỗi giao dịch.
Chiến lược này kết hợp giao dịch động lực với các đặc điểm theo xu hướng, tăng độ tin cậy giao dịch thông qua nhiều chỉ số kỹ thuật. Mặc dù có một số rủi ro nhất định, các hướng tối ưu hóa được đề xuất có thể cải thiện thêm sự ổn định của chiến lược. Đặc điểm chính của chiến lược là sự kết hợp các chỉ số kỹ thuật ngắn hạn và trung hạn với quản lý vị trí năng động, tạo thành một hệ thống giao dịch hoàn chỉnh. Thông qua quản lý rủi ro và tối ưu hóa tham số thích hợp, chiến lược này cho thấy hứa hẹn cho hiệu suất ổn định trong giao dịch thực tế.
/*backtest start: 2024-11-21 00:00:00 end: 2024-11-28 00:00:00 period: 15m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Custom RSI EMA Strategy", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1) // Definování vstupních podmínek rsi_14 = ta.rsi(close, 14) rsi_2 = ta.rsi(close, 2) ema_50 = ta.ema(close, 50) ema_100 = ta.ema(close, 100) ema_200 = ta.ema(close, 200) // Pákový efekt leverage = 20 // Podmínky pro long pozici longCondition = (rsi_14[1] < 31) and ta.crossover(rsi_2, 10) and (ema_50 < ema_100) and (ema_100 < ema_200) // Podmínky pro short pozici shortCondition = (rsi_14[1] > 69) and ta.crossunder(rsi_2, 90) and (ema_50 > ema_100) and (ema_100 > ema_200) // Definování průměrné ceny pozice var float long_avg_price = na var float short_avg_price = na // Sledujeme, zda se velikost pozice změnila var float last_position_size = na // Přerušení průměrné ceny pozice při změně pozice if (last_position_size != strategy.position_size) long_avg_price := na short_avg_price := na // Aktualizace průměrné ceny pozice if (strategy.position_size > 0) long_avg_price := strategy.position_avg_price short_avg_price := na else if (strategy.position_size < 0) short_avg_price := strategy.position_avg_price long_avg_price := na // Uložení aktuální velikosti pozice pro příští bar last_position_size := strategy.position_size // Podmínky pro take profit takeProfitLongCondition = (rsi_14 > 69) and (rsi_2 > 90) and (long_avg_price < close) takeProfitShortCondition = (rsi_14 < 31) and (rsi_2 < 10) and (short_avg_price > close) // Velikost pozice new_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2 // Úprava velikosti pozice s ohledem na pákový efekt position_value = strategy.equity * leverage trade_qty = position_value / close // Vstup do long pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici if (longCondition) strategy.entry("Long", strategy.long, qty=new_position_size == na ? trade_qty : new_position_size) // Vstup do short pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici if (shortCondition) strategy.entry("Short", strategy.short, qty=new_position_size == na ? trade_qty : new_position_size) // Výstup z long pozice při splnění podmínek pro take profit if (takeProfitLongCondition) strategy.close("Long") // Výstup z short pozice při splnění podmínek pro take profit if (takeProfitShortCondition) strategy.close("Short") // Zvýraznění části grafu, kde platí podmínky pro long highlightLongCondition = (ema_50 < ema_100) and (ema_100 < ema_200) bgcolor(highlightLongCondition ? color.new(color.green, 90) : na) // Zvýraznění části grafu, kde platí podmínky pro short highlightShortCondition = (ema_50 > ema_100) and (ema_100 > ema_200) bgcolor(highlightShortCondition ? color.new(color.red, 90) : na) // Přidání bodů pozic do grafu plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="L") plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="S") // Vykreslení průměrné ceny pozice pro long a short plot(long_avg_price, title="Long Avg Price", color=color.blue, linewidth=2) plot(short_avg_price, title="Short Avg Price", color=color.orange, linewidth=2)