एमएसीडी क्लोजिंग टर्टल हाइब्रिड रणनीति

लेखक:चाओझांग, दिनांकः 2023-10-30 12:16:20
टैगः

img

अवलोकन

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

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

यह रणनीति मुख्यतः निम्नलिखित सिद्धांतों पर आधारित हैः

  1. बैल और भालू बाजारों और विशिष्ट प्रवेश बिंदुओं को निर्धारित करने के लिए एमएसीडी फास्ट लाइन और स्लो लाइन गोल्डन क्रॉस और डेड क्रॉस का उपयोग करें।

  2. रुझानों के अंत और निकास बिंदुओं को निर्धारित करने के लिए मध्य रेखा के साथ समापन मूल्य के संबंध का उपयोग करें।

  3. लाभ बढ़ाने के लिए मौजूदा एमएसीडी रुझान समाप्त होने के बाद उसी दिशा में बाजार में पुनः प्रवेश करने के लिए पुनः प्रवेश तंत्र स्थापित करें।

  4. प्रवृत्ति के भीतर आंशिक मूल्य सुधार के दौरान पदों को जोड़ने के लिए सुधार प्रविष्टि तंत्र सेट करें।

  5. गतिशील रूप से ऊपर के आधार पर रुझानों के भीतर लाभ को अधिकतम करने के लिए पदों को समायोजित करें जबकि रुझान समाप्त होने पर जल्दी से बाहर निकलें।

विशेष रूप से, यह रणनीति पहले यह जांचती है कि क्या मैकडी फास्ट और स्लो लाइनों के बीच सोने का क्रॉस या मृत क्रॉस होता है ताकि लंबी या छोटी हो सके। फिर यह जांचती है कि क्या समापन मूल्य ट्रेंड के अंत और बंद पदों को निर्धारित करने के लिए मध्य रेखा को छूता है।

इसके अतिरिक्त, रणनीति में मूल दिशा में पदों को फिर से खोलने के लिए एक पुनः प्रवेश तंत्र है यदि MACD प्रारंभिक प्रवृत्ति समाप्त होने के बाद भी उसी दिशा में संकेत दिखाना जारी रखता है। पूर्ण उल्टा होने से पहले छोटी वापसी के दौरान मामूली रूप से पदों को जोड़ने के लिए एक सुधार प्रवेश तंत्र भी है।

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

लाभ

इस बहुसूचक रणनीति के मुख्य लाभ इस प्रकार हैंः

  1. एमएसीडी प्रवेश के लिए रुझानों और उलट बिंदुओं की पहचान करता है।

  2. समापन मूल्य और मध्य रेखा संबंध प्रवृत्ति अंत को सटीक रूप से निर्धारित करता है।

  3. पुनः प्रवेश से पूंजी उपयोग की दक्षता बढ़ जाती है।

  4. सुधार प्रविष्टि समय पर रुझानों को पकड़ने के लिए पदों को जोड़ती है।

  5. नियंत्रित जोखिम के साथ उच्च व्यापार आवृत्ति उच्च लाभ कारक उत्पन्न करती है।

  6. उत्पादों और बाजारों में अनुकूलन के लिए अनुकूलन योग्य मापदंड।

  7. सरल व्यापार के लिए स्पष्ट तर्क और संक्षिप्त कोड।

  8. पर्याप्त बैकटेस्ट डेटा विश्वसनीयता सुनिश्चित करता है।

जोखिम

मुख्य जोखिम हैंः

  1. गलत एमएसीडी संकेतों की संभावना अन्य संकेतकों के साथ सत्यापित की जानी चाहिए।

  2. बहुत तंग स्टॉप को अस्थिर चाल से रोक दिया जा सकता है।

  3. व्यापार की आवृत्ति में वृद्धि के लिए पूंजी उपयोग पर नियंत्रण की आवश्यकता होती है।

  4. सुधार प्रविष्टियों से वापस लेने के दौरान नुकसान हो सकता है।

  5. विभिन्न उत्पादों और बाजारों के लिए अनुकूलन आवश्यक है।

  6. निरंतर बैकटेस्टिंग और अनुकूलन की आवश्यकता होती है।

  7. लाइव ट्रेडिंग के लिए स्लिप लागतों पर विचार करने की आवश्यकता है।

जोखिम प्रबंधन उपायों में घाटे को सीमित करने के लिए स्टॉप का उपयोग करना, पूंजी उपयोग का मूल्यांकन करना, बैकटेस्टिंग के माध्यम से प्रति उत्पाद मापदंडों का अनुकूलन करना, मापदंडों को परिष्कृत करने के लिए बाजार गतिशीलता की निगरानी करना और परीक्षणों में फिसलने के लिए लेखांकन शामिल है।

बढ़ोतरी के अवसर

