Strategi dagangan kuantitatif lanjutan: sistem pelaksanaan automatik berdasarkan momentum intrahari dan pengurusan risiko

DOJI SL TP ATR momentum
Tarikh penciptaan: 2025-02-21 14:25:50 Akhirnya diubah suai: 2025-02-27 16:57:06
Salin: 2 Bilangan klik: 446
2
fokus pada
319
Pengikut

Strategi dagangan kuantitatif lanjutan: sistem pelaksanaan automatik berdasarkan momentum intrahari dan pengurusan risiko Strategi dagangan kuantitatif lanjutan: sistem pelaksanaan automatik berdasarkan momentum intrahari dan pengurusan risiko

Gambaran keseluruhan

Ini adalah strategi perdagangan automatik sepenuhnya berdasarkan pergerakan harian, digabungkan dengan pengurusan risiko yang ketat dan sistem pengurusan kedudukan yang tepat. Strategi ini beroperasi terutamanya pada waktu perdagangan London, mencari peluang perdagangan dengan mengenal pasti perubahan dinamik pasaran dan mengecualikan bentuk Doji, sambil melaksanakan peraturan penutupan harian untuk mengawal risiko.

Prinsip Strategi

Logik teras strategi ini dibina di atas beberapa komponen utama. Pertama, masa perdagangan terhad kepada masa London (tidak termasuk 0 dan 19), untuk memastikan kebolehliruan pasaran yang mencukupi. Isyarat masuk adalah berdasarkan pergerakan harga, khususnya penembusan, yang memerlukan titik tinggi garisan arus untuk menembusi titik tinggi garisan sebelumnya (tidak termasuk) atau titik rendah untuk menembusi titik rendah garisan sebelumnya (tidak termasuk), dan perlu memenuhi keperluan kesesuaian arah.

Kelebihan Strategik

  1. Pengurusan risiko yang komprehensif: merangkumi stop loss tetap, peraturan stop loss harian dan pengurusan kedudukan dinamik
  2. Fleksibiliti yang kuat: Saiz urus niaga disesuaikan secara automatik mengikut kepentingan akaun, menyesuaikan diri dengan saiz dana yang berbeza
  3. Jaminan kecairan: Terhad kepada pelaksanaan perdagangan pada waktu perdagangan London untuk mengelakkan risiko kecairan yang rendah
  4. Penapisan isyarat palsu: Mengurangkan kerosakan akibat penembusan palsu dengan mengecualikan bentuk Doji dan isyarat berterusan
  5. Logik pelaksanaan yang jelas: syarat kemasukan dan keluar yang jelas untuk pemantauan dan pengoptimuman

Risiko Strategik

  1. Risiko turun naik pasaran: Hentian tetap mungkin tidak fleksibel semasa turun naik yang tinggi
  2. Risiko tergelincir harga: kemungkinan tergelincir harga yang lebih besar apabila pasaran berubah-ubah dengan cepat
  3. Kepercayaan trend: Strategi yang mungkin menghasilkan lebih banyak isyarat palsu dalam pasaran yang bergolak
  4. Sensitiviti parameter: Tetapan hentian hentian mempunyai kesan yang lebih besar terhadap prestasi strategi Penyelesaiannya merangkumi: penggunaan mekanisme hentian rugi dinamik, penapis kadar turun naik pasaran tambahan, pengenalan penunjuk pengesahan trend, dan sebagainya.

Arah pengoptimuman strategi

  1. Memperkenalkan mekanisme penangguhan yang beradaptasi: penyesuaian jangkauan penangguhan secara dinamik berdasarkan ATR atau kadar turun naik
  2. Menambah penapisan keadaan pasaran: Tambah indikator kekuatan trend, meningkatkan masa memegang kedudukan apabila trend jelas
  3. Mekanisme pengesahan isyarat yang dioptimumkan: meningkatkan kebolehpercayaan isyarat dengan menggabungkan jumlah trafik dan petunjuk teknikal lain
  4. Pengurusan wang yang lebih baik: memperkenalkan sistem pengurusan risiko komposit, pertimbangkan untuk menarik balik kawalan
  5. Menambah analisis struktur mikro pasaran: Meningkatkan ketepatan kemasukan dengan mengintegrasikan data aliran pesanan

ringkaskan

Strategi ini membina kerangka perdagangan yang lengkap dengan menggabungkan pemecahan kuantiti, pengurusan risiko yang ketat dan sistem pelaksanaan automatik. Kelebihan utama strategi ini adalah sistem kawalan risiko yang komprehensif dan reka bentuk penyesuaian diri, tetapi masih memerlukan pengoptimuman dalam pengesanan dan penapisan isyarat persekitaran pasaran. Dengan penambahbaikan berterusan dan pengoptimuman parameter, strategi ini dijangka mengekalkan prestasi yang stabil dalam pelbagai keadaan pasaran.

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

//@version=6
strategy("Trading Strategy for XAUUSD (Gold) – Automated Execution Plan", overlay=true, initial_capital=10000, currency=currency.USD)

