मुनाफा अधिकतम करनेवाला PMax

लेखक:चाओझांग, दिनांकः 2022-05-25 17:13:45
टैगःएसएमएईएमएडब्ल्यूएमएटीएमएएटीआरZLEMA

मोस्ट और सुपरट्रेंड इंडिकेटर दोनों ट्रेंड फॉलो करने वाले सिस्टम में बहुत अच्छे हैं लेकिन इसके विपरीत उनके प्रदर्शन अन्य इंडिकेटरों की तरह साइडवेज मार्केट की स्थिति में उज्ज्वल नहीं हैं।

मुनाफा अधिकतम करने वाला - पीमैक्स इस समस्या को हल करने की कोशिश करता है। पीमैक्स एक संकेतक में एमओएसटी (मोविंग एवरेज ट्रेंड चेंजर) और सुपरट्रेंड (एटीआर मूल्य का पता लगाने) के शक्तिशाली पक्षों को जोड़ती है।

PMax के बैकटेस्ट और ऑप्टिमाइज़ेशन के परिणाम अपने पूर्ववर्ती MOST और SuperTrend की तुलना में बहुत बेहतर हैं। यह साइडवे में झूठे संकेतों की संख्या को कम करता है और अधिक विश्वसनीय व्यापार संकेत देता है।

PMax ट्रेंड को निर्धारित करना आसान है और किसी भी प्रकार के बाजारों और साधनों में इस्तेमाल किया जा सकता है। यह फिर से पेंट नहीं करता है।

तीनों मापदंडों द्वारा निर्धारित PMax संकेतक में पहला पैरामीटर एटीआर की अवधि/लंबाई है।

दूसरा पैरामीटर एटीआर का गुणक है जो अंतर्निहित चलती औसत से दूरी का मान निर्धारित करने के लिए उपयोगी होगा।

मैं व्यक्तिगत रूप से लगता है कि सबसे महत्वपूर्ण पैरामीटर चलती औसत लंबाई और प्रकार है।

PMax ट्रेंड आंदोलनों के प्रति बहुत संवेदनशील होगा यदि Moving Average Length छोटा है। और इसके विपरीत, यह कम संवेदनशील होगा जब यह लंबा हो।

जैसे-जैसे अवधि बढ़ेगी, वह छोटे रुझानों और मूल्य आंदोलनों के प्रति कम संवेदनशील हो जाएगा।

इस प्रकार, आपकी अवधि की पसंद, इस बात से निकटता से संबंधित होगी कि आप किस प्रकार के रुझानों में रुचि रखते हैं।

हम उन मामलों में अपट्रेंड के प्रभाव में हैं जहां चलती औसत PMax से ऊपर है; इसके विपरीत, जब मूविंग एवरेज पीएमएक्स से नीचे होता है, तो नीचे की ओर रुझान के प्रभाव में।

अंतर्निहित चलती औसत प्रकार डिफ़ॉल्ट रूप से ईएमए के रूप में सेट है लेकिन उपयोगकर्ता 8 विभिन्न चलती औसत प्रकारों में से चुन सकते हैं जैसेः

SMA: सरल चलती औसत ईएमएः घातीय गतिशील औसत WMA: भारित चलती औसत TMA: त्रिकोणीय चलती औसत वीएआरः चर सूचकांक गतिशील चलती औसत उर्फ VIDYA WWMA: वेल्स वाइल्डर का चलती औसत ZLEMA: शून्य विलंब घातीय चलती औसत टीएसएफः सच्ची शक्ति बल

टिप: पक्षों में वीएआर एक अच्छा विकल्प होगा

आप PMax डिफ़ॉल्ट अलार्म और Buy Sell सिग्नल का उपयोग कर सकते हैं जैसेः

1- जब मूविंग एवरेज PMax से ऊपर जाता है तो खरीदें जब चलती औसत PMax से नीचे जाती है तो बेचना

2- जब कीमतें पीमैक्स रेखा के ऊपर कूदें तो खरीदें। जब कीमतें पीमैक्स रेखा के नीचे जाती हैं तो बेचें।

बैकटेस्ट

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)

संबंधित

अधिक