Chiến lược mua và bán bùng nổ dựa trên RSI SMA


Ngày tạo: 2023-12-20 17:33:04 sửa đổi lần cuối: 2023-12-20 17:33:04
sao chép: 3 Số nhấp chuột: 655
1
tập trung vào
1623
Người theo dõi

Chiến lược mua và bán bùng nổ dựa trên RSI SMA

Tổng quan

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

Nguyên tắc chiến lược

  1. Tính trung bình SMA của RSI. Khi đường SMA của RSI vượt qua 60 hoặc vượt qua 40, xem xét quá mua quá bán và xem xét mở vị trí ngược.

  2. Khi biến động của RSI vượt quá một số lượng nhất định, nó được coi là biến động đột ngột. Kết hợp với xác nhận giá đóng cửa thực tế, nó được coi là tín hiệu để thiết lập vị trí đảo ngược.

  3. Sử dụng EMA lọc nhiều giai đoạn, chỉ khi giá đi qua EMA ngắn hơn, sẽ được xem xét để tạo ra nhiều đầu; chỉ khi giá đi qua EMA ngắn hơn, sẽ được xem xét để tạo ra một đầu trống.

  4. Sử dụng các chỉ số trung bình của RSI, biến động đột ngột và lọc EMA để tìm vị trí tốt hơn.

Phân tích lợi thế

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

  2. Sự thay đổi đột ngột thường báo hiệu thay đổi xu hướng và hướng của giá cả, và sử dụng tín hiệu này có thể cải thiện thời gian nhập cảnh.

  3. EMA có nhiều bộ lọc để tránh thêm các tín hiệu sai, do đó giảm tổn thất không cần thiết.

  4. Việc sử dụng nhiều tham số tổng hợp làm tiêu chuẩn phán quyết có thể giúp tăng sự ổn định và độ tin cậy của chiến lược.

Rủi ro và giải pháp

  1. RSI biểu hiện không ổn định, tỷ lệ trúng của SMA không cao. Các tham số của RSI có thể được tối ưu hóa thích hợp hoặc được thay thế bằng các chỉ số khác.

  2. Sự thay đổi đột ngột có thể là một sự rung động ngắn hạn, không phải là sự đảo ngược thực sự. Bạn có thể tăng độ dài chu kỳ cảm ứng để tăng độ chính xác của phán đoán.

  3. Bộ lọc hướng EMA có độ trễ. Có thể thử nghiệm EMA với chu kỳ ngắn hơn để tăng độ nhạy.

  4. Nhìn chung, chiến lược này nhạy cảm với điều chỉnh tham số, cần kiểm tra kỹ lưỡng để tìm ra sự kết hợp tham số tối ưu nhất. Đồng thời phối hợp với dừng để kiểm soát rủi ro.

Lời khuyên tối ưu hóa

  1. Kiểm tra các chỉ số khác như ADX, MACD và RSI để tìm kiếm điểm đầu vào tốt hơn.

  2. Thêm 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 thông qua việc đào tạo mô hình.

  3. Tăng cường hơn nữa hiệu quả của bộ lọc hướng EMA, chẳng hạn như cải thiện phán đoán tổng hợp về EMA của các chu kỳ khác nhau.

  4. Thêm chiến lược dừng lỗ thích ứng, có thể điều chỉnh động mức dừng lỗ theo mức độ biến động của thị trường.

  5. Tiếp tục tối ưu hóa các tham số, tìm kiếm sự kết hợp tham số tốt nhất. Tiêu chuẩn đánh giá tối ưu hóa có thể xem xét tỷ lệ Sharp, v.v.

Tóm tắt

Chiến lược này đầu tiên sử dụng giá trị trung bình của RSI để đánh giá quá mua quá bán. Sau đó, thiết lập một vị trí đảo ngược khi có sự thay đổi đột ngột. Đồng thời sử dụng EMA để lọc phụ. Bằng cách đặt các tham số hợp lý, bạn có thể đánh giá hiệu quả các điểm chuyển hướng của thị trường.

Mã nguồn chiến lượ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)