अनुकूलनशील चलती औसत मात्रात्मक रणनीति

लेखक:चाओझांग, दिनांकः 2023-11-17 17:14:36
टैगः

अवलोकन

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

रणनीति तर्क

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

विशेष रूप से, रणनीति अवधि प्लस 1 (सीएमए_पी 1) और माइनस 1 (सीएमए_एम 1) के साथ सीएमए का परीक्षण करती है, शरीर और विक द्वारा स्पर्शों की संख्या गिनती करती है। यदि सीएमए में सीएमए_पी 1 और सीएमए_एम 1 की तुलना में कम स्पर्श हैं, तो वर्तमान अवधि रखें; यदि सीएमए_पी 1 में कम स्पर्श हैं, तो अवधि को 1 से बढ़ाएं; यदि सीएमए_एम 1 में कम स्पर्श हैं, तो अवधि को 1 से कम करें। यह संकेत रेखा के रूप में अपेक्षाकृत चिकनी सीएमए पाता है।

जब कीमत सीएमए से ऊपर की ओर टूटती है, तो एक खरीद संकेत उत्पन्न होता है; जब कीमत सीएमए से नीचे की ओर टूटती है, तो एक बिक्री संकेत उत्पन्न होता है।

लाभ विश्लेषण

इस अनुकूलनशील चलती औसत रणनीति के निम्नलिखित लाभ हैंः

  1. स्वचालित रूप से इष्टतम मापदंडों का पता लगाएं. चलती औसत अवधि का मैन्युअल रूप से चयन करने की आवश्यकता नहीं है, रणनीति विभिन्न अवधि का परीक्षण करेगी और इष्टतम पाएगी.

  2. झूठे संकेतों को कम करें। निश्चित अवधि के एमए की तुलना में, अनुकूलन एमए अधिक शोर को फ़िल्टर कर सकता है और कई झूठे संकेतों को कम कर सकता है।

  3. बाजार परिवर्तनों के अनुकूल है. जब बाजार सीमा से प्रवृत्ति में स्विच करता है, तो एमए अवधि स्वचालित रूप से संकेत उत्पन्न करने के लिए बढ़ जाएगी; जब बाजार प्रवृत्ति से सीमा में स्विच करता है, तो एमए अवधि स्वचालित रूप से कम हो जाएगी. इसलिए रणनीति गतिशील रूप से बाजार परिवर्तनों के अनुकूल हो सकती है.

  4. व्यापार प्रणाली को सरल बनाना। यह अनुकूलन पद्धति मैन्युअल पैरामीटर अनुकूलन के बिना पूरी व्यापार प्रणाली को सरल बना सकती है।

  5. अच्छी स्केलेबिलिटी। इस अवधारणा को अन्य संकेतकों जैसे अनुकूलन बोलिंगर बैंड, अनुकूलन केडी आदि पर लागू किया जा सकता है।

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

इस रणनीति के लिए कुछ जोखिम भी ध्यान देने योग्य हैंः

  1. कॉल ऑप्शन जोखिम। जब बाजार में कॉल ऑप्शन पैटर्न होता है, तो कैंडल बॉडी एमए लाइन को तोड़ने में विफल हो सकती है, जिसके परिणामस्वरूप गलत संकेत होते हैं। इस तरह के जोखिम को कम करने के लिए फ़िल्टर स्थितियों को जोड़ने की आवश्यकता होती है।

  2. असफल ब्रेकआउट जोखिम। एमए ब्रेकआउट हमेशा जारी नहीं रहता है, कुछ असफल ब्रेकआउट हो सकते हैं। उच्च सफलता दर सुनिश्चित करने के लिए ब्रेकआउट सत्यापन की आवश्यकता होती है।

  3. रुझान उलटने का जोखिम। रुझान में प्रवेश करने के बाद रुझान उलटने पर समय पर स्विच करने की आवश्यकता होती है, अन्यथा यह नुकसान का कारण बन सकता है। नुकसान को नियंत्रित करने के लिए स्टॉप लॉस सेट किया जाना चाहिए।

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

  5. ओवरफिटिंग जोखिम. अत्यधिक पैरामीटर ट्यूनिंग ओवरफिटिंग का कारण बन सकती है और मॉडल सामान्यीकरण क्षमता खो सकती है। विभिन्न बाजार वातावरणों में लंबे समय तक सत्यापन की आवश्यकता है, न कि केवल बैकटेस्ट परिणामों पर भरोसा करना।

सुधार की दिशाएँ

