Chiến lược đột phá ngắn hạn của chỉ số RSI MACD

Tác giả:ChaoZhang, Ngày: 2023-10-07 16:08:53
Tags:

Tổng quan

Đây là một chiến lược đột phá ngắn hạn dựa trên chỉ số MACD 1 phút và chỉ số RSI. Nó kết hợp MACD để xác định xu hướng và tìm điểm đột phá, và RSI để đánh giá các điều kiện mua quá mức và bán quá mức, để tìm cơ hội đột phá ngắn hạn cho đầu scalping dài và ngắn.

Chiến lược logic

Chiến lược này đầu tiên tính toán biểu đồ MACD trong khung thời gian 1 phút, và vẽ Bollinger Bands để xác định tình hình đột phá biểu đồ. Đồng thời, nó tính toán chỉ số RSI để xác định đà dài và ngắn. Chỉ khi các chỉ số Bollinger Bands, MACD và RSI đáp ứng các tiêu chí cùng một lúc, các tín hiệu giao dịch sẽ được kích hoạt.

Cụ thể, đi dài khi biểu đồ MACD 1 phút nằm dưới dải dưới và chỉ số RSI trên 51, và đi ngắn khi biểu đồ MACD nằm trên dải trên và chỉ số RSI dưới 49. Nó cũng yêu cầu các đường trung bình động 9 ngày, 50 ngày và 200 ngày phải được sắp xếp trước khi giao dịch, để tránh giao dịch xu hướng không thuận lợi.

Đóng vị trí khi lợi nhuận đạt 0,5% hoặc lỗ đạt 0,3%.

Phân tích lợi thế

Chiến lược này kết hợp phán đoán xu hướng và phán đoán mua quá mức / bán quá mức, có thể lọc hiệu quả các sự phá vỡ sai.

Lợi thế là:

  1. MACD đánh giá hướng xu hướng và RSI đánh giá đà dài / ngắn, có thể tránh giao dịch chống lại xu hướng.

  2. Kết hợp các dải Bollinger để đánh giá tín hiệu đột phá có thể lọc ra các đột phá sai.

  3. Sử dụng TP/SL cố định, mỗi giao dịch có một kỳ vọng lợi nhuận nhất định, điều này kiểm soát lỗ giao dịch duy nhất.

  4. Tần suất giao dịch cao, phù hợp với giao dịch ngắn hạn.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. TP/SL cố định không thể điều chỉnh dựa trên những thay đổi trên thị trường, điều này có thể dẫn đến SL quá nhỏ và TP quá lớn.

  2. Nó dựa trên nhiều tín hiệu được lọc, có thể dẫn đến nhiều SL được kích hoạt trong các thị trường giới hạn phạm vi.

  3. Tần suất giao dịch cao dẫn đến phí hoa hồng cao.

  4. Các thông số MACD và RSI cần tối ưu hóa thêm, các thông số hiện tại có thể không tối ưu.

Các khía cạnh sau đây có thể được tối ưu hóa thêm:

  1. Sử dụng TP / SL động, điều chỉnh tỷ lệ dựa trên ATR vv

  2. Mở rộng Bollinger Bands để thu hẹp kênh, giảm tần số kích hoạt.

  3. Tối ưu hóa các thông số MACD và RSI để tìm ra sự kết hợp tốt nhất.

  4. Bộ lọc dựa trên xu hướng khung thời gian cao hơn để tránh giao dịch chống lại xu hướng.

Tóm lại

Nhìn chung, chiến lược này là một hệ thống đột phá ngắn hạn điển hình, kết hợp xu hướng, động lực và phân tích mua quá mức / bán quá mức, có thể phát hiện hiệu quả các cơ hội ngắn hạn. Nhưng có một số rủi ro nhất định, đòi hỏi phải thử nghiệm thêm và tối ưu hóa tham số để giảm rủi ro và cải thiện lợi nhuận. Nếu điều chỉnh đúng cách, chiến lược này có thể trở thành một chiến lược giao dịch ngắn hạn hiệu quả.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 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/
// © pluckyCraft54926

