MOST और KAMA पर आधारित प्रवृत्ति अनुसरण रणनीति


निर्माण तिथि: 2024-02-29 11:04:38 अंत में संशोधित करें: 2024-02-29 11:04:38
कॉपी: 3 क्लिक्स: 697
1
ध्यान केंद्रित करना
1617
समर्थक

MOST और KAMA पर आधारित प्रवृत्ति अनुसरण रणनीति

अवलोकन

इस रणनीति के संयोजन का उपयोग करता है, एसएमए, ईएमए, KAMA, आदि के रूप में कई चलती औसत, कीमत प्रवृत्ति की दिशा की पहचान, और एक ट्रैक प्रवृत्ति चलाने के लिए रणनीति के आधार पर कीमतों के टूटने के लिए सेट रोक. जब कीमतों में वृद्धि, trails the upper band के रूप में रोक; जब कीमतों में गिरावट, trails the नीचे की सीमा के रूप में रोक. रणनीति के फायदे के लिए कई चलती औसत के संयोजन, कीमत डेटा को चिकना कर सकते हैं, प्रवृत्ति की पहचान; गतिशील स्टॉप डिजाइन से बचने के लिए अतिसंवेदनशील स्टॉप. रणनीति का जोखिम यह है कि स्टॉप लाइन सेटिंग बहुत ढीली हो सकती है और समय पर स्टॉप नहीं कर सकती।

रणनीति सिद्धांत

यह रणनीति KAMA का उपयोग करती है क्योंकि यह प्रवृत्ति की दिशा के लिए एक आधारभूत सूचक है, क्योंकि KAMA मूल्य परिवर्तनों के प्रति अधिक संवेदनशील है, और टर्नओवर को जल्दी से पहचान सकता है। साथ ही, रणनीति में SMA, EMA और कई अन्य चलती औसत के संयोजन शामिल हैं, जो प्रमुख प्रवृत्ति की दिशा की पहचान करने के लिए कीमतों पर फ़िल्टर कर सकते हैं।

रणनीति के लिए स्टॉप लाइन की स्थापना मूल्य के आधार पर की जाती है और साथ ही साथ चलती औसत भी होती है। विशेष रूप से, ऊपर की ओर ट्रैक करने वाली स्टॉप लाइन को बफर के रूप में चलती औसत के लिए एक प्रतिशत से अधिक रखा जाता है। नीचे की ओर ट्रैक करने वाली स्टॉप लाइन को बफर के रूप में चलती औसत के लिए एक प्रतिशत से कम किया जाता है। यह कीमतों के उलट होने पर तुरंत बंद हो सकता है।

प्रवेश की शर्तें हैं, जब कीमत नीचे से ऊपर की ओर से अपलाइन स्टॉपलॉस लाइन को तोड़ती है तो अधिक करें; जब कीमत ऊपर से नीचे की ओर से डाउनलाइन स्टॉपलॉस लाइन को तोड़ती है तो खाली करें।

श्रेष्ठता विश्लेषण

इस रणनीति का सबसे बड़ा लाभ यह है कि कई प्रकार के चलती औसत के संयोजन के माध्यम से, प्रवृत्ति निर्णय की सटीकता में सुधार किया जा सकता है, झूठे संकेतों को कम किया जा सकता है। साथ ही, रणनीति की स्टॉप लॉस लाइन चलती औसत गतिशीलता पर आधारित है, जो वास्तविक समय की कीमतों के आधार पर समायोजित की जा सकती है और आकस्मिक घटनाओं के लिए प्रतिक्रिया प्रदान कर सकती है।

इसके अलावा, एक एकल सूचक रणनीति की तुलना में, यह रणनीति ट्रेंड ट्रैकिंग और ब्रेकआउट रणनीतियों के फायदे को जोड़ती है। रुझान की स्थिति में, अधिकतम लाभ प्राप्त किया जा सकता है; जबकि उतार-चढ़ाव की स्थिति में, स्टॉप-लॉस सेटिंग के माध्यम से नुकसान को कम किया जा सकता है।

जोखिम विश्लेषण

