
Strategi ini menggunakan tiga rata-rata bergerak dari tiga periode yang berbeda untuk mengidentifikasi arah tren pasar. Masuk ke posisi ketika tiga rata-rata bergerak berlawanan arah.
Menghitung tiga rata-rata bergerak jangka panjang, menengah, dan jangka pendek. Pengguna dapat mengatur periode sendiri. Default adalah 20, 10, dan 5 hari.
Perbandingan arah tiga rata-rata bergerak. Ketika rata-rata bergerak jangka pendek di atas rata-rata dan jangka panjang di atas rata-rata, dinilai sebagai pasar multihead. Ketika rata-rata bergerak jangka pendek di bawah rata-rata dan jangka panjang di bawah rata-rata, dinilai sebagai pasar kosong
Dalam pasar multihead, jika harga menembus harga tertinggi dalam garis N root K terbaru, lakukan over; dalam pasar kosong, jika harga menembus harga terendah dalam garis N root K terbaru, lakukan short. N juga merupakan parameter yang dapat disesuaikan oleh pengguna.
Setelah masuk ke posisi, atur stop loss. Stop loss pasar multihead adalah harga terendah dalam garis N-root K terbaru, dan stop loss pasar kosong adalah harga tertinggi dalam garis N-root K terbaru.
Strategi ini dikombinasikan dengan indikator moving average dan grafik K-line, yang dapat membantu menilai pergerakan pasar. Pada saat yang sama, pengaturan stop loss yang masuk akal, membantu untuk menghindari kerugian yang lebih besar.
Strategi ini menggunakan tiga rata-rata bergerak untuk menilai keandalan pergerakan pasar yang lebih tinggi dibandingkan dengan satu rata-rata bergerak. Selain itu, menerobos N akar K garis harga tertinggi atau terendah baru-baru ini untuk memasuki posisi adalah strategi yang lebih umum. Secara keseluruhan, strategi ini jelas dan mudah diterapkan.
Risiko utama dari strategi ini adalah:
Tiga arah rata-rata bergerak menilai probabilitas kesalahan. Jika rata-rata bergerak jangka pendek dan menengah menyebabkan sinyal yang salah, dapat menyebabkan kerugian yang tidak perlu.
Pemilihan waktu masuk yang tidak tepat, mudah diblokir. Pemilihan waktu masuk harus dioptimalkan dengan tepat.
Stop loss setting terlalu kecil, memperluas stop loss distance membantu memberikan harga lebih banyak Running Room.
Strategi ini dapat dioptimalkan dengan cara berikut:
Menambahkan penyaringan indikator lain untuk memastikan keandalan sinyal moving average. Sebagai contoh, penambahan jumlah transaksi penilaian kosong.
Optimalkan parameter periodik dari moving average agar lebih cocok untuk varietas yang berbeda.
Menambahkan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara otomatis.
Untuk menguji efektivitas strategi ini pada data frekuensi tinggi.
Strategi ini secara keseluruhan relatif sederhana, umum, ide yang jelas, dan praktis. Sebagai contoh sistem bergerak rata-rata cross, adalah pilihan umum bagi pemula. Dengan optimasi yang tepat, sistem dapat digunakan untuk varietas yang lebih luas dan periode waktu, sehingga mendapatkan keuntungan 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")