Aliran Berbilang Penunjuk Dinamik Mengikuti Strategi Dagangan Harian

EMA RSI MACD ATR IST
Tarikh penciptaan: 2025-02-21 13:15:30 Akhirnya diubah suai: 2025-02-21 13:15:30
Salin: 0 Bilangan klik: 365
2
fokus pada
319
Pengikut

Aliran Berbilang Penunjuk Dinamik Mengikuti Strategi Dagangan Harian Aliran Berbilang Penunjuk Dinamik Mengikuti Strategi Dagangan Harian

Gambaran keseluruhan

Ini adalah strategi perdagangan dalam hari berdasarkan pelbagai petunjuk teknikal, yang digunakan untuk perdagangan menggunakan pelbagai isyarat seperti saluran EMA, RSI overbought dan oversold, pengesahan trend MACD. Strategi ini berjalan pada kitaran 3 minit, menangkap trend pasaran melalui orbit EMA yang tinggi dan rendah yang digabungkan dengan pengesahan silang RSI dan MACD, dan menetapkan stop loss dinamik berdasarkan ATR, dan masa penyelesaian yang tetap.

Prinsip Strategi

Strategi menggunakan 20 kitaran EMA untuk mengira harga tertinggi dan terendah secara berasingan untuk membentuk saluran, masuk apabila harga menembusi saluran dan memenuhi syarat berikut:

  1. Masuk dengan banyak kepala: EMA tinggi pada harga penutupan, RSI antara 50-70 dan MACD pada garis isyarat
  2. Kemasukan kosong: EMA rendah di bawah harga penutupan, RSI antara 30-50, MACD di bawah garis
  3. Menggunakan ATR Dinamik untuk mengira kedudukan hentian, menetapkan hentian mengikut 2.5 kali ganda risiko / keuntungan
  4. Setiap risiko perdagangan adalah 1% akaun, saiz kedudukan yang dikira secara dinamik mengikut jarak stop loss
  5. Mandatori untuk semua kedudukan yang diletakkan pada jam 15:00 waktu India.

Kelebihan Strategik

  1. Memperbaiki kebolehpercayaan isyarat dagangan melalui pengesahan silang pelbagai petunjuk teknikal
  2. Hentian dinamik berdasarkan ATR, lebih sesuai dengan turun naik pasaran
  3. Nisbah risiko dan ganjaran risiko yang tetap, mengawal risiko dengan berkesan
  4. Mengambil kira kos urus niaga, termasuk perhitungan bayaran
  5. Larangan pembiayaan simultan untuk mengelakkan risiko pembiayaan berlebihan
  6. Menetapkan waktu penutupan untuk mengelakkan risiko bermalam

Risiko Strategik

  1. Penunjuk ganda boleh menyebabkan kelewatan isyarat dan menjejaskan masa masuk
  2. Saluran EMA mungkin menyebabkan penembusan palsu yang kerap berlaku di pasaran horizontal
  3. Nisbah ganjaran risiko tetap mungkin tidak fleksibel dalam keadaan pasaran yang berbeza
  4. Pengekangan RSI mungkin terlepas beberapa trend besar
  5. Penutupan obligasi boleh memaksa pelabur keluar dari kedudukan kritikal

Arah pengoptimuman strategi

  1. Pertimbangkan untuk menambah penunjuk jumlah transaksi sebagai pengesahan tambahan
  2. Rasio risiko-keuntungan boleh disesuaikan mengikut dinamika ciri-ciri turun naik dalam tempoh yang berbeza
  3. Memperkenalkan penyesuaian dinamik RSI
  4. Pertimbangkan untuk meningkatkan penapis kekuatan trend untuk mengurangkan penembusan palsu
  5. Anda boleh mempertimbangkan untuk menyesuaikan parameter mengikut ciri-ciri masa yang berbeza dalam sehari
  6. Menambah analisis kadar turun naik sejarah untuk mengoptimumkan pengurusan kedudukan

ringkaskan

Strategi ini membina sistem perdagangan yang agak lengkap melalui penggunaan gabungan pelbagai petunjuk teknikal. Kelebihan strategi ini adalah kawalan risiko yang lebih baik, termasuk mekanisme seperti berhenti dinamik, risiko tetap dan penyelesaian. Walaupun terdapat risiko ketinggalan, prestasi strategi dapat ditingkatkan lagi dengan mengoptimumkan parameter dan menambah petunjuk tambahan.

