यह रणनीति गुणक चलती औसत रेखा की गणना करती है और प्रवृत्ति की दिशा निर्धारित करने के लिए मूल्य और पीएमएक्स संकेतक के क्रॉसिंग को जोड़ती है। यह प्रवृत्ति बढ़ने पर लंबी और प्रवृत्ति गिरने पर छोटी होने पर दो-दिशात्मक व्यापार को अपनाता है, वास्तविक समय में लाभ के साथ बाहर निकलने के लिए स्थिति जोखिम का मूल्यांकन करता है।
इस रणनीति का मुख्य संकेतक गुणक चलती औसत रेखा है। संकेतक मापदंडों में शामिल हैंः एटीआर अवधि, एटीआर गुणक, चलती औसत प्रकार और लंबाई। एटीआर मूल्य अवधि के दौरान अस्थिरता का प्रतिनिधित्व करता है। गुणक चलती औसत रेखा औसत मूल्य प्लस / माइनस एटीआर गुणक और एटीआर के उत्पाद के बराबर है। जब कीमत लाइन से ऊपर होती है तो एक लंबा संकेत होता है। जब कीमत लाइन से नीचे होती है तो एक छोटा संकेत होता है।
पीएमएक्स सूचक स्टॉप लॉस या ले लाभ मूल्य का प्रतिनिधित्व करता है। यह एटीआर मूल्य और प्रवृत्ति दिशा से गणना की जाती है। अपट्रेंड में, पीएमएक्स मूविंग एवरेज माइनस एटीआर गुणक गुना एटीआर के बराबर है, जो स्टॉप लॉस लाइन के रूप में कार्य करता है। डाउनट्रेंड में, पीएमएक्स मूविंग एवरेज प्लस एटीआर गुणक गुना एटीआर के बराबर है, जो लाभ लाइन के रूप में कार्य करता है।
जब कीमत PMax संकेतक को ऊपर की ओर पार करती है तो एक लंबा संकेत होता है। जब कीमत PMax संकेतक को नीचे की ओर पार करती है तो एक छोटा संकेत होता है। रणनीति संकेतों के आधार पर प्रवेश करती है और बाहर निकलती है, अपट्रेंड में लंबी और डाउनट्रेंड में छोटी होती है, गतिशील ट्रेलिंग स्टॉप लॉस और लाभ लेती है।
इस रणनीति के फायदे:
दो-दिशात्मक व्यापार को अपनाने से यह सभी बाजार स्थितियों को अत्यधिक समावेशी बनाता है।
गुणक चलती औसत लागू करने से स्थिर और विश्वसनीय ट्रेडिंग संकेत प्राप्त होते हैं।
स्टॉप लॉस/टेक प्रॉफिट के लिए PMax के साथ, यह प्रभावी रूप से जोखिम को नियंत्रित करता है।
समायोज्य चक्र और गुणक मापदंड इसे अत्यधिक अनुकूलनशील बनाते हैं।
कुछ जोखिम भी हैं:
अनुचित पैरामीटर सेटिंग्स के कारण पिस्तौल के नुकसान हो सकते हैं।
शॉर्टिंग करते समय लीवरेज सीमाओं पर ध्यान दें।
ब्लैक स्वान घटनाओं से बचना मुश्किल है।
समाधान:
Whipsaws को कम करने के लिए मापदंडों का अनुकूलन करें।
सावधानी से लाभप्रदता पर नियंत्रण रखें और विविधता बनाएं।
स्टॉप रेंज को चौड़ा करने के लिए एटीआर गुणक बढ़ाएँ।
रणनीति को निम्न तरीकों से उन्नत किया जा सकता हैः
विभिन्न बाजारों और चक्रों में स्थिरता का परीक्षण करें।
ऑटो अनुकूलन मापदंडों के लिए मशीन सीखने लागू करें.
डीप लर्निंग तकनीकों से बाजार व्यवस्थाओं का आकलन करें।
निर्णयों को सशक्त बनाने के लिए अधिक डेटा स्रोतों को एकीकृत करें।
इस रणनीति का समग्र प्रदर्शन मजबूत समावेशिता के साथ स्थिर है। दो-दिशात्मक व्यापार और गतिशील स्टॉप लॉस / ले लाभ को अपनाने से, यह जोखिमों को प्रभावी ढंग से नियंत्रित करता है। पैरामीटर ट्यूनिंग और मॉडल पुनरावृत्ति के माध्यम से, रणनीति फिटनेस और प्रभावशीलता में और सुधार किया जा सकता है। सामान्य तौर पर यह दीर्घकालिक ध्यान और अनुप्रयोग के लायक एक रणनीति है।
/*backtest start: 2023-01-08 00:00:00 end: 2024-01-14 00:00:00 period: 1d basePeriod: 1h 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/ // © melihtuna //developer: @KivancOzbilgic //author: @KivancOzbilgic //stretegy converter: @crypto_melih //@version=4 strategy("Profit Maximizer Strategy Long-Short", shorttitle="PMax-Strategy", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD, commission_value=0, commission_type=strategy.commission.percent) 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) condition = input(title="Signal Type", defval="Only Crossing Signals", options=["Only Crossing Signals", "Only Price/Pmax Crossing Signals"]) changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) 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) long_short = input(defval = false, title = "Long-Short", type=input.bool) 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 = MAvg - Multiplier*atr longStopPrev = nz(longStop[1], longStop) longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = 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(condition=="Only Crossing Signals") strategy.entry("BUY", strategy.long, when = buySignalk) else strategy.entry("BUY", strategy.long, when = buySignalc) if(long_short) if(condition=="Only Crossing Signals") strategy.entry("SELL", strategy.short, when = sellSignallk) else strategy.entry("SELL", strategy.short, when = sellSignallc) else if(condition=="Only Crossing Signals") strategy.close("BUY", when = sellSignallk) else strategy.close("BUY", when = sellSignallc)