मूविंग एवरेज ट्रेडिंग रणनीति


निर्माण तिथि: 2023-10-30 15:53:25 अंत में संशोधित करें: 2023-10-30 15:53:25
कॉपी: 3 क्लिक्स: 611
1
ध्यान केंद्रित करना
1617
समर्थक

मूविंग एवरेज ट्रेडिंग रणनीति

अवलोकन

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

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

  1. एक निश्चित अवधि (डिफ़ॉल्ट 400 चक्र) के लिए एक भारित चलती औसत (vwma) को औसत रेखा सूचक के रूप में गणना करें।

  2. यह निर्धारित करने के लिए कि औसत रेखा vWMA बढ़ रही है या नहीं, यदि यह बढ़ रही है, तो एक बहु-संकेत अपट्रेंड सेट करें; यदि यह गिर रही है, तो एक अपट्रेंड सिग्नल सेट करें।

  3. जब अपट्रेंड वास्तविक हो, तो अधिक करें; जब डाउनट्रेंड वास्तविक हो, तो पोजीशन खाली करें।

  4. प्रत्येक K लाइन के लिए रणनीति लाभप्रदता bar_pnl और खरीद-रखाव लाभप्रदता bar_bh की गणना करें।

  5. तिमाही और वार्षिक ब्रेक के आधार पर, प्रत्येक तिमाही और वार्षिक रणनीति रिटर्न quarter_pnl और वार्षिक रिटर्न year_pnl और संबंधित खरीद-रखाव रिटर्न quarter_bh और year_bh की गणना करें।

  6. इस तालिका में प्रत्येक वर्ष की प्रत्येक तिमाही के लिए रणनीतिक रिटर्न और खरीद-रखाव रिटर्न की दरें प्रदर्शित की गई हैं।

रणनीति का विश्लेषण

इस रणनीति में मुख्य रूप से बाजार के रुझान की दिशा पर निर्भरता होती है, जिसमें निम्नलिखित फायदे होते हैंः

  1. ऑपरेशन सरल है, औसत संकेतक के माध्यम से बाजार के रुझान का आकलन करना आसान है।

  2. प्रवृत्ति नियंत्रण क्षमता मजबूत है, प्रवृत्ति संचालन का पालन करें, और गैर-प्रवृत्ति बाजार में नुकसान को प्रभावी ढंग से नियंत्रित करने में सक्षम हों।

  3. कम विन्यास योग्य पैरामीटर, मुख्य रूप से औसत रेखा चक्र को समायोजित करने के लिए, परीक्षण और अनुकूलन के लिए आसान।

  4. इस तरह से, यह स्पष्ट है कि एक तालिका के माध्यम से लाभ का एक दृश्य प्रदर्शित किया जा सकता है।

  5. आय के रूप में खरीद और धारण आय की तुलना करने के लिए जोड़ा गया, ताकि रणनीति के लिए अतिरिक्त आय स्पष्ट हो सके।

  6. अन्य नीतियों के साथ संयोजन के लिए तालिका स्थान को लचीला बनाया जा सकता है

रणनीतिक जोखिम विश्लेषण

इस रणनीति के कुछ जोखिम भी हैं:

  1. Bulk market जोखिम, लंबे समय तक चलने वाले बैल बाजार में, खरीद-रखाव की रणनीति की तुलना में थोड़ा कम रिटर्न हो सकता है। औसत चक्र को अनुकूलित करने के लिए उचित समायोजन किया जा सकता है।

  2. अस्थिरता में, whipsaw जोखिम अधिक होता है। दोहराए जाने वाले लेनदेन को कम करने के लिए फ़िल्टरिंग शर्तों को जोड़ने पर विचार किया जा सकता है, जैसे कि पूर्व-ब्रेकिंग ऊंचाई।

  3. औसत रेखा प्रणाली वक्र के लिए अच्छी तरह से फिट नहीं होती है और शायद रुझान मोड़ बिंदु को याद करती है। विभिन्न प्रकार के औसत रेखा संकेतकों का परीक्षण किया जा सकता है।

  4. स्टॉप-ऑफ-लॉस के लिए कोई विचार नहीं किया गया है, और एक बड़े पैमाने पर वापसी का जोखिम है। गतिशील स्टॉप-ऑफ या स्थिति को कम करने पर विचार किया जा सकता है।

  5. शेड्यूल के अनुकूलन के लिए, जोखिम सूचकांकों को जोड़ने पर विचार किया जा सकता है, जैसे कि शार्प अनुपात और अधिकतम वापसी।

रणनीति अनुकूलन दिशा

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

  1. औसत रेखा पैरामीटर का अनुकूलन करें और औसत रेखा चक्र को विभिन्न बाजार स्थितियों के लिए अनुकूलित करें।

  2. Whipsaw को कम करने के लिए फ़िल्टर शर्तों को जोड़ें, जैसे कि ब्रेक-अप से पहले उच्च बिंदु।

  3. विभिन्न प्रकार की औसत रेखाओं को आज़माएं, जैसे कि भारित चलती औसत रेखा, द्वि-सूचक चलती औसत रेखा आदि।

  4. स्टॉप लॉस में शामिल होने के लिए, डायनामिक स्टॉप लॉस सेट करें या अपनी स्थिति को कम करने पर विचार करें।

  5. तालिका सामग्री को समृद्ध करें, शार्प अनुपात, अधिकतम निकासी और अन्य संकेतक जोड़ें।

  6. अन्य संकेतकों जैसे MACD, Bollinger Bands आदि के साथ संयोजन में प्रवृत्ति का आकलन करें।

  7. स्थिति प्रबंधन का अनुकूलन करें, बाजार की स्थिति के अनुसार स्थिति को गतिशील रूप से समायोजित करें।

  8. विभिन्न मानकों के संचालन का परीक्षण करें और सर्वोत्तम अनुप्रयोग खोजें।

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2022-10-23 00:00:00
end: 2023-10-29 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/
// © Dannnnnnny