इस अनुकूलनशील एमए रणनीति को बेहतर बनाने के लिए कुछ दिशाएंः

  1. झूठे ब्रेकआउट को फ़िल्टर करने के लिए लगातार ब्रेकआउट के माध्यम से ट्रेंड ब्रेकआउट सत्यापन जोड़ें।

  2. स्टॉप लॉस रणनीति बढ़ाएं, स्टॉप लॉस जब कीमत एमए के दूसरी तरफ वापस चले।

  3. कॉल विकल्प दिखाई देने पर गलत संकेतों से बचने के लिए विकल्प फ़िल्टर जोड़ें.

  4. पैरामीटर ट्यूनिंग को सीमित करने और ओवरफिटिंग को रोकने के लिए आईसी, एलआईसी, एसआईसी आदि जैसे मूल्यांकन मीट्रिक पेश करें।

  5. अनुकूलन स्वर्ण क्रॉस रणनीति, अनुकूलन बोलिंगर बैंड आदि जैसे अन्य संकेतकों में विस्तार करें।

  6. अधिक सुचारू एमए प्राप्त करने के लिए भारित एमए, घातीय एमए आदि का उपयोग करके एमए गणना को अनुकूलित करें।

सारांश

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

[/trans]


/*backtest
start: 2022-11-10 00:00:00
end: 2023-11-16 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/
// © fondDealer96636

//@version=5

strategy('Automatic Moving Average', overlay=true, max_bars_back=201, pyramiding=0, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)

// input
start = 20
lookback = input(20, "Sensitivity", tooltip="Low (High Sensitivity), High (Low Sensitivity).\n\nAdjust according to timeframe and asset.")
smoothing = input(3, "Smoothing")
source = input(close, "Source")
startYear = input(2020, "Start year")
resp = 1

in_date_range = time >= timestamp(syminfo.timezone, startYear, 1, 1, 0, 0)

// global
var ix = -1
var mal = array.new_int(0)


// functions
avg(source, len) =>
    sum = 0.0
    for i = 0 to len-1
        sum += source[i]
    sum/len

bull = close > open

wick_touch(x) =>
    bull ? ((close <= x and x <= high) or (low <= x and x <= open)) : ((open <= x and x <= high) or (low <= x and x <= close))

body_touch(x) =>
    bull ? (open < x and x < close) : (close < x and x < open)

touches(t) =>
    touches = 0
    for i = 0 to lookback-1
        touches += t[i] ? 1 : 0
    touches


// local
ix := ix+1
prev_mal = ix >= 1 ? array.get(mal, ix-1) : start

cma = avg(source, prev_mal)
cma_p1 = avg(source, prev_mal+1)
cma_m1 = avg(source, prev_mal-1)

d = touches(wick_touch(cma))
d_p1 = touches(wick_touch(cma_p1))
d_m1 = touches(wick_touch(cma_m1))

d_b = touches(body_touch(cma))
d_p1_b = touches(body_touch(cma_p1))
d_m1_b = touches(body_touch(cma_m1))

any_body_touch = d_b > 0 or d_p1_b > 0 or d_m1_b > 0
no_wick_touch = d <= 0 and d_p1 <= 0 and d_m1 <= 0
wick_maximized = d >= d_p1 and d >= d_m1 ? prev_mal : (d_p1 >= d and d_p1 >= d_m1 ? prev_mal+resp : (d_m1 >= d and d_m1 >= d_p1 ? prev_mal-resp : na))

up = cma > cma[1]
down = cma < cma[1]
against_trend = (up and close < cma) or (down and close > cma)

new_mal = no_wick_touch or against_trend ? prev_mal-resp : (any_body_touch ? prev_mal+resp : wick_maximized)
next_mal = na(new_mal) ? prev_mal : new_mal

array.push(mal, next_mal < 2 ? 2 : (next_mal > 200 ? 200 : next_mal))


// graph
scma = ta.ema(cma, smoothing)

uptrend = scma > scma[1]
downtrend = scma < scma[1]

plot(scma, "Automatic MA", color=uptrend ? color.green : color.red)

uptrending = close > scma and uptrend
downtrending = close < scma and downtrend

defy = not uptrending and not downtrending
defy_cross = defy and body_touch(scma)

barcolor(uptrending ? color.lime : (downtrending ? color.red : (defy_cross ? color.black : color.white)))


// strategy
change_to_uptrend = uptrending and downtrend[1]
change_to_downtrend = downtrending and uptrend[1]

long = in_date_range and change_to_uptrend
short = in_date_range and change_to_downtrend

if long
    strategy.entry("Long", strategy.long)
if short
    strategy.entry("Short", strategy.short)


अधिक