सुधार के अवसर:

  1. सिग्नल सत्यापित करने के लिए अन्य संकेतक जोड़ें, उदाहरण के लिए KDJ।

  2. अनुकूलित गतिशील स्टॉप लागू करें।

  3. पुनः प्रविष्टि और सुधार प्रविष्टि तर्क का अनुकूलन करें.

  4. प्रत्येक उत्पाद के लिए पैरामीटर अनुकूलन।

  5. प्रविष्टियों के लिए पूंजी उपयोग को अनुकूलित करना।

  6. वापसी प्रविष्टियों से नुकसान से बचने के लिए वॉल्यूम संकेतक शामिल करें।

  7. बाहर निकलने के तंत्र जैसे कि चलती स्टॉप जोड़ें।

  8. स्वचालित ट्रेडिंग बॉट बनाएँ।

  9. वास्तविक दुनिया के कारकों को ध्यान में रखें जैसे कि फिसलन।

ये स्थिरता, अनुकूलन क्षमता, स्वचालन और लाइव प्रदर्शन में और सुधार कर सकते हैं।

निष्कर्ष

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


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 2h
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/
// © Puckapao

//@version=4
// strategy(title="MACD", shorttitle="MACD", overlay=true, initial_capital=10000.00, currency="USD", default_qty_type=strategy.cash, default_qty_value=10000.00)
// Getting inputs
reenter_delay = input(title="Re-enter Delay", type=input.integer, defval=2)
sculp_delay = input(title="Sculp Delay", type=input.integer, defval=4)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
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=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=true)
ema_period = input(title="EMA Period", type=input.integer, defval=21)

// Get date
startDate = input(title="Start Date", type=input.integer,
     defval=19, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=09, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2017, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=31, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=3, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)
     
// STEP 2:
// Look if the close time of the current bar
// falls inside the date range
inDateRange =  true

reenter_cnt = 0
reenter_cnt := nz(reenter_cnt[1])

sculp_cnt = 0
sculp_cnt := nz(sculp_cnt[1])

close_cnt = 0
close_cnt := nz(close_cnt[1])

on_long = false
on_long := nz(on_long[1])

on_short = false
on_short := nz(on_short[1])

sculp = false
reenter = false
slowdown = false

ema = ema(close, ema_period)

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

cross_up = crossover(macd, signal)
cross_down = crossunder(macd, signal)

if (inDateRange)

    over_macd = macd > 0 and signal > 0 ? true : false
    under_macd = macd < 0 and signal < 0 ? true : false
    over_water = close > ema ? true : false
    under_water = close < ema ? true : false
    slowdown := hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] > hist ? false : true)
    reenter := hist >= 0 ? (hist[1] < hist ? true : false) : (hist[1] > hist ? true : false)
    sculp := (hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] < hist ? true : false))
    
    if(reenter == true)
        if(reenter_cnt < reenter_delay)
            reenter_cnt := reenter_cnt + 1
    else
        if(reenter_cnt > 0)
            reenter_cnt := reenter_cnt - 1
                    
    if(sculp == true)
        if(sculp_cnt < sculp_delay)
            sculp_cnt := sculp_cnt + 1
    else
        if(sculp_cnt > 0)
            sculp_cnt := sculp_cnt - 1
        
    if(slowdown == false)
        if(close_cnt < 2)
            close_cnt := close_cnt + 1
        else
            close_cnt := 0
    
    // plotchar(fork_cnt, "fork count", "")
    // plotchar(spoon_cnt, "spoon count", "")

    // Entry
    if (cross_up == true)
        strategy.entry("long", strategy.long, comment = "long", alert_message = "long")
        on_long := true
        on_short := false
    if (cross_down == true)
        strategy.entry("short", strategy.short, comment = "short", alert_message = "short")
        on_short := true
        on_long := false
        
    // Sculp bottom / top
    if (sculp == true and sculp_cnt >= sculp_delay)
        if (hist >= 0)
            strategy.entry("sculp-short", strategy.short, comment = "sculp-short", alert_message = "sculp-short")
        else
            strategy.entry("sculp-long", strategy.long, comment = "sculp-long", alert_message = "sculp-long")
        
        sculp_cnt := 0
        sculp := false
            
    // Re-Entry
    if (reenter == true and reenter_cnt >= reenter_delay)
        if (hist >= 0)
            strategy.entry("re-long", strategy.long, comment = "re-long", alert_message = "re-long")
        else
            strategy.entry("re-short", strategy.short, comment = "re-short", alert_message = "re-short")
            
        reenter_cnt := 0
        reenter := false
            
    // Close
    strategy.close("long", when = slowdown, comment = "close long", alert_message = "close long")
    strategy.close("short", when = slowdown, comment = "close short", alert_message = "close short")
    strategy.close("re-long", when = slowdown, comment = "close re-long", alert_message = "close re-long")
    strategy.close("re-short", when = slowdown, comment = "close re-short", alert_message = "close re-short")
    strategy.close("sculp-long", when = slowdown, comment = "close sculp-long", alert_message = "close sculp-long")
    strategy.close("sculp-short", when = slowdown, comment = "close sculp-short", alert_message = "close sculp-short")
    
    if (slowdown)
        if (hist >= 0)
            on_long := false
        else
            on_short := false


plotchar(slowdown, "close", "")
plotchar(reenter, "reenter", "")
plotchar(reenter_cnt, "reenter count", "")
plotchar(sculp, "sculp", "")
plotchar(sculp_cnt, "sculp count", "")

अधिक