इस रणनीति का मुख्य जोखिम यह है कि स्टॉप लाइन की सेटिंग बहुत ढीली हो सकती है और समय पर बंद नहीं हो सकती है। यह इसलिए है क्योंकि स्टॉप लाइन की वापसी अनुपात निश्चित है और यदि स्थिति में भारी बदलाव होता है, तो स्टॉप लाइन को समय पर अपडेट करने में असमर्थता से अधिक नुकसान हो सकता है।

इसके अलावा, मूविंग एवरेज स्वयं बहुत ही सुस्त है और कीमतों में बदलावों पर तुरंत प्रतिक्रिया नहीं दे सकता है। इससे बाजार में तेजी से बदलाव होने पर समय पर नुकसान नहीं हो सकता है।

अनुकूलन दिशा

इस रणनीति को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः

  1. विभिन्न पैरामीटर सेटिंग्स के तहत स्टॉप-लॉस लाइन अनुपात का परीक्षण करें और बेहतर पैरामीटर संयोजन ढूंढें;

  2. बाजार में उतार-चढ़ाव के आधार पर स्टॉप-लॉस लाइन को गतिशील रूप से बदलने की कोशिश करें;

  3. अन्य सूचकांकों को जोड़ना, स्टॉप-स्टॉप बेसिस पर अधिक चर पेश करना, और रणनीति की अनुकूलनशीलता में सुधार करना;

  4. चलती औसत की आवृत्ति पैरामीटर का अनुकूलन करें और सबसे अच्छी कीमतों को चिकना करने के लिए आवृत्ति सेटिंग का पता लगाएं।

संक्षेप

यह रणनीति समग्र रूप से काफी मजबूत है, यह कई प्रकार के चलती औसत संयोजनों के माध्यम से प्रवृत्ति की दिशा का आकलन करती है, और प्रवृत्ति के संचालन को ट्रैक करने के लिए एक गतिशील ट्रैक स्टॉप तंत्र की डिजाइन करती है। लाभ यह है कि झूठे संकेतों को कम किया जा सकता है, स्टॉप के माध्यम से जोखिम को नियंत्रित किया जा सकता है; नुकसान यह है कि स्टॉप लाइन बहुत चौड़ी सेट हो सकती है, जिससे स्टॉप जल्दी से बंद नहीं किया जा सकता है। अगली अनुकूलन रणनीति को स्टॉप लाइन डिजाइन पर काम करना चाहिए ताकि बाजार में बदलाव के अनुसार गतिशीलता को समायोजित किया जा सके।

रणनीति स्रोत कोड
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Atlantean Trend Signal BUY SELL Strategy', overlay=true)

ma_length = input.int(title='Moving Average Length', minval=1, defval=3)
percent = input.float(3.3, 'STOP LOSS Percent', step=0.1, minval=0)
src = input(title='Source', defval=close)
mav = input.string(title="Moving Average Type", defval="KAMA", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL", "KAMA"])
T3a1 = 0.7
_type = false //input(false, title='Activate Moving Average Screening Mode')
_type1 = false //input(false, title='Activate Moving Average Color Change Screening Mode')
activateScreener = input.bool(false, title="Activate Screener?")
showsignallabels = input(title='Show Signal Labels?', defval=true)

Var_Func(src, ma_length) =>
    valpha = 2 / (ma_length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = math.sum(vud1, 9)
    vDD = math.sum(vdd1, 9)
    vCMO = nz((vUD - vDD) / (vUD + vDD))
    VAR = 0.0
    VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1])
    VAR

VAR = Var_Func(src, ma_length)
DEMA = 2 * ta.ema(src, ma_length) - ta.ema(ta.ema(src, ma_length), ma_length)

Wwma_Func(src, ma_length) =>
    wwalpha = 1 / ma_length
    WWMA = 0.0
    WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1])
    WWMA

WWMA = Wwma_Func(src, ma_length)

// KAMA Calculation
Kama_Func(src, ma_length) =>
    xvnoise = math.abs(src - src[1])
    nfastend = 0.666
    nslowend = 0.0645
    nsignal = math.abs(src - src[ma_length])
    nnoise = math.sum(xvnoise, ma_length)
    nefratio = nnoise != 0 ? nsignal / nnoise : 0
    nsmooth = math.pow(nefratio * (nfastend - nslowend) + nslowend, 2)
    nAMA = 0.0
    nAMA := nz(nAMA[1]) + nsmooth * (src - nz(nAMA[1]))
    nAMA

