Strategi pecah silang purata bergerak


Tarikh penciptaan: 2024-02-06 15:02:33 Akhirnya diubah suai: 2024-02-06 15:02:33
Salin: 1 Bilangan klik: 671
1
fokus pada
1617
Pengikut

Strategi pecah silang purata bergerak

Gambaran keseluruhan

Strategi ini menggunakan tiga purata bergerak dari tiga tempoh yang berbeza untuk mengenal pasti arah trend pasaran. Apabila tiga purata bergerak arah yang sama, masuk ke dalam kedudukan.

Prinsip Strategi

  1. Menghitung tiga purata bergerak jangka panjang, jangka sederhana, dan jangka pendek. Pengguna boleh menetapkan tempoh sendiri. Secara lalai, 20, 10, dan 5 hari.

  2. Perbandingan arah tiga purata bergerak. Apabila purata bergerak jangka pendek di atas rata-rata dan jangka panjang di atas rata-rata, ia dinilai sebagai pasaran multihead. Apabila purata bergerak jangka pendek di bawah rata-rata dan jangka panjang di bawah rata-rata, ia dinilai sebagai pasaran kosong.

  3. Dalam pasaran bertopeng, jika harga menembusi harga tertinggi dalam N akar K baris terakhir, buat lebih; dalam pasaran kosong, jika harga menembusi harga terendah dalam N akar K baris terakhir, buat kosong. N juga merupakan parameter yang disesuaikan untuk pengguna.

  4. Selepas memasuki kedudukan, set stop loss. Stop loss di pasaran berbilang adalah harga terendah dalam N root K line, dan stop loss di pasaran kosong adalah harga tertinggi dalam N root K line.

Analisis kelebihan

Strategi ini digabungkan dengan penunjuk purata bergerak dan grafik garis K, dapat lebih baik menilai pergerakan pasaran. Pada masa yang sama, penyetempatan stop loss adalah munasabah, yang membantu mengelakkan kerugian yang lebih besar.

Strategi ini menggunakan tiga rata-rata bergerak untuk menilai pergerakan pasaran yang lebih dipercayai berbanding dengan satu rata-rata bergerak dan sebagainya. Di samping itu, memecahkan harga tertinggi atau harga terendah N root K baru-baru ini untuk memasuki kedudukan adalah strategi penembusan yang lebih biasa. Secara keseluruhan, strategi ini jelas dan mudah dilaksanakan.

Analisis risiko

Risiko utama yang mungkin ada dalam strategi ini ialah:

  1. Tiga arah purata bergerak menilai kemungkinan kesilapan. Jika purata bergerak jangka pendek dan sederhana menyebabkan isyarat yang salah, ia mungkin menyebabkan kerugian yang tidak perlu.

  2. Pemilihan masa masuk yang tidak tepat, mudah dibodohkan. Pemilihan masa masuk harus dioptimumkan dengan sewajarnya.

  3. Penetapan jarak henti terlalu kecil, dan jarak henti yang lebih besar akan membantu memberi lebih banyak Running Room.

Arah pengoptimuman

Kaedah ini boleh dioptimumkan dengan cara berikut:

  1. Menambah penapis indikator lain untuk memastikan kebolehpercayaan isyarat purata bergerak. Sebagai contoh, meningkatkan penghakiman kosong dalam jumlah transaksi.

  2. Mengoptimumkan parameter kitaran purata bergerak untuk menjadikannya lebih sesuai untuk pelbagai jenis.

  3. Menambah algoritma pembelajaran mesin untuk mengoptimumkan parameter secara automatik.

  4. Untuk menguji keberkesanan strategi ini pada data frekuensi tinggi.

ringkaskan

Strategi ini secara keseluruhannya lebih mudah digunakan, idea jelas, dan praktikal. Sebagai contoh sistem persilangan purata bergerak, ia adalah pilihan biasa bagi pemula. Dengan pengoptimuman yang sesuai, sistem ini boleh digunakan untuk varieti dan tempoh masa yang lebih luas, sehingga mendapat keuntungan yang stabil.

Kod sumber strategi
/*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")