Strategi perdagangan jangka pendek kombinasi Dual Moving Average dan MACD

Penulis:ChaoZhang, Tanggal: 2023-10-09 16:47:42
Tag:

Gambaran umum

Strategi ini menggabungkan rata-rata bergerak ganda, indikator stokastik dan MACD untuk mengidentifikasi peluang perdagangan jangka pendek, yang merupakan strategi perdagangan jangka pendek yang relatif klasik.

Prinsip

Strategi ini didasarkan pada prinsip-prinsip berikut:

  1. Menggunakan EMA 50 periode dan 100 periode untuk menentukan arah tren. EMA dengan periode yang lebih pendek dapat merespons dengan cepat perubahan harga. Menyambangi EMA 50 periode di atas EMA 100 periode mewakili pembentukan posisi panjang; Menyambangi ke bawah mewakili pembentukan posisi pendek.

  2. Gunakan perbedaan antara MACD untuk menentukan titik masuk dan keluar. Ketika perbedaan melintasi di atas 0, itu menunjukkan penguatan kekuatan bull dan mengarah ke entri panjang; ketika melintasi di bawah 0, itu menunjukkan penguatan kekuatan bear dan mengarah ke entri pendek.

  3. Kombinasi indikator RSI Stokastik untuk menilai situasi overbought dan oversold. Indikator ini menggabungkan keuntungan dari KDJ dan RSI, dan dapat menunjukkan kondisi overbought dan oversold dengan baik. Ketika di bawah 20, pasar terjual berlebihan, dan entri panjang dapat dianggap menggabungkan indikator lain; ketika di atas 80, pasar terbeli berlebihan, dan entri pendek dapat dipertimbangkan.

  4. Setelah menentukan arah masuk, jika 4 dari 5 candlestick terbaru memiliki harga penutupan yang menyentuh rata-rata bergerak, itu menunjukkan bahwa ada dukungan / resistensi di sekitar rata-rata bergerak, dan posisi dapat dibuka.

  5. Gunakan stop loss dan take profit untuk mengelola risiko.

Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Kombinasi dari beberapa indikator meningkatkan tingkat kemenangan, menggunakan rata-rata bergerak, indikator overbought/oversold dan indikator momentum bersama.

  2. Rata-rata bergerak jangka pendek dapat menangkap tren dan pembalikan dengan cepat.

  3. Parameter RSI stokastik dioptimalkan untuk mengidentifikasi kondisi overbought/oversold dengan baik.

  4. Menggunakan dukungan / resistensi di sekitar rata-rata bergerak untuk kontrol waktu menghindari terjebak oleh breakout palsu.

  5. Stop loss dan take profit yang wajar secara efektif mengendalikan risiko untuk setiap perdagangan.

Risiko

Ada juga beberapa risiko dari strategi ini:

  1. Gagal sepenuhnya menghindari kerugian yang disebabkan oleh pelarian palsu.

  2. Perbedaan mungkin terjadi antara indikator, menyebabkan sinyal perdagangan yang tidak konsisten.

  3. Stop loss dan take profit tetap mungkin gagal beradaptasi dengan perubahan pasar.

  4. Kode yang kompleks dengan banyak parameter sulit dioptimalkan.

Solusinya adalah:

  1. Mengoptimalkan parameter untuk meningkatkan kualitas sinyal dan menurunkan kemungkinan palsu.

  2. Menetapkan prioritas antara indikator untuk menghindari konflik.

  3. Mengadopsi stop loss dinamis dan mengambil keuntungan berdasarkan rentang ATR.

  4. Sederhanakan logika dan ekstrak parameter inti untuk pengujian dan optimasi.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Uji dan temukan kombinasi optimal dari periode moving average dan parameter MACD.

  2. Uji indikator overbought/oversold yang berbeda untuk menggantikan Stochastic RSI.

  3. Coba stop loss dinamis dan mengambil keuntungan, trailing stop untuk membuat manajemen risiko lebih cerdas.

  4. Tambahkan kondisi penyaringan seperti meningkatkan volume untuk meningkatkan kualitas sinyal.

  5. Mengoptimalkan logika masuk untuk menghindari terobosan yang tidak efektif, menggunakan lebih banyak indikator untuk menentukan tren.

  6. Tetapkan batas stop loss sesuai dengan ukuran akun, jumlah perdagangan per hari untuk mengendalikan risiko keseluruhan.

