Chiến lược này kết hợp các chỉ số ngẫu nhiên RSI, SMA chuyển động và WMA chuyển động để tìm tín hiệu mua bán. Nó cũng xác định 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 RSI nhanh vượt qua hoặc đi xuống đường chậm.
Chiến lược này đầu tiên tính toán 144 chu kỳ cộng với đường WMA và 5 chu kỳ SMA trên hai khung thời gian 1 giờ và 5 phút. Chỉ khi SMA 5 phút trên WMA, thị trường được coi là đa đầu. Sau đó, chiến lược tính toán các chỉ số đa không gian của RSI, và các đường K và D tương ứng.
Đâ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 khung thời gian để xác định xu hướng cùng một lúc và giảm hiệu quả các 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 để RSI điều khiển KDJ, nó cũng sửa đổi các vấn đề tín hiệu giả dễ xảy ra trong các chiến lược KDJ thông thường. Ngoài ra, chiến lược này còn có thiết lập dừng lỗ và ngăn chặn để khóa lợi nhuận và có thể kiểm soát rủi ro một cách hiệu quả.
Rủi ro lớn nhất của chiến lược này là đánh giá xu hướng sai. Trong thời điểm chuyển đổi thị trường, đường trung bình ngắn và dài có thể tăng hoặc giảm cùng một lúc, tạo ra tín hiệu sai. Ngoài ra, trong thời điểm thị trường biến động, RSI cũng có thể tạo ra nhiều tín hiệu giao dịch mờ nhạt hơn. Tuy nhiên, những rủi ro này có thể được giảm thiểu bằng cách điều chỉnh đúng chu kỳ SMA và WMA và các thông số RSI.
Chiến lược này có thể được tối ưu hóa từ một số khía cạnh sau: 1) Kiểm tra SMA, WMA và RSI ở các chiều dài khác nhau để tìm ra sự kết hợp tốt nhất 2) Thêm các chỉ số khác như MACD, đường Brin để xác minh độ tin cậy 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 dừng lỗ theo tỷ lệ cố định, dừng lỗ điểm trượt dư thừa, theo dõi dừng lỗ, v.v. 4) Tham gia vào mô-đun quản lý vốn, kiểm soát quy mô đầu tư đơn lẻ và mức độ rủi ro tổng thể 5) Tăng các thuật toán học máy để tìm các thông số có hiệu suất tốt nhất bằng cách kiểm tra lại nhiều lần
Chiến lược này tận dụng những lợi thế của đường trung bình chuyển động và các chỉ số ngẫu nhiên để xây dựng 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à các chỉ số, nó có thể nắm bắt được hướng xu hướng đường trung gian dài một cách trơn tru. Đồng thời, thiết lập stop-loss stop-pick cũng giúp nó chịu được một số biến động thị trường. Tuy nhiên, vẫn có một số chỗ để cải thiện, chẳng hạn như thử nghiệm nhiều chỉ số kết hợp, giới thiệu phương pháp học máy để tìm các thông số tối ưu nhất.
/*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)