Strategi ini menggunakan tiga purata bergerak dari tempoh yang berbeza untuk mengenal pasti arah trend pasaran. Ia memasuki kedudukan apabila tiga purata bergerak bergerak ke arah yang sama. Pada masa yang sama, digabungkan dengan harga tertinggi atau terendah dari N lilin yang paling baru-baru ini, ia menetapkan stop loss dan mengambil keuntungan.
Mengira jangka panjang, jangka sederhana dan jangka pendek tiga purata bergerak. Pengguna boleh menetapkan tempoh sendiri. Nilai lalai adalah 20, 10 dan 5.
Bandingkan arah tiga purata bergerak. Apabila purata bergerak jangka pendek melintasi di atas jangka sederhana, dan jangka sederhana melintasi di atas jangka panjang, ia dinilai sebagai pasaran lembu. Apabila jangka pendek melintasi di bawah jangka sederhana, dan jangka sederhana melintasi di bawah jangka panjang, ia dinilai sebagai pasaran beruang.
Dalam pasaran lembu, jika harga memecahkan harga tertinggi dari N lilin yang paling baru, pergi panjang; dalam pasaran beruang, jika harga memecahkan harga terendah dari N lilin yang paling baru, pergi pendek.
Selepas memasuki kedudukan, tetapkan stop loss dan ambil keuntungan. Stop loss dalam pasaran lembu ditetapkan sebagai harga terendah dari lilin N yang paling baru, dan yang dalam pasaran beruang ditetapkan sebagai harga tertinggi.
Strategi ini menggabungkan penunjuk purata bergerak dan carta candlestick, yang dapat menentukan trend pasaran dengan lebih baik. Pada masa yang sama, tetapan stop loss dan mengambil keuntungan adalah munasabah, yang mendorong untuk mengelakkan kerugian yang lebih besar.
Dibandingkan dengan purata bergerak tunggal dan penunjuk lain, strategi ini menggunakan tiga purata bergerak untuk menilai trend pasaran dengan lebih boleh dipercayai. Sementara itu, memasuki kedudukan apabila memecahkan harga tertinggi atau terendah dari N lilin yang paling baru adalah strategi pecah biasa. Secara keseluruhan, idea strategi jelas dan mudah dilaksanakan.
Risiko utama strategi ini ialah:
Kemungkinan pertimbangan yang salah mengenai arah tiga purata bergerak. Jika purata bergerak jangka pendek menyebabkan isyarat yang salah, kerugian yang tidak perlu boleh disebabkan.
Pemilihan masa yang salah untuk memasuki kedudukan, yang mudah terperangkap.
Jarak stop loss ditetapkan terlalu kecil. Memperluas jarak stop loss membantu untuk membenarkan lebih banyak ruang untuk harga.
Arahan untuk mengoptimumkan strategi ini termasuk:
Tambah penunjuk lain untuk penapisan untuk memastikan kebolehpercayaan isyarat purata bergerak.
Mengoptimumkan tempoh purata bergerak untuk menyesuaikan mereka dengan lebih baik kepada produk yang berbeza.
Tambah algoritma pembelajaran mesin untuk mencapai pengoptimuman parameter automatik.
Uji keberkesanan strategi ini pada data frekuensi tinggi.
Strategi ini agak mudah dan sejagat. Idea ini jelas dengan kelayakan yang kuat. Sebagai contoh sistem crossover purata bergerak, ia adalah pilihan biasa untuk pemula. Melalui pengoptimuman yang betul, sistem ini boleh digunakan untuk lebih banyak produk dan jangka masa untuk mendapatkan pulangan 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")