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

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

img

अवलोकन

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

रणनीति तर्क

रणनीति मुख्य रूप से दो चलती औसत, एक 21-अवधि ईएमए और एक 42-अवधि ईएमए का उपयोग करती है। जब छोटा एमए लंबे एमए से ऊपर जाता है, तो इसे खरीद संकेत माना जाता है। जब छोटा एमए लंबे एमए से नीचे जाता है, तो इसे बिक्री संकेत माना जाता है।

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

विशेष रूप से, खरीद संकेत तब ट्रिगर किया जाता है जबः लघु एमए लंबी एमए से ऊपर पार हो जाती है, मैकगिनले एमए से ऊपर की कीमत बंद हो जाती है, लघु एमए से नीचे की कीमत बंद हो जाती है। बिक्री संकेत तब ट्रिगर किया जाता है जबः लघु एमए लंबी एमए से नीचे पार हो जाती है, लघु एमए से नीचे की कीमत बंद हो जाती है, लघु एमए से ऊपर की कीमत बंद हो जाती है।

मैकगिनले एमए की गणना इस प्रकार की जाती हैः एमडीआईटी = एमडीआईटी -1 + (क्लोज - एमडीआईटी -1) / मैक्स(के * अवधि * (क्लोज / एमडीआईटी -1) ^ 4, 1) जहां एमडीआईटी वर्तमान मूल्य है, एमडीआईटी -1 पिछले मूल्य है, क्लोज बंद मूल्य है, के चिकनाई निरंतर है, और अवधि गणना अवधि है। यह सूत्र एमए को वास्तविक समय में मूल्य परिवर्तनों को ट्रैक करने की अनुमति देता है।

लाभ

  1. मैकगिनली एमए पारंपरिक एमए के पिछड़े मुद्दे को बेहतर बनाता है और तेजी से रुझान परिवर्तनों को पकड़ सकता है।

  2. सिग्नल उत्पन्न करने के लिए दोहरी एमए का उपयोग करके प्रभावी रूप से झूठे ब्रेकआउट को फ़िल्टर किया जा सकता है।

  3. मैकगिनली एमए से ऊपर/नीचे मूल्य जोड़ने से सीमाबद्ध बाजारों में अत्यधिक व्यापार से बचा जा सकता है।

  4. ईएमए का उपयोग करने से एमए हाल के मूल्य परिवर्तनों के प्रति अधिक संवेदनशील हो जाता है।

जोखिम

  1. Whipsaws से साइडवेज बाजारों में गलत संकेत उत्पन्न हो सकते हैं, जिससे नुकसान हो सकता है। पैरामीटर को फ़िल्टर संकेतों के लिए समायोजित किया जा सकता है।

  2. अंतराल के उद्घाटन समय पर प्रवेश को ट्रिगर करने में विफल हो सकते हैं। प्रवेश नियमों को ढीला किया जा सकता है।

  3. अपर्याप्त पैरामीटर ट्यूनिंग रणनीति के प्रदर्शन को प्रभावित कर सकता है। पैरामीटर को अनुकूलित किया जाना चाहिए।

  4. लंबे होल्डिंग पीरियड्स में प्रणालीगत जोखिम होता है। स्टॉप लॉस का उपयोग करने पर विचार करें।

सुधार

  1. इष्टतम संयोजन खोजने के लिए विभिन्न एमए लंबाई का परीक्षण करें।

  2. प्रवेश/निकास के समय को बेहतर बनाने के लिए केडी, एमएसीडी जैसे अन्य संकेतक जोड़ें।

  3. मैकगिनली एमए गणना को अनुकूलित करने के लिए विभिन्न उत्पादों और बाजारों के आधार पर के मूल्य को समायोजित करें।

  4. गतिशील स्थिति आकार और जोखिम नियंत्रण के लिए अस्थिरता उपायों को शामिल करें।

  5. नुकसान को नियंत्रित करने के लिए स्टॉप लॉस सेट करें। लाभ में लॉक करने के लिए ट्रेलिंग स्टॉप का भी परीक्षण किया जा सकता है।

निष्कर्ष

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


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 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/
// © LucasZancheta

//@version=4
strategy(shorttitle="Maguila", title="McGinley Dynamic Indicator", overlay=true)

//Médias móveis
MA1Period=input(21, title="MA1")
MA2Period=input(42, title="MA2")

MA1 = ema(close, MA1Period)
MA2 = ema(close, MA2Period)

aboveAverage = MA1 >= MA2
hunderAverage = MA2 >= MA1

//Período do backtest
startDate = input(title="Start Date", type=input.integer, defval=28, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer, defval=5, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer, defval=2019, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer, defval=28, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer, defval=5, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer, defval=2030, minval=1800, maxval=2100)

//Verifica se o candle está dentro do período do backtest
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))

//Número de periodos da média móvel
period  = input(title="Períodos", type=input.integer, defval=20)
//Constante K (0.6)
k = input(title="Constante K", type=input.float, defval=0.6)
//Preço de fechamento 
closePrice = input(title="Preço", type=input.source, defval=close)

mdi = 0.0

//Fórmula de McGinley
mdi := na(mdi[1]) ? closePrice : mdi[1] + (closePrice - mdi[1]) / max((k * period * pow(closePrice / mdi[1], 4)), 1)

//Regra de coloração 
mdiColor = closePrice > mdi ? color.green : closePrice < mdi ? color.red : color.black

//Inserindo as informações no gráfico    
plot(MA1, color=color.blue, linewidth=2)
plot(MA2, color=color.purple, linewidth=2)

barcolor(mdiColor)

//Estratégia
buySignal = aboveAverage and closePrice > mdi and crossunder(low, MA1) and close > MA1  
buyLoss = closePrice < mdi and close < MA1 and close < MA2

if (inDateRange)
    strategy.entry("Compra", strategy.long, qty=1, when= buySignal)
    strategy.exit("Gain da compra", "Compra", qty=1, profit=20)
    strategy.close("Compra", qty=1, when= buyLoss, comment="Loss na operação")

sellSignal = hunderAverage and closePrice < mdi and crossover(high, MA1) and close < MA1
sellLoss = closePrice > mdi and close > MA1 and close > MA2

if (inDateRange)
    strategy.entry("Venda", strategy.short, qty=1, when= sellSignal)
    strategy.exit("Gain da venda", "Venda", qty=1, profit=20)
    strategy.close("Venda", qty=1, when= sellLoss, comment="Loss na operação")

if (not inDateRange)
    strategy.close_all()




अधिक