Penunjuk tinggi dan rendah dan strategi penunjuk purata bergerak


Tarikh penciptaan: 2023-11-21 15:19:35 Akhirnya diubah suai: 2023-11-21 15:19:35
Salin: 2 Bilangan klik: 648
1
fokus pada
1617
Pengikut

Penunjuk tinggi dan rendah dan strategi penunjuk purata bergerak

Gambaran keseluruhan

Strategi ini menggabungkan indikator tinggi rendah, indikator garis rata dan indikator super trend untuk menentukan trend pasaran.

Prinsip Strategi

  1. Dengan menggunakan indikator tinggi rendah untuk menilai sama ada harga telah mencipta tinggi baru atau rendah baru dalam tempoh tertentu, dan mengumpulkan skor. Apabila skor meningkat, ia mewakili peningkatan kekuatan multihead; apabila skor menurun, ia mewakili peningkatan kekuatan kosong.

  2. Melalui penunjuk garis rata, tentukan sama ada harga berada dalam trend menaik dari tangga ke bawah, atau dari tangga ke bawah ke bawah. Apabila garis rata menunjukkan kenaikan tangga, ia mewakili peningkatan kekuatan berbilang; apabila garis rata menunjukkan penurunan tangga, ia mewakili peningkatan kekuatan kosong.

  3. Menggabungkan keputusan indikator tinggi rendah dan indikator rata-rata, menentukan trend pasaran; kemudian menggabungkan arah indikator super trend, mencari peluang untuk membina kedudukan. Khususnya, apabila indikator tinggi rendah dan indikator rata-rata menunjukkan peningkatan kekuatan multihead, dan arah indikator super trend adalah ke bawah, meletakkan kedudukan panjang; apabila indikator tinggi rendah dan indikator rata-rata menunjukkan peningkatan kekuatan kosong, dan arah indikator super trend adalah ke atas, meletakkan kedudukan kosong.

Kelebihan Strategik

  1. Penunjuk tinggi rendah dapat menentukan pergerakan harga dan perubahan kekuatan, penunjuk garis rata dapat menentukan trend harga, kedua-duanya dapat menentukan arah pasaran dengan lebih tepat.

  2. Gabungan dengan penunjuk super trend untuk membina gudang, dapat mengelakkan penempatan terlalu awal atau terlambat. Penunjuk super trend dapat mengenal pasti titik-titik perubahan harga dengan berkesan.

  3. Pelbagai penunjuk saling mengesahkan untuk mengurangkan isyarat palsu.

Risiko Strategik

  1. Jika indikator tinggi rendah dan rata-rata menunjukkan isyarat yang salah, ia boleh menyebabkan kerugian dalam penempatan.

  2. Jika penyertaan tidak tinggi, parameter penunjuk trend super boleh ditetapkan dengan tidak betul, dan ia mungkin memberi isyarat yang salah.

  3. Jika trend berbalik terlalu cepat, ia boleh menyebabkan kerugian yang lebih besar.

  4. Risiko boleh dikurangkan dengan mengoptimumkan parameter penunjuk, menyesuaikan titik hentian, dan sebagainya.

Pengoptimuman Strategi

  1. Uji pelbagai jenis penunjuk rata-rata untuk mencari kombinasi parameter terbaik.

  2. Anda boleh mengoptimumkan parameter indikator tinggi rendah dan rata-rata untuk menjadikan isyarat lebih stabil dan boleh dipercayai.

  3. Ia boleh digabungkan dengan penunjuk lain untuk disahkan, seperti MACD, KD dan lain-lain, untuk mengurangkan isyarat palsu.

  4. Algoritma pembelajaran mesin boleh digabungkan untuk mengoptimumkan parameter dan berat isyarat secara automatik.

  5. Anda boleh menggabungkan analisis emosi dan lain-lain untuk menilai kepanasan pasaran, dan mengelakkan berdagang dengan jenis yang kurang panas.

ringkaskan

Strategi ini menilai trend dan kekuatan pasaran melalui indikator tinggi rendah dan rata-rata, dan kemudian menggabungkan isyarat penapis indikator super trend, untuk membuat kedudukan ketika perlawanan kekuatan dan penunjuk super trend berbalik, untuk mencapai perdagangan berisiko rendah. Kelebihan strategi adalah dengan mengesahkan pelbagai indikator dan membangunkan kedudukan tepat pada masanya, yang dapat mengawal risiko dengan berkesan. Masalahnya adalah dengan signal palsu dan penilaian trend yang salah.

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