Strategi Pelacakan Tren Crossover Dual MA

Penulis:ChaoZhang, Tanggal: 2023-12-21 16:10:22
Tag:

img

Gambaran umum

Strategi ini mengadopsi metode pelacakan tren yang khas dari crossover rata-rata bergerak ganda, dikombinasikan dengan mekanisme manajemen risiko seperti stop loss, take profit, dan trailing stop loss, yang bertujuan untuk menangkap keuntungan besar dari pasar tren.

Logika Strategi

  1. Menghitung N-Day EMA sebagai garis cepat untuk jangka pendek;
  2. Menghitung EMA m-hari sebagai garis lambat untuk jangka panjang;
  3. Pergi panjang ketika garis cepat menembus garis lambat ke atas, dan pergi pendek ketika menembus ke bawah;
  4. Sinyal keluar: reverse crossover (misalnya keluar panjang ketika crossover panjang terjadi).
  5. Gunakan stop loss, ambil keuntungan, trailing stop loss untuk mengelola risiko.

Analisis Keuntungan

  1. Mengadopsi garis EMA ganda dapat lebih baik menentukan titik pembalikan tren harga dan menangkap pergerakan tren.
  2. Menggabungkan stop loss, take profit dan trailing stop membantu membatasi kerugian perdagangan tunggal, mengunci keuntungan dan mengurangi penarikan.
  3. Ada banyak parameter yang dapat disesuaikan untuk disesuaikan dan dioptimalkan untuk produk dan lingkungan pasar yang berbeda.
  4. Logika strategi sederhana dan jelas, mudah dimengerti dan dimodifikasi.
  5. Mendukung operasi panjang dan pendek, dapat beradaptasi dengan kondisi pasar yang berbeda.

Analisis Risiko

  1. Strategi MA ganda sangat sensitif terhadap kebocoran palsu dan rentan untuk terjebak.
  2. Pengaturan parameter yang tidak tepat dapat menyebabkan perdagangan yang sering, meningkatkan biaya perdagangan dan kerugian slippage.
  3. Strategi itu sendiri tidak dapat menentukan titik pembalikan tren, perlu dikombinasikan dengan indikator lain.
  4. Sangat mudah untuk menghasilkan sinyal perdagangan di berbagai pasar, tetapi profitabilitas sebenarnya cenderung rendah.
  5. Parameter perlu dioptimalkan untuk produk dan lingkungan pasar yang berbeda.

Risiko dapat dikurangi dengan:

  1. Menyaring sinyal palsu dengan indikator lain.
  2. Mengoptimalkan parameter untuk mengurangi frekuensi perdagangan.
  3. Menambahkan indikator penilaian tren untuk menghindari perdagangan pasar yang terikat rentang.
  4. Menyesuaikan ukuran posisi untuk mengurangi risiko perdagangan tunggal.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan periode MA yang cepat dan lambat untuk produk dan pasar yang berbeda.
  2. Tambahkan indikator lain untuk menentukan tren dan menyaring sinyal palsu, misalnya MACD, KDJ dll.
  3. Pertimbangkan untuk mengganti EMA dengan SMA atau WMA.
  4. Mengatur stop loss secara dinamis berdasarkan ATR.
  5. Fleksibel menyesuaikan ukuran posisi tunggal berdasarkan metodologi ukuran posisi.
  6. Optimasi parameter yang beradaptasi sendiri berdasarkan metrik korelasi dan volatilitas.

Ringkasan

Singkatnya, ini adalah strategi pelacakan tren silang EMA ganda yang khas. Ini memiliki keuntungan menangkap pergerakan tren, terintegrasi dengan mekanisme manajemen risiko seperti stop loss, take profit dan trailing stop loss. Tetapi juga memiliki beberapa kelemahan khas, seperti kepekaan tinggi terhadap kebisingan dan pasar yang terikat kisaran, rentan terjebak. Perbaikan lebih lanjut dapat dilakukan dengan memperkenalkan indikator tambahan, optimasi parameter, penyesuaian dinamis dan penggunaan portofolio untuk meningkatkan kinerja strategi. Secara keseluruhan, dengan penyesuaian parameter yang tepat dan kesesuaian yang baik dengan kondisi produk dan pasar, strategi ini dapat mencapai hasil yang layak.


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

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION ***

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => not tradeDirection[1] and tradeDirection // functions can be used to wrap up and work out complex conditions
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)


Lebih banyak