SMA RSI & Chiến lược Mua bán đột ngột

Tác giả:ChaoZhang, Ngày: 2023-12-20 17:33:04
Tags:

img

Tổng quan

Chiến lược này chủ yếu sử dụng giá trị trung bình của chỉ số RSI và thay đổi giá đột ngột để xác định xu hướng thị trường và điểm đảo ngược. Ý tưởng cốt lõi là xem xét việc thiết lập các vị trí khi chỉ số RSI bị mua quá mức hoặc bán quá mức và tìm kiếm các cơ hội đảo ngược khi thay đổi giá đột ngột xảy ra. EMA cũng được sử dụng như một bộ lọc.

Nguyên tắc

  1. Tính toán SMA của chỉ số RSI. Khi chỉ số RSI vượt qua SMA trên 60 hoặc giảm xuống dưới 40, nó được coi là mua quá mức hoặc bán quá mức, và các vị trí đảo ngược sẽ được xem xét.

  2. Khi sự thay đổi của chỉ số RSI vượt quá một giá trị nhất định, nó được coi là một sự thay đổi đột ngột.

  3. Sử dụng nhiều EMA để lọc. Chỉ khi giá vượt qua EMA thời gian ngắn hơn, vị trí dài sẽ được xem xét. Chỉ khi giá giảm xuống dưới EMA thời gian ngắn hơn, vị trí ngắn sẽ được xem xét.

  4. Bằng cách kết hợp việc sử dụng trung bình RSI, thay đổi đột ngột và lọc EMA, các điểm đầu vào tốt hơn có thể được xác định.

Phân tích lợi thế

  1. Sử dụng trung bình RSI có thể đánh giá chính xác các điều kiện mua quá mức và bán quá mức, điều này có lợi cho việc nắm bắt các cơ hội đảo ngược.

  2. Những thay đổi đột ngột thường có nghĩa là thay đổi xu hướng và hướng giá, sử dụng tín hiệu này có thể cải thiện tính kịp thời của các mục nhập.

  3. Việc lọc EMA đa cấp có thể tránh các tín hiệu sai và giảm thiểu tổn thất không cần thiết.

  4. Sự kết hợp của nhiều tham số như các tiêu chí quyết định có thể tăng cường sự ổn định và tin cậy của chiến lược.

Rủi ro và giảm thiểu

  1. Hiệu suất RSI có thể không ổn định và tỷ lệ SMA có thể thấp. Các thông số RSI có thể được tối ưu hóa hoặc các chỉ số khác có thể thay thế nó.

  2. Những thay đổi đột ngột có thể chỉ là biến động ngắn hạn thay vì sự đảo ngược thực sự.

  3. Có sự chậm trễ trong lọc hướng EMA. Kiểm tra thời gian ngắn hơn EMA để cải thiện độ nhạy.

  4. Nói chung, chiến lược này khá nhạy cảm với điều chỉnh tham số. Các thử nghiệm cẩn thận là cần thiết để tìm kết hợp tham số tối ưu. Sử dụng stop loss để kiểm soát rủi ro.

Các đề xuất tối ưu hóa

  1. Kiểm tra các chỉ số khác như ADX, MACD kết hợp với RSI để tìm điểm nhập tốt hơn.

  2. Tăng các thuật toán học máy để đánh giá tính xác thực và ổn định của tín hiệu mua / bán đột ngột.

  3. Cải thiện hơn nữa việc lọc hướng EMA như sử dụng đánh giá tổng hợp của các EMA giai đoạn khác nhau.

  4. Thêm chiến lược dừng lỗ thích nghi để điều chỉnh phạm vi dừng lỗ theo động dựa trên biến động thị trường.

  5. Tiếp tục tối ưu hóa tham số để tìm kết hợp tham số tối ưu.

Kết luận

Chiến lược này đầu tiên sử dụng chỉ số trung bình RSI để xác định điều kiện mua quá mức / bán quá mức. Các vị trí ngược sau đó được thiết lập khi có những thay đổi đột ngột. EMA cũng được sử dụng như một bộ lọc phụ. Với các thiết lập tham số thích hợp, chiến lược này có thể xác định hiệu quả sự thay đổi xu hướng thị trường. Nói chung, nó có sự ổn định và giá trị thực tế tốt. Vẫn còn chỗ để cải thiện hơn nữa, đòi hỏi kiểm tra và tối ưu hóa liên tục.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-19 00:00:00
period: 3m
basePeriod: 1m
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/
// © samwillington

