Purata pergerakan eksponen digabungkan dengan trailing stop loss dan peratusan stop loss strategi dagangan kuantitatif saham


Tarikh penciptaan: 2024-01-03 16:25:54 Akhirnya diubah suai: 2024-01-03 16:25:54
Salin: 0 Bilangan klik: 699
1
fokus pada
1621
Pengikut

Purata pergerakan eksponen digabungkan dengan trailing stop loss dan peratusan stop loss strategi dagangan kuantitatif saham

Gambaran keseluruhan

Inti strategi ini adalah menggunakan purata bergerak rata-rata indeks sebagai isyarat membeli dan menjual, digabungkan dengan hentian dan peratusan hentian untuk mengunci keuntungan dan mengawal risiko. Strategi ini mudah dilaksanakan dan digunakan untuk perdagangan kuantitatif saham dan produk kewangan lain.

Prinsip Strategi

  1. Hitung EMA pantas dan EMA perlahan, EMA pantas mempunyai kitaran 20 hari dan EMA perlahan mempunyai kitaran 50 hari. Ia menghasilkan isyarat beli apabila EMA pantas melintasi EMA perlahan; ia menghasilkan isyarat jual apabila EMA pantas melintasi EMA perlahan.

  2. Tetapkan trailing stop loss selepas masuk, mengikut arah memegang kedudukan masing-masing menetapkan peratusan trailing stop loss dan trailing stop loss, contohnya 7%. Trailing stop loss akan menyesuaikan secara automatik setiap baris K, mengunci keuntungan maksimum yang mungkin.

  3. Pada masa yang sama menetapkan kedudukan berhenti, mengikut arah memegang kedudukan dan harga masuk masing-masing menetapkan peratusan harga berhenti banyak kedudukan dan harga berhenti kosong, contohnya 2%. Kedudukan berhenti tetap, mencegah kerugian yang berlebihan.

  4. Bandingkan harga hentian dan harga hentian, pilih kedudukan hentian yang lebih dekat dengan harga pasaran untuk perdagangan ini, dan keluarkan pesanan hentian.

Kelebihan Strategik

  1. Sinyal purata bergerak mudah difahami dan mudah dilaksanakan.

  2. Hentikan kerugian mengikut kunci keuntungan maksimum, dan mengelakkan kesilapan yang membawa kepada kerugian yang tidak perlu.

  3. Peratusan Stop Loss mudah disesuaikan secara intuitif, untuk mengawal kerugian maksimum bagi setiap transaksi.

  4. Di samping itu, ia juga boleh digunakan untuk mengunci keuntungan dan mengawal risiko.

Risiko dan tindakan

  1. Strategi purata bergerak mudah menghasilkan isyarat palsu, memperkenalkan syarat penapisan yang lebih kuat.

  2. Penghentian kemusnahan ekor kadang-kadang berlaku terlalu awal, dan penghentian kemusnahan dikurangkan dengan tepat.

  3. Tetapan kedudukan hentian tetap yang tidak betul mungkin terlalu radikal atau konservatif, perlu diuji untuk menyesuaikan parameter peratusan.

  4. Hentikan kerugian secara mekanikal mungkin terlepas peluang untuk membalikkan pasaran, dan boleh dikombinasikan dengan indikator teknikal untuk menilai hentikan kerugian.

Optimum idea

  1. Cuba kombinasi EMA dengan parameter yang berbeza untuk mencari keseimbangan terbaik.

  2. Menambah petunjuk penapisan isyarat palsu seperti jumlah transaksi.

  3. Uji lebih banyak saham untuk mencari parameter hentian yang sesuai.

  4. Cuba masukkan stop loss bergerak dan sesuaikan kedudukan stop loss dengan pasaran.

  5. Menggabungkan RSI dan lain-lain untuk menentukan masa henti.

ringkaskan

Strategi ini mengintegrasikan isyarat perdagangan purata bergerak, hentian mengikut dan peratusan hentian, dengan pengoptimuman parameter, dapat digunakan untuk pelbagai saham dan komoditi, memperoleh keuntungan yang stabil sambil mengawal risiko dengan ketat, dan patut diukur. Pelabur mengkaji amalan dan terus mengoptimumkannya.

Kod sumber strategi
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wouterpruym1828

//@version=5
strategy(title=" Combining Trailing Stop and Stop loss (% of instrument price)",
     overlay=true, pyramiding=1, shorttitle="TSL&SL%")

//INDICATOR SECTION

// Indicator Input options+
i_FastEMA = input.int(title = "Fast EMA period", minval = 0, defval = 20)
i_SlowEMA = input.int(title = "Slow EMA period", minval = 0, defval = 50)
     
// Calculate moving averages
fastEMA = ta.ema(close, i_FastEMA)
slowEMA = ta.ema(close, i_SlowEMA)

// Plot moving averages
plot(fastEMA, title="Fast SMA", color=color.blue)
plot(slowEMA, title="Slow SMA", color=color.orange)




//STRATEGY SECTION  

// Calculate trading conditions
buy  = ta.crossover(fastEMA, slowEMA)
sell = ta.crossunder(fastEMA, slowEMA)

// STEP 1:
// Configure trail stop loss level with input options (optional)

longTrailPerc = input.float(title="Long Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

shortTrailPerc = input.float(title="Short Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

//Configure stop loss level with input options (optional)

longStopPerc = input.float(title="Long Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01

shortStopPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01


// STEP 2:
// Determine trail stop loss prices
longTrailPrice = 0.0, shortTrailPrice = 0.0

longTrailPrice := if (strategy.position_size > 0)
    stopValue = high * (1 - longTrailPerc)
    math.max(stopValue, longTrailPrice[1])
else
    0

shortTrailPrice := if (strategy.position_size < 0)
    stopValue = low * (1 + shortTrailPerc)
    math.min(stopValue, shortTrailPrice[1])
else
    999999

// Determine stop loss prices
entryPrice = 0.0

entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)


longLossPrice = entryPrice * (1 - longStopPerc)

shortLossPrice = entryPrice * (1 + shortStopPerc)


// Plot stop loss values for confirmation

plot(series=(strategy.position_size > 0) ? longTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Long Trail Stop")
plot(series=(strategy.position_size < 0) ? shortTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Short Trail Stop")

plot(series=(strategy.position_size > 0) ? longLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? shortLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Short Stop Loss")

// Submit entry orders
if (buy)
    strategy.entry("Buy", strategy.long)

if (sell)
    strategy.entry("Sell", strategy.short)


//Evaluating trailing stop or stop loss to use

longStopPrice = longTrailPrice < longLossPrice ? longLossPrice : longTrailPrice

shortStopPrice = shortTrailPrice > shortLossPrice ? shortLossPrice : shortTrailPrice

// STEP 3:
// Submit exit orders for stop price

if (strategy.position_size > 0)
    strategy.exit(id="Buy Stop", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="Sell Stop", stop=shortStopPrice)