Strategi dagangan purata undian berbilang bergerak yang boleh dikonfigurasikan


Tarikh penciptaan: 2023-09-23 15:52:06 Akhirnya diubah suai: 2023-09-23 15:52:06
Salin: 2 Bilangan klik: 646
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini dengan konfigurasi menetapkan beberapa kombinasi garis rata-rata cepat dan lambat, melakukan lebih banyak apabila semua garis cepat melintasi garis perlahan; kedudukan rata apabila sekurang-kurangnya satu garis cepat melintasi garis perlahan. Strategi ini memanfaatkan sepenuhnya kelebihan beberapa garis rata, membentuk sistem keputusan pegangan yang lebih kuat.

Prinsip Strategi

Komponen dan peraturan utama strategi ini adalah seperti berikut:

  1. Garis purata berbilang kumpulan: menggunakan pelbagai petunjuk garis purata seperti SMA, WMA, VWMA.

  2. Buat lebih banyak isyarat: Buat lebih banyak isyarat apabila melintasi talian perlahan di semua talian pantas.

  3. Isyarat kedudukan rata: mana-mana garisan laju di bawah garisan perlahan.

  4. Stop loss: Tetapkan titik stop loss tetap dengan nilai ATR.

  5. Pengkonfigurasi: Pelbagai set parameter garis rata boleh dikonfigurasi secara fleksibel.

Dengan cara mengundi kedudukan gabungan pelbagai garis rata, kebolehpercayaan isyarat dapat dipertingkatkan secara berkesan. Pelbagai parameter garis rata boleh dikonfigurasikan secara khusus, serta fleksibiliti.

Analisis kelebihan

Strategi ini mempunyai kelebihan yang berbeza berbanding strategi single linear:

  1. Kombinasi garis rata-rata memberikan penilaian trend yang lebih menyeluruh.

  2. Cara mengundi untuk mengelakkan transaksi bising.

  3. Anda boleh mengkonfigurasi parameter rata-rata secara bebas, ruang untuk pengoptimuman yang besar.

  4. Menyokong pelbagai indikator garis rata, menggunakan fleksibiliti.

  5. Tetapkan titik hentian hentian untuk mengawal kerugian tunggal.

  6. Siklus penggunaan yang lebih lama lebih berkesan, mengurangkan goyangan kurva.

  7. Pengiraan mudah, intuitif, mudah untuk dilaksanakan dan dikendalikan.

  8. Secara keseluruhannya, kestabilan dan ketahanan yang lebih baik berbanding dengan garis purata tunggal.

Analisis risiko

Tetapi strategi ini juga mempunyai risiko:

  1. Garis purata ganda meningkatkan kerumitan strategi.

  2. Terdapat risiko parameter yang terlalu optimum.

  3. Garis purata pada dasarnya mempunyai pengiktirafan yang ketinggalan terhadap perubahan trend.

  4. Tidak mengambil kira jumlah transaksi, kemungkinan terdapat penyesuaian.

  5. Pengaturan Stop Loss adalah lebih ketara dan boleh menyebabkan kedudukan kosong yang tidak perlu.

  6. Kesan ini akan berubah mengikut perubahan keadaan pasaran.

  7. Perhatian perlu diberikan kepada nisbah pulangan balik pendapatan untuk mengelakkan kurva menjadi terlalu curam.

  8. Parameter yang perlu diperiksa ialah kesabaran dalam pelbagai jenis.

Arah pengoptimuman

Berdasarkan analisis di atas, strategi ini boleh dipertingkatkan dengan:

  1. Parameter garis purata untuk menguji stamina dalam pelbagai jenis.

  2. Meningkatkan jumlah transaksi atau pengesahan kadar turun naik.

  3. Mengoptimumkan parameter hentian hentian.

  4. Tetapkan toleransi maksimum untuk penarikan balik

  5. Membina mekanisme pengurusan kedudukan dinamik.

  6. Penilaian kesan pembelajaran mesin.

  7. Fokus pada penarikan maksimum dan kepekatan pada kurva keuntungan.

  8. Strategi berulang untuk mengelakkan pengoptimuman berlebihan.

ringkaskan

Strategi ini membentuk mekanisme keputusan pegangan yang lebih mantap dengan menetapkan gabungan garis rata-rata melalui konfigurasi. Tetapi strategi apa pun memerlukan pencegahan penyesuaian berlebihan dan penyesuaian dinamik mengikut keadaan pasaran. Strategi kuantitatif yang terus dioptimumkan dan diuji hanya dapat menyesuaikan diri dengan pasaran dalam jangka masa panjang.

Kod sumber strategi
/*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