ईएमए क्रॉसओवर रणनीति के साथ एमएसीडी ऑसिलेटर

लेखक:चाओझांग, दिनांक: 2023-09-23 15:24:12
टैगः

अवलोकन

यह एमएसीडी ऑसिलेटर और ईएमए क्रॉसओवर को जोड़ने वाली एक सरल लेकिन कुशल ट्रेडिंग रणनीति है। वर्तमान में 4h मोमबत्तियों के लिए सेट अप किया गया है लेकिन अन्य समय सीमाओं के अनुकूल है। यह बीटीसी और ईटीएच पर पिछले 3 वर्षों में अच्छी तरह से प्रदर्शन किया है, खरीद और पकड़ को हरा रहा है। अनुकूलन के साथ इसे वायदा, सूचकांक, विदेशी मुद्रा, शेयर आदि के लिए अनुकूलित किया जा सकता है।

रणनीति तर्क

इसके मुख्य घटक हैंः

  1. एमएसीडीः मूल्य गति परिवर्तनों का आकलन करना।

  2. ईएमएः मूल्य प्रवृत्ति की दिशा निर्धारित करना।

  3. समय की शर्तः वैध रणनीति अवधि को परिभाषित करना।

  4. लम्बा/लघु विकल्पः लम्बा या छोटा दिशा चुनना।

व्यापार के नियम इस प्रकार हैंः

  1. लांग/एक्जिट शॉर्टः ईएमए के ऊपर बंद होने पर, एमएसीडी हिस्टोग्राम सकारात्मक होता है, और वर्तमान मोमबत्ती पिछली मोमबत्ती से अधिक होती है।

  2. शॉर्ट/लॉन्ग एग्जिटः ईएमए से नीचे बंद होने पर, एमएसीडी हिस्टोग्राम नकारात्मक होता है, और वर्तमान मोमबत्ती पिछली मोमबत्ती से कम होती है।

यह रणनीति एक सरल और कुशल प्रणाली में प्रवृत्ति के अनुसरण और गति को जोड़ती है।

लाभ

एकल संकेतकों की तुलना में, मुख्य लाभ निम्नलिखित हैंः

  1. एमएसीडी अल्पकालिक गति का आकलन करता है, ईएमए प्रवृत्ति की दिशा निर्धारित करता है।

  2. सरल और स्पष्ट नियम, समझने और लागू करने में आसान।

  3. विभिन्न उत्पादों और समय सीमाओं के लिए लचीला पैरामीटर समायोजन।

  4. विकल्प केवल लंबी/लघु या द्विदिश व्यापार के लिए।

  5. अनावश्यक ट्रेडों से बचने के लिए वैध रणनीति अवधि को परिभाषित कर सकता है।

  6. वर्षों से स्थिर प्रदर्शन।

  7. प्रति व्यापार नियंत्रित जोखिम।

  8. मशीन लर्निंग के साथ आगे अनुकूलित करने की क्षमता।

जोखिम

लाभों के बावजूद, विचार करने के जोखिमः

  1. व्यापक मापदंड समायोजन से ओवरफिटिंग का खतरा होता है।

  2. जगह पर कोई रोक नहीं, असीमित नुकसान का जोखिम।

  3. कोई वॉल्यूम फ़िल्टर नहीं, झूठे ब्रेकआउट का खतरा।

  4. रुझान मोड़ पकड़ में देरी, सभी नुकसान से बच नहीं सकते।

  5. बदलते बाजार व्यवस्थाओं से प्रदर्शन में गिरावट।

  6. केवल ऐतिहासिक आंकड़ों के आधार पर, मॉडल की मजबूती महत्वपूर्ण है।

  7. उच्च व्यापारिक आवृत्ति लेनदेन की लागत को बढ़ाती है।

  8. लाभ/जोखिम अनुपात और इक्विटी वक्रों की निगरानी करने की आवश्यकता है।

सुधार

इस रणनीति को निम्नलिखित तरीकों से बढ़ाया जा सकता हैः

  1. झूठे ब्रेकआउट से बचने के लिए वॉल्यूम फ़िल्टर जोड़ना।

  2. व्यापार प्रति हानि को नियंत्रित करने के लिए स्टॉप लागू करना।

  3. समय अवधि में पैरामीटर प्रभावशीलता का मूल्यांकन करना।

  4. गतिशील अनुकूलन के लिए मशीन लर्निंग को शामिल करना।

  5. बाजारों में मजबूती का परीक्षण।

  6. आवृत्ति को कम करने के लिए स्थिति आकार को समायोजित करना।

  7. जोखिम प्रबंधन रणनीतियों का अनुकूलन करना।

  8. आवृत्ति बढ़ाने के लिए प्रसार उपकरणों का परीक्षण।

  9. ओवरफिटिंग से बचने के लिए निरंतर बैकटेस्टिंग।

निष्कर्ष

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


// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21

//@version=4
strategy("My Script", overlay=true)

//heiking ashi calculation
UseHAcandles    = input(false, title="Use Heikin Ashi Candles in Algo Calculations")
//
// === /INPUTS ===

// === BASE FUNCTIONS ===

haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
haOpen  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
haHigh  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
haLow   = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low

//timecondition
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 //monday and session 
 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

//ema data  -- moving average
len = input(9, minval=1, title="Length")
src = input(hl2, title="Source")
out = ema(src, len)
//plot(out, title="EMA", color=color.blue)

//histogram
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
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=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)

// 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


//main variables to apply conditions are going to be out(moving avg) and hist(macd)

long = haClose > out and haClose > haClose[1] and out > out[1] and hist> 0 and hist[1] < 0 and time_cond
short = haClose < out and haClose < haClose[1] and out < out[1] and hist < 0 and hist[1] > 0 and time_cond

//limit to 1 entry
var longOpeneda = false
var shortOpeneda = false
var int timeOfBuya = na



longCondition= long and not longOpeneda 

if longCondition
    longOpeneda := true
    timeOfBuya := time


longExitSignala = short
exitLongCondition = longOpeneda[1] and longExitSignala

if exitLongCondition
    longOpeneda := false
    timeOfBuya := na


plotshape(longCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny, title="BUY", text="BUY", textcolor=color.white)
plotshape(exitLongCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny, title="SELL", text="SELL", textcolor=color.white)

//automatization

longEntry= input(true)
shortEntry=input(false)

if(longEntry)
    strategy.entry("long",strategy.long,when=longCondition)
    strategy.close("long",when=exitLongCondition)

if(shortEntry)
    strategy.entry("short",strategy.short,when=exitLongCondition)
    strategy.close("short",when=longCondition)



अधिक