Strategi ini menggunakan tiga rata-rata bergerak dari periode yang berbeda untuk mengidentifikasi arah tren pasar. Ini memasuki posisi ketika tiga rata-rata bergerak bergerak ke arah yang sama. Pada saat yang sama, dikombinasikan dengan harga tertinggi atau terendah dari N lilin terbaru, itu mengatur stop loss dan mengambil keuntungan.
Menghitung jangka panjang, jangka menengah dan jangka pendek tiga rata-rata bergerak. Pengguna dapat mengatur periode sendiri. Nilai default adalah 20, 10 dan 5.
Bandingkan arah tiga rata-rata bergerak. Ketika rata-rata bergerak jangka pendek melintasi di atas rata-rata jangka menengah, dan jangka menengah melintasi di atas jangka panjang, itu dinilai sebagai pasar bull. Ketika jangka pendek melintasi di bawah jangka menengah, dan jangka menengah melintasi di bawah jangka panjang, itu dinilai sebagai pasar bear.
Dalam pasar bull, jika harga menembus harga tertinggi dari N lilin terbaru, pergi panjang; di pasar bear, jika harga menembus harga terendah dari N lilin terbaru, pergi pendek.
Setelah masuk ke posisi, atur stop loss dan ambil keuntungan. Stop loss di pasar bull ditetapkan sebagai harga terendah dari N candles terbaru, dan di pasar bear ditetapkan sebagai harga tertinggi.
Strategi ini menggabungkan indikator rata-rata bergerak dan grafik candlestick, yang dapat lebih menentukan tren pasar. Pada saat yang sama, pengaturan stop loss dan take profit wajar, yang kondusif untuk menghindari kerugian yang lebih besar.
Di bandingkan dengan moving average tunggal dan indikator lainnya, strategi ini menggunakan tiga moving average untuk menilai tren pasar dengan lebih andal. Sementara itu, memasuki posisi ketika memecahkan harga tertinggi atau terendah dari N lilin terbaru adalah strategi breakout yang umum. Secara keseluruhan, ide strategi jelas dan mudah dilaksanakan.
Risiko potensial utama dari strategi ini adalah:
Kemungkinan penilaian yang salah pada arah tiga rata-rata bergerak Jika rata-rata bergerak jangka menengah-pendek menyebabkan sinyal yang salah, kerugian yang tidak perlu dapat disebabkan.
Pemilihan waktu yang salah untuk masuk ke posisi, yang mudah terjebak.
Jarak stop loss diatur terlalu kecil. Memperluas jarak stop loss membantu untuk memungkinkan lebih banyak ruang untuk harga.
Arah untuk mengoptimalkan strategi ini meliputi:
Tambahkan indikator lain untuk penyaringan untuk memastikan keandalan sinyal rata-rata bergerak.
Mengoptimalkan periode rata-rata bergerak untuk lebih menyesuaikan mereka dengan produk yang berbeda.
Tambahkan algoritma pembelajaran mesin untuk mencapai optimasi parameter otomatis.
Uji efektivitas strategi ini pada data frekuensi tinggi.
Strategi ini relatif sederhana dan universal. Ide ini jelas dengan kelayakan yang kuat. Sebagai contoh sistem crossover rata-rata bergerak, ini adalah pilihan umum bagi pemula. Melalui optimasi yang tepat, sistem dapat diterapkan pada lebih banyak produk dan kerangka waktu untuk mendapatkan pengembalian yang stabil.
/*backtest start: 2023-01-30 00:00:00 end: 2024-02-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © hobbiecode //@version=5 strategy("Cross Breakout - Hobbiecode", shorttitle="Cross - HOBBIE", overlay=true) // User-defined input for moving averages long_period = input(20, title="Long Period") medium_period = input(10, title = "Medium Period") short_period = input(5, title="Short Period") type_ma = input.string("SMA", title = "MA type", options = ["SMA", "EMA"]) candles_back = input(10, title = "Candles Back") bars_valid = input(3, title = "Bars to Exit") // Calculating moving averages long_ma = 0.0 medium_ma = 0.0 short_ma = 0.0 if type_ma == "SMA" long_ma := ta.sma(close, long_period) medium_ma := ta.sma(close, medium_period) short_ma := ta.sma(close, short_period) else long_ma := ta.ema(close, long_period) medium_ma := ta.ema(close, medium_period) short_ma := ta.ema(close, short_period) // Plot moving averages plot(long_ma, title="Long Moving Average", color=color.red) plot(medium_ma, title = "Medium Moving Average", color = color.yellow) plot(short_ma, title="Short Moving Average", color=color.green) // Check last min/max last_min = ta.lowest(candles_back) last_max = ta.highest(candles_back) // Strategy logic for crossing of moving averages longCondition = short_ma > medium_ma and medium_ma > long_ma and high == last_max shortCondition = short_ma < medium_ma and medium_ma < long_ma and low == last_min longCondition_entry = longCondition and strategy.position_size == 0 shortCondition_entry = shortCondition and strategy.position_size == 0 // Check last min/max for operation last_min_op = ta.lowest(candles_back)[1] last_max_op = ta.highest(candles_back)[1] // Plot lines var line r1Line = na // Entry orders // if (longCondition) // from_line = chart.point.now(high) // to_line = chart.point.from_index(bar_index + candles_back, high) // r1Line := line.new(from_line, to_line, color = color.green, width = 2) if longCondition_entry and ta.crossover(close,last_max_op) strategy.entry("Long", strategy.long) strategy.exit("Exit Long", from_entry="Long", stop=low) // if (shortCondition) // from_line = chart.point.now(low) // to_line = chart.point.from_index(bar_index + candles_back, low) // r1Line := line.new(from_line, to_line, color = color.red, width = 2) if shortCondition_entry and ta.crossunder(close,last_min_op) strategy.entry("Short", strategy.short) strategy.exit("Exit Short", from_entry="Short", stop=high) if ta.barssince(longCondition_entry) >= bars_valid strategy.close("Long") if ta.barssince(shortCondition_entry) >= bars_valid strategy.close("Short")