इस रणनीति का उपयोग चलती औसत संकेतक (एमएसीडी) के साथ किया जाता है, जो एक ओवरहेड सिग्नल का निर्माण करता है, जो ट्रेंडिंग अच्छी स्थिति में रिवर्स ट्रेडिंग करता है, जो गतिशील रूप से आउटफील्ड सेट करके लाभ प्राप्त करता है।
यह रणनीति मुख्य रूप से MACD संकेतकों पर आधारित है, जो गोल्ड फोर्क मल्टी सिग्नल, डेड फोर्क रिक्त सिग्नल प्रदान करती है। विशेष रूप से, जब MACD लाइन नीचे से ऊपर की ओर सिग्नल लाइन से गुजरती है तो गोल्ड फोर्क मल्टी सिग्नल उत्पन्न होती है; जब MACD लाइन ऊपर से नीचे की ओर सिग्नल लाइन से गुजरती है तो डेड फोर्क रिक्त सिग्नल उत्पन्न होती है।
जब गोल्ड फोर्क सिग्नल आता है, तो यदि समापन मूल्य ईएमए औसत रेखा से ऊपर है, तो अधिक करें; जब मृत फोर्क सिग्नल आता है, तो यदि समापन मूल्य ईएमए औसत रेखा से नीचे है, तो खाली करें। इससे बड़े रुझान के तहत रिवर्स ट्रेडिंग की गारंटी दी जा सकती है।
प्रविष्टि के बाद, रणनीति का उपयोग रोक और रोक को गतिशील रूप से रोकने के लिए किया जाता है। विशेष रूप से, प्रवेश मूल्य के रूप में कई स्टॉप-लॉस सेट किए जाते हैं(1-अधिकतम गिरावट); प्रवेश मूल्य के रूप में स्टॉप-ऑफ सेट करें(1+TARGET_STOP_RATIO*अधिकतम गिरावट) रिक्त विकल्प सेट विपरीत जिसमें अधिकतम गिरावट गतिशील रूप से गणना की जाती है, जो स्विंग कम से समापन मूल्य का प्रतिशत गिरावट की जगह को दर्शाता है; TARGET_STOP_RATIO डिफ़ॉल्ट रूप से 2 है, जो लाभ-हानि अनुपात को दर्शाता है 2
इस तरह के आउटफील्ड की स्थापना का लाभ यह है कि बाजार में उतार-चढ़ाव के आधार पर स्टॉप लॉस और स्टॉप लॉस को गतिशील रूप से समायोजित किया जा सकता है। बड़े उतार-चढ़ाव के दौरान आउटफील्ड को जल्दी से बंद कर दिया जाता है, और छोटे उतार-चढ़ाव के दौरान स्टॉप को ट्रैक किया जाता है।
MACD संकेतक का उपयोग करके एक पॉलीहोल सिग्नल बनाने के लिए, यह निर्धारित किया जा सकता है कि कीमत कब पलट जाएगी।
ईएमए के साथ एक फ़िल्टर के रूप में, ट्रेडों को रोकने के लिए ट्रेडों को ऊपर की ओर ले जाने के लिए।
गतिशील ऑफ-फील्ड नियंत्रण प्रणाली, जो वास्तविक समय में लाभ-हानि अनुपात और स्टॉप-लॉस बिंदु को समायोजित करने में सक्षम है, उच्च लाभप्रदता की खोज के लिए जोखिम को नियंत्रित करता है।
बाजार में उतार-चढ़ाव को ध्यान में रखते हुए, बाजार से बाहर निकलने की गति तेज है, जो व्यस्त निवेशकों के लिए उपयुक्त है।
MACD संकेतक अक्सर क्षैतिज रूप से संकलित बाजारों में झूठे संकेतों का कारण बनता है। इसका समाधान विपरीत व्यापार से बचने के लिए फ़िल्टर के रूप में एक समान रेखा को जोड़ना है।
जब बाजार में अत्यधिक उतार-चढ़ाव होता है, तो डायनामिक स्टॉप बहुत आराम से बंद हो जाता है, लेकिन ज्यादातर परिदृश्यों में अच्छा प्रदर्शन करता है। यदि आप चरम स्थितियों का सामना करते हैं, तो एक निश्चित लाभ-हानि अनुपात पर विचार करें।
मुनाफे के लिए जगह सीमित है, मुनाफे की तलाश में बार-बार व्यापार की आवश्यकता होती है। इसके लिए निवेशकों को कुछ मनोवैज्ञानिक सहनशक्ति और समय की आवश्यकता होती है। यदि कोई खाली समय नहीं है, तो उच्च चक्र में समायोजित करने पर विचार किया जा सकता है।
विशिष्ट नस्ल विशेषताओं के अनुसार MACD मापदंडों को समायोजित करें, गोल्डन फोर्क डेड फोर्क ट्रेडिंग के प्रभाव को अनुकूलित करें।
विभिन्न चलती औसतों का परीक्षण करें और बेहतर फ़िल्टर की तलाश करें।
TARGET_STOP_RATIO, अधिकतम गिरावट गणना विधि का परीक्षण करें और स्टॉप-स्टॉप-लॉस रणनीति को अनुकूलित करें।
सिग्नल की गुणवत्ता में सुधार के लिए अन्य शर्तों को जोड़ना, जैसे कि लेनदेन की मात्रा में परिवर्तन, उतार-चढ़ाव की दर आदि।
मशीन लर्निंग एल्गोरिदम के साथ अधिक विशेषताओं को परिष्कृत करने का प्रयास करें, गतिशील बहु-कारक मॉडल बनाएं, और अधिक बुद्धिमान स्टॉप-स्टॉप-लॉस प्राप्त करें।
इस रणनीति में समग्र रूप से मजबूत व्यावहारिकता है। MACD को मुख्य ट्रेडिंग सिग्नल के रूप में लेते हुए, दो सहायक मॉड्यूल जोड़े गए हैं, जो ट्रेंड निर्णय और गतिशील आउटफील्ड नियंत्रण को जोड़ते हैं, जो MACD के स्वयं के व्यापार प्रभाव को काफी बढ़ा सकते हैं। स्टॉप-स्टॉप-लॉस रणनीति रणनीति के अनुकूलन का एक महत्वपूर्ण दिशा है। इस रणनीति में इस संबंध में कई नवाचार किए गए हैं, जो आगे के अध्ययन और आवेदन के लायक हैं।
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00:00
period: 1d
basePeriod: 1h
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/
// © maxencetajet
//@version=5
strategy("MACD Strategy", overlay=true, initial_capital=1000, slippage=25)
src = input(title="Source", defval=close)
target_stop_ratio = input.float(title='Risk/Reward', defval=2, minval=0.5, maxval=100)
risk = input.float(2, title="Risk per Trade %")
riskt = risk / 100 + 1
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
group="Backtest Time Period")
backtestStartDate = input(timestamp("5 June 2022"),
title="Start Date", group="Backtest Time Period",
tooltip="This start date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("5 July 2022"),
title="End Date", group="Backtest Time Period",
tooltip="This end date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
inTradeWindow = true
emaV = input.int(200, title="Length", group="EMA")
swingHighV = input.int(7, title="Swing High", group="number of past candles")
swingLowV = input.int(7, title="Swing Low", group="number of past candles")
ema = ta.ema(src, emaV)
fast_length = input(title="Fast Length", defval=12, group="MACD")
slow_length = input(title="Slow Length", defval=26, group="MACD")
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9, group="MACD")
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD")
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
longcondition = close > ema and ta.crossover(macd, signal) and macd < 0
shortcondition = close < ema and ta.crossunder(macd, signal) and macd > 0
float risk_long = na
float risk_short = na
float stopLoss = na
float takeProfit = na
float entry_price = na
risk_long := risk_long[1]
risk_short := risk_short[1]
swingHigh = ta.highest(high, swingHighV)
swingLow = ta.lowest(low, swingLowV)
lotB = (strategy.equity*riskt-strategy.equity)/(close - swingLow)
lotS = (strategy.equity*riskt-strategy.equity)/(swingHigh - close)
if strategy.position_size == 0 and longcondition and inTradeWindow
risk_long := (close - swingLow) / close
strategy.entry("long", strategy.long, qty=lotB)
if strategy.position_size == 0 and shortcondition and inTradeWindow
risk_short := (swingHigh - close) / close
strategy.entry("short", strategy.short, qty=lotS)
if strategy.position_size > 0
stopLoss := strategy.position_avg_price * (1 - risk_long)
takeProfit := strategy.position_avg_price * (1 + target_stop_ratio * risk_long)
entry_price := strategy.position_avg_price
strategy.exit("long exit", "long", stop = stopLoss, limit = takeProfit)
if strategy.position_size < 0
stopLoss := strategy.position_avg_price * (1 + risk_short)
takeProfit := strategy.position_avg_price * (1 - target_stop_ratio * risk_short)
entry_price := strategy.position_avg_price
strategy.exit("short exit", "short", stop = stopLoss, limit = takeProfit)
plot(ema, color=color.white, linewidth=2, title="EMA")
p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price')
p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss')
p_tp = plot(takeProfit, color=color.new(color.green, 0), linewidth=2, style=plot.style_linebr, title='takeProfit')
fill(p_sl, p_ep, color.new(color.red, transp=85))
fill(p_tp, p_ep, color.new(color.green, transp=85))