MACD RSI Strategi Breakout Jangka Pendek

Penulis:ChaoZhang, Tanggal: 2023-10-07 16:08:53
Tag:

Gambaran umum

Ini adalah strategi breakout jangka pendek berdasarkan indikator MACD 1 menit dan indikator RSI. Ini menggabungkan MACD untuk menentukan tren dan menemukan titik breakout, dan RSI untuk menilai kondisi overbought dan oversold, untuk menemukan peluang breakout jangka pendek untuk scalping panjang dan pendek.

Logika Strategi

Strategi ini pertama-tama menghitung histogram MACD dalam jangka waktu 1 menit, dan plot Bollinger Bands untuk menentukan situasi histogram breakout. Pada saat yang sama, ini menghitung indikator RSI untuk menentukan momentum panjang dan pendek. Hanya ketika indikator Bollinger Bands, MACD dan RSI semua memenuhi kriteria pada saat yang sama, sinyal perdagangan akan dipicu.

Secara khusus, pergi panjang ketika histogram MACD 1 menit berada di bawah band bawah dan RSI berada di atas 51, dan pergi pendek ketika histogram MACD berada di atas band atas dan RSI berada di bawah 49.

Ini mengambil keuntungan tetap dan stop loss exit. menutup posisi ketika keuntungan mencapai 0,5% atau kerugian mencapai 0,3%.

Analisis Keuntungan

Strategi ini menggabungkan penilaian tren dan penilaian overbought/oversold, yang dapat secara efektif menyaring breakout palsu.

Keuntungannya adalah:

  1. MACD menilai arah tren dan RSI menilai momentum panjang/pendek, yang secara efektif dapat menghindari perdagangan melawan tren.

  2. Menggabungkan Bollinger Bands untuk menilai sinyal breakout dapat menyaring breakout palsu.

  3. Mengadopsi TP/SL tetap, setiap perdagangan memiliki harapan keuntungan tertentu, yang mengendalikan kerugian perdagangan tunggal.

  4. Frekuensi perdagangan tinggi, cocok untuk perdagangan jangka pendek.

Analisis Risiko

Ada juga beberapa risiko dengan strategi ini:

  1. TP/SL tetap tidak dapat disesuaikan berdasarkan perubahan pasar, yang dapat menyebabkan SL terlalu kecil dan TP terlalu besar.

  2. Hal ini bergantung pada beberapa sinyal yang disaring, yang dapat menyebabkan beberapa SL dipicu di pasar yang terikat rentang.

  3. Frekuensi perdagangan yang tinggi menyebabkan biaya komisi yang tinggi.

  4. Parameter MACD dan RSI membutuhkan optimasi lebih lanjut, parameter saat ini mungkin tidak optimal.

Aspek berikut dapat dioptimalkan lebih lanjut:

  1. Mengadopsi TP / SL dinamis, menyesuaikan rasio berdasarkan ATR dll.

  2. Luaskan Bollinger Bands untuk mempersempit saluran, menurunkan frekuensi pemicu.

  3. Mengoptimalkan parameter MACD dan RSI untuk menemukan kombinasi terbaik.

  4. Filter berdasarkan tren jangka waktu yang lebih tinggi untuk menghindari perdagangan melawan tren.

Ringkasan

Secara keseluruhan strategi ini adalah sistem breakout jangka pendek yang khas, menggabungkan analisis tren, momentum dan overbought/oversold, yang dapat secara efektif menemukan peluang jangka pendek.


/*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)





Lebih banyak