Strategi Perdagangan Crypto Berdasarkan MACD

Penulis:ChaoZhang, Tarikh: 2023-09-19 11:21:42
Tag:

Ringkasan

Strategi ini menggunakan penunjuk Moving Average Convergence Divergence (MACD) dan Relative Strength Index (RSI) untuk mengenal pasti isyarat perdagangan untuk mata wang kripto.

Logika Strategi

  1. Mengira EMA 12 hari dan EMA 26 hari sebagai purata bergerak jangka pendek dan jangka panjang.

  2. Mengira perbezaan antara EMA pendek dan panjang sebagai histogram MACD.

  3. Mengira EMA 9 hari MACD sebagai garis isyarat.

  4. Mengira RSI 14 hari untuk menilai tahap overbought / oversold.

  5. Tunjukkan isyarat beli apabila MACD melintasi di atas garis isyarat dan RSI lebih besar daripada 81.

  6. Tunjukkan isyarat jual apabila MACD melintasi di bawah garis isyarat dan RSI kurang daripada 27.

  7. Gunakan modul strategi terbina dalam untuk masuk dan keluar.

Analisis Kelebihan

  1. MACD boleh mengenal pasti trend dan perubahan, RSI menunjukkan tahap overbought / oversold.

  2. MACD di atas / di bawah garis sifar menunjukkan arah / kekuatan trend jangka pendek berbanding jangka panjang.

  3. RSI pada tahap tinggi/rendah menunjukkan kemungkinan terlalu panas/terlalu dijual.

  4. Isyarat perdagangan yang jelas dan mudah, mudah untuk melaksanakan perdagangan secara sistematik.

  5. Parameter yang boleh disesuaikan untuk pengoptimuman dan penyesuaian dengan keadaan pasaran yang berbeza.

Analisis Risiko

  1. Maklumat MACD dan RSI terdedah kepada pecah palsu dan anomali, boleh menghasilkan isyarat yang salah.

  2. Parameter tetap mungkin gagal menyesuaikan diri dengan pasaran yang berubah, memerlukan pengoptimuman.

  3. Isyarat mungkin terlambat, tidak dapat berdagang pada titik perubahan.

  4. Hanya panjang/pendek, tidak dapat mendapat keuntungan dari pasaran yang berbeza.

Arahan pengoptimuman

  1. Uji kombinasi parameter yang berbeza untuk mencari tetapan optimum.

  2. Tambah penapis untuk mengelakkan perdagangan palsu.

  3. Tambah stop loss untuk mengehadkan kerugian di pasaran satu sisi.

  4. Menguruskan saiz kedudukan, peningkatan trend dan penurunan julat.

  5. Gabungkan dengan penunjuk lain untuk isyarat yang lebih tepat.

  6. Ujian pada instrumen dan jangka masa yang berbeza.

Ringkasan

Strategi ini menggunakan kekuatan pelengkap MACD dan RSI untuk mengenal pasti trend dan isyarat dagangan. Parameter penyesuaian halus dan menambah penapis boleh meningkatkan ketahanan dan keuntungan. Penyesuaian berhenti dan saiz kedudukan juga membantu memaksimumkan keuntungan dan meminimumkan risiko. Kelebihan dan kekurangan MACD dan RSI menjadikan strategi ini lebih sesuai untuk menangkap trend jangka menengah hingga panjang daripada perdagangan jangka pendek. Secara keseluruhan, ia adalah strategi yang mudah dan praktikal yang bernilai ujian dan pengoptimuman lanjut untuk mencapai hasil backtest dan langsung yang lebih baik.


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

//@version=3
// Revision:        5
// Author:          @Hugo_Moriceau
//study("Thesis_EMLYON_Withdate-strategies-Daily_Crypto_Moriceau_indicator",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Daily_Crypto_Moriceau_indicator",overlay=true)

// === GENERAL INPUTS ===

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)

macd = fastMA - slowMA
signal = sma(macd, 9)
rsi = rsi(close,14)



tradeInvert     = input(defval = false, title = "Invert Trade Direction?")

// === LOGIC ===

// is fast ma above slow ma?
aboveBelow = fastMA >= slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === Plot Setting ===

//plot(fastMA,color=red)
//plot(slowMA,color=blue)
//barcolor(color=iff(fastMA > slowMA, yellow, na))
//barcolor(color=iff(fastMA < slowMA, black, na))
barcolor(color=iff(macd > 0.12*close , fuchsia, na))
barcolor(color=iff(macd < -0.1*close , lime, na))
dataS= macd > 0.125 and rsi>81 and fastMA > slowMA
dataB= macd < -0.1  and rsi<27 and fastMA< slowMA


plotchar(dataB, char='B',color=black,size = size.tiny,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.tiny,location = location.abovebar,transp= 0)


// === BACKTEST RANGE ===
FromMonth = input(defval = 01, title = "From Month", minval = 1)
FromDay   = input(defval = 01, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 2, title = "To Month", minval = 1)
ToDay     = input(defval = 10, title = "To Day", minval = 1)
ToYear    = input(defval = 2019, title = "To Year", minval = 2018)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 20000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 1500, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 100, 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


// === STRATEGY - LONG POSITION EXECUTION ===

enterLong() => not tradeDirection[1] and tradeDirection 
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