
Strategi ini menggabungkan konsep metode perdagangan kerbau dengan analisis fase dari Niko Bakkers, menggunakan tiga rata-rata bergerak dari tiga periode yang berbeda untuk menilai arah tren, dan menghasilkan keuntungan dari tren yang dilacak. Lakukan lebih banyak ketika rata-rata bergerak cepat melintasi rata-rata bergerak cepat di atas rata-rata bergerak cepat dan ketiga rata-rata bergerak berada dalam tren naik atau turun yang sama; kosongkan ketika rata-rata bergerak cepat melintasi rata-rata bergerak cepat di bawah dan ketiga rata-rata bergerak berada dalam tren naik atau turun yang sama.
Hitung tiga rata-rata bergerak dari tiga periode yang berbeda: rata-rata bergerak cepat adalah 8 hari, rata-rata bergerak menengah adalah 21 hari, dan rata-rata bergerak lambat adalah 55 hari.
Kriteria masuk: Lakukan lebih banyak ketika rata-rata bergerak cepat melewati rata-rata bergerak cepat dan ketiga rata-rata bergerak berada dalam tren naik; kosongkan ketika rata-rata bergerak cepat melewati rata-rata bergerak cepat di bawah rata-rata bergerak cepat dan ketiga rata-rata bergerak berada dalam tren turun.
Untuk menentukan kondisi keluar: Rata-rata bergerak cepat terbalik melewati rata-rata bergerak cepat dan posisi terendah.
Pengendalian posisi: menggunakan posisi tetap, setiap kali membuka posisi 1 orang. Anda juga dapat memilih untuk menyesuaikan posisi sesuai dengan dinamika ATR.
Penggunaan tiga rata-rata bergerak membantu menentukan arah tren dan menghindari false breaks.
Ini adalah salah satu cara yang paling efektif untuk memantau tren, dan memiliki potensi keuntungan yang besar.
Dengan menggunakan Moving Average, keuntungan stabil dan penarikan relatif kecil.
Strategi Stop Loss yang dapat dikendalikan untuk mengurangi kemungkinan kerugian besar.
Kemungkinan untuk menghasilkan kerugian kecil berulang dan mengurangi efisiensi keuntungan.
Rata-rata bergerak tertinggal, mungkin kehilangan titik balik tren.
Posisi tetap tidak dapat mengontrol risiko secara efektif, dan dapat meledak jika terjadi lonjakan besar.
Optimisasi parameter yang tidak tepat akan terlalu sering membuka posisi kosong, meningkatkan biaya transaksi dan kehilangan slippage.
Optimalkan parameter periodik dari moving average agar lebih sesuai dengan karakteristik varietas perdagangan.
Menggunakan indikator volatilitas ATR untuk mengadaptasi posisi secara dinamis.
Bergabunglah dengan Stop Loss Strategi.
Keandalan tren digabungkan dengan indikator volume transaksi.
Strategi ini mengintegrasikan indikator analisis teknis tradisional dengan konsep perdagangan kerbau, menggunakan tiga rata-rata bergerak untuk melacak tren, dan dapat menghasilkan keuntungan yang lebih baik jika parameter dioptimalkan. Namun, strategi ini juga memiliki risiko tertentu, perlu menambahkan langkah-langkah seperti stop loss dan manajemen posisi untuk mengendalikan risiko, sehingga mendapatkan strategi perdagangan kuantitatif yang menghasilkan keuntungan stabil jangka panjang.
/*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