
Strategi silang purata bergerak ganda adalah strategi dagangan kuantitatif yang biasa. Strategi ini menggunakan purata bergerak dari dua kitaran yang berbeza sebagai isyarat membeli dan menjual apabila rata-rata jangka pendek melintasi rata-rata jangka panjang dan membeli apabila rata-rata jangka pendek melintasi rata-rata jangka panjang. Kod strategi ini menyokong pelbagai jenis purata bergerak yang biasa, seperti purata bergerak sederhana (SMA), purata bergerak indeks (EMA), purata bergerak binari (DEMA), purata bergerak tiga indeks (TEMA), purata bergerak berganda (WMA) dan purata bergerak berganda (VMA), dan mempunyai fleksibiliti untuk menetapkan purata purata jangka pendek dan purata purata jangka panjang.
Prinsip teras strategi ini adalah memanfaatkan ciri-ciri trend dan keterlambatan dua purata bergerak berkala yang berbeza untuk menangkap trend harga. Secara amnya, purata jangka pendek lebih sensitif terhadap perubahan harga, sementara purata jangka panjang agak ketinggalan. Apabila harga berada dalam trend menaik, purata jangka pendek akan bergerak ke atas sebelum purata jangka panjang dan akhirnya menembusi purata jangka panjang, membentuk isyarat beli “Goldfork”; sebaliknya, apabila harga berada dalam trend menurun, purata jangka pendek akan bergerak ke bawah sebelum purata jangka panjang dan akhirnya menembusi purata jangka panjang, membentuk isyarat jual “Deadfork”.
Sederhana: Strategi silang purata bergerak berganda adalah strategi perdagangan kuantitatif yang mudah difahami dan mudah dilaksanakan yang sesuai untuk dipelajari dan digunakan oleh pedagang pemula.
Kebolehgunaan yang luas: Strategi ini boleh digunakan dalam pelbagai pasaran kewangan dan tanda dagangan, seperti saham, niaga hadapan, forex, cryptocurrency, dan sebagainya.
Fleksibiliti parameter: Kod strategi ini menyokong pelbagai jenis purata bergerak dan jenis harga yang biasa, pengguna boleh menyesuaikan parameter secara fleksibel mengikut keperluan mereka sendiri, untuk menyesuaikan diri dengan persekitaran pasaran dan gaya perdagangan yang berbeza.
Pengesanan Trend: Dengan menggunakan isyarat persilangan dua garis rata-rata berkala yang berbeza, strategi ini dapat menangkap trend utama harga dengan lebih baik, membantu mengelakkan dagangan berlawanan arah.
Keterlambatan: Rata-rata bergerak pada dasarnya adalah penunjuk trend, terdapat keterlambatan tertentu yang mungkin terlepas masa masuk dan keluar yang terbaik.
Kegagalan dalam pasaran bergolak: Dalam pasaran bergolak atau dalam keadaan penyusunan berhadapan, pergerakan harga yang lebih besar dan isyarat persilangan garis rata-rata yang kerap, boleh menyebabkan strategi sering berdagang, menyebabkan kos perdagangan yang tinggi dan kehilangan dana.
Kesukaran pengoptimuman parameter: Pilihan kitaran rata-rata mempunyai kesan besar terhadap kesan strategi, tetapi parameter optimum sering berbeza-beza kerana keadaan pasaran yang berbeza, dan sukar untuk mencari kombinasi parameter optimum yang tepat di mana-mana.
Memperkenalkan penapis trend: berdasarkan isyarat persilangan garisan rata, penapis trend boleh dilakukan dengan penunjuk trend lain seperti MACD, ADX, dan lain-lain. Hanya berdagang apabila trend jelas, dan mengelakkan perdagangan yang kerap di pasaran yang bergolak.
Mengoptimumkan Hentian Hentian: Menambah logik Hentian Hentian yang munasabah ke dalam strategi, seperti Hentian Bergerak, Hentian Kadar Volatiliti, dan lain-lain, untuk mengawal risiko perdagangan tunggal dan meningkatkan nisbah risiko keuntungan strategi.
Optimasi parameter dinamik: Untuk keadaan pasaran yang berbeza, parameter seperti kitaran garis rata boleh dioptimumkan secara dinamik secara berkala, supaya strategi dapat menyesuaikan diri dengan perubahan pasaran dan meningkatkan kestabilan.
Kombinasi multi-faktor: menggabungkan isyarat silang purata bergerak ganda dengan faktor kuantitatif lain yang berkesan (seperti jumlah gerak, nilai, jumlah pertukaran, dan lain-lain) untuk membentuk strategi multi-faktor yang lebih stabil dan berkesan.
Strategi persilangan dua rata-rata bergerak adalah strategi penjejakan trend klasik yang mudah untuk menangkap trend harga melalui sinyal persilangan dua rata-rata berkala yang berbeza, sesuai untuk pasaran yang sedang tren. Tetapi strategi ini juga mempunyai masalah seperti ketinggalan dan kesukaran pengoptimuman parameter, yang memerlukan pengoptimuman dan penambahbaikan yang digabungkan dengan kaedah lain, seperti penyaringan trend, pengoptimuman parameter dinamik, kombinasi pelbagai faktor, dan sebagainya, untuk meningkatkan kesesuaian dan kestabilan strategi.
/*backtest
start: 2023-05-08 00:00:00
end: 2024-05-13 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/
// © SustainableInvestment
//@version=5
strategy("Moving average strategy (이동평균선 전략)", overlay=true)
// === INPUTS ===
basisType = input.string(defval = "EMA", title = "MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA ",options=["SMA", "EMA", "DEMA", "TEMA", "WMA", "VWMA"])
shortLen = input.int(defval = 1, title = "Short MA Period", minval = 1)
longLen = input.int(defval = 20, title = "Long MA Period", minval = 1)
price = input.string(defval = "Typical", title = "Price Type : Close, High, Open, Low, Typical, Center ",options=["Close", "High", "Open", "Low", "Typical", "Center"])
// === BASE FUNCTIONS ===
// 가격 종류 설정
priceType(price) =>
Typical = (high+low+close)/3
Center = (high+low) / 2
price=="High"?high : price=="Low"?low : price=="Open"?open : price=="Typical"?Typical : price=="Center"?Center : close
// 이동평균선 종류 설정
variant(type, src, len) =>
v1 = ta.sma(src, len) // Simple
v2 = ta.ema(src, len) // Exponential
v3 = 2 * v2 - ta.ema(v2, len) // Double Exponential
v4 = 3 * (v2 - ta.ema(v2, len)) + ta.ema(ta.ema(v2, len), len) // Triple Exponential
v5 = ta.wma(src, len) // Weighted
v6 = ta.vwma(src, len) // Volume Weighted
type=="EMA"?v2 : type=="DEMA"?v3 : type=="TEMA"?v4 : type=="WMA"?v5 : type=="VWMA"?v6 : v1
longCondition = ta.crossover(variant(basisType, priceType(price), shortLen), variant(basisType, priceType(price), longLen))
if (longCondition)
strategy.entry("Long Entry", strategy.long)
exitCondition = ta.crossunder(variant(basisType, priceType(price), shortLen), variant(basisType, priceType(price), longLen))
if (exitCondition)
strategy.close("Long Entry","Long Exit")