Strategi perdagangan dua arah jangka panjang dan pendek berdasarkan MACD dan RSI


Tanggal Pembuatan: 2023-10-09 15:33:17 Akhirnya memodifikasi: 2023-10-09 15:33:17
menyalin: 0 Jumlah klik: 701
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini menggabungkan dua indikator MACD dan RSI, yang dimungkinkan untuk melakukan lebih banyak perdagangan shorting untuk mendapatkan keuntungan ekstra ketika arah tren tidak jelas.

Prinsip Strategi

  1. Perhitungan EMA cepat (garis 12) dan EMA lambat (garis 26)
  2. Hitung MACD convergence deviasi (EMA cepat dikurangi EMA lambat)
  3. Hitung MACD Moving Average 9 Hari sebagai Signal Line
  4. RSI 14 hari
  5. Bila MACD <-0.1, RSI <27 dan EMA cepat lebih rendah dari EMA lambat, lakukan lebih banyak
  6. Ketika MACD> 0.125, RSI> 81 dan EMA cepat lebih tinggi dari EMA lambat, melakukan shorting
  7. Setting Stop Loss, Move Stop Loss untuk mengelola posisi

Analisis Keunggulan

  1. Perdagangan over-the-counter dapat menghasilkan keuntungan ekstra di pasar yang tidak sedang tren
  2. Kombinasi indikator trend EMA dan indikator reversal RSI dapat meningkatkan kualitas sinyal
  3. Menggunakan Stop Loss Mobile untuk mengunci keuntungan, dapat mengontrol risiko kerugian secara efektif

Analisis risiko

  1. Transaksi dua arah membutuhkan lebih banyak dana untuk mendukung tuntutan jaminan.
  2. Jika terjadi pergeseran yang dramatis, Anda dapat menghentikan posisi kosong Anda.
  3. Setting parameter yang tidak tepat dapat menyebabkan terlalu sering perdagangan

Solusi untuk Mengatasi Risiko:

  1. Dukungan keuangan yang memadai, kontrol posisi
  2. Tetapkan jarak penghentian yang masuk akal, hindari penghentian yang terlalu padat
  3. Optimalisasi parameter, mengurangi frekuensi transaksi

Arah optimasi

  1. Anda dapat mempertimbangkan untuk mengoptimalkan waktu masuk dengan mengkombinasikan indikator volatilitas.
  2. Anda dapat menguji kombinasi parameter yang berbeda untuk menemukan yang terbaik.
  3. Anda dapat mengoptimalkan strategi stop loss sesuai dengan kondisi pasar, seperti stop loss tail.
  4. Parameter optimasi otomatis yang dapat dikombinasikan dengan algoritma pembelajaran mesin

Meringkaskan

Strategi ini memungkinkan perdagangan dua arah melalui kombinasi MACD dan RSI. Menggunakan stop loss bergerak untuk mengunci keuntungan, dapat memperoleh keuntungan tambahan dalam situasi non-trending. Strategi ini dapat lebih mengoptimalkan pengaturan parameter, strategi stop loss, dan lain-lain, untuk mendapatkan keuntungan tambahan yang lebih stabil.

Kode Sumber Strategi
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Revision:        290
// Author:          @Hugo_Moriceau
//study("Moriceau_Crypto_strategies_Long_short_indicator_thesis",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Moriceau_Crypto_strategies_Long_short_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)

dataB = macd < -0.1  and rsi<27 and fastMA < slowMA
// data1 = macd > 0.125  and rsi>81 and fastMA> slowMA
dataS = macd > 0.125 and rsi > 81 and fastMA > slowMA

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

// === LOGIC ===

// is fast ma above slow ma?
Achat = macd < -0.1  and rsi < 27 and fastMA < slowMA ? true : false
vente = macd > 0.125 and rsi > 81 and fastMA > slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = vente ? Achat ? false : true : Achat ? 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))
plotchar(dataB, char='B',color=black,size = size.auto,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.auto,location = location.abovebar,transp= 0)

//fast = plot(maFast, title = "FastMA", color = yellow, linewidth = 2, style = line, transp = 50)
//slow = plot(maSlow, title = "SlowMA", color = black, linewidth = 2, style = line, transp = 50)

// === BACKTEST RANGE ===
FromMonth = input(defval = 05, title = "From Month", minval = 1)
FromDay   = input(defval = 23, title = "From Day", minval = 1)
FromYear  = input(defval = 2021, title = "From Year", minval = 2017)
ToMonth   = input(defval = 5, title = "To Month", minval = 1)
ToDay     = input(defval = 25, title = "To Day", minval = 1)
ToYear    = input(defval = 2021, title = "To Year", minval = 2017)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 2500, title = "Take Profit", minval = 28)
inpStopLoss     = input(defval = 600, title = "Stop Loss", minval = 15)
inpTrailStop    = input(defval = 300, title = "Trailing Stop Loss", minval = 5)
inpTrailOffset  = input(defval = 50, title = "Trailing Stop Loss Offset", minval = 1)

// === 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 = "Achat", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "TP 50% Sell", 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 = "Vente", long = false, when = enterShort())
strategy.close(id = "Vente", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===

// finally, make use of all the earlier values we got prepped
strategy.exit("Vente", from_entry = "Vente", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Short", from_entry = "Achat", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)