
Strategi ini berdasarkan pada persilangan dua purata bergerak dengan parameter yang berbeza untuk menghantar isyarat beli dan jual. Isyarat beli dikeluarkan apabila purata bergerak dengan tempoh yang lebih pendek menembusi purata bergerak dengan tempoh yang lebih lama dari arah bawah; isyarat jual dikeluarkan apabila purata bergerak dengan tempoh yang lebih pendek menembusi purata bergerak dengan tempoh yang lebih lama dari arah atas.
Strategi ini ditulis menggunakan bahasa skrip pine. Pertama, dengan input, jenis, panjang dan sumber harga dua purata bergerak ditakrifkan, masing-masing dinamakan p1 dan p2. Di mana p1 mewakili purata tempoh yang lebih pendek, dan p2 mewakili purata tempoh yang lebih lama.
Fungsi crossover dan crossunder menentukan persimpangan dua garis rata. Apabila p1 menembusi p2 dari arah bawah, ia memberi isyarat beli; apabila p1 menembusi p2 dari arah atas, ia memberi isyarat jual.
Untuk melaksanakan perdagangan, strategi menggunakan fungsi strategy.entry untuk mewujudkan kedudukan overhead atau kosong ketika isyarat dikeluarkan. Jika parameter shortOnly diaktifkan, hanya perdagangan yang menjual isyarat.
Strategi ini mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Anda boleh mengurangkan isyarat tidak sah dengan menyesuaikan panjang garis rata-rata, memperkenalkan syarat penapis dan sebagainya. Anda juga boleh menggabungkan indikator trend untuk menentukan pergerakan saham besar.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Memperkenalkan harga purata bertimbangan volum atau harga tipikal sebagai sumber harga untuk meningkatkan kebolehpercayaan isyarat silang
Meningkatkan tempoh pengesahan untuk mengelakkan kesalahan yang bercampur-campur
Dengan ATR Stop loss, set kerugian maksimum yang boleh diterima berdasarkan turun naik pasaran
Menggunakan parameter pengoptimuman penyesuaian kurva untuk mencari kombinasi parameter yang optimum
Pertimbangkan untuk menghantar isyarat perdagangan apabila trend kitaran besar adalah selaras
Strategi silang dua garis sejajar ini mudah difahami dan dilaksanakan secara keseluruhan, dengan membentuk isyarat perdagangan melalui silang dua garis sejajar, sangat disesuaikan. Tetapi juga mungkin menghasilkan lebih banyak isyarat yang tidak berkesan dalam keadaan gegaran. Risiko dapat dikurangkan dengan pengoptimuman parameter dan pengoptimuman peraturan, ruang pengoptimuman yang lebih besar, yang patut diteliti lebih lanjut.
/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
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/
// © RafaelPiccolo
//@version=4
strategy("Double MA Cross", overlay=true)
type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len1 = input(10, minval=1, title="Length 1")
src1 = input(close, "Source 1", type=input.source)
type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len2 = input(50, minval=2, title="Length 2")
src2 = input(close, "Source 2", type=input.source)
shortOnly = input(false, "Short only")
tema(src, len)=>
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
return = 3 * (ema1 - ema2) + ema3
getPoint(type, len, src)=>
return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)
p1 = getPoint(type1, len1, src1)
p2 = getPoint(type2, len2, src2)
shortCondition = crossunder(p1, p2)
longCondition = crossover(p1, p2)
if (shortCondition)
strategy.entry("Short", strategy.short)
if (longCondition)
if (shortOnly)
strategy.close("Short")
else
strategy.entry("Long", strategy.long)
plot(p1, "MA 1", p1 < p2 ? color.red : color.green)
plot(p2, "MA 2", color.blue)