Strategi ini menggunakan salib emas dan salib kematian purata bergerak berganda untuk menentukan trend dan menghasilkan isyarat beli dan jual. Apabila purata bergerak pantas melintasi di atas purata bergerak perlahan dari bawah, salib emas berlaku dan isyarat beli dihasilkan. Apabila purata bergerak pantas melintasi di bawah purata bergerak perlahan dari atas, salib kematian berlaku dan isyarat jual dihasilkan.
Strategi ini terdiri daripada komponen berikut:
Hitung nilai osilator harga dalam bentuk peratusan. Nilai osilator adalah peratusan harga dikurangkan nilai median. Nilai median dikira sebagai purata contoh harga tertinggi dan terendah 20 hari.
Mengira purata bergerak nilai osilator, seperti purata bergerak Hull 20 hari.
Mengira nilai kelewatan purata bergerak, seperti kelewatan 12 hari.
Tentukan sama ada purata bergerak melintasi di atas atau di bawah purata bergerak yang tertinggal, menghasilkan isyarat salib emas atau salib kematian.
Mengeluarkan isyarat beli dan jual.
Khususnya, strategi ini mula-mula mengira nilai osilator harga, kemudian purata bergerak osilator, dan kemudian nilai tertinggal purata bergerak.
Apabila purata bergerak osilator melintasi di atas purata bergerak yang tertinggal, isyarat salib emas dihasilkan untuk pergi lama. Apabila purata bergerak osilator melintasi di bawah purata bergerak yang tertinggal, isyarat salib kematian dihasilkan untuk pergi pendek.
Dengan menilai persilangan purata bergerak dua, arah perdagangan ditentukan.
Kelebihan strategi ini termasuk:
Menggunakan purata bergerak berganda menapis isyarat palsu dan meningkatkan kebolehpercayaan isyarat.
Menggabungkan purata bergerak pantas dan perlahan menangkap trend jangka pertengahan. MA pantas sensitif terhadap perubahan harga manakala MA perlahan mempunyai kualiti yang tertinggal. Menggabungkan kedua-duanya menapis bunyi bising jangka pendek sambil menangkap pembalikan trend jangka pertengahan.
Osilator menonjolkan titik pecah dan menghasilkan isyarat perdagangan yang lebih jelas.
Algoritma dan parameter MA yang boleh disesuaikan sesuai dengan persekitaran pasaran yang berbeza.
Logik strategi yang mudah dan jelas, mudah difahami dan dilaksanakan, mesra pemula.
Risiko strategi ini termasuk:
Crossover MA berganda mempunyai isyarat yang tertinggal, berpotensi kehilangan titik masuk terbaik.
Rendah kepada isyarat yang salah semasa pasaran yang terhad.
Tidak dapat menentukan kekuatan trend, risiko keluar awal semasa pasaran bull.
Terlalu banyak parameter yang boleh diselaraskan, sukar untuk mengoptimumkan kombinasi parameter terbaik.
Tiada mekanisme stop loss, tidak dapat mengawal kerugian perdagangan tunggal.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Mengoptimumkan jenis dan parameter MA, pengujian kestabilan di pasaran yang berbeza.
Tambah penunjuk penentu trend seperti ADX untuk mengelakkan perdagangan yang tidak perlu dari isyarat yang salah.
Tambahkan mekanisme stop loss seperti trailing stop atau stop peratusan untuk mengawal kerugian perdagangan tunggal.
Sertakan penunjuk lain seperti jumlah, RSI untuk meningkatkan kualiti isyarat.
Gunakan pembelajaran mesin untuk mengoptimumkan parameter secara automatik untuk tetapan yang lebih kukuh.
Pertimbangkan untuk meringankan sedikit syarat kemasukan untuk mengurangkan perdagangan yang terlepas.
Strategi crossover purata bergerak berganda ini menangkap titik pembalikan trend jangka menengah dengan menggabungkan purata bergerak pantas dan perlahan, menapis bunyi pasaran jangka pendek. Ia mempunyai kelebihan menjadi mudah, mudah difahami dan mesra pemula. Tetapi ia juga mempunyai kelemahan seperti menghasilkan isyarat yang salah dan ketidakupayaan untuk menentukan kekuatan trend. Strategi ini boleh dipertingkatkan dengan mengoptimumkan parameter MA, menambah penapis trend, menetapkan syarat-syarat stop loss dan lain-lain untuk memenuhi persekitaran pasaran yang berbeza. Secara keseluruhan, strategi purata bergerak berganda adalah strategi berdasarkan penunjuk teknikal praktikal yang patut disahkan melalui pengoptimuman dan ujian langsung.
/*backtest start: 2023-09-06 00:00:00 end: 2023-10-06 00:00:00 period: 4h basePeriod: 15m 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/ // © EvoCrypto //@version=4 strategy("Distance Oscillator Strategy- evo", shorttitle="Distance Oscillator Strategy") // INPUTS { na_1 = input(false, title="────────────{ Oscillator }──────────────") // Osc_Src = input(close, title="Oscillator Source ") Example_Length = input(20, title="Example Length", minval=1) Osc_Src = (highest(Example_Length) + lowest(Example_Length)) / 2 // Strategy can not let you choose a Moving Average to connect with like the study version, so I use the MA above as example Osc_Format = input("Percent",title="Oscillator Format", options=["Percent", "Currency"]) na_2 = input(false, title="─────────────{ Average }──────────────") Average_Type = input("Hull", title="Average Type", options=["Hull", "Sma", "Ema", "Wma"]) Length = input(50, title="Average Length", minval=1) Lagg = input(12, title="Average Lagg", minval=1) Display_MA = input(true, title="Display Average") // } // SETTINGS { Osc_Sum = Osc_Format == "Percent" ? (close - Osc_Src) / close * 100 : Osc_Format == "Currency" ? (close - Osc_Src) : na Osc_MA = Display_MA == false ? na: Average_Type == "Hull"? hma(Osc_Sum, Length) : Average_Type == "Sma" ? sma(Osc_Sum, Length) : Average_Type == "Ema" ? ema(Osc_Sum, Length) : Average_Type == "Wma" ? wma(Osc_Sum, Length) : na Osc_MA_1 = Osc_MA[Lagg] Cross_Up = crossover( Osc_MA, Osc_MA_1) Cross_Down = crossunder(Osc_MA, Osc_MA_1) Osc_Color = Osc_Sum > 0 ? color.new(#bbdefb, 70) : Osc_Sum < 0 ? color.new(#000000, 70) : na Average_Color = Osc_MA > Osc_MA_1 ? color.new(#311b92, 100) : Osc_MA < Osc_MA_1 ? color.new(#b71c1c, 100) : na // } // PLOT { plot(Osc_Sum, title="Oscillator", color=Osc_Color, style=plot.style_histogram, linewidth=2) Plot_0 = plot(Osc_MA, title="Osc Average",color=#b71c1c, linewidth=2) Plot_1 = plot(Osc_MA_1, title="Osc Average",color=#311b92, linewidth=2) fill(Plot_0, Plot_1, title="Average", color=Average_Color) plotshape(Cross_Up ? Osc_MA_1 : na, title="Cross Up", color=#bbdefb, location=location.absolute, size=size.tiny, style=shape.circle) plotshape(Cross_Down ? Osc_MA_1 : na, title="Cross Down", color=#000000, location=location.absolute, size=size.tiny, style=shape.circle) // } // STRATEGY { if (Cross_Up) strategy.entry("Long", strategy.long) if (Cross_Down) strategy.entry("Short", strategy.short) // }