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.
Menghitung EMA 12 hari dan EMA 26 hari sebagai rata-rata bergerak jangka pendek dan jangka panjang masing-masing
Perhitungan perbedaan EMA jangka pendek dan jangka panjang, sebagai grafik MACD
Menghitung EMA 9 hari MACD sebagai garis sinyal
Perhitungan RSI 14 hari untuk menilai overbought dan oversold
Ketika MACD melewati sinyal dan RSI lebih besar dari 81, menunjukkan sinyal beli
Ketika MACD di bawah garis sinyal dan RSI kurang dari 27, menunjukkan sinyal jual
Masuk dan keluar menggunakan modul kebijakan built-in
Indikator MACD dapat mengidentifikasi tren dan perubahan tren, dan indikator RSI dapat menunjukkan overbought dan oversold, yang keduanya dapat meningkatkan akurasi sinyal perdagangan
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
RSI daerah tinggi mewakili kemungkinan overheating dan overbought, RSI daerah rendah mewakili kemungkinan oversold, memberikan dasar untuk mencari titik jual beli
Sinyal perdagangan sederhana dan jelas, mudah untuk melakukan perdagangan sesuai aturan
Parameter yang dapat dikonfigurasi untuk dioptimalkan agar sesuai dengan kondisi pasar yang berbeda
Data yang digunakan oleh MACD dan RSI rentan terhadap terobosan palsu dan pengaruh data yang tidak biasa, yang dapat memberikan sinyal yang salah
Pengaturan parameter tetap mungkin tidak dapat beradaptasi dengan perubahan pasar dan perlu dioptimalkan
Sinyal beli dan jual mungkin terlambat, tidak dapat dibeli dan dijual di titik pivot
Posisi hanya kosong, tidak bisa memanfaatkan kejutan
Uji kombinasi parameter yang berbeda untuk menemukan parameter optimal
Menambahkan kondisi penyaringan tambahan untuk menghindari penembusan palsu
Meningkatkan strategi stop loss dan mengurangi kerugian dari perdagangan sepihak
Meningkatkan Manajemen Posisi, Meningkatkan Posisi Saat Tren, Menurunkan Posisi Saat Guncangan
Mencari titik jual yang lebih akurat dengan indikator lain
Uji coba terhadap varietas dan periode waktu yang berbeda
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.
/*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)