
इस रणनीति में एमएसीडी सूचकांक के गोल्ड फॉर्क डेड फॉर्क सिग्नल, के-लाइन क्लोज-आउट प्राइस और मिड-लाइन प्राइस के बीच संबंध और प्राइस के झटके के लक्षणों को शामिल किया गया है ताकि प्रवेश और बाहर निकलने का समय निर्धारित किया जा सके। इसके साथ ही, इसमें रि-एंट्री और संशोधन के लिए एक तंत्र भी है ताकि अधिक ट्रेडिंग अवसरों के लिए जोखिम को नियंत्रित किया जा सके और स्थिर रिटर्न प्राप्त किया जा सके।
यह रणनीति मुख्य रूप से निम्नलिखित सिद्धांतों पर आधारित हैः
MACD के विश्लेषण का उपयोग करें त्वरित और धीमी रेखाओं के लिए गोल्डफ़ॉक्स डेडफ़ॉक्स बहु- और रिक्त बाजारों का न्याय करने के लिए, और विशिष्ट प्रवेश बिंदुओं के लिए।
K-लाइन समापन मूल्य और मध्य रेखा के बीच के संबंध का उपयोग करके यह निर्धारित करें कि क्या एक बहुभाषी प्रवृत्ति समाप्त हो गई है, और इसकी शुरुआत कहां से हुई है।
एक पुनः प्रवेश तंत्र की स्थापना, जो MACD के इस दौर के बाद फिर से प्रवेश करने की संभावना को बढ़ाता है यदि यह प्रवृत्ति के अनुरूप रहता है।
प्रवृत्ति के भीतर समायोजन के रूप में, यदि कीमतों में आंशिक समायोजन होता है लेकिन अभी तक उलट नहीं हुआ है, तो स्थिति को जोड़ने के लिए एक संशोधन प्रवेश तंत्र स्थापित करें।
ऊपर दिए गए बिंदुओं को संश्लेषित करें, गतिशील रूप से स्थिति को समायोजित करें, ट्रेंड में जितना संभव हो उतना अधिक लाभ प्राप्त करें, और ट्रेंड के अंत में जल्दी से बाहर निकलें।
विशेष रूप से, रणनीति पहले यह निर्धारित करती है कि क्या MACD की तेज और धीमी रेखाएं गोल्डफोर्क या डेडफोर्क हैं, यदि गोल्डफोर्क अधिक है, तो डेडफोर्क खाली है; फिर यह निर्धारित करें कि क्या K लाइन बंद होने पर मध्य रेखा को छूती है, और यदि यह टच करती है तो प्रवृत्ति के अंत के रूप में समतल है।
इसके अलावा, रणनीति में एक पुनः प्रवेश तंत्र है, अर्थात, मूल दिशा की प्रवृत्ति के अंत के बाद, यदि MACD उसी दिशा में संकेत दिखाना जारी रखता है, तो रणनीति फिर से प्रवृत्ति का पालन करने के लिए स्थिति खोलती है; इसके अलावा, एक संशोधन प्रवेश तंत्र है, यदि कीमत में मामूली समायोजन होता है, लेकिन पूरी तरह से उलट नहीं हुआ है, तो रणनीति उचित रूप से स्थिति बढ़ाएगी, जो प्रवृत्ति में सामान्य समायोजन व्यवहार है।
इन सेटिंग्स के माध्यम से, रणनीति ट्रेंड में गतिशील रूप से स्थिति को समायोजित करने में सक्षम होती है, जो जोखिम को नियंत्रित करने के लिए उच्च रिटर्न प्राप्त करने के लिए अधिक से अधिक प्रविष्टियों को बाहर निकालती है।
इस तरह की रणनीति में कई सूचकांकों का उपयोग किया जाता है और इसके मुख्य लाभ हैंः
एमएसीडी ट्रेंड और रिवर्स पॉइंट्स की पहचान कर सकता है, जो विशिष्ट प्रविष्टि बिंदु निर्धारित करता है।
समापन मूल्य और मध्य रेखा के बीच संबंध का निर्णय प्रवृत्ति के अंत का सटीक निर्धारण करने में मदद करता है।
फिर से प्रवेश तंत्र ने स्थिति खोलने की संख्या में वृद्धि की है, जिससे धन का उपयोग करने की दक्षता में सुधार हुआ है।
इस प्रकार, यह सुनिश्चित किया जाता है कि प्रवेश प्रणाली को समय पर पुनर्स्थापित किया जाए ताकि प्रवृत्तियों को पूरी तरह से पकड़ लिया जा सके।
रणनीतिक संचालन की उच्च आवृत्ति लेकिन जोखिम को नियंत्रित करने और उच्च लाभप्रदता प्राप्त करने के लिए आसान है।
पैरामीटर को अनुकूलित किया जा सकता है और विभिन्न नस्लों और स्थितियों के लिए अनुकूलित किया जा सकता है।
रणनीति स्पष्ट और समझने में आसान है, कोड संक्षिप्त है, और हार्डवेयर आसान है।
पर्याप्त डेटा, उच्च विश्वसनीयता, और परिणामों को सत्यापित करना आसान है।
इस रणनीति में निम्नलिखित प्रमुख जोखिम भी हैं:
एमएसीडी के झूठे संकेतों की संभावना को अन्य संकेतकों के संयोजन के साथ सत्यापित करने की आवश्यकता होती है।
बड़े स्तर पर स्टॉप लॉस की सेटिंग बहुत छोटी हो सकती है, जो कि एक बड़ी घटना के कारण खेल से बाहर हो सकती है।
फिर से प्रवेश और संशोधन प्रवेश में वृद्धि हुई परिचालन आवृत्ति को नियंत्रित करने के लिए धन की उपयोगिता की आवश्यकता है।
हालांकि, यह भी कहा गया है कि इस तरह की घटनाओं में निवेशकों को नुकसान उठाना पड़ सकता है।
ट्रेडिंग किस्मों और पैरामीटर सेटिंग्स को अनुकूलित करने की आवश्यकता है और सभी किस्मों पर लागू नहीं होती है।
बाजार के अनुसार पैरामीटर को समायोजित करने के लिए निरंतर प्रतिक्रिया और अनुकूलन की आवश्यकता होती है।
फिक्स्ड डिस्क में स्लाइड पॉइंट लागत के प्रभाव को ध्यान में रखना आवश्यक है।
इसके लिए जोखिम प्रबंधन उपायों में शामिल हैं: एक स्टॉप लॉस स्टॉप सेट करना जो एकतरफा नुकसान को सीमित करता है; धन के उपयोग का आकलन करना, उचित नकदी भंडार रखना; किस्मों के लिए उपयुक्त पैरामीटर के संयोजन का चयन करना; पैरामीटर को अनुकूलित करने के लिए बाजार की विशेषताओं में परिवर्तन पर लगातार ध्यान देना; और स्लिप लागत के प्रभाव को पीछे की जांच और सिमुलेशन में विचार करना।
इस रणनीति को और अधिक अनुकूलित किया जा सकता हैः
संकेत सत्यापन के लिए अन्य संकेतकों के साथ संयोजन, संकेत सटीकता में सुधार। जैसे कि केडीजे सूचक।
एक गतिशील समायोज्य रोकथाम मानक सेट करें।
पुनः प्रवेश और संशोधित प्रवेश के लिए अनुकूलित तर्क।
उप-प्रजाति पैरामीटर का अनुकूलन, सबसे अच्छा पैरामीटर संयोजन सेट करना
धन के उपयोग के अनुपात को अनुकूलित करें, फिर से प्रवेश और संशोधित प्रवेश के लिए धन की सीमा निर्धारित करें।
संयुक्त परिमाण क्षमता सूचकांक, प्रतिगामी बाजारों में पूर्वाग्रह हानि से बचने के लिए
अतिरिक्त आउट-ऑफ-गेम तंत्र जैसे कि मोबाइल स्टॉप लॉस आदि।
ट्रेडिंग रोबोट के रूप में रणनीति पैकेजिंग पर विचार करें और ट्रेडिंग को स्वचालित करें।
स्लाइडपॉइंट लागत जैसे फिक्स्ड डिस्क विचार को जोड़ना।
इन अनुकूलन के माध्यम से, रणनीतियों की स्थिरता, अनुकूलनशीलता, स्वचालन की डिग्री और वास्तविक प्रभावशीलता को और बढ़ाया जा सकता है।
इस रणनीति में MACD संकेतक के व्यापार संकेतों, K-लाइन समापन मूल्य विश्लेषण और कई प्रवेश तंत्र का उपयोग किया गया है, जो प्रवृत्ति को पकड़ने के साथ-साथ जोखिम को नियंत्रित करने के लिए एक उच्च दक्षता वाली मात्रात्मक व्यापार रणनीति है। इस रणनीति में उच्च परिचालन आवृत्ति, अच्छी पूंजी उपयोगिता और कम कठिनाई के फायदे हैं, लेकिन जोखिम नियंत्रण और रणनीति अनुकूलन पर ध्यान देने की भी आवश्यकता है। इसमें बहुत मजबूत व्यावहारिक मूल्य और विस्तार की जगह है। यदि रोबोट प्रौद्योगिकी के साथ मिलकर स्वचालन किया जाता है, तो यह एक बहुत ही व्यावहारिक मात्रात्मक व्यापार योजना बन सकती है।
/*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", "")