Chiến lược giao dịch nhiều khung thời gian dựa trên RSI và đường trung bình động


Ngày tạo: 2024-01-22 11:00:20 sửa đổi lần cuối: 2024-01-22 11:00:20
sao chép: 0 Số nhấp chuột: 700
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch nhiều khung thời gian dựa trên RSI và đường trung bình động

Tổng quan

Chiến lược này kết hợp các chỉ số ngẫu nhiên RSI, SMA và WMA để tìm các tín hiệu mua và bán. Nó đồng thời đánh giá hướng xu hướng trong khung thời gian 5 phút và 1 giờ. Trong xu hướng ổn định, tín hiệu giao dịch được tạo ra khi đường nhanh RSI đi trên hoặc đi xuống đường chậm.

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

Chiến lược này lần đầu tiên tính 144 chu kỳ trung bình di chuyển có trọng lượng WMA và 5 chu kỳ trung bình di chuyển đơn giản SMA trong hai khung thời gian 1 giờ và 5 phút. Chỉ khi SMA 5 phút trên WMA, thì nó được coi là thị trường đa đầu. Sau đó, chiến lược tính các chỉ số đa chiều của RSI, và các đường K và đường D tương ứng.

Phân tích lợi thế

Đây là một chiến lược theo dõi xu hướng rất hiệu quả. Nó kết hợp hai xu hướng phán đoán khung thời gian cùng một lúc, rất hiệu quả trong việc giảm tín hiệu sai. Ngoài ra, nó kết hợp nhiều chỉ số để lọc, bao gồm RSI, SMA và WMA, làm cho tín hiệu đáng tin cậy hơn. Bằng cách cho phép RSI điều khiển KDJ, nó cũng sửa đổi các vấn đề tín hiệu sai dễ dàng xảy ra trong chiến lược KDJ thông thường. Ngoài ra, chiến lược này cũng có thiết lập dừng và dừng lỗ để khóa lợi nhuận, có thể kiểm soát rủi ro hiệu quả.

Phân tích rủi ro

Rủi ro lớn nhất của chiến lược này là sai lầm trong đánh giá xu hướng. Tại các điểm biến động, trung bình ngắn hạn và dài hạn có thể cùng lúc đảo ngược lên hoặc xuống, tạo ra tín hiệu sai. Ngoài ra, RSI cũng có thể tạo ra nhiều tín hiệu giao dịch không rõ ràng trong thời gian biến động. Tuy nhiên, những rủi ro này có thể được giảm bớt bằng cách điều chỉnh đúng chu kỳ SMA và WMA và tham số RSI.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau: 1) Kiểm tra các độ dài khác nhau của SMA, WMA và RSI để tìm ra sự kết hợp tham số tốt nhất 2) Thêm các chỉ số khác, như MACD, Brinline, để xác minh độ tin cậy của tín hiệu 3) Tối ưu hóa chiến lược dừng lỗ, thử nghiệm các phương pháp như dừng tỷ lệ cố định, dừng điểm trượt cân bằng, theo dõi dừng lỗ 4) Tham gia vào mô-đun quản lý vốn, kiểm soát quy mô đầu tư cá nhân và lỗ hổng rủi ro tổng thể 5) Tăng các thuật toán học máy để tìm các tham số có hiệu suất tốt nhất thông qua một số lượng lớn phản hồi

Tóm tắt

Chiến lược này tận dụng tối đa lợi thế của các chỉ số di chuyển và ngẫu nhiên để tạo ra một hệ thống theo dõi xu hướng đáng tin cậy hơn. Bằng cách xác minh nhiều khung thời gian và chỉ số, nó có thể nắm bắt được hướng của xu hướng đường dài và đường dài.

Mã nguồn chiến lược
/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 00:00:00
period: 1h
basePeriod: 15m
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/
// © bufirolas

// Works well with a wide stop with 20 bars lookback
// for the SL level and a 2:1 reward ratio Take Profit .
// These parameters can be modified in the Inputs section of the strategy panel.

// "an entry signal it's a cross down or up on
// the stochastics. if you're in a downtrend
// on the hourly time frame you
// must also be in a downtrend on the five
// minute so the five period has to be below the 144
// as long as the five period is still trading below
// the 144 period on both the hourly and the five minutes
// we are looking for these short signals crosses down
// in the overbought region of the stochastic. Viceversa for longs"

//@version=4
strategy("Stoch + WMA + SMA strat", overlay=true)

//SL & TP Inputs
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=10, step=1, title="SL Expander")
i_TPExpander=input(defval=30, step=1, title="TP Expander")
i_reverse=input(false, title="Reverse Trades")
i_TStop =input(false, title="Use Trailing Stop")

//Strategy Inputs
src4 = input(close, title="RSI Source")
stochOS=input(defval=20, step=5, title="Stochastics Oversold Level")
stochOB=input(defval=80, step=5, title="Stochastics Overbought Level")

//Stoch rsi Calculations
smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
rsi1 = rsi(src4, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
h0 = hline(80, linestyle=hline.style_dotted)
h1 = hline(20, linestyle=hline.style_dotted)

//MA
wmalen=input(defval=144, title="WMA Length")
WMA = security(syminfo.tickerid, "60", wma(close, wmalen))
SMA = security(syminfo.tickerid, "60", sma(close, 5))
minWMA = wma(close, wmalen)
minSMA = sma(close, 5)

//Entry Logic
stobuy = crossover(k, d) and k < stochOS
stosell = crossunder(k, d) and k > stochOB
mabuy = minSMA > minWMA
daymabuy = SMA > WMA

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
lTP=(strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0)))+((valuewhen(bought, atr(14), 0)/5)*i_TPExpander))
sTP=(strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price))-((valuewhen(bought, atr(14), 0)/5)*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0

//TrailingStop
dif=(valuewhen(strategy.position_size>0 and strategy.position_size[1]<=0, high,0))
 -strategy.position_avg_price
trailOffset     = strategy.position_avg_price - LSL
var tstop = float(na)
if strategy.position_size > 0
    tstop := high- trailOffset - dif
    if tstop<tstop[1]
        tstop:=tstop[1]
else
    tstop := na
StrailOffset     = SSL - strategy.position_avg_price
var Ststop = float(na)
Sdif=strategy.position_avg_price-(valuewhen(strategy.position_size<0 
 and strategy.position_size[1]>=0, low,0))
if strategy.position_size < 0
    Ststop := low+ StrailOffset + Sdif
    if Ststop>Ststop[1]
        Ststop:=Ststop[1]
else
    Ststop := na
    
//Stop Selector
SL= islong ? LSL : isshort ? SSL : na
if i_TStop 
    SL:= islong ? tstop : isshort ? Ststop : na
TP= islong ? lTP : isshort ? sTP : na


//Entries
if stobuy and mabuy and daymabuy
    strategy.entry("long", long=not i_reverse?true:false)
if stosell and not mabuy and not daymabuy
    strategy.entry("short", long=not i_reverse?false:true)


//Exit
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross)
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross)
plot(minWMA)
plot(minSMA, color=color.green)