Strategi Kuantitatif: Penjejakan Aliran Kekuatan dan Kelemahan MA


Tarikh penciptaan: 2024-01-19 16:50:13 Akhirnya diubah suai: 2024-01-19 16:50:13
Salin: 3 Bilangan klik: 609
1
fokus pada
1617
Pengikut

Strategi Kuantitatif: Penjejakan Aliran Kekuatan dan Kelemahan MA

Gambaran keseluruhan

Strategi ini menilai kekuatan dan kelemahan trend pasaran dengan mengira purata bergerak (MA) yang kuat dan lemah dalam beberapa tempoh masa. Strategi ini dapat menilai dan mengesan trend apabila indikator MA jangka pendek meningkat secara berturut-turut, mencatat skor tinggi, dan membentuk indikator penyokong kekuatan MA jangka pendek.

Prinsip Strategi

  1. Hitung MA berbilang hari seperti 5, 10, 20 dan seterusnya untuk menentukan sama ada harga telah menembusi setiap MA ke atas, menembusi tanda, dan membentuk tanda integrasi kekuatan MA.
  2. Menggunakan purata bergerak pada kekuatan MA, membentuk penunjuk purata, menilai purata kosong, menghasilkan isyarat perdagangan.
  3. Parameter kitaran pengesanan boleh dikonfigurasikan: jumlah MA jangka pendek, kitaran garis purata jangka panjang, keadaan pembukaan kedudukan, dan lain-lain.

Strategi ini terutama menentukan kebolehan rata-rata rata-rata, dengan rata-rata intensiti kumpulan garis MA yang bertindak balas melalui rata-rata rata-rata. Kumpulan garis MA memberi tumpuan untuk menentukan arah dan kekuatan trend, dan penunjuk rata-rata menentukan kesinambungan.

Analisis kelebihan

  1. Model multidimensi untuk menilai kekuatan trend. Garis MA tunggal tidak dapat menentukan kekuatan yang mencukupi; strategi ini mengukur banyak penembusan MA, memastikan kekuatan yang mencukupi dan kemudian menghantar isyarat, dengan kebolehpercayaan yang tinggi.
  2. Siklus pengesanan boleh dikonfigurasi. Mengubah parameter MA jangka pendek untuk menangkap trend di peringkat yang berbeza. Mengubah parameter MA jangka panjang untuk mengawal kadar keluar.
  3. Hanya dengan melakukan lebih banyak, anda dapat mengelakkan kesalahan dan mengikuti trend kenaikan jangka panjang. Hanya dengan melakukan lebih banyak, hanya dengan mengikuti dan tidak mengikuti, anda dapat mengurangkan kerugian.

Analisis risiko

  1. Terdapat risiko penarikan balik. Terdapat risiko penarikan balik yang lebih besar apabila garis pendek melalui garis rata-rata panjang di bawah garis rata-rata.
  2. Terdapat risiko pembalikan. Operasi jangka panjang pasaran mesti ada penyesuaian, strategi mesti menghentikan Exiting pada masa yang tepat. Disarankan untuk menggabungkan teknik penilaian gelombang, saluran dan lain-lain pada akhir kitaran besar, untuk mengawal risiko pembalikan.
  3. Risiko parameter. Konfigurasi parameter yang tidak betul boleh memberi isyarat yang salah. Parameter harus disesuaikan untuk pelbagai jenis untuk memastikan parameter stabil.

Arah pengoptimuman

  1. Gabungan penyaringan lebih banyak penunjuk masuk ke lapangan. Anda boleh mempertimbangkan untuk menggabungkan jumlah lalu lintas, menghantar isyarat di bawah pengesahan kuantitatif, dan mengelakkan penembusan palsu.
  2. Cara meningkatkan hentian kerugian. Hentian bergerak, hentian kurva dapat mengurangkan kerugian dalam penyesuaian. Cara berhenti juga boleh dipertimbangkan, mengunci keuntungan, mengelakkan pembalikan.
  3. Pertimbangkan untuk mengkonfigurasi varian niaga hadapan, mata wang asing. Breakout garis MA lebih sesuai untuk varian trend. Anda boleh menilai kestabilan parameter dari pelbagai varian niaga hadapan dan memilih varian terbaik.

ringkaskan

Strategi ini menentukan trend harga dengan mengira indikator kekuatan MA, dan mengikuti trend dengan penyeberangan garis rata sebagai sumber isyarat. Kelebihan strategi adalah menentukan kekuatan trend dengan tepat, kebolehpercayaan yang tinggi. Risiko utama adalah pembalikan trend dan penyesuaian parameter.

Kod sumber strategi
/*backtest
start: 2023-12-19 00:00:00
end: 2024-01-18 00:00:00
period: 1h
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("MA Strength Strategy", overlay=false, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01)
MAType = input(title="Moving Average Type", defval="ema", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
LookbackPeriod = input(10, step=10)

IndexMAType = input(title="Moving Average Type", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
IndexMAPeriod = input(200, step=10)

considerTrendDirection = input(true)
considerTrendDirectionForExit = input(true)
offset = input(1, step=1)
tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true

f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma
    

f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0.0
    upwardScore := close > ma5? upwardScore+1.10:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1.10:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1.10:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1.10:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1.15:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1.20:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1.25:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    trendStrength = upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 6? 0.5: upwardScore < 2?-0.5:upwardScore>4?0.25:-0.25) : 0
    [trendStrength, upwardScore]
    
includePartiallyAligned = true
[trendStrength, upwardScore] = f_getMaAlignment(MAType, includePartiallyAligned)

upwardSum = sum(upwardScore, LookbackPeriod)

indexSma = f_getMovingAverage(upwardSum,IndexMAType,IndexMAPeriod)

plot(upwardSum, title="Moving Average Strength", color=color.green, linewidth=2, style=plot.style_linebr)
plot(indexSma, title="Strength MA", color=color.red, linewidth=1, style=plot.style_linebr)
buyCondition = crossover(upwardSum,indexSma) and (upwardSum > upwardSum[offset] or not considerTrendDirection) 
sellCondition = crossunder(upwardSum,indexSma) and (upwardSum < upwardSum[offset]  or not considerTrendDirection)

exitBuyCondition = crossunder(upwardSum,indexSma)
exitSellCondition = crossover(upwardSum,indexSma) 
strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when= inDateRange and buyCondition, oca_name="oca_buy")
strategy.close("Buy", when = considerTrendDirectionForExit? sellCondition : exitBuyCondition)
strategy.entry("Sell", strategy.short, when= inDateRange and sellCondition, oca_name="oca_sell")
strategy.close( "Sell", when = considerTrendDirectionForExit? buyCondition : exitSellCondition)