Strategi perdagangan dua hala panjang dan pendek berdasarkan MACD dan RSI


Tarikh penciptaan: 2023-10-09 15:33:17 Akhirnya diubah suai: 2023-10-09 15:33:17
Salin: 0 Bilangan klik: 432
1
fokus pada
1218
Pengikut

Gambaran keseluruhan

Strategi ini menggabungkan kedua-dua penunjuk MACD dan RSI, yang boleh dilakukan apabila arah trend tidak jelas, dan pada masa yang sama melakukan banyak perdagangan shorting untuk mendapatkan keuntungan tambahan.

Prinsip Strategi

  1. Hitung EMA pantas (gambaran 12 hari) dan EMA perlahan (gambaran 26 hari)
  2. Hitung perbezaan MACD ((EMA pantas tolak EMA perlahan)
  3. Hitung purata bergerak 9 hari MACD sebagai garis isyarat
  4. RSI 14 hari dikira
  5. Apabila MACD <-0.1, RSI <27 dan EMA pantas lebih rendah daripada EMA perlahan, lakukan lebih banyak
  6. Apabila MACD> 0.125, RSI> 81 dan EMA pantas lebih tinggi daripada EMA perlahan, buat shorting
  7. Tetapkan hentian, hentian, hentian bergerak untuk menguruskan kedudukan

Analisis kelebihan

  1. Berdagang dalam jangka masa yang panjang dan mendapat keuntungan tambahan dalam keadaan yang tidak berpatutan
  2. Gabungan EMA arah trend dan RSI pembalikan dapat meningkatkan kualiti isyarat
  3. Menggunakan Stop Loss Bergerak untuk mengunci keuntungan dan mengawal risiko kerugian dengan berkesan

Analisis risiko

  1. Transaksi dua hala memerlukan lebih banyak wang untuk menyokong tuntutan deposit.
  2. Apabila keadaan bertukar dengan teruk, ia boleh menyebabkan kerugian pada kedudukan kosong.
  3. Tetapan parameter yang tidak betul boleh menyebabkan terlalu banyak dagangan

Penyelesaian risiko:

  1. Sokongan kewangan yang mencukupi, kawalan saiz kedudukan
  2. Tetapkan jarak penghentian yang munasabah untuk mengelakkan penghentian yang terlalu padat
  3. Optimumkan parameter, mengurangkan frekuensi transaksi

Arah pengoptimuman

  1. Anda boleh mempertimbangkan untuk mengoptimumkan masa kemasukan anda dengan menggunakan indikator turun naik.
  2. Anda boleh menguji kombinasi parameter yang berbeza untuk mencari parameter terbaik.
  3. Anda boleh mengoptimumkan strategi henti kerugian mengikut keadaan pasaran, seperti hentian susulan.
  4. Parameter yang boleh dioptimumkan secara automatik dengan algoritma pembelajaran mesin

ringkaskan

Strategi ini membolehkan perdagangan dua hala melalui gabungan MACD dan RSI. Menggunakan hentian bergerak untuk mengunci keuntungan, boleh memperoleh keuntungan berlebihan dalam keadaan bukan trend. Strategi ini dapat mengoptimumkan lagi parameter yang ditetapkan, strategi hentian dan sebagainya, untuk mendapatkan keuntungan tambahan yang lebih stabil.

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