Strategi breakout jangka pendek berdasarkan MACD dan RSI


Tanggal Pembuatan: 2023-10-07 16:08:53 Akhirnya memodifikasi: 2023-10-07 16:08:53
menyalin: 1 Jumlah klik: 1162
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini adalah strategi penembusan garis pendek yang dirancang berdasarkan indikator MACD 1 menit dan indikator RSI. Ini menggabungkan kemampuan indikator MACD untuk menilai tren dan menemukan titik-titik penembusan, dan kemampuan indikator RSI untuk menilai overbought dan oversold, mencari peluang penembusan garis pendek untuk melakukan pergerakan panjang dan pendek.

Prinsip Strategi

Strategi ini pertama-tama menghitung garis dispersi MACD pada frame waktu 1 menit dan memetakan Brinband untuk menilai garis dispersi. Pada saat yang sama, menghitung RSI untuk menilai polyrhythm. Hanya ketika Brinband, MACD, dan RSI memenuhi persyaratan, sinyal perdagangan akan dikirim.

Secara khusus, ketika 1 menit MACD cluster line lebih rendah dari downtrend dan RSI lebih tinggi dari 51, dan ketika MACD cluster line lebih tinggi dari uptrend dan RSI lebih rendah dari 49, dan membutuhkan 9, 50 dan 200 hari garis rata-rata berurutan untuk berdagang, untuk mencegah countertrend yang tidak menguntungkan.

Mengambil Stop Loss Fixed Stop Loss Exit ketika keuntungan mencapai 0,5% atau kerugian mencapai 0,3% posisi kosong.

Analisis Keunggulan

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

Keuntungan adalah sebagai berikut:

  1. MACD menentukan arah tren, RSI menentukan arah gaya ganda, sehingga dapat secara efektif menghindari operasi berlawanan.

  2. Kombinasi dengan Brin Belt Passage untuk menilai sinyal penembusan, dapat memfilter penembusan palsu.

  3. Menggunakan Stop Loss Fixed, setiap keuntungan memiliki ekspektasi tertentu, dan Anda dapat mengendalikan kerugian.

  4. Frekuensi transaksi yang lebih tinggi, cocok untuk operasi garis pendek.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Stop loss tetap tidak dapat disesuaikan dengan perubahan pasar, yang dapat menyebabkan stop loss terlalu kecil dan stop loss terlalu besar.

  2. Bergantung pada indikator sinyal filter ganda, akan terjadi beberapa kali pemicu stop loss di area yang disusun.

  3. Biaya transaksi frekuensi tinggi lebih tinggi.

  4. Parameter MACD dan RSI perlu dioptimalkan, dan saat ini mungkin tidak optimal.

Berikut ini adalah beberapa hal yang bisa dioptimalkan:

  1. Menggunakan Stop Loss Dinamis, menyesuaikan Stop Loss Rasio berdasarkan indikator seperti ATR.

  2. Peningkatan parameter Brin band akan memperkecil saluran dan mengurangi frekuensi pemicu.

  3. Optimalkan parameter MACD dan RSI untuk menemukan kombinasi optimal.

  4. Filter sesuai dengan arah tren siklus besar untuk menghindari perdagangan berlawanan arah.

Meringkaskan

Strategi ini secara keseluruhan adalah sistem penembusan garis pendek yang khas, yang menggabungkan kecenderungan, penilaian overbought dan oversold, yang dapat secara efektif menemukan peluang garis pendek. Namun, ada risiko tertentu, perlu pengujian dan pengoptimalan parameter lebih lanjut, untuk mengurangi risiko meningkatkan tingkat keuntungan. Jika parameter disesuaikan dengan benar, strategi ini dapat menjadi salah satu strategi garis pendek yang efisien.

Kode Sumber Strategi
/*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)