Strategi Pengesanan Trend Crossover MA Berganda

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

img

Ringkasan

Strategi ini menggunakan kaedah pengesanan trend yang tipikal iaitu crossover purata bergerak berganda, digabungkan dengan mekanisme pengurusan risiko seperti stop loss, mengambil keuntungan, dan trailing stop loss, yang bertujuan untuk menangkap keuntungan besar dari pasaran trend.

Logika Strategi

  1. Mengira EMA n-hari sebagai garis pantas untuk jangka pendek;
  2. Mengira EMA m-hari sebagai garis perlahan untuk jangka panjang;
  3. Pergi panjang apabila garisan pantas memecahkan garis perlahan ke atas, dan pergi pendek apabila pecah ke bawah;
  4. Isyarat keluar: crossover terbalik (contohnya keluar panjang apabila crossover panjang berlaku).
  5. Gunakan stop loss, ambil keuntungan, stop loss untuk menguruskan risiko.

Analisis Kelebihan

  1. Mengambil garis EMA berganda dapat menentukan titik pembalikan trend harga dengan lebih baik dan menangkap pergerakan trend.
  2. Menggabungkan Stop Loss, Take Profit dan Trailing Stop membantu mengehadkan kerugian perdagangan tunggal, mengunci keuntungan dan mengurangkan pengeluaran.
  3. Terdapat banyak parameter yang boleh disesuaikan untuk menyesuaikan dan mengoptimumkan untuk produk dan persekitaran pasaran yang berbeza.
  4. Logik strategi adalah mudah dan jelas, mudah difahami dan diubah suai.
  5. Menyokong operasi panjang dan pendek, yang dapat disesuaikan dengan keadaan pasaran yang berbeza.

Analisis Risiko

  1. Strategi MA berganda sangat sensitif terhadap pelarian palsu dan cenderung terperangkap.
  2. Tetapan parameter yang tidak betul boleh membawa kepada perdagangan yang kerap, meningkatkan kos perdagangan dan kerugian slippage.
  3. Strategi itu sendiri tidak dapat menentukan titik pembalikan trend, perlu digabungkan dengan penunjuk lain.
  4. Ia mudah untuk menjana isyarat perdagangan di pasaran yang berbeza, tetapi keuntungan sebenar cenderung rendah.
  5. Parameter perlu dioptimumkan untuk produk dan persekitaran pasaran yang berbeza.

Risiko boleh dikurangkan dengan:

  1. Menyaring isyarat palsu dengan penunjuk lain.
  2. Mengoptimumkan parameter untuk mengurangkan kekerapan perdagangan.
  3. Menambah penunjuk penilaian trend untuk mengelakkan perdagangan pasaran terikat julat.
  4. Penyesuaian saiz kedudukan untuk mengurangkan risiko perdagangan tunggal.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan tempoh MA yang cepat dan perlahan untuk produk dan pasaran yang berbeza.
  2. Tambah penunjuk lain untuk menentukan trend dan menapis isyarat palsu, contohnya MACD, KDJ dll.
  3. Pertimbangkan untuk menggantikan EMA dengan SMA atau WMA.
  4. Sesuaikan stop loss secara dinamik berdasarkan ATR.
  5. Sesuaikan saiz kedudukan tunggal secara fleksibel berdasarkan metodologi saiz kedudukan.
  6. Pengoptimuman penyesuaian diri parameter berdasarkan metrik korelasi dan turun naik.

Ringkasan

Ringkasnya, ini adalah strategi pengesanan trend silang EMA berganda yang tipikal. Ia mempunyai kelebihan menangkap pergerakan trend, bersepadu dengan mekanisme pengurusan risiko seperti stop loss, mengambil keuntungan dan trailing stop loss. Tetapi ia juga mempunyai beberapa kelemahan tipikal, seperti kepekaan tinggi terhadap bunyi bising dan pasaran terhad, cenderung terperangkap. Penambahbaikan lanjut boleh dibuat dengan memperkenalkan penunjuk tambahan, pengoptimuman parameter, pelarasan dinamik dan penggunaan portfolio untuk meningkatkan prestasi strategi. Secara keseluruhan, dengan penyesuaian parameter yang betul dan kesesuaian yang baik dengan keadaan produk dan pasaran, strategi ini dapat mencapai hasil yang baik.


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