
यह रणनीति प्रवृत्ति की दिशा को निर्धारित करने के लिए मूल्य और PMax संकेतकों के एक क्रॉसिंग के साथ एक गुणक चलती औसत की गणना करके प्रवृत्ति की दिशा का आकलन करती है। यह एक लंबी अवधि के द्वि-दिशात्मक ट्रेडिंग विधि का उपयोग करती है, जब प्रवृत्ति ऊपर जाती है तो अधिक करती है, और जब प्रवृत्ति नीचे जाती है तो शून्य करती है, वास्तविक समय में स्थिति के जोखिम का आकलन करती है और लाभ के लिए बाहर निकलती है।
इस रणनीति का केंद्रीय संकेतक गुणांकित चलती औसत है। संकेतक मापदंडों में शामिल हैंः एटीआर चक्र की लंबाई, एटीआर गुणांक, चलती औसत के प्रकार और लंबाई। एटीआर मूल्य अवधि के दौरान उतार-चढ़ाव की मात्रा को दर्शाता है। गुणांकित चलती औसत अवधि के दौरान कीमतों के औसत मूल्य को जोड़ने / घटाने एटीआर गुणांक और एटीआर के गुणनफल के बराबर है। जब कीमत गुणांकित चलती औसत से अधिक होती है तो यह एक नीला संकेत होता है; जब कीमत गुणांकित चलती औसत से कम होती है तो यह एक नीला संकेत होता है।
PMax सूचकांक स्टॉप या स्टॉप कीमतों का प्रतिनिधित्व करता है। यह सूचकांक एटीआर मूल्य और प्रवृत्ति की दिशा के संयोजन से गणना की जाती है। एक bullish बाजार में, PMax एक स्टॉप लाइन के रूप में एटीआर मूल्य और गुणांक के गुणांक को घटाकर एक चलती औसत को गुणा करने के बराबर है। एक bearish बाजार में, PMax एक स्टॉप लाइन के रूप में एटीआर मूल्य और गुणांक के गुणांक को गुणा करने के बराबर है।
जब कीमत और PMax संकेतक के साथ ऊपर की ओर क्रॉसिंग होता है, तो अधिक सिग्नल के लिए; जब कीमत और PMax संकेतक के साथ नीचे की ओर क्रॉसिंग होता है, तो एक कम सिग्नल के लिए। रणनीति इस तरह से खेल में प्रवेश करती है, प्रवृत्ति में अधिक होती है, प्रवृत्ति में कम होती है, गतिशील ट्रैक स्टॉप लॉस।
इस रणनीति के निम्नलिखित फायदे हैं:
एक लंबी अवधि के दो-तरफा व्यापार के लिए, यह एक समावेशी, पूर्ण बाजार व्यापार है।
ट्रेडिंग सिग्नल स्थिर और विश्वसनीय हैं।
PMax सूचक के साथ संयोजन में स्टॉप लॉस रोकें, प्रभावी रूप से जोखिम को नियंत्रित करें।
गणना चक्र और गुणांक पैरामीटर समायोज्य हैं, अनुकूलनशीलता व्यापक है।
इस रणनीति में कुछ जोखिम भी हैं:
Whipsaw के लिए गलत पैरामीटर सेट करने से ट्रेडों में नुकसान हो सकता है।
इस तरह के ट्रेडों में लीवरेज की सीमा के जोखिमों को ध्यान में रखा जाना चाहिए।
अचानक होने वाली घटनाओं के कारण बाजार में भारी उतार-चढ़ाव का खतरा है।
समाधान के लिएः
Whipsaw की संभावना को कम करने के लिए पैरामीटर को अनुकूलित करें
लीवरेज सीमा को ठीक से नियंत्रित करें और स्थिति जोखिम को विभाजित करें।
एटीआर गुणांक को बढ़ाएं और स्टॉप लॉस को बढ़ाएं।
इस रणनीति को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः
विभिन्न बाजारों और चक्रों की स्थिरता का परीक्षण करना।
स्वचालित रूप से अनुकूलित करने के लिए पैरामीटर लागू करने के लिए मशीन सीखने एल्गोरिदम
डीप लर्निंग जैसी तकनीकों के साथ मिलकर बाजार संरचना का आकलन करें।
अधिक डेटा स्रोतों को एकीकृत करना और निर्णय लेने में सुधार करना।
इस रणनीति में समग्र रूप से मजबूत और समावेशिता है। लंबी दूरी के द्वि-दिशात्मक व्यापार और गतिशील स्टॉप-लॉस स्टॉप का उपयोग करके, जोखिम को प्रभावी ढंग से नियंत्रित किया जा सकता है। पैरामीटर अनुकूलन और मॉडल पुनरावृत्ति के माध्यम से बेहतर अनुकूलन और व्यापार प्रभाव प्राप्त करने की उम्मीद है। कुल मिलाकर, यह रणनीति दीर्घकालिक ध्यान और आवेदन के लायक है।
/*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)