Strategi Kuantitatif: Pelacakan Tren Kekuatan dan Kelemahan MA


Tanggal Pembuatan: 2024-01-19 16:50:13 Akhirnya memodifikasi: 2024-01-19 16:50:13
menyalin: 3 Jumlah klik: 609
1
fokus pada
1617
Pengikut

Strategi Kuantitatif: Pelacakan Tren Kekuatan dan Kelemahan MA

Ringkasan

Strategi ini menghasilkan sinyal beli ketika indikator tersebut melebihi MA jangka panjangnya sendiri. Strategi ini dapat mengkonfigurasi portofolio MA jangka panjang untuk melacak tren yang berbeda.

Prinsip Strategi

  1. Perhitungan MA pada 5, 10, dan 20 hari untuk menentukan apakah harga akan menembus setiap MA ke atas, menembus tanda, dan membentuk tanda kekuatan MA.
  2. Menggunakan moving average pada nilai MA, membentuk indikator rata-rata, menilai rata-rata kosong, dan menghasilkan sinyal perdagangan.
  3. Parameter siklus pelacakan dapat dikonfigurasi: jumlah MA jangka pendek, siklus garis rata-rata jangka panjang, kondisi posisi terbuka, dll.

Strategi ini terutama menentukan polusi rata-rata indikator, melalui rata-rata indikator menanggapi intensitas rata-rata dari MA kelompok. MA kelompok fokus untuk menilai arah dan kekuatan tren, rata-rata indikator untuk menilai kontinuitas.

Analisis Keunggulan

  1. Model multidimensi untuk menilai kekuatan tren. Garis MA tunggal tidak dapat menentukan kekuatan yang cukup; Strategi ini mengukur beberapa penembusan MA, memastikan kekuatan yang cukup dan kemudian mengirimkan sinyal, dengan reliabilitas tinggi.
  2. Periode pelacakan yang dapat dikonfigurasi. Mengatur parameter MA jangka pendek untuk menangkap tren tingkat yang berbeda. Mengatur parameter MA jangka panjang untuk mengontrol ritme keluar.
  3. Hanya melakukan lebih banyak untuk menghindari kesalahan, mengikuti tren naik jangka panjang. Strategi hanya melakukan lebih banyak, hanya mengejar dan tidak mengikuti, dapat mengurangi kerugian reversal.

Analisis risiko

  1. Ada risiko penarikan balik. Ada risiko penarikan balik yang lebih besar ketika garis pendek melewati garis rata-rata panjang di bawah garis rata-rata.
  2. Ada risiko reversal. Pasar operasi jangka panjang pasti ada penyesuaian, strategi harus tepat waktu menghentikan Exiting. Disarankan untuk mengkombinasikan band, saluran dan teknik lain untuk menilai akhir siklus besar, mengendalikan risiko reversal.
  3. Risiko parameter. Konfigurasi parameter yang tidak tepat dapat memberikan sinyal yang salah. Parameter harus disesuaikan dengan varietas yang berbeda untuk memastikan parameter stabil.

Arah optimasi

  1. Kombinasi dengan lebih banyak indikator filter masuk. Anda dapat mempertimbangkan untuk menggabungkan volume lalu lintas, dan mengirimkan sinyal dengan jumlah yang dapat diverifikasi, untuk menghindari penembusan palsu.
  2. Meningkatkan stop loss. Stop loss bergerak, stop loss kurva dapat mengurangi kerugian dalam penarikan kembali. Stop loss juga dapat dipertimbangkan, mengunci keuntungan, dan menghindari reversal.
  3. Pertimbangkan untuk mengkonfigurasi varietas berjangka, valuta asing. Perobosan garis MA lebih cocok untuk varietas tren. Stabilitas parameter dari berbagai varietas berjangka dapat dievaluasi dan varietas terbaik dipilih.

Meringkaskan

Strategi ini menentukan tren harga dengan menghitung indikator kekuatan MA, dan melacak tren dengan persilangan rata-rata sebagai sumber sinyal. Keuntungan dari strategi ini adalah menilai kekuatan tren dengan akurat, dan memiliki keandalan yang tinggi. Risiko utama adalah pembalikan tren dan penyesuaian parameter.

Kode 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)