Strategi perdagangan mata uang kripto berdasarkan MACD


Tanggal Pembuatan: 2023-09-19 11:21:42 Akhirnya memodifikasi: 2023-09-19 11:21:42
menyalin: 0 Jumlah klik: 759
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini adalah strategi perdagangan untuk menilai titik jual dan beli cryptocurrency berdasarkan indikator harga selisih agregat rata-rata bergerak (MACD) dan indeks kekuatan relatif (RSI). Ini memberikan sinyal untuk keputusan perdagangan dengan menghitung selisih rata-rata bergerak jangka pendek dan jangka panjang, yang dikombinasikan dengan RSI untuk menilai tren pasar dan overbought oversold.

Prinsip Strategi

  1. Menghitung EMA 12 hari dan EMA 26 hari sebagai rata-rata bergerak jangka pendek dan jangka panjang masing-masing

  2. Perhitungan perbedaan EMA jangka pendek dan jangka panjang, sebagai grafik MACD

  3. Menghitung EMA 9 hari MACD sebagai garis sinyal

  4. Perhitungan RSI 14 hari untuk menilai overbought dan oversold

  5. Ketika MACD melewati sinyal dan RSI lebih besar dari 81, menunjukkan sinyal beli

  6. Ketika MACD di bawah garis sinyal dan RSI kurang dari 27, menunjukkan sinyal jual

  7. Masuk dan keluar menggunakan modul kebijakan built-in

Analisis Keunggulan

  1. Indikator MACD dapat mengidentifikasi tren dan perubahan tren, dan indikator RSI dapat menunjukkan overbought dan oversold, yang keduanya dapat meningkatkan akurasi sinyal perdagangan

  2. Perubahan atas dan bawah pada sumbu nol MACD mewakili perubahan arah dan intensitas tren jangka pendek dan jangka panjang, memberikan dasar untuk menentukan arah pasar

  3. RSI daerah tinggi mewakili kemungkinan overheating dan overbought, RSI daerah rendah mewakili kemungkinan oversold, memberikan dasar untuk mencari titik jual beli

  4. Sinyal perdagangan sederhana dan jelas, mudah untuk melakukan perdagangan sesuai aturan

  5. Parameter yang dapat dikonfigurasi untuk dioptimalkan agar sesuai dengan kondisi pasar yang berbeda

Analisis risiko

  1. Data yang digunakan oleh MACD dan RSI rentan terhadap terobosan palsu dan pengaruh data yang tidak biasa, yang dapat memberikan sinyal yang salah

  2. Pengaturan parameter tetap mungkin tidak dapat beradaptasi dengan perubahan pasar dan perlu dioptimalkan

  3. Sinyal beli dan jual mungkin terlambat, tidak dapat dibeli dan dijual di titik pivot

  4. Posisi hanya kosong, tidak bisa memanfaatkan kejutan

Arah optimasi

  1. Uji kombinasi parameter yang berbeda untuk menemukan parameter optimal

  2. Menambahkan kondisi penyaringan tambahan untuk menghindari penembusan palsu

  3. Meningkatkan strategi stop loss dan mengurangi kerugian dari perdagangan sepihak

  4. Meningkatkan Manajemen Posisi, Meningkatkan Posisi Saat Tren, Menurunkan Posisi Saat Guncangan

  5. Mencari titik jual yang lebih akurat dengan indikator lain

  6. Uji coba terhadap varietas dan periode waktu yang berbeda

Meringkaskan

Strategi ini memanfaatkan keunggulan komplementer dari kedua indikator MACD dan RSI untuk mengidentifikasi arah tren dan titik jual beli. Stabilitas strategi dan faktor keuntungan dapat ditingkatkan dengan parameter optimasi dan menambahkan kondisi penyaringan. Pengaturan yang tepat dari stop loss dan manajemen posisi juga dapat membantu meningkatkan tingkat keuntungan dan mengurangi risiko.

Kode Sumber Strategi
/*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)