Chiến lược này xác định các điều kiện thị trường mua quá nhiều và bán quá nhiều bằng cách sử dụng chỉ số RSI để mua ngắn trên các giao thoa giảm trong các khu vực mua quá nhiều và mua dài trên các giao thoa tăng trong các khu vực bán quá nhiều. Đây là một chiến lược giao dịch đảo ngược dựa trên các chỉ số. Chiến lược này kết hợp các điểm dừng theo xu hướng và cố định lấy lợi nhuận / dừng lỗ để kiểm soát hiệu quả rủi ro giao dịch.
Các tín hiệu giao dịch của chiến lược này được tạo ra dựa trên sự chéo chéo tăng / giảm của chỉ số RSI. Chỉ số RSI thường sử dụng 30 như đường bán quá mức và 70 như đường mua quá mức. Khi đường RSI vượt qua đường bán quá mức, một tín hiệu mua được tạo ra. Khi đường RSI vượt qua dưới đường mua quá mức, một tín hiệu bán được tạo ra. Dựa trên logic này, chiến lược xác định các khu vực mua quá mức và bán quá mức và tạo ra các tín hiệu dài / ngắn tương ứng.
Sau khi nhập vào một vị trí, chiến lược sử dụng tỷ lệ phần trăm dừng lại bằng cách liên tục cập nhật giá cao nhất / thấp nhất đạt được và theo dõi một tỷ lệ phần trăm cố định từ đó như mức dừng lỗ.
Những lợi thế của chiến lược này bao gồm:
Sử dụng chỉ số RSI để xác định mức mua quá mức / bán quá mức là một kỹ thuật giao dịch trưởng thành để nắm bắt một cách đáng tin cậy các thời điểm chuyển đổi thị trường.
Sử dụng chéo tăng / giảm lọc ra một số tín hiệu sai và làm cho giao dịch đáng tin cậy hơn.
Các điểm dừng theo xu hướng khóa lợi nhuận càng nhiều càng tốt, đồng thời có các điểm dừng nhanh để chứa lỗ cho mỗi giao dịch.
Mức TP / SL cố định cũng kiểm soát rủi ro theo giao dịch một cách hiệu quả.
Nhìn chung logic đơn giản và rõ ràng, dễ hiểu và thực hiện, phù hợp cho người mới bắt đầu.
Những rủi ro của chiến lược này bao gồm:
Các tín hiệu RSI có thể sai, với khả năng thất bại mô hình cao, dẫn đến kích hoạt dừng lỗ.
TP/SL cố định không thể thích nghi với sự biến động của thị trường, có thể cắt giảm lợi nhuận hoặc giảm lỗ.
Tỷ lệ phần trăm chỉ theo sau giá cao nhất / thấp nhất, có thể quá mạnh mẽ để lại lợi nhuận phía sau.
Nguy cơ quá mức như các tham số có thể được tối ưu hóa chỉ cho dữ liệu lịch sử.
Tần suất giao dịch cao làm tăng chi phí giao dịch và trượt.
Các cách cải thiện chiến lược:
Tối ưu hóa các thông số RSI cho kết quả tốt nhất.
Thêm các chỉ số bộ lọc để tăng độ chính xác tín hiệu.
Đặt giá/lợi nhuận thích nghi dựa trên biến động thị trường.
Hạn chế tần suất giao dịch để giảm chi phí giao dịch.
Thêm kích thước vị trí để giới hạn lỗ cho mỗi giao dịch.
Kiểm tra lại trong thời gian dài hơn để kiểm tra sự ổn định.
Tóm lại, đây là một chiến lược đảo ngược điển hình sử dụng chỉ số RSI để xác định quá mua / quá bán, với các dấu hiệu chéo bò / gấu như tín hiệu. Các điểm dừng theo xu hướng và TP / SL cố định quản lý rủi ro. Logic đơn giản và dễ thực hiện, phù hợp cho người mới bắt đầu. Nhưng các rủi ro như tín hiệu sai và phù hợp đường cong cần phải được giải quyết thông qua xác minh và tối ưu hóa thêm trước khi giao dịch trực tiếp.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // Author: © JoshuaMcGowan // Taken from https://www.tradingview.com/script/GbZGYi6l-Adding-some-essential-components-to-a-prebuilt-RSI-strategy/ // Just updated to compile in version 4. //@version=4 strategy("Adding some essential components to a prebuilt RSI strategy", overlay=true) /////////////// Component Code Start /////////////// testStartYear = input(2011, "Backtest Start Year") testStartMonth = input(8, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2100, "Backtest Stop Year") testStopMonth = input(9, "Backtest Stop Month") testStopDay = input(29, "Backtest Stop Day") // testStopDay = testStartDay + 1 testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=97) testPeriod() => true /////////////// Component Code Stop /////////////// // Replace RSI Component, Long/Short, and Long Signal/Short Signal conditions with your trade setup components. ///////////// RSI component ///////////// length = input( 14 ) overSold = input( 30 ) overBought = input( 70 ) price = close vrsi = rsi(price, length) notna = not na(vrsi) /////////////// STRATEGY /////////////// ts = input(99999, "Trailing Stop") / 100 tp = input(99999, "Take Profit") / 100 sl = input(99999, "Stop Loss") / 100 // Update this with your setup. long = notna and crossover(vrsi, overSold) short = notna and crossunder(vrsi, overBought) last_long = 0 last_short = 0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) // Update this to reflect your setup. long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) float last_open_long_signal = 0 float last_open_short_signal = 0 last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1]) last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1]) last_long_signal = 0 last_short_signal = 0 last_long_signal := long_signal ? time : nz(last_long_signal[1]) last_short_signal := short_signal ? time : nz(last_short_signal[1]) in_long_signal = last_long_signal > last_short_signal in_short_signal = last_short_signal > last_long_signal float last_high = 0 float last_low = 0 last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1]) last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1]) long_ts = not na(last_high) and high <= (last_high - ts) //and high >= last_open_long_signal short_ts = not na(last_low) and low >= (last_low + ts) //and low <= last_open_short_signal long_tp = high >= (last_open_long_signal + tp) short_tp = low <= (last_open_short_signal - tp) long_sl = low <= (last_open_long_signal - sl) short_sl = high >= (last_open_short_signal + sl) leverage = input(200, "Leverage") long_call = last_open_long_signal - (0.8 + 0.2 * (1/leverage)) / leverage * last_open_long_signal short_call = last_open_short_signal + (0.78 + 0.2 * (1/leverage)) / leverage * last_open_short_signal long_call_signal = low <= long_call short_call_signal = high >= short_call if testPeriod() strategy.entry("Long", strategy.long, when=long_signal) strategy.entry("Short", strategy.short, when=short_signal) // plot(long_call, color=color.red) // plot(short_call, color=color.green) strategy.close("Long", when=long_call_signal) strategy.close("Short", when=short_call_signal) strategy.close("Long", when=long_tp) strategy.close("Short", when=short_tp) strategy.close("Long", when=long_sl) strategy.close("Short", when=short_sl) strategy.close("Long", when=long_ts) strategy.close("Short", when=short_ts)