Strategi gabungan purata bergerak yang diselaraskan dan indeks rendah tinggi kumulatif

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

img

Ringkasan

Strategi ini terutamanya menggabungkan Indeks Rendah Tinggi, Indeks Purata Bergerak dan Indeks Super Trend untuk menentukan trend pasaran dan kedudukan terbuka.

Logika Strategi

  1. Indeks rendah tinggi menilai sama ada harga terkini dalam tempoh tertentu telah membuat tinggi baru atau rendah baru, dan mengumpul skor. Apabila skor naik, ia mewakili penguatan kuasa bullish. Apabila skor jatuh, ia mewakili penguatan kuasa bearish.

  2. Indeks Purata Bergerak menilai sama ada harga berada dalam trend menaik berbentuk tangga atau trend menurun berbentuk tangga. Apabila purata bergerak menunjukkan kenaikan berbentuk tangga, ia mewakili penguatan kuasa bullish. Apabila ia menunjukkan penurunan berbentuk tangga, ia mewakili penguatan kuasa bearish.

  3. Menggabungkan penilaian Indeks Rendah Tinggi dan Indeks Purata Bergerak untuk menentukan trend pasaran, dan kemudian mencari peluang perdagangan yang digabungkan dengan arah Indeks Super Trend. Khususnya, apabila kedua-dua Indeks Rendah Tinggi dan Indeks Purata Bergerak menunjukkan kekuatan bullish yang menguat dan arah Indeks Super Trend menurun, buka kedudukan panjang. Apabila kedua-dua indeks menunjukkan kekuatan penurunan yang menguat dan arah Indeks Super Trend naik, buka kedudukan pendek.

Kelebihan

  1. Indeks Tinggi Rendah dapat menilai pergerakan harga dan perubahan momentum dengan berkesan. Indeks Purata Bergerak dapat menentukan trend harga dengan berkesan. Gabungan kedua-duanya dapat menentukan arah pasaran dengan lebih tepat.

  2. Pembukaan kedudukan digabungkan dengan Indeks Super Trend dapat mengelakkan pembukaan kedudukan awal atau lewat. Indeks Super Trend dapat dengan berkesan mengenal pasti titik pembalikan harga.

  3. Pelbagai penunjuk mengesahkan antara satu sama lain dan mengurangkan isyarat palsu.

Risiko

  1. Isyarat yang salah dari Indeks Tinggi Rendah dan Indeks Purata Bergerak boleh membawa kepada kedudukan kerugian.

  2. Penglibatan yang tidak mencukupi dan tetapan parameter indeks Super Trend yang tidak betul boleh menghasilkan isyarat yang salah.

  3. Pembalikan trend yang cepat dan tetapan stop loss yang tidak betul boleh membawa kepada kerugian besar.

  4. Risiko boleh dikurangkan dengan mengoptimumkan parameter penunjuk, menyesuaikan tahap harga stop loss, dll.

Pengoptimuman

  1. Uji pelbagai jenis penunjuk purata bergerak untuk mencari kombinasi parameter yang optimum.

  2. Mengoptimumkan parameter Indeks Tinggi Rendah dan Indeks Purata Bergerak untuk menjadikan isyarat lebih stabil dan boleh dipercayai.

  3. Masukkan penunjuk lain untuk pengesahan, seperti MACD, KD, dan lain-lain, untuk mengurangkan isyarat palsu.

  4. Menggabungkan algoritma pembelajaran mesin untuk mengoptimumkan parameter dan berat isyarat secara automatik.

  5. Sertakan analisis sentimen untuk mengelakkan perdagangan produk yang kurang popular.

Kesimpulan

Strategi ini menentukan trend dan momentum pasaran melalui Indeks Rendah Tinggi dan Indeks Purata Bergerak, dan kemudian menapis isyarat menggunakan Indeks Super Trend, membuka kedudukan apabila kekuatan bullish dan bearish saling berhadapan dan Indeks Super Trend berbalik. Kelebihannya terletak pada pengesahan isyarat berganda dan pembukaan kedudukan tepat pada masanya, yang dapat mengawal risiko dengan berkesan. Masalah yang ada termasuk isyarat palsu dan salah menilai trend. Pelbagai penambahbaikan boleh dibuat melalui pengoptimuman parameter, tetapan kehilangan berhenti, penapisan isyarat, dan lain-lain untuk menjadikan strategi lebih mantap dan boleh dipercayai.


/*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 lanjut