//@version=5


strategy("sma RSI & sudden buy and sell Strategy v1", overlay=true)
price = close
length = input( 14 )
inst_length = input( 10 )
var rbc = 0
var float rsiBP = 0.0
var rsc = 0
var float rsiSP = 0.0
bars = input(10)

lookbackno2 = input.int(20)
rsi_buy = 0
rsi_sell = 0



//EMA inputs

input_ema20 = input.int(20)
ema20 = ta.ema(price, input_ema20)
input_ema50 = input.int(50)
ema50 = ta.ema(price, input_ema50)
input_ema100 = input.int(100)
ema100 = ta.ema(price, input_ema100)
input_ema200 = input.int(200)
ema200 = ta.ema(price, input_ema200)
input_ema400 = input.int(400)
ema400 = ta.ema(price, input_ema400)
input_ema800 = input.int(800)
ema800 = ta.ema(price, input_ema800)


vrsi = ta.rsi(price, length)


hi2 = ta.highest(price, lookbackno2)
lo2 = ta.lowest(price, lookbackno2)

buy_diff_rsi = vrsi - ta.rsi(close[1], length)
sell_diff_rsi = ta.rsi(close[1],length) - vrsi


//RSI high low

var int sudS = 0
var int sudB = 0
var float sudSO = 0.0
var float sudSC = 0.0
var float sudBO = 0.0
var float sudBC = 0.0
var sudBuy = 0
var sudSell = 0 
var countB = 0
var countS = 0



var co_800 = false
var co_400 = false
var co_200 = false
var co_100 = false
var co_50 = false
var co_20 = false

co_800 := ta.crossover(price , ema800)
co_400 := ta.crossover(price , ema400)
co_200 := ta.crossover(price , ema200)
co_100 := ta.crossover(price , ema100)
co_50 := ta.crossover(price , ema50)
co_20 := ta.crossover(price , ema20)

if(ta.crossunder(price , ema20))
    co_20 := false
if(ta.crossunder(price , ema50))
    co_50 := false
if(ta.crossunder(price , ema100))
    co_100 := false
if(ta.crossunder(price , ema200))
    co_200 := false
if(ta.crossunder(price , ema400))
    co_400 := false
if(ta.crossunder(price , ema800))
    co_800 := false
    
if((price> ema800) and (price > ema400))
    if(co_20)
        if(co_50)
            if(co_100)
                if(co_200)
                    strategy.close("Sell")
                    strategy.entry("Buy", strategy.long, comment="spl Buy")
                    co_20 := false
                    co_50 := false
                    co_100 := false
                    co_200 := false



// too much rsi

if(vrsi > 90)
    strategy.close("Buy")
    strategy.entry("Sell", strategy.short, comment="RSI too overbuy")
if(vrsi < 10)
    strategy.close("Sell")
    strategy.entry("Buy", strategy.long, comment="RSI too oversold")


var sudbcount = 0  // counting no. of bars till sudden rise
var sudscount = 0  // counting no. of bars till sudden decrease



if(sudB == 1)
    sudbcount := sudbcount + 1
if(sudS == 1)
    sudscount := sudscount + 1


if((buy_diff_rsi > inst_length) and (hi2 > price))
    sudB := 1
    sudBO := open
    sudBC := close
if((sell_diff_rsi > inst_length) )
    sudS := 1
    sudSO := open
    sudSC := close   

if(sudbcount == bars)
    if(sudBC < price)
        strategy.close("Sell")
        strategy.entry("Buy", strategy.long, comment="sudd buy")
        sudbcount := 0
        sudB := 0
    sudbcount := 0
    sudB := 0
if(sudscount == bars) 
    if(sudSC > price)
        strategy.close("Buy")
        strategy.entry("Sell", strategy.short, comment="sudd sell")
        sudscount := 0
        sudS := 0
    sudscount := 0
    sudS := 0


over40 = input( 40 )
over60 = input( 60 )
sma =ta.sma(vrsi, length)
coo = ta.crossover(sma, over60)
cuu = ta.crossunder(sma, over40)

if (coo)
    strategy.close("Sell")
	strategy.entry("Buy", strategy.long, comment="modified buy")
if (cuu)
    strategy.close("Buy")
	strategy.entry("Sell", strategy.short, comment="modefied sell")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

Thêm nữa