
यह रणनीति MACD सूचक और इसकी चलती औसत सिग्नल लाइनों के क्रॉसिंग की गणना करके प्रवृत्ति की दिशा निर्धारित करती है, और ईएमए सूचक के साथ संयुक्त रूप से वर्तमान प्रवृत्ति की ताकत को निर्धारित करती है, जिससे प्रवृत्ति को ट्रैक किया जा सकता है। जब MACD लाइन नीचे से ऊपर की ओर सिग्नल लाइन को तोड़ती है, तो ऊपर से नीचे की ओर टूट जाती है, जबकि ईएमए लाइन भी प्रवृत्ति की ताकत को निर्धारित कर सकती है ताकि फ़िल्टर किया जा सके।
यह रणनीति मुख्य रूप से MACD संकेतक के आधार पर प्रवृत्ति की दिशा और प्रवेश के समय का निर्धारण करती है। MACD लाइन के ब्रेक सिग्नल लाइन से संकेत मिलता है कि कीमत की प्रवृत्ति उलट गई है, इसलिए ब्रेक की दिशा के आधार पर अधिक खाली करने का निर्णय लिया जाता है। विशेष रूप से, निर्णय तर्क यह है कि जब समापन मूल्य ईएमए औसत से अधिक है और MACD लाइन नीचे से सिग्नल लाइन को तोड़ती है, तो अधिक करें; जब समापन मूल्य ईएमए औसत से कम है और MACD लाइन ऊपर से नीचे सिग्नल लाइन को तोड़ती है, तो खाली करें।
ईएमए औसत का कार्य प्रवृत्ति का आकलन करने के लिए सहायक है, यदि कीमत ईएमए औसत से ऊपर है, तो यह एक उच्च प्रवृत्ति है, तो एमएसीडी के नीचे का ब्रेकडाउन एक चालू गोल्ड क्रॉस सिग्नल का निर्माण करने के लिए आसान है; यदि कीमत ईएमए औसत से नीचे है, तो यह एक डाउनट्रेंड संकेत है, तो एमएसीडी के ऊपर का ब्रेकडाउन एक मृत क्रॉस सिग्नल का निर्माण करने के लिए आसान है। ईएमए की लंबाई भी निर्धारित करती है कि प्रवृत्ति का आकलन करने के लिए मध्यम और दीर्घकालिक कितना है।
इस तरह से, जब कीमतें एक नया रुझान बनाने के लिए पलटाव शुरू करती हैं, तो समय पर प्रवेश किया जा सकता है, जिससे रुझान ट्रैकिंग प्रभाव प्राप्त हो सके।
यह रणनीति दोहरे निर्णय की शर्तों को जोड़ती है, जो कीमतों की प्रवृत्ति की दिशा को ध्यान में रखती है और संकेतकों का उपयोग करके विशिष्ट प्रवेश समय का आकलन करती है, जिससे झूठे टूटने के जोखिम से बचा जाता है। यह रणनीति एक एकल MACD संकेतक की तुलना में नई प्रवृत्ति की शुरुआत का अधिक सटीक रूप से आकलन कर सकती है।
ईएमए की औसत रेखा का उपयोग करने से रणनीति को कुछ हद तक अल्पकालिक उतार-चढ़ाव के प्रभावों को फ़िल्टर करने में मदद मिलती है, जो मध्य-लंबी रेखा की प्रवृत्ति को लॉक करने में मदद करता है।
इसके अलावा, एक रणनीति में एक ही समय में अधिक और कम शर्तें निर्धारित की जाती हैं, जो कि कमोडिटी बाजार की स्थिति में लागू हो सकती हैं, जो रणनीति की अनुकूलन क्षमता को बढ़ाता है।
इस रणनीति का मुख्य जोखिम यह है कि MACD संकेतक स्वयं Fakeout की अधिक संभावना का आकलन करते हैं और सिग्नल को गलत तरीके से पहचाना जा सकता है। इस स्थिति में EMA की औसत रेखा की सहायक सुविधा की आवश्यकता होती है, लेकिन विशेष परिस्थितियों में यह विफल हो सकता है।
इसके अलावा, रणनीति में लाभ-हानि अनुपात का उपयोग किया जाता है ताकि स्टॉप-लॉस-स्टॉप शर्तों को निर्धारित किया जा सके, जो कि कुछ हद तक व्यक्तिपरक है, और यदि गलत तरीके से सेट किया जाता है तो यह रणनीति के प्रभाव को भी प्रभावित कर सकता है।
अंत में, रणनीति में केवल 100% खाता अधिकार और हितों के लिए खोलने की संख्या निर्धारित की गई है, धन प्रबंधन के मुद्दों को ध्यान में रखे बिना, जो कि वास्तविक बाजार में कुछ जोखिम भी है।
इस रणनीति में मुख्य रूप से निम्नलिखित अनुकूलन हैं:
अन्य सूचकांकों को जोड़कर, कई सूचकांकों के संयोजन के साथ, MACD के गलत संकेत की संभावना को और कम किया जा सकता है। उदाहरण के लिए, KDJ, BOLL आदि पर विचार किया जा सकता है।
ईएमए की औसत रेखा की लंबाई को बहु-संयोजन अनुकूलन के लिए अनुकूलित किया जा सकता है, जिससे प्रवृत्ति की दिशा का निर्धारण करने के लिए सर्वोत्तम पैरामीटर मिल सके।
MACD मापदंडों को आगे अनुकूलित किया जा सकता है, ताकि समय-बदल को निर्धारित करने के लिए सबसे सटीक मापदंडों का पता लगाया जा सके।
अतिरिक्त धन प्रबंधन मॉड्यूल, जैसे कि लाभ-हानि अनुपात जो गतिशील इनपुट के रूप में काम कर सकता है, स्लाइड पॉइंट स्टॉप लॉस आदि सेट कर सकता है।
विभिन्न प्रकार के अनुबंधों के प्रभाव का परीक्षण करें, सबसे उपयुक्त प्रकार के व्यापार की तलाश करें। जैसे क्रिप्टोकरेंसी, स्टॉक इंडेक्स वायदा आदि।
MACD EMA गोल्ड क्रॉस ट्रेंड ट्रैकिंग रणनीति समग्र रूप से सरल और व्यावहारिक है, यह सुनिश्चित करता है कि सिग्नल की विश्वसनीयता दोहरे सूचकांकों के माध्यम से है, उचित स्टॉप-लॉस विधि स्थापित करके लाभ को लॉक करें। पैरामीटर चयन, सूचकांक संयोजन, धन प्रबंधन आदि के संदर्भ में मुख्य अनुकूलन स्थान। यदि परीक्षण को और अनुकूलित किया जाता है, तो यह रणनीति एक कुशल प्रवृत्ति ट्रैकिंग रणनीति में से एक बन सकती है।
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="MACD EMA Strategy", shorttitle="MACD EMA STRAT", overlay = true, pyramiding = 0, max_bars_back=3000, calc_on_order_fills = false, commission_type = strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=5000, currency=currency.USD)
// Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2016)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true
// STEP 2:
// See if this bar's time happened on/after start date
afterStartDate = true
//EMA
emasrc = close
res = input(title="EMA Timeframe", type=input.resolution, defval="15")
len1 = input(title="EMA Length", type=input.integer, defval=206)
col1 = color.yellow
// Calculate EMA
ema1 = ema(emasrc, len1)
emaSmooth = security(syminfo.tickerid, res, ema1, barmerge.gaps_on, barmerge.lookahead_off)
// Draw EMA
plot(emaSmooth, title="EMA", linewidth=1, color=col1)
//MACD
fast_length = input(title="Fast Length", type=input.integer, defval=15)
slow_length = input(title="Slow Length", type=input.integer, defval=24)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=true)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true)
zeroline = 0
// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)
//plot(zeroline, title="Zero Line", color=color.black, transp=0)
///////////////////////////LONG////////////////////////////////////////////////////////////////////
enablelong = input(true, title="Enable long?")
//Long Signal
upcondition = close > emaSmooth and close[1] > emaSmooth[1]
macdunderhis = macd < zeroline
macdcrossup = crossover(macd, signal)
longcondition = upcondition and macdunderhis and macdcrossup
//strategy buy long
if (longcondition) and (afterStartDate) and strategy.opentrades < 1 and (enablelong == true)
strategy.entry("long", strategy.long)
//////////////////////////////////////SHORT//////////////////////////////////////////////////////////////////////////////////
enableshort = input(true, title="Enable short?")
//Short Signal
downcondition = close < emaSmooth and close[1] < emaSmooth[1]
macdoverhis = macd > zeroline
macdcrosunder = crossunder(macd, signal)
shortcondition = downcondition and macdoverhis and macdcrosunder
//strategy buy short
if (shortcondition) and (afterStartDate) and strategy.opentrades < 1 and (enableshort == true)
strategy.entry("short", strategy.short)
//////////////////////////////////////EXIT CONDITION//////////////////////////////////////////////////////////////////////////////////
bought = strategy.position_size[1] < strategy.position_size
sold = strategy.position_size[1] > strategy.position_size
barsbought = barssince(bought)
barssold = barssince(sold)
//////LOWEST LOW//////
//Lowest Low LONG
profitfactorlong = input(title="ProfitfactorLong", type=input.float, step=0.1, defval=1.9)
loLen = input(title="Lowest Low Lookback", type=input.integer,
defval=46, minval=2)
stop_level_long = lowest(low, loLen)[1]
if strategy.position_size>0
profit_level_long = strategy.position_avg_price + ((strategy.position_avg_price - stop_level_long[barsbought])*profitfactorlong)
strategy.exit(id="TP/ SL", stop=stop_level_long[barsbought], limit=profit_level_long)
//Lowest Low SHORT
profitfactorshort = input(title="ProfitfactorShort", type=input.float, step=0.1, defval=2.1)
highLen = input(title="highest high lookback", type=input.integer,
defval=25, minval=2)
stop_level_short = highest(high, highLen)[1]
if strategy.position_size<0
profit_level_short = strategy.position_avg_price - ((stop_level_short[barssold] - strategy.position_avg_price)*profitfactorshort)
strategy.exit(id="TP/ SL", stop=stop_level_short[barssold], limit=profit_level_short)
//PLOTT TP SL
plot(stop_level_long, title="SL Long", linewidth=1, color=color.red)
plot(stop_level_short, title="SL Short", linewidth=1, color=color.red)