Maximizer Keuntungan PMax

Penulis:ChaoZhang, Tanggal: 2022-05-25 17:13:45
Tag:SMAEMAWMATMAATRZLEMA

Kedua Indikator MOST dan SuperTrend sangat baik dalam mengikuti sistem tren tetapi sebaliknya kinerja mereka tidak cerah dalam kondisi pasar sampingan seperti sebagian besar indikator lainnya.

Profit Maximizer - PMax mencoba untuk memecahkan masalah ini. PMax menggabungkan sisi kuat MOST (Moving Average Trend Changer) dan SuperTrend (deteksi harga ATR) dalam satu indikator.

Hasil backtest dan optimasi PMax jauh lebih baik dibandingkan dengan pendahulunya MOST dan SuperTrend. Ini mengurangi jumlah sinyal palsu di sisi dan memberikan sinyal perdagangan yang lebih dapat diandalkan.

PMax mudah untuk menentukan tren dan dapat digunakan di semua jenis pasar dan instrumen.

Parameter pertama dalam indikator PMax yang ditetapkan oleh tiga parameter adalah periode/panjangnya ATR.

Parameter kedua adalah Multiplier of ATR yang akan berguna untuk menetapkan nilai jarak dari rata-rata bergerak yang dibangun.

Secara pribadi saya pikir parameter yang paling penting adalah Moving Average Length dan tipe.

PMax akan sangat sensitif terhadap pergerakan tren jika Moving Average Length lebih kecil. dan sebaliknya, akan kurang sensitif ketika lebih lama.

Seiring berjalannya waktu akan menjadi kurang sensitif terhadap tren kecil dan pergerakan harga.

Dengan cara ini, pilihan periode Anda, akan terkait erat dengan jenis tren yang Anda minati.

Kami berada di bawah efek tren naik dalam kasus di mana Moving Average di atas PMax; sebaliknya di bawah pengaruh tren menurun, ketika moving average berada di bawah PMax.

Dibangun dalam jenis Moving Average secara default ditetapkan sebagai EMA tetapi pengguna dapat memilih dari 8 jenis Moving Average yang berbeda seperti:

SMA: Rata-rata Gerak Sederhana EMA: Rata-rata Gerak Eksponensial WMA: Rata-rata Bergerak Bertimbang TMA: Triangular Moving Average VAR: Variable Index Dynamic Moving Average alias VIDYA WWMA: Welles Wilder's Moving Average ZLEMA: Zero Lag Eksponensial Moving Average TSF: Kekuatan Kekuatan Sejati

Tip: Di sisi VAR akan menjadi pilihan yang baik

Anda dapat menggunakan alarm default PMax dan sinyal Beli Jual seperti:

1- Beli ketika Moving Average melintasi di atas PMax JUAL ketika Moving Average melintasi di bawah PMax

2- Beli ketika harga melompat di atas garis Pmax. Menjual ketika harga turun di bawah garis Pmax.

backtest

img


/*backtest
start: 2022-04-24 00:00:00
end: 2022-05-23 23:59:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//developer: @KivancOzbilgic
//author: @KivancOzbilgic

study("Profit Maximizer","PMax", overlay=true, format=format.price, precision=2, resolution="")
src = input(hl2, title="Source")
Periods = input(title="ATR Length", type=input.integer, defval=10)
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
mav = input(title="Moving Average Type", defval="EMA", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
length =input(10, "Moving Average Length", minval=1)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
Normalize= input(title="Normalize ATR ?", type=input.bool, defval=false)
showsupport = input(title="Show Moving Average?", type=input.bool, defval=true)
showsignalsk = input(title="Show Crossing Signals?", type=input.bool, defval=true)
showsignalsc = input(title="Show Price/Pmax Crossing Signals?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
valpha=2/(length+1)
vud1=src>src[1] ? src-src[1] : 0
vdd1=src<src[1] ? src[1]-src : 0
vUD=sum(vud1,9)
vDD=sum(vdd1,9)
vCMO=nz((vUD-vDD)/(vUD+vDD))
VAR=0.0
VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
wwalpha = 1/ length
WWMA = 0.0
WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
zxEMAData = (src + (src - src[zxLag]))
ZLEMA = ema(zxEMAData, length)
lrc = linreg(src, length, 0)
lrc1 = linreg(src,length,1)
lrs = (lrc-lrc1)
TSF = linreg(src, length, 0)+lrs
getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma
    ma
    
MAvg=getMA(src, length)
longStop = Normalize ? MAvg - Multiplier*atr/close : MAvg - Multiplier*atr
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = Normalize ? MAvg + Multiplier*atr/close : MAvg + Multiplier*atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
PMax = dir==1 ? longStop: shortStop
plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Moving Avg Line")
pALL=plot(PMax, color=color.red, linewidth=2, title="PMax", transp=0)
alertcondition(cross(MAvg, PMax), title="Cross Alert", message="PMax - Moving Avg Crossing!")
alertcondition(crossover(MAvg, PMax), title="Crossover Alarm", message="Moving Avg BUY SIGNAL!")
alertcondition(crossunder(MAvg, PMax), title="Crossunder Alarm", message="Moving Avg SELL SIGNAL!")
alertcondition(cross(src, PMax), title="Price Cross Alert", message="PMax - Price Crossing!")
alertcondition(crossover(src, PMax), title="Price Crossover Alarm", message="PRICE OVER PMax - BUY SIGNAL!")
alertcondition(crossunder(src, PMax), title="Price Crossunder Alarm", message="PRICE UNDER PMax - SELL SIGNAL!")

buySignalk = crossover(MAvg, PMax)
plotshape(buySignalk and showsignalsk ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)

sellSignallk = crossunder(MAvg, PMax)
plotshape(sellSignallk and showsignalsk ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

buySignalc = crossover(src, PMax)
plotshape(buySignalc and showsignalsc ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)

sellSignallc = crossunder(src, PMax)
plotshape(sellSignallc and showsignalsc ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)

mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (MAvg>PMax ? color.green : na) : na
shortFillColor = highlighting ? (MAvg<PMax ? color.red : na) : na

fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor)


if buySignalk
    strategy.entry("Enter Long", strategy.long)
else if sellSignallk
    strategy.entry("Enter Short", strategy.short)

Berkaitan

Lebih banyak