Sumber dimuat naik... memuat...

Strategi Perdagangan Perintah Had Dinamik Multi-Indikator SMA-RSI-MACD

Penulis:ChaoZhang, Tarikh: 2024-12-11 15:15:49
Tag:SMARSIMACDEMA

img

Ringkasan

Strategi ini adalah sistem perdagangan penunjuk multi-teknik yang terutamanya menggunakan persilangan EMA, keadaan oversold RSI, dan salib emas MACD untuk pengesahan perdagangan. Ia menggunakan pesanan had dinamik untuk kemasukan dan pelbagai mekanisme keluar untuk pengurusan risiko. Strategi ini menggunakan Purata Bergerak Eksponen (EMA) 9 tempoh dan 21 tempoh sebagai penunjuk trend utama, digabungkan dengan Indeks Kekuatan Relatif (RSI) dan Divergensi Convergensi Purata Bergerak (MACD) untuk menapis isyarat perdagangan.

Prinsip Strategi

Logik perdagangan teras merangkumi komponen utama berikut:

  1. Isyarat kemasukan diaktifkan apabila EMA 9 tempoh melintasi EMA 21 tempoh
  2. Harga kemasukan ditetapkan sebagai perintah had di bawah EMA 9 tempoh pada offset tertentu
  3. Pengesahan perdagangan memerlukan RSI di bawah ambang dan salib emas MACD
  4. Isyarat keluar termasuk silang kematian MACD, mata keuntungan / kerugian tetap dan penutupan paksa di akhir pasaran
  5. Waktu dagangan adalah terhad antara 9:30 AM dan 3:10 PM

Strategi ini menggunakan pesanan had untuk kemasukan untuk mencapai harga kemasukan yang lebih baik dan menggabungkan beberapa penunjuk teknikal untuk meningkatkan ketepatan perdagangan.

Kelebihan Strategi

  1. Mekanisme pengesahan isyarat berbilang meningkatkan kebolehpercayaan perdagangan
  2. Entri pesanan had memberikan harga pelaksanaan yang lebih baik
  3. Nilai keuntungan/kerugian tetap memudahkan kawalan risiko
  4. Penutupan paksa di hujung pasaran menghapuskan risiko semalam
  5. Sekatan masa dagangan mengelakkan turun naik pembukaan
  6. Indikator EMA memberikan tindak balas trend yang lebih cepat
  7. Gabungan RSI dan MACD membantu menapis isyarat palsu

Risiko Strategi

  1. Pengesahan isyarat berganda boleh menyebabkan peluang yang hilang
  2. Perintah had mungkin tidak dilaksanakan dalam pergerakan harga yang cepat
  3. Hentian titik tetap boleh mengakibatkan kerugian yang lebih besar semasa turun naik yang tinggi
  4. Isyarat MACD mungkin tertinggal dari tindakan harga
  5. Strategi tidak mengambil kira perubahan dalam turun naik pasaran
  6. Pengoptimuman parameter boleh membawa kepada overfit

Arahan Pengoptimuman Strategi

  1. Memperkenalkan titik stop-loss dan mengambil keuntungan yang disesuaikan berdasarkan turun naik pasaran
  2. Tambah penunjuk jumlah sebagai isyarat pengesahan tambahan
  3. Pertimbangkan untuk menambah penapis kekuatan trend
  4. Mengoptimumkan pengiraan pemindahan perintah had menggunakan ATR
  5. Sertakan penunjuk sentimen pasaran untuk menapis keadaan yang tidak baik
  6. Tambah mekanisme saiz kedudukan berdasarkan kekuatan isyarat

Ringkasan

Ini adalah strategi perdagangan pelbagai penunjuk yang terstruktur dengan baik yang mengenal pasti trend menggunakan purata bergerak, menapis isyarat dengan RSI dan MACD, dan mengawal risiko melalui pesanan had dan mekanisme berhenti berbilang. Kekuatan strategi terletak pada kebolehpercayaan isyarat dan kawalan risiko yang komprehensif, walaupun ia menghadapi cabaran dengan kelewatan isyarat dan pengoptimuman parameter. Terdapat ruang yang signifikan untuk penambahbaikan melalui penyesuaian parameter dinamik dan penunjuk tambahan. Ia sesuai untuk pelabur konservatif dalam keadaan pasaran trend.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("SMA 9 & 21 with RSI and MACD Buy Strategy", overlay=true)

// Inputs for Simple Moving Averages
sma_short = ta.ema(close, 9)
sma_long = ta.ema(close, 21)

// Plotting SMA
plot(sma_short, color=color.green, title="SMA 9")
plot(sma_long, color=color.red, title="SMA 21")

// RSI Calculation
rsi_length = input.int(14, title="RSI Length")
rsi_threshold = input.int(70, title="RSI Threshold")
rsi = ta.rsi(close, rsi_length)

// MACD Calculation
macd_fast = input.int(8, title="MACD Fast Length")
macd_slow = input.int(18, title="MACD Slow Length")
macd_signal = input.int(6, title="MACD Signal Length")
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)

// Inputs for Limit Order Offset
limit_offset = input.int(50, title="Limit Order Offset", minval=1)  // 50 points below 9 EMA

// User input for specific date
simulationStartDate = input(timestamp("2024-12-01 00:00"), title="Simulation Start Date", group = "Simulation Dates")
simulationEndDate = input(timestamp("2024-12-30 00:00"), title="Simulation End Date", group = "Simulation Dates")

// Declare limit_price as float
var float limit_price = na

// Calculate Limit Order Price
if (sma_short[1] < sma_long[1] and sma_short > sma_long)  // 9 EMA crosses above 21 EMA
    limit_price := sma_short - limit_offset

// Buy Signal Condition (only on the specified date)
buy_condition = not na(limit_price) and rsi < rsi_threshold and ta.crossover(macd_line, signal_line) 

// Sell Signal Condition (MACD crossover down)
sell_condition = ta.crossunder(macd_line, signal_line)

// Track Entry Price for Point-Based Exit
var float entry_price = na

if (buy_condition )
    strategy.order("Buy", strategy.long, comment="Limit Order at 9 EMA - Offset", limit=limit_price)
    label.new(bar_index, limit_price, "Limit Buy", style=label.style_label_up, color=color.green, textcolor=color.white)
    entry_price := limit_price  // Set entry price

// Exit Conditions
exit_by_macd = sell_condition
exit_by_points = not na(entry_price) and ((close >= entry_price + 12) or (close <= entry_price - 12))  // Adjust as per exit points

// Exit all positions at the end of the day
if hour == 15 and minute > 10 and strategy.position_size > 0
    strategy.close_all()  // Close all positions at the end of the day
    strategy.cancel_all()  

// Exit based on sell signal or point movement
if (exit_by_macd or exit_by_points  and strategy.position_size > 0 )
    strategy.close("Buy")
    label.new(bar_index, close, "Close", style=label.style_label_down, color=color.red, textcolor=color.white)

 

Berkaitan

Lebih lanjut