Sumber daya yang dimuat... Pemuatan...

Strategi Konvergensi MACD dengan R: R, Batas Harian, dan Stop Loss yang lebih ketat

Penulis:ChaoZhang, Tanggal: 2024-06-03 16:47:56
Tag:MACD

img

Gambaran umum

Strategi ini menggunakan konvergensi dan divergensi dari indikator MACD untuk menghasilkan sinyal perdagangan. Ketika garis MACD melintasi garis sinyal, dan nilai garis MACD lebih besar dari 1,5 atau kurang dari -1,5, strategi ini menghasilkan sinyal panjang dan pendek, masing-masing.

Prinsip Strategi

  1. Menghitung garis MACD dan garis sinyal dari indikator MACD.
  2. Tentukan situasi silang antara garis MACD dan garis sinyal, sambil mempertimbangkan apakah nilai garis MACD melebihi ambang tertentu (1.5 dan -1.5).
  3. Ketika sinyal long muncul, buka posisi long dengan harga take profit dari harga tertinggi saat ini + 600 unit minimum tick dan harga stop loss dari harga terendah saat ini - 100 unit minimum tick.
  4. Ketika sinyal short muncul, buka posisi short dengan harga take profit dari harga terendah saat ini - 600 unit minimum tick dan harga stop loss dari harga tertinggi saat ini + 100 unit minimum tick.
  5. Memperkenalkan logika stop-loss trailing: ketika harga naik (posisi panjang) atau turun (posisi pendek) lebih dari 300 unit minimum tick relatif terhadap harga masuk, pindahkan harga stop-loss ke harga masuk + (harga tutup - harga masuk - 300) untuk posisi panjang atau harga masuk - (harga masuk - harga tutup - 300) untuk posisi pendek.
  6. Tetapkan batas kerugian dan keuntungan maksimum harian: ketika kerugian harian mencapai 600 unit tik minimum atau keuntungan mencapai 1800 unit tik minimum, tutup semua posisi.

Analisis Keuntungan

  1. Menggabungkan indikator MACD dengan kondisi ambang harga secara efektif menyaring beberapa sinyal kebisingan.
  2. Rasio risiko-manfaat tetap (R: R) membuat risiko dan manfaat dari setiap perdagangan dapat dikontrol.
  3. Logika stop-loss trailing melindungi keuntungan setelah tren terbentuk dan mengurangi penarikan.
  4. Batas kerugian maksimum harian dan batas keuntungan membantu mengendalikan eksposur risiko harian dan menghindari kerugian atau keuntungan yang berlebihan diikuti dengan penarikan.

Analisis Risiko

  1. Indikator MACD memiliki efek lag, yang dapat mengakibatkan sinyal tertunda atau salah.
  2. Tingkat take profit dan stop loss yang tetap mungkin tidak dapat beradaptasi dengan kondisi pasar yang berbeda dan seringkali dapat dipicu di pasar yang bergolak.
  3. Logika stop-loss trailing mungkin gagal untuk menghentikan kerugian tepat waktu selama pembalikan tren, yang mengarah pada pengembalian keuntungan.
  4. Batas kerugian maksimum harian dan keuntungan dapat menyebabkan strategi untuk menutup posisi lebih awal ketika tren harian jelas, kehilangan potensi keuntungan.

Arah Optimalisasi

  1. Pertimbangkan untuk menggunakan indikator MACD multi-frame untuk mengkonfirmasi sinyal dan meningkatkan akurasi sinyal.
  2. Mengatur secara dinamis tingkat take profit dan stop loss berdasarkan volatilitas pasar untuk beradaptasi dengan kondisi pasar yang berbeda.
  3. Mengoptimalkan logika stop-loss trailing, seperti mengatur jarak stop-loss trailing berdasarkan indikator ATR untuk adaptasi yang lebih baik terhadap fluktuasi harga.
  4. Mengoptimalkan parameter batas kerugian dan keuntungan maksimum harian untuk menemukan nilai batas yang sesuai yang mengendalikan risiko sambil menangkap pergerakan tren sebanyak mungkin.

Ringkasan

Strategi ini menggunakan konvergensi dan divergensi indikator MACD untuk menghasilkan sinyal perdagangan sambil memperkenalkan langkah-langkah pengendalian risiko seperti rasio risiko-pahala, trailing stop-loss, dan batas harian. Meskipun strategi dapat menangkap pergerakan tren dan mengendalikan risiko sampai batas tertentu, masih ada ruang untuk optimalisasi dan perbaikan.


/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DD173838

//@version=5
strategy("MACD Convergence Strategy with R:R, Daily Limits, and Tighter Stop Loss", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// MACD settings
fastLength = input.int(12, title="Fast Length", minval=1)
slowLength = input.int(26, title="Slow Length", minval=1)
signalSmoothing = input.int(9, title="Signal Smoothing", minval=1)
source = input(close, title="Source")

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing)

// Plot MACD and signal line
plot(macdLine, title="MACD Line", color=color.blue)
plot(signalLine, title="Signal Line", color=color.red)

// Define convergence conditions
macdConvergenceUp = ta.crossover(macdLine, signalLine) and macdLine > 1.5
macdConvergenceDown = ta.crossunder(macdLine, signalLine) and macdLine < -1.5

// Define take profit and stop loss

        
    
takeProfit = 600
stopLoss = 100

// Plot buy and sell signals on the chart
plotshape(series=macdConvergenceDown, title="Short Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT")
plotshape(series=macdConvergenceUp, title="Long Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="LONG")

// Execute short and long orders with defined take profit and stop loss
if (macdConvergenceDown)
    strategy.entry("Short", strategy.short, qty=1, stop=high + (stopLoss / syminfo.mintick), limit=low - (takeProfit / syminfo.mintick))

if (macdConvergenceUp)
    strategy.entry("Long", strategy.long, qty=1, stop=low - (stopLoss / syminfo.mintick), limit=high + (takeProfit / syminfo.mintick))

// Trailing stop logic
var float entryPrice = na
var float trailingStopPrice = na

if (strategy.position_size != 0)
    entryPrice := strategy.opentrades.entry_price(0)

if (strategy.position_size > 0)  // For long positions
    if (close - entryPrice > 300)
        trailingStopPrice := entryPrice + (close - entryPrice - 300)

if (strategy.position_size < 0)  // For short positions
    if (entryPrice - close > 300)
        trailingStopPrice := entryPrice - (entryPrice - close - 300)

if (strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice)
    strategy.close("Long", comment="Trailing Stop")

if (strategy.position_size < 0 and not na(trailingStopPrice) and close > trailingStopPrice)
    strategy.close("Short", comment="Trailing Stop")

// Daily drawdown and profit limits
var float startOfDayEquity = na
if (na(startOfDayEquity) or ta.change(time('D')) != 0)
    startOfDayEquity := strategy.equity

maxDailyLoss = 600
maxDailyProfit = 1800
currentDailyPL = strategy.equity - startOfDayEquity

if (currentDailyPL <= -maxDailyLoss)
    strategy.close_all(comment="Max Daily Loss Reached")

if (currentDailyPL >= maxDailyProfit)
    strategy.close_all(comment="Max Daily Profit Reached")


Berkaitan

Lebih banyak