//@version=4
strategy(title="Quarterly Returns in Strategies vs Buy & Hold", initial_capital= 1000, overlay=true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.1)
maLength= input(400)

wma= vwma(hl2,maLength)
uptrend= rising(wma, 5)
downtrend= falling(wma,5)

plot(wma)

if uptrend
    strategy.entry("Buy", strategy.long)
else
    strategy.close("Buy")//

///////////////////
// QUARTERLY TABLE //
enableQuarterlyTable = input(title="Enable Quarterly Return table", type=input.bool, defval=false)
enableCompareWithMarket = input(title="Compare with Market Benchmark", type=input.bool, defval=false)
table_position = input(title="Table Position", type=input.string, defval='bottom_right', options=['bottom_right','bottom_left','top_right', 'top_left'])
precision = 2
new_quarter = ceil(month(time)/3)  != ceil(month(time[1])/3)
new_year  = year(time)  != year(time[1])

eq = strategy.equity

bar_pnl = eq / eq[1] - 1
bar_bh = (close-close[1])/close[1]

cur_quarter_pnl = 0.0
cur_year_pnl  = 0.0
cur_quarter_bh = 0.0
cur_year_bh  = 0.0

// Current Quarterly P&L
cur_quarter_pnl := new_quarter ? 0.0 : 
                 (1 + cur_quarter_pnl[1]) * (1 + bar_pnl) - 1 
cur_quarter_bh := new_quarter ? 0.0 : 
                 (1 + cur_quarter_bh[1]) * (1 + bar_bh) - 1

// Current Yearly P&L
cur_year_pnl := new_year ? 0.0 : 
                 (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
cur_year_bh := new_year ? 0.0 : 
                 (1 + cur_year_bh[1]) * (1 + bar_bh) - 1

// Arrays to store Yearly and Quarterly P&Ls
var quarter_pnl  = array.new_float(0)
var quarter_time = array.new_int(0)
var quarter_bh  = array.new_float(0)

var year_pnl  = array.new_float(0)
var year_time = array.new_int(0)
var year_bh  = array.new_float(0)

end_time = false

end_time:= time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory

if (not na(cur_quarter_pnl[1]) and (new_quarter or end_time))
    if (end_time[1])
        array.pop(quarter_pnl)
        array.pop(quarter_time)
        
    array.push(quarter_pnl , cur_quarter_pnl[1])
    array.push(quarter_time, time[1])
    array.push(quarter_bh , cur_quarter_bh[1])

if (not na(cur_year_pnl[1]) and (new_year or end_time))
    if (end_time[1])
        array.pop(year_pnl)
        array.pop(year_time)
        
    array.push(year_pnl , cur_year_pnl[1])
    array.push(year_time, time[1])
    array.push(year_bh , cur_year_bh[1])

// Quarterly P&L Table    
var quarterly_table = table(na)

getCellColor(pnl, bh)  => 
    if pnl > 0
        if bh < 0 or pnl > 2 * bh
            color.new(color.green, transp = 20)
        else if pnl > bh
            color.new(color.green, transp = 50)
        else
            color.new(color.green, transp = 80)
    else
        if bh > 0 or pnl < 2 * bh
            color.new(color.red, transp = 20)
        else if pnl < bh
            color.new(color.red, transp = 50)
        else
            color.new(color.red, transp = 80)

if (end_time and enableQuarterlyTable)
    quarterly_table := table.new(table_position, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)

    table.cell(quarterly_table, 0,  0, "",     bgcolor = #cccccc)
    table.cell(quarterly_table, 1,  0, "Q1",  bgcolor = #cccccc)
    table.cell(quarterly_table, 2,  0, "Q2",  bgcolor = #cccccc)
    table.cell(quarterly_table, 3,  0, "Q3",  bgcolor = #cccccc)
    table.cell(quarterly_table, 4,  0, "Q4",  bgcolor = #cccccc)
    table.cell(quarterly_table, 5,  0, "Year", bgcolor = #999999)


    for yi = 0 to array.size(year_pnl) - 1
        table.cell(quarterly_table, 0,  yi + 1, tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
        
        y_color = getCellColor(array.get(year_pnl, yi), array.get(year_bh, yi))
        table.cell(quarterly_table, 5, yi + 1, enableCompareWithMarket ? tostring(round(array.get(year_pnl, yi) * 100, precision)) + " (" + tostring(round(array.get(year_bh, yi) * 100, precision)) + ")" : tostring(round(array.get(year_pnl, yi) * 100, precision)), bgcolor = y_color, text_color=#bfbfbf)
        
    for mi = 0 to array.size(quarter_time) - 1
        m_row   = year(array.get(quarter_time, mi))  - year(array.get(year_time, 0)) + 1
        m_col   = ceil(month(array.get(quarter_time, mi)) / 3)
        m_color = getCellColor(array.get(quarter_pnl, mi), array.get(quarter_bh, mi))
        
        table.cell(quarterly_table, m_col, m_row, enableCompareWithMarket ?  tostring(round(array.get(quarter_pnl, mi) * 100, precision)) + " (" + tostring(round(array.get(quarter_bh, mi) * 100,precision)) +")" : tostring(round(array.get(quarter_pnl, mi) * 100, precision)), bgcolor = m_color, text_color=#bfbfbf)