//@version=5
strategy("5 Minute Scalp", overlay=true, margin_long=100, margin_short=100)

fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Plot colors
col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
hist_1m = request.security(syminfo.tickerid,"1",hist [barstate.isrealtime ? 1 : 0])
hline(0, "Zero Line", color=color.new(#787B86, 50))
////////////////////////////////////////////////////
//plotting emas on the chart
len1 = input.int(9, minval=1, title="Length")
src1 = input(close, title="Source")
offset1 = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out1 = ta.ema(src1, len1)
plot(out1, title="EMA9", color=color.blue, offset=offset1)

len2 = input.int(50, minval=1, title="Length")
src2 = input(close, title="Source")
offset2 = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out2 = ta.ema(src2, len2)
plot(out2, title="EMA50", color=color.yellow, offset=offset2)

len3 = input.int(200, minval=1, title="Length")
src3 = input(close, title="Source")
offset3 = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out3 = ta.ema(src3, len3)
plot(out3, title="EMA200", color=color.white, offset=offset3)
//////////////////////////////////////////////////////////////////
//Setting up the BB
/////////////////////////////////////////////////////////////
srcBB = hist_1m
lengthBBLong = input.int(94,title = "LengthBB Long", minval=1)
lengthBBShort = input.int(83,title = "LengthBB Short", minval=1)
multBB = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
basisBBLong = ta.sma(srcBB, lengthBBLong)
basisBBShort = ta.sma(srcBB, lengthBBShort)
devBBLong = multBB * ta.stdev(srcBB, lengthBBLong)
devBBShort = multBB * ta.stdev(srcBB, lengthBBShort)
upperBB = basisBBShort + devBBShort
lowerBB = basisBBLong - devBBLong
offsetBB = input.int(0, "Offset", minval = -500, maxval = 500)

/////////////////////////////////////////
//aetting up rsi
///////////////////////////////////////////
rsilengthlong = input.int(defval = 11, title = "Rsi Length Long", minval = 1)
rlong=ta.rsi(close,rsilengthlong)
rsilengthshort = input.int(defval = 29, title = "Rsi Length Short", minval = 1)
rshort=ta.rsi(close,rsilengthshort)
///////////////////////////
//Only taking long and shorts, if RSI is above 51 or bellow 49
rsilong = rlong >= 51
rsishort = rshort <= 49
//////////////////////////////////////
//only taking trades if all 3 emas are in the correct order
long = out1 > out2 and out2 > out3
short = out1 < out2 and out2 < out3
/////////////////////////////////////


///////////////////////////////////////////
//setting up TP and SL
TP = input.float(defval = 0.5, title = "Take Profit %",step = 0.1) / 100
SL = input.float(defval = 0.3, title = "Stop Loss %", step = 0.1) / 100

longCondition = hist_1m <= lowerBB
longhight = input(defval=-10,title = "MacdTick Low")
if (longCondition and long and rsilong and hist_1m <= longhight) 
    strategy.entry("Long", strategy.long)

if (strategy.position_size>0)
    longstop = strategy.position_avg_price * (1-SL)
    longprofit = strategy.position_avg_price * (1+TP)
    strategy.exit(id ="close long",from_entry="Long",stop=longstop,limit=longprofit)

shortCondition = hist_1m >= upperBB
shorthight = input(defval=35,title = "MacdTick High")
if (shortCondition and short and rsishort and hist_1m >= shorthight)
    strategy.entry("short ", strategy.short)

shortstop = strategy.position_avg_price * (1+SL)
shortprofit = strategy.position_avg_price * (1-TP)

if (strategy.position_size<0)
    strategy.exit(id ="close short",stop=shortstop,limit=shortprofit)





Thêm nữa