Strategi Penembusan Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2024-02-06 15:02:33
Tag:

img

Ringkasan

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.

Logika Strategi

  1. Mengira jangka panjang, jangka sederhana dan jangka pendek tiga purata bergerak. Pengguna boleh menetapkan tempoh sendiri. Nilai lalai adalah 20, 10 dan 5.

  2. 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.

  3. 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.

  4. 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.

Analisis Kelebihan

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.

Analisis Risiko

Risiko utama strategi ini ialah:

  1. Kemungkinan pertimbangan yang salah mengenai arah tiga purata bergerak. Jika purata bergerak jangka pendek menyebabkan isyarat yang salah, kerugian yang tidak perlu boleh disebabkan.

  2. Pemilihan masa yang salah untuk memasuki kedudukan, yang mudah terperangkap.

  3. Jarak stop loss ditetapkan terlalu kecil. Memperluas jarak stop loss membantu untuk membenarkan lebih banyak ruang untuk harga.

Arahan pengoptimuman

Arahan untuk mengoptimumkan strategi ini termasuk:

  1. Tambah penunjuk lain untuk penapisan untuk memastikan kebolehpercayaan isyarat purata bergerak.

  2. Mengoptimumkan tempoh purata bergerak untuk menyesuaikan mereka dengan lebih baik kepada produk yang berbeza.

  3. Tambah algoritma pembelajaran mesin untuk mencapai pengoptimuman parameter automatik.

  4. Uji keberkesanan strategi ini pada data frekuensi tinggi.

Ringkasan

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")

Lebih lanjut