Ringkasan

Strategi ini mengintegrasikan keuntungan dari beberapa indikator, dan sangat praktis untuk perdagangan jangka pendek. Dengan terus optimasi parameter, logika masuk yang ketat, dan manajemen risiko yang lebih baik, stabilitas dan profitabilitas dapat ditingkatkan lebih lanjut.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="Forex scalper 2xEMA + SRSI + MACD", shorttitle="Forex scalper 5-15min", overlay=true)
src = input(title="Source", type=input.source, defval=close)

src_0 = src[0]
src_1 = src[1]
src_2 = src[2]
src_3 = src[3]
src_4 = src[4]

len50 = input(50, minval=1, title="Length")
src50 = input(close, title="Source")
out50 = ema(src50, len50)
len100 = input(100)
src100 = input(close, title="Source")
out100 = ema(src100, len100)

len1 = input(1, minval=1, title="Length")
src1 = input(close, title="Source")
out1 = sma(src1, len1)

length = input(4, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
cu = crossover(k,OverSold)
co = crossunder(k,OverBought)

sma_down = crossunder(out1, out50)
sma_up = crossover(out1,out50)

//if (not na(k) and not na(d))
  //  if (co and k < OverSold)
    //    strategy.entry("StochLE", strategy.long, comment="StochLE")
    //if (cu and k > OverBought)
     //   strategy.entry("StochSE", strategy.short, comment="StochSE")

crossCandle_4 = crossover(src[4],out50)
crossCandleUnder_4= cross(src[4],out50)
crossCandle_3 = crossover(src[3],out50)
crossCandleUnder_3= crossunder(src[3],out50)
crossCandle_2 = crossover(src[2],out50)
crossCandleUnder_2= crossunder(src[2],out50)
crossCandle_1 = crossover(src[1],out50)
crossCandleUnder_1= crossunder(src[1],out50)
crossCandle_0 = crossover(src[0],out50)
crossCandleUnder_0= crossunder(src[0],out50)

conditionOver = (crossCandle_4 or crossCandle_3 or crossCandle_2 or crossCandle_1 or crossCandle_0)
conditionUnder =(crossCandleUnder_4 or crossCandleUnder_3 or crossCandleUnder_2 or crossCandleUnder_1 or crossCandleUnder_0)

touch4 = (cross(low[4],out50) or cross(high[4],out50))
touch3 = (cross(low[3],out50) or cross(high[3],out50))
touch2 = (cross(low[2],out50) or cross(high[2],out50))
touch1 = (cross(low[1],out50) or cross(high[1],out50))

touch = touch1 or touch2 or touch3 or touch4

//and sma_up
//and sma_down

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src_macd = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 10)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src_macd, fast_length) : ema(src_macd, fast_length)
slow_ma = sma_source ? sma(src_macd, slow_length) : ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)


// plot((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close >= out50 and  (cu) and out50 > out100 and hist>=0 , title="Buy", style=columns, color=lime)
// plot((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close <= out50 and  (co) and out50< out100 and hist<=0 , title="sell", style=columns, color=red)


long_cond = ((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close > out50 and  (cu) and out50 > out100 and hist>=0)
short_cond = ((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close < out50 and  (co) and out50< out100 and hist<=0)

tp=input(200)
sl=input(200)

strategy.entry("long",strategy.long, when=long_cond)
strategy.entry("short",strategy.short, when=short_cond)

strategy.exit("X_long", "long", profit=tp,  loss=sl, when=touch  )
strategy.exit("x_short", "short",profit=tp, loss=sl,when = touch )

Lebih banyak