Zlema_Func(src, ma_length) =>
    zxLag = ma_length / 2 == math.round(ma_length / 2) ? ma_length / 2 : (ma_length - 1) / 2
    zxEMAData = src + src - src[zxLag]
    ZLEMA = ta.ema(zxEMAData, ma_length)
    ZLEMA

ZLEMA = Zlema_Func(src, ma_length)

Tsf_Func(src, ma_length) =>
    lrc = ta.linreg(src, ma_length, 0)
    lrc1 = ta.linreg(src, ma_length, 1)
    lrs = lrc - lrc1
    TSF = ta.linreg(src, ma_length, 0) + lrs
    TSF

TSF = Tsf_Func(src, ma_length)

HMA = ta.wma(2 * ta.wma(src, ma_length / 2) - ta.wma(src, ma_length), math.round(math.sqrt(ma_length)))

T3e1 = ta.ema(src, ma_length)
T3e2 = ta.ema(T3e1, ma_length)
T3e3 = ta.ema(T3e2, ma_length)
T3e4 = ta.ema(T3e3, ma_length)
T3e5 = ta.ema(T3e4, ma_length)
T3e6 = ta.ema(T3e5, ma_length)
T3c1 = -T3a1 * T3a1 * T3a1
T3c2 = 3 * T3a1 * T3a1 + 3 * T3a1 * T3a1 * T3a1
T3c3 = -6 * T3a1 * T3a1 - 3 * T3a1 - 3 * T3a1 * T3a1 * T3a1
T3c4 = 1 + 3 * T3a1 + T3a1 * T3a1 * T3a1 + 3 * T3a1 * T3a1
T3 = T3c1 * T3e6 + T3c2 * T3e5 + T3c3 * T3e4 + T3c4 * T3e3

getMA(src, ma_length) =>
    ma = 0.0
    ma := switch mav
        'SMA' => ta.sma(src, ma_length)
        'EMA' => ta.ema(src, ma_length)
        'WMA' => ta.wma(src, ma_length)
        'DEMA' => DEMA
        'TMA' => ta.sma(ta.sma(src, math.ceil(ma_length / 2)), math.floor(ma_length / 2) + 1)
        'VAR' => VAR
        'WWMA' => WWMA
        'ZLEMA' => ZLEMA
        'TSF' => TSF
        'HULL' => HMA
        'TILL' => T3
        'KAMA' => Kama_Func(src, ma_length)
    ma
ALL = getMA(src, ma_length)
exMov = ALL
fark = exMov * percent * 0.01
longStop = exMov - fark
longStopPrev = nz(longStop[1], longStop)
longStop := exMov > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = exMov + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := exMov < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and exMov > shortStopPrev ? 1 : dir == 1 and exMov < longStopPrev ? -1 : dir
MOST = dir == 1 ? longStop : shortStop
cro = _type and _type1 ? ta.crossover(exMov, exMov[1]) : _type ? ta.crossover(close, exMov) : ta.crossover(exMov, MOST)
cru = _type and _type1 ? ta.crossunder(exMov, exMov[1]) : _type ? ta.crossunder(close, exMov) : ta.crossunder(exMov, MOST)
direction = 0
direction := cro ? 1 : cru ? -1 : direction[1]
col1 = exMov > exMov[1]
col3 = exMov < exMov[1]
colorM = col1 and _type and _type1 ? color.rgb(14, 241, 52) : col3 and _type and _type1 ? color.red : color.new(#00bcd4, 0)
if (cro)
    strategy.entry('LONG', strategy.long)
if (cru)
    strategy.close('LONG')

plot(_type ? na : MOST, color=color.new(color.maroon, 0), linewidth=3, title='MOST')
plot(exMov, color=colorM, linewidth=2, title='exMov')
plotshape(cro and showsignallabels, title='BUY', text='BUY', location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.new(#00bcd4, 0), textcolor=color.new(color.white, 0))
plotshape(cru and showsignallabels, title='SELL', text='SELL', location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.new(#e91e63, 0), textcolor=color.new(color.white, 0))