Kod sumber strategi
/*backtest
start: 2024-02-21 00:00:00
end: 2024-09-09 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Intraday 3min EMA HL Strategy v6", 
     overlay=true,
     margin_long=100, 
     margin_short=100,
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     commission_type=strategy.commission.percent,
     commission_value=0.05,
     calc_on_every_tick=false,
     process_orders_on_close=true,
     pyramiding=0)

// Input Parameters
i_emaLength = input.int(20, "EMA Length", minval=5, group="Strategy Parameters")
i_rsiLength = input.int(14, "RSI Length", minval=5, group="Strategy Parameters")
i_atrLength = input.int(14, "ATR Length", minval=5, group="Risk Management")
i_rrRatio = input.float(2.5, "Risk:Reward Ratio", minval=1, maxval=10, step=0.5, group="Risk Management")
i_riskPercent = input.float(1, "Risk % per Trade", minval=0.1, maxval=5, step=0.1, group="Risk Management")

// Time Exit Parameters (IST)
i_exitHour = input.int(15, "Exit Hour (IST)", minval=0, maxval=23, group="Session Rules")
i_exitMinute = input.int(0, "Exit Minute (IST)", minval=0, maxval=59, group="Session Rules")

// Indicator Calculations
emaHigh = ta.ema(high, i_emaLength)
emaLow = ta.ema(low, i_emaLength)

rsi = ta.rsi(close, i_rsiLength)
atr = ta.atr(i_atrLength)

fastMA = ta.ema(close, 12)
slowMA = ta.ema(close, 26)
macdLine = fastMA - slowMA
signalLine = ta.ema(macdLine, 9)

// Time Calculations (UTC to IST Conversion)
istHour = (hour(time) + 5) % 24  // UTC+5
istMinute = minute(time) + 30    // 30 minute offset
istHour += istMinute >= 60 ? 1 : 0
istMinute := istMinute % 60

// Exit Condition
timeExit = istHour > i_exitHour or (istHour == i_exitHour and istMinute >= i_exitMinute)

// Entry Conditions (Multi-line formatting fix)
longCondition = close > emaHigh and
     rsi > 50 and
     rsi < 70 and
     ta.crossover(macdLine, signalLine)

shortCondition = close < emaLow and
     rsi < 50 and
     rsi > 30 and
     ta.crossunder(macdLine, signalLine)

// Risk Calculations
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
var float posSize = na

// Strategy Logic
if longCondition and not timeExit and strategy.position_size == 0
    entryPrice := close
    stopLoss := math.min(low, entryPrice - atr)
    takeProfit := entryPrice + (entryPrice - stopLoss) * i_rrRatio
    posSize := strategy.equity * i_riskPercent / 100 / (entryPrice - stopLoss)
    strategy.entry("Long", strategy.long, qty=posSize)
    strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)

if shortCondition and not timeExit and strategy.position_size == 0
    entryPrice := close
    stopLoss := math.max(high, entryPrice + atr)
    takeProfit := entryPrice - (stopLoss - entryPrice) * i_rrRatio
    posSize := strategy.equity * i_riskPercent / 100 / (stopLoss - entryPrice)
    strategy.entry("Short", strategy.short, qty=posSize)
    strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)

// Force Close at Session End
if timeExit
    strategy.close_all()

// Visual Components
plot(emaHigh, "EMA High", color=color.rgb(0, 128, 0), linewidth=2)
plot(emaLow, "EMA Low", color=color.rgb(255, 0, 0), linewidth=2)

plotshape(longCondition, "Long Signal", shape.triangleup, 
  location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition, "Short Signal", shape.triangledown, 
  location.abovebar, color=color.red, size=size.small)

// Debugging Table
var table infoTable = table.new(position.top_right, 3, 3)
if barstate.islast
    table.cell(infoTable, 0, 0, "EMA High: " + str.tostring(emaHigh, "#.00"))
    table.cell(infoTable, 0, 1, "EMA Low: " + str.tostring(emaLow, "#.00"))
    table.cell(infoTable, 0, 2, "Current RSI: " + str.tostring(rsi, "#.00"))