MOST와 슈퍼트렌드 인디케이터 모두 트렌드를 따르는 시스템에서 매우 잘하지만 반대로 다른 대부분의 인디케이터와 마찬가지로 옆 시장 조건에서 성능이 밝지 않습니다.
이윤 극대화 - PMax이 이 문제를 해결하려고 합니다. PMax은 MOST (Moving Average Trend Changer) 와 SuperTrend (ATR 가격 탐지) 의 강력한 측면을 하나의 지표로 결합합니다.
PMax의 백테스트 및 최적화 결과는 선조 MOST 및 SuperTrend에 비해 훨씬 낫습니다. 옆으로 잘못된 신호의 수를 줄이고 더 신뢰할 수있는 거래 신호를 제공합니다.
PMax는 트렌드를 쉽게 파악할 수 있고 모든 종류의 시장과 도구에서 사용할 수 있습니다.
세 가지 매개 변수에 의해 설정된 PMax 지표의 첫 번째 매개 변수는 ATR의 기간/연장입니다.
두 번째 매개 변수는 ATR의 곱기입니다. 이는 내장 이동 평균에서 거리의 값을 설정하는 데 유용합니다.
개인적으로 가장 중요한 매개 변수는 이동 평균 길이와 종류라고 생각합니다.
이동 평균 길이가 작으면 PMax는 트렌드 움직임에 훨씬 민감할 것이고, 반대로 길어지면 덜 민감할 것입니다.
기간이 길어질수록 작은 추세와 가격 움직임에 대한 민감도가 낮아집니다.
이 방법으로, 당신의 기간 선택은 당신이 관심있는 어떤 종류의 추세와 밀접하게 관련이있을 것입니다.
우리는 상향 트렌드의 영향을 받고 있습니다. 이동 평균이 PMax보다 높을 때 말이죠. 반대로, 이동평균이 PMax 이하일 때, 하향 추세의 영향 아래에서.
기본 설정된 이동 평균 유형으로 구성되어 있지만 사용자는 다음과 같은 8 가지 다른 이동 평균 유형 중에서 선택할 수 있습니다.
SMA: 단순한 이동평균 EMA: 기하급수적 이동 평균 WMA: 가중화 이동 평균 TMA: 삼각형 이동 평균 VAR: 변수 지수 동적 이동 평균 또는 VIDYA WWMA: 웰스 와일더의 이동 평균 ZLEMA: 제로 레이그 기하급수적 이동 평균 TSF: 진정한 힘
팁: 옆으로 VAR는 좋은 선택이 될 것입니다
PMax 기본 알람과 구매 판매 신호를 사용할 수 있습니다.
1- 이동평균이 PMax을 넘을 때 구매 이동평균이 PMax 아래를 넘을 때 팔자
2- Pmax 라인을 넘어서면 구매합니다. Pmax 라인 아래로 떨어지면 팔자
백테스트
/*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)