
यह रणनीति एमएसीडी संकेतक की तेज और धीमी रेखाओं के क्रॉसिंग की तुलना करके खरीद और बेचने के संकेत उत्पन्न करती है। खरीद संकेत उत्पन्न होने पर, खाते के हितों के एक निश्चित अनुपात पर खरीदारी की जाती है। उसके बाद, एक विशेष वापसी बिंदु पर एक अतिरिक्त स्थिति जोड़ी जाती है। जब स्थिति की कमाई विन्यास के स्टॉपओवर तक पहुंच जाती है, तो सभी को बेचा जाता है। बेचने के संकेत और खरीद संकेत तर्क समान हैं।
इस रणनीति का मुख्य तर्क यह है कि एमएसीडी की तुलना में एक तेज और धीमी रेखा के क्रॉसिंग का उपयोग किया जाता है। एमएसीडी एक चलती औसत का अंतर है, जो बाजार की प्रवृत्ति और ऊर्जा का आकलन करने के लिए अल्पकालिक और दीर्घकालिक औसत के बीच अंतर का उपयोग करता है। एक तेज और धीमी रेखा का क्रॉसिंग एक गोल्डफ़ॉक्स और एक डेडफ़ॉक्स है।
जब तेज रेखा पर धीमी रेखा को पार करता है, तो गोल्ड फोर्क उत्पन्न होता है, यह दर्शाता है कि बाजार तेजी के रुझान में है, इस समय रणनीति अधिक स्थिति खोलती है; जब तेज रेखा के नीचे धीमी रेखा को पार करता है, तो डेड फोर्क उत्पन्न होता है, यह दिखाता है कि गिरावट की प्रवृत्ति है, इस समय रणनीति शून्य स्थिति खोलती है।
स्थिति खोलने के बाद, रणनीति एक विशेष वापसी बिंदु पर अतिरिक्त या शून्य स्थिति बनाती है। यह मार्टिंगेल सिद्धांत के माध्यम से लाभ के लिए जगह बढ़ा सकता है। जब स्थिति की संचयी लाभप्रदता कॉन्फ़िगरेशन के स्टॉप-थ्रू तक पहुंच जाती है, तो रणनीति पूरी तरह से बेची जाती है या खरीदती है।
इस रणनीति के निम्नलिखित फायदे हैं:
बाजार के रुझानों को निर्धारित करने के लिए MACD का उपयोग करें, जो एक क्लासिक और विश्वसनीय तकनीकी विश्लेषण संकेतक है।
एक ही लेन-देन के जोखिम को नियंत्रित करने के लिए, एक बैच-से-बैच लेन-देन का उपयोग करें।
अतिरिक्त पोजीशन खोलने से मार्टिंगेल सिद्धांत के माध्यम से मुनाफे की जगह बढ़ सकती है।
नुकसान को सीमित करने के लिए स्टॉप पॉइंट्स को कॉन्फ़िगर करें
इस रणनीति में कुछ जोखिम भी हैं:
MACD सूचक बाजार की गति की पूरी तरह से भविष्यवाणी नहीं कर सकता है, गलत संकेत हो सकता है।
पूर्ण स्थिति में जोड़े गए पदों को वापस लेने और विस्तारित करने का जोखिम है। प्रत्येक अतिरिक्त स्थिति का प्रतिशत उचित रूप से समायोजित किया जा सकता है।
बहुत छोटे स्टॉप पॉइंट सेट से लाभ की जगह सीमित हो सकती है। विभिन्न किस्मों के अनुसार समायोजित किया जा सकता है।
खाते की सीमा से अधिक किसी भी एक किस्म के लेनदेन से बचने के लिए उचित रूप से स्टॉक फंड का अनुपात निर्धारित करना आवश्यक है।
इस रणनीति को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः
विभिन्न मापदंडों के लिए एमएसीडी सूचक का परीक्षण करें और एक विशिष्ट प्रकार के व्यापार के लिए अधिक उपयुक्त मापदंड खोजें।
प्रत्येक जमा और निकासी के लिए पूंजी प्रतिशत और निकासी की सीमा के पैरामीटर का अनुकूलन करें, सबसे अच्छा पैरामीटर संयोजन ढूंढें।
इष्टतम रोधक स्तर निर्धारित करने के लिए अलग-अलग लंबी लाइन और छोटी लाइन ऑपरेटिंग रोधक बिंदु मापदंडों का परीक्षण करें।
खाते की बढ़त क्षमता का आकलन करें और उचित एकल-प्रजाति की अधिकतम स्थिति सीमा निर्धारित करें।
स्टॉप लॉजिक को बढ़ाएं। जब बाजार में भारी बदलाव होता है, तो स्टॉप लॉस को प्रभावी ढंग से नियंत्रित किया जा सकता है।
यह रणनीति सामान्य रूप से एक विशिष्ट प्रवृत्ति ट्रैकिंग रणनीति है। यह बाजार की प्रवृत्ति की दिशा का निर्धारण करने के लिए एमएसीडी संकेतक का उपयोग करती है, जो कि एक निश्चित स्तर तक पहुंचने के बाद स्टॉप-ऑफ और स्टॉप-आउट के लिए स्टॉप-ऑफ का उपयोग करती है। यह रणनीति सरल, व्यावहारिक, लागू करने में आसान है, और मात्रात्मक व्यापार के शुरुआती लोगों के लिए उपयुक्त है। पैरामीटर अनुकूलन और जोखिम नियंत्रण तर्क के माध्यम से विस्तार, रणनीति को अधिक मजबूत बना सकता है।
/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
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/
// © TradingSoft_tech
//@version=5
strategy("MAPM-V1", overlay=true, default_qty_value=10, max_bars_back=5000,default_qty_type = strategy.percent_of_equity, commission_value=0.1, initial_capital = 100, pyramiding=6, currency=currency.USD)
///////// Options
SignalFast = input.int(300, step=10)
SignalSlow = input.int(600, step=10)
StepAddPurchases = input.float(2.5, step=0.1)
VolumePurchases = input.int(6,step=1)
Buy = input(true)
Sell = input(true)
longProfitPerc = input.float(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=1) * 0.01
shortProfitPerc = input.float(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=1) * 0.01
Martingale = input.float(1.6, minval = 1, step = 0.1)
VolumeDepo = input.int(100, step=1)
PercentOfDepo = input.float(10, step=1)
Close = (close)
EnterVolume = VolumeDepo*PercentOfDepo*0.01/Close
///////// Calculation indicator
fastAverage = ta.ema(close, 8)
slowAverage = ta.ema(close, 49)
macd = fastAverage - slowAverage
macdSignalF = ta.ema(macd,SignalFast)
macdSignalS = ta.ema(macd,SignalSlow)
// Test Start
startYear = input(2005, "Test Start Year")
startMonth = input(1, "Test Start Month")
startDay = input(1, "Test Start Day")
startTest = timestamp(startYear,startMonth,startDay,0,0)
//Test End
endYear = input(2050, "Test End Year")
endMonth = input(12, "Test End Month")
endDay = input(30, "Test End Day")
endTest = timestamp(endYear,endMonth,endDay,23,59)
timeRange = time > startTest and time < endTest ? true : false
///////// Plot Data
//plot(macd, style = plot.style_histogram)
//plot(macdSignalF*10000, style = plot.style_line, color=color.red)
//plot(macdSignalS*10000, style = plot.style_line, color=color.blue)
//plot(fastAverage, style = plot.style_line, color=color.red)
//plot(slowAverage, style = plot.style_line, color=color.blue)
///////// Calculation of the updated value
var x = 0.0
if strategy.opentrades>strategy.opentrades[1]
x := x + 1
else if strategy.opentrades==0
x := 0
y = x+1
///////// Calculation of reference price data
entryPrice = strategy.opentrades==0? 0 : strategy.opentrades.entry_price(0)
limitLong = strategy.position_avg_price * (1 + longProfitPerc)
limitShort = strategy.position_avg_price * (1 - shortProfitPerc)
SteplimitLong = entryPrice[0]*(1-StepAddPurchases*y/100)
SteplimitShort = entryPrice[0]*(1+StepAddPurchases*y/100)
///////// Conditions for a long
bool EntryLong = ta.crossover(macdSignalF, macdSignalS) and Buy and strategy.opentrades==0 and strategy.position_size==0
bool PurchasesLong = Buy and strategy.opentrades==x and strategy.position_size>0 and x<=VolumePurchases
bool CancelPurchasesLong = strategy.position_size==0 and strategy.opentrades==0
bool TPLong = strategy.position_size>0 and strategy.opentrades!=0
///////// Entry Long + add.purchases + cancel purchases + Take profit Long
switch
EntryLong => strategy.entry("Entry Long", strategy.long, qty = EnterVolume)
PurchasesLong => strategy.entry("PurchasesLong", strategy.long, qty = EnterVolume*math.pow(Martingale,y), limit = SteplimitLong)
CancelPurchasesLong => strategy.cancel("PurchasesLong")
switch
TPLong => strategy.exit("TPLong", qty_percent = 100, limit = limitLong)
///////// Conditions for a Short
bool EntryShort = ta.crossunder(macdSignalF, macdSignalS) and Sell and strategy.opentrades==0 and strategy.position_size==0
bool PurchasesShort = Sell and strategy.opentrades==x and strategy.position_size<0 and x<=VolumePurchases
bool CancelPurchasesShort = strategy.position_size==0 and strategy.opentrades==0
bool TPShort = strategy.position_size<0 and strategy.opentrades!=0
///////// Entry Short + add.purchases + cancel purchases + Take profit Short
switch
EntryShort => strategy.entry("Entry Short", strategy.short, qty = EnterVolume)
PurchasesShort => strategy.entry("PurchasesShort", strategy.short, qty = EnterVolume*math.pow(Martingale,y), limit = SteplimitShort)
CancelPurchasesShort => strategy.cancel("PurchasesShort")
switch
TPShort => strategy.exit("TPShort", qty_percent = 100, limit = limitShort)
/////////Calculation of conditions and reference data for level drawing
InTradeLong = strategy.position_size<0
InTradeShort = strategy.position_size>0
PickInLong = strategy.opentrades.entry_price(0)*(1-StepAddPurchases*y/100)
PickInShort = strategy.opentrades.entry_price(0)*(1+StepAddPurchases*y/100)
/////////Displaying the level of Take Profit
plot(InTradeLong ? na : limitLong, color=color.new(#00d146, 0), style=plot.style_linebr, linewidth=1)
plot(InTradeShort ? na : limitShort, color=color.new(#00d146, 0), style=plot.style_linebr, linewidth=1)
/////////Displaying the level of add.purchases
plot(InTradeLong ? na : PickInLong, color=color.white, style=plot.style_linebr, linewidth=1)
plot(InTradeShort ? na : PickInShort, color=color.white, style=plot.style_linebr, linewidth=1)