
Strategi ini menggabungkan indikator tinggi rendah, indikator garis rata dan indikator super trend untuk menentukan trend pasaran.
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.
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.
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.
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.
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.
Pelbagai penunjuk saling mengesahkan untuk mengurangkan isyarat palsu.
Jika indikator tinggi rendah dan rata-rata menunjukkan isyarat yang salah, ia boleh menyebabkan kerugian dalam penempatan.
Jika penyertaan tidak tinggi, parameter penunjuk trend super boleh ditetapkan dengan tidak betul, dan ia mungkin memberi isyarat yang salah.
Jika trend berbalik terlalu cepat, ia boleh menyebabkan kerugian yang lebih besar.
Risiko boleh dikurangkan dengan mengoptimumkan parameter penunjuk, menyesuaikan titik hentian, dan sebagainya.
Uji pelbagai jenis penunjuk rata-rata untuk mencari kombinasi parameter terbaik.
Anda boleh mengoptimumkan parameter indikator tinggi rendah dan rata-rata untuk menjadikan isyarat lebih stabil dan boleh dipercayai.
Ia boleh digabungkan dengan penunjuk lain untuk disahkan, seperti MACD, KD dan lain-lain, untuk mengurangkan isyarat palsu.
Algoritma pembelajaran mesin boleh digabungkan untuk mengoptimumkan parameter dan berat isyarat secara automatik.
Anda boleh menggabungkan analisis emosi dan lain-lain untuk menilai kepanasan pasaran, dan mengelakkan berdagang dengan jenis yang kurang panas.
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.
/*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)