
Chiến lược này sử dụng chỉ số RSI để xác định tình trạng thị trường cổ phiếu quá mua quá bán, tạo ra một cái chết trong khu vực quá mua, tạo ra một cái chết trong khu vực quá bán, tạo ra một cái vàng trong khu vực quá bán, thuộc chiến lược giao dịch đảo ngược dựa trên chỉ số. Chiến lược này kết hợp với xu hướng theo dõi dừng lỗ, dừng lỗ cố định, có thể kiểm soát rủi ro giao dịch một cách hiệu quả.
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 các chỉ số RSI. Chỉ số RSI thường có 30 là đường bán quá mức và 70 là đường mua quá mức. Khi vượt qua đường bán quá mức trên chỉ số RSI, tạo ra tín hiệu mua; khi vượt qua đường mua quá mức dưới chỉ số RSI, tạo ra tín hiệu bán. Dựa trên nguyên tắc này, chiến lược đánh giá sự hình thành của khu vực bán quá mức và tạo ra tín hiệu tháo lỗ tương ứng.
Sau khi vào thị trường, chiến lược sử dụng phương thức theo dõi lỗ phần trăm, bằng cách liên tục cập nhật giá cao nhất hoặc giá thấp nhất và để lại một phần trăm nhất định làm điểm dừng lỗ. Đồng thời cũng sử dụng khoảng cách dừng dừng dừng cố định, dừng lại khi đạt được lợi nhuận mục tiêu hoặc tổn thất tối đa. Sự kết hợp này có thể kiểm soát rủi ro giao dịch tốt.
Chiến lược này có những ưu điểm sau:
Sử dụng chỉ số RSI để đánh giá các vùng quá mua quá bán, đây là một kỹ thuật giao dịch khá thành thạo, có thể nắm bắt chính xác hơn các điểm biến động của thị trường.
Các giao dịch được thực hiện bằng cách sử dụng phương pháp Gold Fork Dead Fork để lọc một số tín hiệu giao dịch ồn ào, làm cho giao dịch đáng tin cậy hơn.
Kết hợp với việc theo dõi xu hướng, bạn có thể khóa tối đa lợi nhuận, đồng thời có thể dừng lại nhanh chóng, giảm tổn thất đơn lẻ.
Đặt khoảng cách dừng lỗ cố định cũng có thể kiểm soát rủi ro giao dịch một cách hiệu quả.
Nhìn chung, các quy tắc chiến lược rất rõ ràng, dễ hiểu và thực hiện, phù hợp cho người mới bắt đầu học giao dịch số lượng.
Chiến lược này cũng có những rủi ro sau:
Các chỉ số RSI dễ tạo ra tín hiệu sai, có khả năng phá vỡ hình thức kỹ thuật cao hơn, có thể dẫn đến việc dừng lỗ được kích hoạt.
Kích thước dừng cố định, không thể điều chỉnh theo mức độ biến động của thị trường, có thể dừng quá sớm hoặc mở rộng lệnh dừng.
Tỷ lệ phần trăm theo dõi dừng chỉ theo dõi điểm cao nhất hoặc thấp nhất của giá, có thể quá mạnh mẽ và không đủ lợi nhuận.
Rủi ro phù hợp với dữ liệu phản hồi. Các tham số của chiến lược này có thể được tối ưu hóa cho dữ liệu lịch sử và có thể hoạt động kém hơn trong ứng dụng thực tế.
Tần suất giao dịch có thể quá cao, làm tăng chi phí giao dịch và rủi ro trượt.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Tối ưu hóa các tham số RSI, tìm kiếm sự kết hợp các tham số chỉ số tốt nhất, cải thiện chất lượng tín hiệu.
Thêm bộ lọc các chỉ số khác, tạo cộng hưởng đa chỉ số, tăng độ chính xác tín hiệu.
Sử dụng cơ chế dừng lỗ thích ứng, tự động điều chỉnh dừng lỗ theo biến động của thị trường.
Tăng mô-đun điều khiển tần số giao dịch, giảm số lần giao dịch, giảm phí giao dịch.
Thêm mô-đun quản lý tiền, kiểm soát quy mô giao dịch đơn lẻ, giảm tổn thất đơn lẻ.
Thử nghiệm lại trong một khoảng thời gian dài hơn để kiểm tra tính ổn định của tham số.
Chiến lược tổng thể là một chiến lược giao dịch đảo ngược điển hình, sử dụng chỉ số RSI để xác định khu vực quá mua quá bán, tạo tín hiệu giao dịch theo phương thức giao dịch vàng. Và sử dụng các lệnh dừng theo xu hướng và dừng dừng cố định để kiểm soát rủi ro. Chiến lược có logic rõ ràng, dễ thực hiện, phù hợp để học tập và thực hành cho người mới bắt đầu giao dịch.
/*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)