//────────────────────────────
// 1. RISK MANAGEMENT & POSITION SIZING
//────────────────────────────
// Configurable inputs for Stop Loss and Take Profit
sl = input.float(title="Stop Loss ($)", defval=5, step=0.1)
tp = input.float(title="Take Profit ($)", defval=15, step=0.1)

// Volume: 0.01 lots per $100 of equity → lotSize = equity / 10000
lotSize = strategy.equity / strategy.initial_capital

//────────────────────────────
// 2. TRADING HOURS (London Time)
//────────────────────────────
// Get the current bar's timestamp in London time.
londonTime   = time(timeframe.period, "", "Europe/London")
londonHour   = hour(londonTime)
tradingAllowed = (londonHour != 0) and (londonHour < 19)

//────────────────────────────
// 3. DOJI CANDLE DEFINITION
//────────────────────────────
// A candle is considered a doji if the sum of its upper and lower shadows is greater than its body.
upperShadow = high - math.max(open, close)
lowerShadow = math.min(open, close) - low
bodySize    = math.abs(close - open)
isDoji      = (upperShadow + lowerShadow) > bodySize

//────────────────────────────
// 4. ENTRY CONDITIONS
//────────────────────────────
// Buy Signal:
//   • Current candle’s high > previous candle’s high.
//   • Current candle’s low is not below previous candle’s low.
//   • Bullish candle (close > open) and not a doji.
//   • Skip if previous candle already qualified.
buyRaw    = (high > high[1]) and (low >= low[1]) and (close > open) and (not isDoji)
buySignal = buyRaw and not (buyRaw[1] ? true : false)

// Sell Signal:
//   • Current candle’s low < previous candle’s low.
//   • Current candle’s high is not above previous candle’s high.
//   • Bearish candle (close < open) and not a doji.
//   • Skip if previous candle already qualified.
sellRaw    = (low < low[1]) and (high <= high[1]) and (close < open) and (not isDoji)
sellSignal = sellRaw and not (sellRaw[1] ? true : false)

//────────────────────────────
// 5. DAILY TAKE PROFIT (TP) RULE
//────────────────────────────
// Create a day-string (year-month-day) using London time.
// This flag will block new trades for the rest of the day if a TP is hit.
var string lastDay = ""
currentDay = str.tostring(year(londonTime)) + "-" + str.tostring(month(londonTime)) + "-" + str.tostring(dayofmonth(londonTime))
var bool dailyTPHit = false
if lastDay != currentDay
    dailyTPHit := false
    lastDay := currentDay

//────────────────────────────
// 6. TRACK TRADE ENTRY & EXIT FOR TP DETECTION
//────────────────────────────
// We record the TP target when a new trade is entered.
// Then, when a trade closes, if the bar’s high (for long) or low (for short) reached the TP target,
// we assume the TP was hit and block new trades for the day.
var float currentTP = na
var int currentTradeType = 0   // 1 for long, -1 for short

// Detect a new trade entry (transition from no position to a position).
tradeEntered = (strategy.position_size != 0 and strategy.position_size[1] == 0)
if tradeEntered
    if strategy.position_size > 0
        currentTP := strategy.position_avg_price + tp
        currentTradeType := 1
    else if strategy.position_size < 0
        currentTP := strategy.position_avg_price - tp
        currentTradeType := -1

// Detect trade closure (transition from position to flat).
tradeClosed = (strategy.position_size == 0 and strategy.position_size[1] != 0)
if tradeClosed and not na(currentTP)
    // For a long trade, if the bar's high reached the TP target;
    // for a short trade, if the bar's low reached the TP target,
    // mark the daily TP flag.
    if (currentTradeType == 1 and high >= currentTP) or (currentTradeType == -1 and low <= currentTP)
        dailyTPHit := true
    currentTP := na
    currentTradeType := 0

//────────────────────────────
// 7. ORDER EXECUTION
//────────────────────────────
// Only open a new position if no position is open, trading is allowed, and daily TP rule is not active.
if (strategy.position_size == 0) and tradingAllowed and (not dailyTPHit)
    if buySignal
        strategy.entry("Long", strategy.long, qty=lotSize)
    if sellSignal
        strategy.entry("Short", strategy.short, qty=lotSize)

//────────────────────────────
// 8. EXIT ORDERS (Risk Management)
//────────────────────────────
// For long positions: SL = entry price - Stop Loss, TP = entry price + Take Profit.
// For short positions: SL = entry price + Stop Loss, TP = entry price - Take Profit.
if strategy.position_size > 0
    longSL = strategy.position_avg_price - sl
    longTP = strategy.position_avg_price + tp
    strategy.exit("Exit Long", from_entry="Long", stop=longSL, limit=longTP)
if strategy.position_size < 0
    shortSL = strategy.position_avg_price + sl
    shortTP = strategy.position_avg_price - tp
    strategy.exit("Exit Short", from_entry="Short", stop=shortSL, limit=shortTP)

//────────────────────────────
// 9. VISUALIZATION
//────────────────────────────
plotshape(buySignal and tradingAllowed and (not dailyTPHit) and (strategy.position_size == 0), title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(sellSignal and tradingAllowed and (not dailyTPHit) and (strategy.position_size == 0), title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")