Strategi kombinasi rata-rata bergerak yang selaras dan indeks rendah tinggi kumulatif

Penulis:ChaoZhang, Tanggal: 2023-11-21 15:19:35
Tag:

img

Gambaran umum

Strategi ini terutama menggabungkan Indeks Rendah Tinggi, Indeks Rata-rata Bergerak dan Indeks Super Trend untuk menentukan tren pasar dan posisi terbuka.

Logika Strategi

  1. Indeks High Low menilai apakah harga terbaru selama periode tertentu telah membuat tinggi baru atau rendah baru, dan mengumpulkan skor. Ketika skor naik, itu mewakili penguatan kekuatan bullish. Ketika skor turun, itu mewakili penguatan kekuatan bearish.

  2. Moving Average Index menilai apakah harga berada dalam uptrend berbentuk tangga ke atas atau downtrend berbentuk tangga ke bawah. Ketika moving average menunjukkan kenaikan berbentuk tangga, itu mewakili penguatan kekuatan bullish. Ketika menunjukkan penurunan berbentuk tangga, itu mewakili penguatan kekuatan bearish.

  3. Hubungkan penilaian Indeks Rendah Tinggi dan Indeks Rata-rata Bergerak untuk menentukan tren pasar, dan kemudian temukan peluang perdagangan yang dikombinasikan dengan arah Indeks Super Trend. Secara khusus, ketika baik Indeks Rendah Tinggi dan Indeks Rata-rata Bergerak menunjukkan kekuatan bullish yang menguat dan arah Indeks Super Trend menurun, buka posisi panjang. Ketika kedua indeks menunjukkan kekuatan bearish yang menguat dan arah Indeks Super Trend naik, buka posisi pendek.

Keuntungan

  1. Indeks High Low dapat secara efektif menilai pergerakan harga dan perubahan momentum. Indeks Moving Average dapat secara efektif menentukan tren harga. Kombinasi keduanya dapat lebih akurat menentukan arah pasar.

  2. Pembukaan posisi dikombinasikan dengan Indeks Super Trend dapat menghindari pembukaan posisi dini atau terlambat. Indeks Super Trend dapat secara efektif mengidentifikasi titik pembalikan harga.

  3. Beberapa indikator saling memverifikasi dan mengurangi sinyal palsu.

Risiko

  1. Sinyal yang salah dari Indeks High Low dan Indeks Moving Average dapat menyebabkan posisi yang menghasilkan kerugian.

  2. Keterlibatan yang tidak cukup dan pengaturan parameter yang tidak tepat dari Indeks Super Trend dapat menghasilkan sinyal yang salah.

  3. Pembalikan tren yang cepat dan pengaturan stop loss yang tidak tepat dapat menyebabkan kerugian besar.

  4. Risiko dapat dikurangi dengan mengoptimalkan parameter indikator, menyesuaikan tingkat harga stop loss, dll.

Optimalisasi

  1. Uji berbagai jenis indikator rata-rata bergerak untuk menemukan kombinasi parameter yang optimal.

  2. Mengoptimalkan parameter indeks rendah tinggi dan indeks rata-rata bergerak untuk membuat sinyal lebih stabil dan dapat diandalkan.

  3. Masukkan indikator lain untuk verifikasi, seperti MACD, KD, dll, untuk mengurangi sinyal palsu.

  4. Masukkan algoritma pembelajaran mesin untuk mengoptimalkan parameter dan bobot sinyal secara otomatis.

  5. Sertakan analisis sentimen untuk menghindari perdagangan produk yang kurang populer.

Kesimpulan

Strategi ini menentukan tren pasar dan momentum melalui Indeks Rendah Tinggi dan Indeks Rata-rata Bergerak, dan kemudian menyaring sinyal menggunakan Indeks Super Trend, membuka posisi ketika kekuatan bullish dan bearish saling berhadapan dan Indeks Super Trend terbalik. Keuntungannya terletak pada verifikasi sinyal ganda dan pembukaan posisi tepat waktu, yang dapat secara efektif mengendalikan risiko. Masalah yang ada termasuk sinyal palsu dan penilaian tren yang salah. Berbagai perbaikan dapat dilakukan melalui optimasi parameter, pengaturan stop loss, penyaringan sinyal, dll untuk membuat strategi lebih kuat dan dapat diandalkan.


/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 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("AlignedMA and Cumulative HighLow Strategy", overlay=true, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
includePartiallyAligned = input(true)
HighLowPeriod = input(50, minval=1,step=1)
LookbackPeriod = input(10, minval=1,step=1)

supertrendMult = input(2, minval=1, maxval=10, step=0.5)
supertrendLength = input(10, minval=1)

tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
backtestYears = input(10, minval=1, step=1)

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
    upwardScore := close > ma5? upwardScore+1:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1: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
    upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0

f_getHighLowValue(HighLowPeriod)=>
    currentHigh = highest(high,HighLowPeriod) == high
    currentLow = lowest(low,HighLowPeriod) == low
    currentHigh?1:currentLow?-1:0

inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0)

maAlignment = f_getMaAlignment(MAType,includePartiallyAligned)
alignedMaIndex = sum(maAlignment,LookbackPeriod)

maAlignmentDirection = alignedMaIndex > alignedMaIndex[1] ? 1 : alignedMaIndex < alignedMaIndex[1] ? -1 : 0
maAlignmentDirection := maAlignmentDirection == 0? nz(maAlignmentDirection[1],0):maAlignmentDirection

highLowIndex = f_getHighLowValue(HighLowPeriod)
cumulativeHighLowIndex = sum(highLowIndex,LookbackPeriod)

hlDirection = cumulativeHighLowIndex > cumulativeHighLowIndex[1] ? 1 : cumulativeHighLowIndex < cumulativeHighLowIndex[1] ? -1 : 0
hlDirection := hlDirection == 0? nz(hlDirection[1],0):hlDirection

[superTrend, dir] = supertrend(supertrendMult, supertrendLength)

buyEntry = (dir == -1 and maAlignmentDirection == 1 and hlDirection == 1)
sellEntry = (dir == 1 and maAlignmentDirection == -1 and hlDirection == -1)

barColor = buyEntry?color.lime:sellEntry?color.orange:color.gray
barcolor(barColor)

// strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when=barColor == color.lime and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=dir == 1)

strategy.entry("Sell", strategy.short, when=barColor == color.orange and inDateRange, oca_name="oca_sell")
strategy.close("Sell", when=dir == -1)


Lebih banyak