Strategi Persilangan Purata Bergerak


Tarikh penciptaan: 2023-09-18 17:35:37 Akhirnya diubah suai: 2023-09-18 17:35:37
Salin: 0 Bilangan klik: 688
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi persilangan rata-rata bergerak adalah strategi pengesanan trend berdasarkan persilangan rata-rata bergerak sebagai isyarat perdagangan. Strategi ini menggunakan harga dengan persilangan rata-rata bergerak dan dua persilangan rata-rata bergerak sebagai isyarat beli dan jual untuk mendapatkan keuntungan.

Prinsip Strategi

Prinsip-prinsip utama strategi ini ialah:

  1. Hitung dua garis purata bergerak, cepat atau lambat, anda boleh memilih SMA atau EMA.

  2. Apabila dalam barisan cepat melalui barisan perlahan, lakukan lebih banyak; apabila dalam barisan cepat melalui barisan perlahan, bertenang.

  3. Anda boleh memilih untuk menukar harga melalui garis rata-rata atau melalui garis rata-rata sebagai isyarat perdagangan.

  4. Anda boleh setkan tempoh masa untuk menjalankan strategi tersebut.

  5. Hanya lebih banyak yang boleh dilakukan untuk pasaran bertopeng, dan hanya kosong untuk pasaran kosong.

  6. Optimumkan parameter garis purata bergerak untuk menyesuaikan diri dengan kitaran yang berbeza.

Strategi ini menggunakan fungsi trend-tracking pada moving averages, yang menunjukkan bahawa apabila jangka pendek di atas rata-rata melintasi jangka panjang, ia menunjukkan bahawa ia sedang dalam trend naik dan harus melakukan lebih banyak; sebaliknya, apabila jangka pendek di bawah rata-rata melintasi jangka panjang, yang menunjukkan bahawa ia sedang dalam trend menurun dan harus mengurangkan kedudukan.

Analisis kelebihan

Kelebihan utama strategi ini ialah:

  1. Prinsipnya mudah, mudah dilaksanakan, isyarat dagangan jelas.

  2. Ia boleh mengesan trend dengan cekap dan menangkap peluang jual beli tepat pada masanya.

  3. Ia boleh digabungkan dengan parameter garis rata yang berbeza untuk pelbagai keadaan pasaran.

  4. Anda boleh memilih untuk melakukan lebih banyak atau hanya kosong, mengelakkan operasi terbalik yang tidak pasti.

  5. Anda boleh menetapkan masa untuk menjalankan strategi dan mengelakkan tempoh masa tertentu.

  6. Dengan mengoptimumkan parameter, anda boleh terus meningkatkan prestasi strategi.

Analisis risiko

Risiko utama strategi ini ialah:

  1. Ia boleh menyebabkan isyarat palsu dan perlu dielakkan daripada berdagang terlalu kerap.

  2. Penampilan bergantung pada pilihan parameter rata-rata, pilihan yang salah boleh menyebabkan kerugian.

  3. Terdapat beberapa kelewatan, dan ia harus mengelakkan kemasukan terlalu awal dan keluar terlalu lewat.

  4. Tidak sesuai untuk keadaan pasaran yang bergolak.

  5. Persaingan rata-rata adalah secara rawak dan tidak dapat mengelakkan kerugian sepenuhnya.

Risiko boleh dikurangkan dengan pengesahan jumlah transaksi, parameter pengoptimuman, atau digunakan dengan kombinasi penunjuk lain.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Tambahkan /% ((Line - ShortMa) /ShortMa) / ((Line - LongMa) /LongMa) / sebagai syarat penapis cerun rata-rata.

  2. Mengoptimumkan parameter kitaran purata bergerak, menguji kombinasi yang berbeza.

  3. Tambah MACD atau RSI sebagai pengesahan berganda.

  4. Tetapkan syarat-syarat berhenti kerugian dan hadkan kerugian tunggal.

  5. Membezakan pasaran trend dan pasaran penyusunan, untuk penggunaan bersyarat.

  6. Uji jangka masa yang berbeza untuk mencari penyelesaian yang terbaik.

ringkaskan

Strategi persilangan garisan rata-rata bergerak adalah strategi penjejakan trend yang mudah dan praktikal. Kelebihannya adalah mudah dilaksanakan dan dapat menjejaki trend dengan berkesan; Kelemahannya adalah mempunyai keterbelakangan dan mungkin menghasilkan lebih banyak isyarat palsu.

Kod sumber strategi
/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time = true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)