Strategi Mengikuti Trend Purata Pergerakan Tiga Kali


Tarikh penciptaan: 2024-02-01 11:02:17 Akhirnya diubah suai: 2024-02-01 11:02:17
Salin: 2 Bilangan klik: 600
1
fokus pada
1617
Pengikut

Strategi Mengikuti Trend Purata Pergerakan Tiga Kali

Gambaran keseluruhan

Strategi ini menggabungkan konsep kaedah perdagangan kerbau dengan analisis fasa Niko Bakkers, menggunakan purata bergerak dari tiga tempoh yang berbeza untuk menentukan arah trend, untuk menjejaki trend untuk keuntungan. Lakukan lebih banyak apabila bergerak cepat di atas rata-rata bergerak cepat dan ketiga-tiga rata-rata bergerak berada dalam trend naik atau turun yang sama; kosongkan apabila bergerak cepat di bawah rata-rata bergerak cepat dan ketiga-tiga rata-rata bergerak berada dalam trend naik atau turun yang sama.

Prinsip Strategi

  1. Hitung purata bergerak untuk tiga tempoh yang berbeza: purata bergerak pantas dengan tempoh 8 hari, purata bergerak sederhana dengan tempoh 21 hari, dan purata bergerak perlahan dengan tempoh 55 hari.

  2. Syarat kemasukan: Lakukan lebih banyak apabila bergerak cepat di atas rata-rata bergerak dan ketiga-tiga rata-rata bergerak berada dalam trend menaik; kosongkan apabila bergerak cepat di bawah rata-rata bergerak dan ketiga-tiga rata-rata bergerak berada dalam trend menurun.

  3. Untuk menilai keadaan keluar: Rata-rata bergerak pantas berbalik melintasi rata-rata bergerak pantas.

  4. Kawalan kedudukan: menggunakan kedudukan tetap, setiap kali membuka kedudukan 1 orang. Anda juga boleh memilih untuk menyesuaikan kedudukan mengikut ATR dinamik.

Kelebihan Strategik

  1. Penggunaan tiga purata bergerak membantu menentukan arah trend dan mengelakkan pecah palsu.

  2. Ia juga boleh digunakan untuk menjejaki trend, dan berpotensi untuk keuntungan.

  3. Hasilnya stabil, dan penarikan baliknya agak kecil.

  4. Strategi Hentikan Kerosakan yang boleh dikawal untuk mengurangkan kemungkinan kerugian besar.

Analisis risiko

  1. Ia boleh menyebabkan kerugian kecil berulang dan mengurangkan kecekapan keuntungan.

  2. Dalam kes ini, rata-rata bergerak terlewat dan mungkin terlepas titik perubahan trend.

  3. Posisi tetap tidak dapat mengawal risiko dengan berkesan, dan ia mungkin pecah apabila berlaku kejutan pasaran yang besar.

  4. Optimasi parameter yang tidak betul akan menyebabkan terlalu kerap membuka dan menutup kedudukan, meningkatkan kos dagangan dan kehilangan slippage.

Arah pengoptimuman

  1. Mengoptimumkan parameter kitaran purata bergerak untuk menjadikannya lebih sesuai dengan ciri-ciri varieti perdagangan.

  2. Guna indikator turun naik ATR untuk menyesuaikan kedudukan secara dinamik.

  3. Bergabung dengan strategi Stop Loss.

  4. Kebolehpercayaan trend digabungkan dengan indikator jumlah dagangan.

ringkaskan

Strategi ini mengintegrasikan petunjuk analisis teknikal tradisional dengan falsafah perdagangan burung gagak, menggunakan tiga trend pengesanan purata bergerak, dengan parameter yang dioptimumkan dengan betul, anda boleh mendapatkan kesan keuntungan yang lebih baik. Tetapi strategi ini juga mempunyai risiko tertentu, anda perlu menambah langkah-langkah seperti menghentikan kerugian dan pengurusan kedudukan untuk mengawal risiko, untuk mendapatkan strategi perdagangan kuantitatif yang stabil untuk keuntungan jangka panjang.

Kod sumber strategi
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoshuaMcGowan

//@version=4

// 1. Define strategy settings
strategy(title="Triple Moving Average", overlay=true,
     pyramiding=0, initial_capital=1000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=4, slippage=2)
     
fastMALen = input(title="Fast MA Length", type=input.integer, defval=8)
medMALen  = input(title="Medium MA Length", type=input.integer, defval=21)
slowMALen = input(title="Slow MA Length", type=input.integer, defval=55)

//endMonth = input(title="End Month Backtest", type=input.integer, defval=11)
//endYear  = input(title="End Year Backtest", type=input.integer, defval=2019)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 12, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2016, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true)
riskPerc   = input(title="Risk %", type=input.float, defval=0.5, step=0.25)

// 2. Calculate strategy values
fastMA = sma(close, fastMALen)
medMA  = sma(close, medMALen)
slowMA = sma(close, slowMALen)

//Position Sizing
riskEquity  = (riskPerc / 100) * strategy.equity
atrCurrency = (atr(20) * syminfo.pointvalue)
posSize     = usePosSize ? floor(riskEquity / atrCurrency) : 1

//Backtest Window
//tradeWindow = (time <= timestamp(endYear, endMonth, 1, 0, 0))

// 3. Determine long trading conditions
enterLong = crossover(fastMA, medMA) and
     (fastMA > slowMA) and (medMA > slowMA) and
     window() 

exitLong = crossunder(fastMA, medMA)

// 4. Code short trading conditions
enterShort = crossunder(fastMA, medMA) and
     (fastMA < slowMA) and (medMA < slowMA) and
     window() 

exitShort = crossover(fastMA, medMA)

// 5. Output strategy data
plot(series=fastMA, color=color.green, title="Fast MA")
plot(series=medMA, color=color.purple, title="Medium MA")
plot(series=slowMA, color=color.red, title="Slow MA",
     linewidth=2)
     
bgColour =
     enterLong and (strategy.position_size < 1) ? color.green :
     enterShort and (strategy.position_size > -1) ? color.red :
     exitLong and (strategy.position_size > 0) ? color.lime :
     exitShort and (strategy.position_size < 0) ? color.orange :
     na

bgcolor(color=bgColour, transp=85)

// 6. Submit entry orders
if (enterLong)
    strategy.entry(id="EL", long=true, qty=1)

if (enterShort)
    strategy.entry(id="ES", long=false, qty=1)

// 7. Submit exit orders
strategy.close_all(when=exitLong and
     (strategy.position_size > 0))
strategy.close_all(when=exitShort and
     (strategy.position_size < 0))

strategy.close_all(when=not window())

//END