
Strategi perdagangan garis rata-rata progresif adalah strategi untuk berdagang berdasarkan isyarat silang indeks bergerak rata-rata (Exponential Moving Average, EMA) berdasarkan dua parameter yang berbeza. Ia menggunakan garis EMA yang lebih pendek dan garis EMA yang lebih lama, yang menghasilkan isyarat perdagangan ketika mereka bersilang.
Indikator utama strategi ini adalah dua garis EMA: garis cepat dan perlahan. Parameter garis cepat ditetapkan secara default sebagai garis 13 hari, dan perubahan harga lebih sensitif; parameter garis perlahan ditetapkan secara default sebagai garis 48 hari, dan tindak balas terhadap perubahan harga lebih perlahan. Apabila garis pendek naik dengan cepat, garis cepat akan naik lebih awal daripada garis perlahan; apabila garis pendek turun, garis cepat juga akan turun lebih cepat daripada garis perlahan.
Mengikut prinsip ini, strategi ini melakukan lebih banyak apabila garis pantas dari bawah ke atas memecahkan garis perlahan, yang menunjukkan bahawa harga mula naik, dan boleh dibeli; apabila garis pantas dari atas ke bawah memecahkan garis perlahan, yang menunjukkan bahawa trend naik berakhir, dan harus dihentikan. Untuk mengawal risiko, strategi ini juga menetapkan berhenti awal dan berhenti pengesanan: jarak berhenti awal adalah 8 peratus dari harga masuk, dan jarak berhenti pengesanan diam-diam 120 titik.
Pada pelaksanaan kod, strategi ini menilai isyarat silang EMA melalui fungsi crossover dan crossunder, dan apabila persilangan berlaku, ia akan mencetuskan kemasukan dan penutupan yang sesuai untuk membeli dan meletakkan kedudukan damai.
Strategi perdagangan garis lurus progresif mempunyai kelebihan berikut:
Isyarat strategi mudah difahami, mudah diimplementasikan dan sesuai untuk pelajar pemula;
Indeks rata-rata mempunyai kesan yang baik terhadap kebisingan pasaran, yang dapat melihat perubahan trend;
Konfigurasi yang kuat, parameter garis cepat dan perlahan, dan titik henti boleh disesuaikan;
Kaedah pencegahan kerugian boleh mengawal risiko dengan berkesan.
Terdapat beberapa kestabilan.
Strategi ini juga mempunyai risiko:
Dalam keadaan pasaran yang tidak menentu, isyarat silang EMA mungkin terlewat dan tidak dapat mencerminkan perubahan harga dalam masa yang tepat;
Penyesuaian parameter penunjuk rata-rata yang terlalu cepat boleh menghasilkan lebih banyak isyarat salah;
EMA tidak dapat menangkap pergerakan harga dengan berkesan apabila trend berlaku lemah.
Strategi itu sendiri tidak mengambil kira analisis trend pada peringkat besar, dan mudah menghasilkan perdagangan yang menyimpang dari trend besar apabila trend keseluruhan pasaran tidak jelas.
Risiko di atas boleh dikurangkan dengan:
Bersama-sama dengan petunjuk lain untuk mengesahkan isyarat persilangan linear, seperti MACD, KD dan lain-lain;
Menyesuaikan parameter EMA mengikut pasaran yang berbeza untuk mengurangkan kadar isyarat salah;
Tambah modul penilaian trend, merujuk kepada garis purata jangka panjang untuk menilai arah keseluruhan keadaan.
Strategi ini boleh dioptimumkan dalam beberapa arah:
Menambah penapis syarat untuk membuka kedudukan, untuk mengelakkan terlalu banyak perdagangan yang tidak perlu dalam keadaan yang tidak menentu. Indikator seperti kadar turun naik, jumlah dagangan, dan lain-lain boleh digunakan untuk menetapkan had pembukaan kedudukan;
Menggabungkan titik tinggi dan rendah pasaran, kedudukan sokongan dan lain-lain untuk menetapkan kedudukan penghentian kerugian, meningkatkan ketepatan penghentian kerugian;
Menambah modul penilaian trend untuk menapis isyarat jangka pendek dengan trend jangka panjang dalam bingkai masa yang lebih tinggi, untuk mengelakkan penyimpangan daripada trend besar;
Parameter EMA boleh dilatih dan dioptimumkan melalui pembelajaran mesin untuk menjadikannya lebih sesuai dengan keadaan pasaran sebenar, mengurangkan kadar isyarat salah.
Perkara-perkara di atas adalah arah utama di mana strategi ini dapat diperbaiki dan dioptimumkan pada masa akan datang. Dengan penggabungan yang sesuai dengan lebih banyak petunjuk dan kaedah pengurusan risiko, strategi silang EMA ini akan menjadi lebih berkesan.
Strategi perdagangan garis rata-rata progresif adalah strategi trend mengikuti asas. Ia menggunakan garis cepat dan garis perlahan EMA untuk menilai trend harga, dan menggabungkan risiko kawalan dengan cara menghentikan. Isyarat strategi ini adalah ringkas dan jelas, mudah difahami, sangat sesuai untuk pelajar pemula, dan merupakan salah satu strategi tipikal untuk permulaan kuantitatif.
/*backtest
start: 2022-12-13 00:00:00
end: 2023-12-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// *** USE AT YOUR OWN RISK ***
//
strategy("EMA Strategy", shorttitle = "EMA Strategy", overlay=true, pyramiding = 3,default_qty_type = strategy.percent_of_equity, default_qty_value = 10)
// === Inputs ===
// short ma
maFastSource = input(defval = close, title = "Fast MA Source")
maFastLength = input(defval = 13, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource = input(defval = close, title = "Slow MA Source")
maSlowLength = input(defval = 48, title = "Slow MA Period", minval = 1)
// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop = input(defval = true, title = "Use Initial Stop Loss?")
slPoints = input(defval = 25, title = "Initial Stop Loss Points", minval = 1)
useTS = input(defval = true, title = "Use Trailing Stop?")
tslPoints = input(defval = 120, title = "Trail Points", minval = 1)
useTSO = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset = input(defval = 20, title = "Trail Offset Points", minval = 1)
// === Vars and Series ===
fastMA = ema(maFastSource, maFastLength)
slowMA = ema(maSlowSource, maSlowLength)
plot(fastMA, color=blue)
plot(slowMA, color=purple)
goLong() => crossover(fastMA, slowMA)
killLong() => crossunder(fastMA, slowMA)
strategy.entry("Buy", strategy.long, when = goLong())
strategy.close("Buy", when = killLong())
// Shorting if using
goShort() => crossunder (fastMA, slowMA)
killShort() => crossover(fastMA, slowMA)
//strategy.entry("Sell", strategy.short, when = goShort())
//strategy.close("Sell", when = killShort())
if (useStop)
strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08 )
strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)