Strategi perdagangan mata wang kripto berdasarkan MACD


Tarikh penciptaan: 2023-09-19 11:21:42 Akhirnya diubah suai: 2023-09-19 11:21:42
Salin: 0 Bilangan klik: 759
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini adalah strategi perdagangan untuk menilai titik jual beli mata wang kripto berdasarkan purata bergerak agregat harga selisih (MACD) dan indeks kekuatan relatif (RSI). Ia memberi isyarat untuk keputusan perdagangan dengan mengira perbezaan purata bergerak jangka pendek dan jangka panjang, digabungkan dengan RSI untuk menilai trend pasaran dan overbought dan oversold.

Prinsip Strategi

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

  2. Mengira perbezaan antara EMA jangka pendek dan jangka panjang sebagai carta MACD

  3. Hitung EMA 9 hari MACD sebagai garis isyarat

  4. Mengambil RSI 14 hari untuk menilai kegemilangan.

  5. Apabila MACD melintasi garis isyarat dan RSI lebih besar daripada 81, isyarat beli ditunjukkan

  6. Apabila MACD menembusi garisan isyarat dan RSI kurang daripada 27, menunjukkan isyarat jual

  7. Masuk dan keluar menggunakan modul dasar terbina dalam

Analisis kelebihan

  1. Penunjuk MACD dapat mengenal pasti trend dan perubahan trend, penunjuk RSI dapat menunjukkan fenomena overbought dan oversold, yang digabungkan dapat meningkatkan ketepatan isyarat perdagangan

  2. Perubahan atas dan bawah pada MACD 0 mewakili arah dan kekuatan perubahan trend jangka pendek dan jangka panjang, yang memberi dasar untuk menentukan arah pasaran

  3. Kawasan RSI yang tinggi mewakili kemungkinan terlalu panas dan terlalu banyak membeli, RSI yang rendah mewakili kemungkinan terlalu banyak menjual, memberi asas untuk mencari tempat untuk membeli dan menjual

  4. Isyarat perdagangan mudah dan jelas, mudah untuk menjalankan perdagangan mengikut peraturan

  5. Parameter yang boleh dikonfigurasi untuk dioptimumkan untuk menyesuaikan diri dengan keadaan pasaran yang berbeza

Analisis risiko

  1. Data yang digunakan oleh MACD dan RSI terdedah kepada terobosan palsu dan kesan data yang tidak normal, yang mungkin memberi isyarat yang salah

  2. Tetapan parameter tetap mungkin tidak dapat disesuaikan dengan perubahan pasaran dan memerlukan pengoptimuman

  3. Sinyal beli-belah mungkin terlewat dan tidak dapat dibeli dan dijual di titik perubahan

  4. Posisi hanya kosong, pilihan kedua, tidak dapat memanfaatkan kejatuhan

Arah pengoptimuman

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

  2. Menambah syarat penapisan tambahan untuk mengelakkan penembusan palsu

  3. Meningkatkan strategi penangguhan kerugian dan mengurangkan kerugian dalam perdagangan unilateral

  4. Meningkatkan pengurusan kedudukan, menaikkan kedudukan semasa trend, menurunkan kedudukan semasa guncangan

  5. Mencari titik jual beli yang lebih tepat dengan penunjuk lain

  6. Ujian terhadap pelbagai jenis dan tempoh masa

ringkaskan

Strategi ini menggunakan kelebihan saling melengkapi kedua-dua indikator MACD dan RSI untuk mengenal pasti arah trend dan titik jual beli. Kestabilan strategi dan faktor keuntungan boleh diperbaiki dengan mengoptimumkan parameter dan menambah syarat penapisan. Penyesuaian yang sesuai untuk menghentikan kerugian dan pengurusan kedudukan juga dapat membantu meningkatkan tahap keuntungan dan mengurangkan risiko.

Kod 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)