Strategi ini membolehkan konfigurasi fleksibel beberapa pasangan purata bergerak pantas / perlahan. Ia pergi lama apabila semua MA pantas menyeberang di atas MA perlahan, dan keluar apabila mana-mana MA pantas menyeberang di bawah MA perlahan. Mekanisme pengundian dengan pelbagai MA bertujuan untuk membentuk keputusan pegangan kedudukan yang kukuh.
Komponen dan peraturan utama adalah:
Pelbagai MA pantas/lambat: Menggunakan SMA, WMA, VWMA dan lain-lain
Isyarat panjang: semua MA pantas menyeberangi di atas MA perlahan.
Isyarat keluar: mana-mana penyeberangan MA pantas di bawah MA perlahan.
Nilai keuntungan/kerugian: Nilai tetap berdasarkan ATR.
Boleh dikonfigurasikan: Konfigurasi fleksibel beberapa pasangan MA.
Masukan berasaskan pengundian dengan pelbagai MA meningkatkan kebolehpercayaan isyarat. konfigurasi tersuai memberikan fleksibiliti.
Berbanding dengan strategi MA tunggal, kelebihan adalah:
Pelbagai MA menyediakan penilaian trend yang lebih komprehensif.
Mengundi mengelakkan isyarat palsu dari bunyi bising.
Ruang penyesuaian yang besar dari konfigurasi MA tersuai.
Sokongan untuk pelbagai jenis MA meningkatkan kesesuaian.
Pengendalian mata keuntungan/kerugian yang ditakrifkan bagi setiap risiko/balasan perdagangan.
Berfungsi lebih baik pada jangka masa yang lebih lama, kurang curve whipsaws.
Logik yang mudah dan intuitif, mudah dilaksanakan dan dioperasikan.
Secara keseluruhan lebih stabil dengan jangka hayat yang lebih lama berbanding MA tunggal.
Walau bagaimanapun, terdapat beberapa risiko:
Meningkatkan kerumitan dengan pelbagai MA.
Risiko terlalu optimum.
Kelemahan asas dalam mengenal pasti perubahan trend.
Tiada jumlah yang dipertimbangkan, risiko terperangkap.
Mata keuntungan/kerugian boleh menyebabkan keluar yang tidak perlu.
Prestasi tertakluk kepada perubahan rejimen pasaran.
Perlu memantau nisbah ganjaran / risiko dan kelancaran kurva.
Ketahanan di seluruh instrumen memerlukan pengesahan.
Berdasarkan analisis, penambahbaikan mungkin melibatkan:
Ujian ketahanan parameter di pelbagai instrumen.
Menambah pengesahan jumlah atau turun naik.
Mengoptimumkan mata keuntungan / kerugian.
Menetapkan had pengambilan maksimum yang boleh diterima.
Membina model saiz kedudukan dinamik.
Penilaian kesan daripada pengenalan pembelajaran mesin.
Pemantauan pengambilan maksimum dan kelancaran lengkung.
Iterasi berterusan untuk mengelakkan overfitting.
Pendekatan multi-MA yang boleh dikonfigurasikan membentuk mekanisme pegangan kedudukan yang kukuh. Tetapi mencegah terlalu banyak dan penyesuaian dinamik kepada pasaran yang berubah adalah kunci untuk jangka panjang mana-mana strategi. Hanya melalui pengoptimuman dan ujian berterusan yang ketat, strategi kuant boleh mengekalkan kejayaan.
/*backtest start: 2022-09-16 00:00:00 end: 2023-09-22 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/ // © levieux //@version=5 strategy(title='Configurable Multi MA Crossover Voting System', shorttitle='Configurable Multi MA Crossover Voting System', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1) crossoverConfig= input.string(defval="2x4,3x5,4x6", title="Crossover Config") source= input.source(high) maType= input.string("WMA", title="Moving Average Type", options=["WMA","SMA","VWMA"]) atrPeriod= input(14, title="ATR Period") profitAtr = input(10, title="Profit ATR x") lossAtr = input(5, title="Loss ATR x") ma(src,length,type) => float ma = switch type "SMA" => ta.sma(src, length) "WMA" => ta.wma(src, length) "VWMA" => ta.vwma(src, length) crossoverGroups= str.split(crossoverConfig, ",") crossoverCount= array.size(crossoverGroups) crossovers= array.new_string(crossoverCount) positions= array.new_int(crossoverCount, 0) longVotes= 0 for i= 0 to crossoverCount-1 crossover= str.tostring(array.get(crossoverGroups, i)) crossoverBoundaries= str.split(crossover, "x") int fastLength= math.round(str.tonumber(array.get(crossoverBoundaries, 0))) int slowLength= math.round(str.tonumber(array.get(crossoverBoundaries, 1))) wmaFast= ma(source,fastLength,maType) wmaSlow= ma(source,slowLength,maType) if wmaFast>wmaSlow longVotes:= longVotes + 1 array.set(positions, i, 1) longCondition= longVotes==crossoverCount and strategy.position_size==0 //profitTicks = profitAtr*ta.atr(atrPeriod)/syminfo.mintick //lossTicks = lossAtr*ta.atr(atrPeriod)/syminfo.mintick profitPrice= close+profitAtr*ta.atr(atrPeriod) lossPrice= close-lossAtr*ta.atr(atrPeriod) if strategy.position_size>0 profitPrice:= profitPrice[1] lossPrice:= lossPrice[1] plot(profitPrice, color=color.green) plot(lossPrice, color=color.red) if longCondition and profitPrice>0 strategy.entry("Long", strategy.long) if longVotes<crossoverCount and strategy.position_size>0 and (high>profitPrice or low<lossPrice) strategy.close("Long") longVotes:= 0