Strategi dagangan kuantitatif henti untung dan henti rugi dinamik crossover purata bergerak ganda EMA

EMA
Tarikh penciptaan: 2024-11-18 15:53:49 Akhirnya diubah suai: 2024-11-18 15:53:49
Salin: 5 Bilangan klik: 611
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan kuantitatif yang berasaskan persilangan garis rata, digabungkan dengan mekanisme berhenti berhenti yang dinamik. Inti strategi ini adalah untuk mengenal pasti trend pasaran melalui persilangan purata bergerak 10 kitaran dan 26 kitaran indeks ((EMA) dan berdagang semasa penyesuaian. Sistem ini menggunakan tetapan titik berhenti berhenti yang tetap untuk melindungi keselamatan dana melalui kawalan risiko yang ketat.

Prinsip Strategi

Strategi ini menggunakan dua EMA purata yang berbeza-beza sebagai indikator utama: EMA 10 kitaran jangka pendek dan EMA 26 kitaran jangka panjang. Apabila rata-rata jangka pendek melintasi rata-rata jangka panjang ke atas, sistem mengenal pasti sebagai tren naik, menghasilkan isyarat beli; apabila rata-rata jangka pendek melintasi rata-rata jangka panjang ke bawah, sistem mengenal pasti sebagai tren turun, menghasilkan isyarat jual.

Kelebihan Strategik

  1. Kejelasan isyarat: menggunakan persilangan linear sebagai isyarat dagangan, peraturan ringkas dan jelas, mudah dilaksanakan dan dipantau
  2. Kawalan risiko: Menggunakan titik hentian yang tetap untuk mengawal risiko setiap dagangan
  3. Pengesanan trend: menggabungkan persilangan garis rata dan penyesuaian harga untuk lebih memahami keadaan trend
  4. Tingkat automasi yang tinggi: logik strategi yang jelas, mudah untuk memprogram perdagangan automatik
  5. Adaptif: sesuai untuk pelbagai jenis perdagangan, terutamanya jenis yang mempunyai kadar turun naik

Risiko Strategik

  1. Risiko pasaran yang bergolak: Isyarat palsu mungkin sering muncul dalam pasaran yang bergolak
  2. Risiko tergelincir: kemungkinan tergelincir yang lebih besar apabila pasaran berubah-ubah
  3. Risiko Stop Loss: Tahap Stop Loss tetap mungkin tidak fleksibel dalam keadaan pasaran tertentu
  4. Keterlambatan isyarat: isyarat persilangan linear mempunyai keterlambatan, mungkin terlepas titik masuk terbaik
  5. Pengurusan risiko wang: perlu mengawal peratusan wang dalam setiap urus niaga

Arah pengoptimuman strategi

  1. Hentian dinamik: anda boleh mempertimbangkan untuk menyesuaikan kedudukan hentian secara dinamik mengikut turun naik pasaran
  2. Penapisan isyarat: penapisan isyarat palsu melalui peningkatan jumlah lalu lintas, kadar turun naik dan lain-lain
  3. Penapisan masa: Tambah penapisan pada masa perdagangan untuk mengelakkan pergerakan yang kuat
  4. Pengurusan kedudukan: menambah mekanisme penangguhan sebahagian, yang membolehkan mengekalkan sebahagian kedudukan untuk terus mengikuti trend
  5. Pengurusan wang: Menambah sistem pengurusan wang dinamik yang secara automatik menyesuaikan saiz transaksi mengikut nilai bersih akaun

ringkaskan

Strategi ini membina sistem perdagangan yang lengkap dengan menggabungkan EMA crossover rata-rata dan regresi harga. Strategi ini direka dengan mudah dan intuitif, kawalan risiko jelas, sesuai untuk varieti perdagangan yang lebih turun naik. Dengan pengoptimuman dan penyesuaian parameter yang munasabah, strategi ini dijangka dapat memperoleh keuntungan yang stabil dalam perdagangan dalam talian.

Kod sumber strategi
/*backtest
start: 2023-11-18 00:00:00
end: 2024-11-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("30 Pips Target & 15 Pips Stop-Loss with One Signal at a Time", overlay=true)

// Define settings for target and stop-loss in pips
target_in_pips = 30
stoploss_in_pips = 10

// Convert pips to price value based on market (for forex, 1 pip = 0.0001 for major pairs like GBP/JPY)
pip_value = syminfo.mintick * 10  // For forex, 1 pip = 0.0001 or 0.01 for JPY pairs
target_value = target_in_pips * pip_value
stoploss_value = stoploss_in_pips * pip_value

// Define EMAs (10-EMA and 26-EMA) for the crossover strategy
ema10 = ta.ema(close, 10)
ema26 = ta.ema(close, 26)

// Buy signal: when 10 EMA crosses above 26 EMA
longCondition = ta.crossover(ema10, ema26)
// Sell signal: when 10 EMA crosses below 26 EMA
shortCondition = ta.crossunder(ema10, ema26)

// Define price levels with explicit type float
var float long_entry_price = na
var float long_take_profit = na
var float long_stop_loss = na
var float short_entry_price = na
var float short_take_profit = na
var float short_stop_loss = na

// Variable to track if a trade is active
var bool inTrade = false

// Check if the trade hit stop loss or take profit
if (inTrade)
    if (not na(long_take_profit) and close >= long_take_profit)
        inTrade := false  // Exit the trade after hitting target
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(long_stop_loss) and close <= long_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(short_take_profit) and close <= short_take_profit)
        inTrade := false  // Exit the trade after hitting target
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

    if (not na(short_stop_loss) and close >= short_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

// Only generate new signals if not already in a trade
if (not inTrade)
    if (longCondition)
        long_entry_price := close
        long_take_profit := close + target_value
        long_stop_loss := close - stoploss_value
        strategy.entry("Long", strategy.long)  // Enter a long trade
        strategy.exit("Take Profit/Stop Loss", "Long", limit=long_take_profit, stop=long_stop_loss)
        inTrade := true  // Mark trade as active

    if (shortCondition)
        short_entry_price := close
        short_take_profit := close - target_value
        short_stop_loss := close + stoploss_value
        strategy.entry("Short", strategy.short)  // Enter a short trade
        strategy.exit("Take Profit/Stop Loss", "Short", limit=short_take_profit, stop=short_stop_loss)
        inTrade := true  // Mark trade as active

// Plot the levels on the chart only when in a trade
plot(inTrade and not na(long_take_profit) ? long_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Long)")
plot(inTrade and not na(long_stop_loss) ? long_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Long)")

plot(inTrade and not na(short_take_profit) ? short_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Short)")
plot(inTrade and not na(short_stop_loss) ? short_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Short)")

plotshape(series=longCondition and not inTrade, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition and not inTrade, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")