
ADR औसत रेखा क्रॉसिंग रणनीति ट्रेडिंग व्यू प्लेटफॉर्म पर आधारित एक मात्रात्मक ट्रेडिंग रणनीति है, जो प्रवृत्ति को समझने, संकेतों को फ़िल्टर करने और स्टॉपलॉस सेट करने के लिए कई तकनीकी संकेतकों को जोड़ती है। यह रणनीति दो अलग-अलग चक्रों की सूचकांक चलती औसत (ईएमए) का उपयोग करती है, जो प्रमुख प्रवृत्ति की पहचान करती है, औसत वास्तविक तरंग दैर्ध्य (एटीआर) का उपयोग करती है, और उतार-चढ़ाव फ़िल्टर के रूप में उतार-चढ़ाव फ़िल्टर का उपयोग करती है। इसके अलावा, यह रणनीति ट्रेडिंग समय विंडो, स्टॉपलॉस बैलेंस और अधिकतम दैनिक हानि जैसे जोखिम नियंत्रण उपायों को पेश करती है, जो प्रवृत्ति के अवसरों को पकड़ने के साथ-साथ डाउनस्ट्रीम जोखिम को सख्ती से नियंत्रित करने का प्रयास करती है।
द्वि-समान रेखा क्रॉसिंगः रणनीति दो अलग-अलग चक्रों की ईएमए लाइनों का उपयोग करती है ताकि प्रवृत्ति का न्याय किया जा सके। जब अल्पकालिक ईएमए पर लंबे समय तक ईएमए होता है, तो यह माना जाता है कि प्रवृत्ति ऊपर की ओर है, और एक बहु-संकेत उत्पन्न होता है; इसके विपरीत, जब अल्पकालिक ईएमए के नीचे लंबे समय तक ईएमए होता है, तो यह माना जाता है कि प्रवृत्ति नीचे की ओर है, और एक शून्य-संकेत उत्पन्न होता है।
एडीआर अस्थिरता फ़िल्टरिंगः कम अस्थिरता वाले वातावरण में ट्रेडिंग सिग्नल उत्पन्न करने से बचने के लिए, रणनीति ने एडीआर सूचक को अस्थिरता फ़िल्टर के रूप में पेश किया। केवल तभी स्थिति खोलने की अनुमति है जब एडीआर मूल्य पूर्वनिर्धारित न्यूनतम थ्रेशोल्ड से अधिक हो।
ट्रेडिंग समय विंडोः यह रणनीति उपयोगकर्ताओं को दैनिक ट्रेडिंग शुरू करने और समाप्त करने का समय निर्धारित करने की अनुमति देती है। ट्रेडों को केवल निर्दिष्ट समय विंडो के भीतर निष्पादित किया जाता है। यह कम तरलता या अधिक अस्थिरता के समय से बचने में मदद करता है।
गतिशील स्टॉप-लॉसः रणनीति हाल ही में N रूट K लाइन के औसत उच्चतम और निम्नतम मूल्य के आधार पर और पूर्वनिर्धारित जोखिम-लाभ अनुपात के साथ, गतिशील रूप से स्टॉप-लॉस और स्टॉप-लॉस की गणना करती है। यह सुनिश्चित करता है कि प्रत्येक व्यापार के लिए जोखिम-लाभ नियंत्रण योग्य है।
लाभ और हानि का संतुलनः जब स्थिति एक निश्चित लाभप्रदता तक पहुंच जाती है (उपयोगकर्ता रिस्क-रिटर्न अनुपात सेट कर सकता है), तो रणनीति स्टॉप-लॉस को स्थिति के शुरुआती मूल्य पर ले जाती है, अर्थात् लाभ और हानि का संतुलन। यह प्राप्त लाभ की रक्षा करने में मदद करता है।
अधिकतम दैनिक हानि सीमाः एक दिन में अधिकतम हानि को नियंत्रित करने के लिए, रणनीति एक दैनिक हानि सीमा निर्धारित करती है। एक बार जब उस दिन की हानि सीमा तक पहुंच जाती है, तो रणनीति अगले दिन तक व्यापार करना बंद कर देगी।
समापन और समापन स्थितिः यह रणनीति सभी पदों को हर ट्रेडिंग दिन के एक निश्चित समय (जैसे 16:00) पर समाप्त कर देती है, चाहे वह स्थिति रोकथाम या रोकथाम लाइन को छू रही हो या नहीं, रातोंरात जोखिम से बचने के लिए।
प्रवृत्ति का पालन करने की क्षमता मजबूत: द्वि-समान रेखा के क्रॉसिंग के माध्यम से प्रवृत्ति का न्याय करने के लिए, बाजार के प्रमुख रुझानों को प्रभावी ढंग से पकड़ने के लिए, जिससे रणनीति की जीत और लाभप्रदता की क्षमता में सुधार हो सके।
अच्छी अस्थिरता अनुकूलन क्षमताः अस्थिरता फ़िल्टर के रूप में एडीआर सूचकांक की शुरूआत से कम अस्थिरता वाले वातावरण में बार-बार व्यापार करने से बचा जा सकता है, जो अमान्य संकेतों और झूठी दरारों से होने वाले नुकसान को कम करता है।
सख्त जोखिम नियंत्रणः इस रणनीति में कई आयामों से जोखिम नियंत्रण उपायों की स्थापना की गई है, जिसमें गतिशील स्टॉप, स्टॉप-लॉस, स्टॉप-लॉस, और अधिकतम दैनिक हानि सीमा शामिल है, जो रणनीति के डाउनसाइड जोखिम को प्रभावी ढंग से नियंत्रित करती है और जोखिम-समायोजित रिटर्न को बढ़ाती है।
पैरामीटर लचीलापनः रणनीति के पैरामीटर, जैसे कि औसत चक्र, एडीआर की लंबाई, रिस्क-रिटर्न अनुपात, ट्रेडिंग समय विंडो, आदि को उपयोगकर्ता की वरीयताओं और बाजार विशेषताओं के आधार पर लचीलापन से सेट किया जा सकता है, जिससे रणनीति के प्रदर्शन को अनुकूलित किया जा सके।
उच्च स्तर की स्वचालनः यह रणनीति ट्रेडिंग व्यू प्लेटफॉर्म पर आधारित है, ट्रेडिंग तर्क पूरी तरह से प्रोग्राम द्वारा स्वचालित रूप से निष्पादित किया जाता है, जो मानवीय भावनाओं और व्यक्तिपरक निर्णयों के हस्तक्षेप को कम करता है, जो रणनीति के दीर्घकालिक स्थिर संचालन के लिए अनुकूल है।
पैरामीटर अनुकूलन जोखिमः हालांकि इस रणनीति के पैरामीटर को लचीले ढंग से समायोजित किया जा सकता है, यदि अति-अनुकूलन किया जाता है, तो यह अति-फिट होने का कारण बन सकता है, जो नमूने के बाहर खराब प्रदर्शन करता है। इसलिए, जब पैरामीटर सेट किया जाता है, तो रणनीति की स्थिरता सुनिश्चित करने के लिए पर्याप्त प्रतिक्रिया और विश्लेषण की आवश्यकता होती है।
आकस्मिक घटना जोखिमः यह रणनीति मुख्य रूप से तकनीकी संकेतक व्यापार पर आधारित है, जो कुछ प्रमुख मौलिक घटनाओं जैसे कि नीति परिवर्तन, आर्थिक आंकड़ों में भारी उतार-चढ़ाव आदि के लिए अप्रत्याशित प्रतिक्रिया के कारण बड़ी वापसी का कारण बन सकती है।
रुझान में बदलाव का जोखिमः रुझान में बदलाव के महत्वपूर्ण समय के दौरान, द्वि-समान रेखा के क्रॉस सिग्नल में देरी हो सकती है, जिससे रणनीति को सबसे अच्छा स्थिति बनाने का समय याद आ जाता है, या रुझान में बदलाव की शुरुआत में नुकसान होता है।
तरलता जोखिमः भले ही रणनीति ने ट्रेडिंग समय विंडो सेट की हो, लेकिन यदि ट्रेडों के संकेतों की तरलता खराब है, तो स्लाइड पॉइंट, ट्रेडिंग देरी और अन्य जोखिमों का सामना करना पड़ सकता है, जो रणनीति के प्रदर्शन को प्रभावित कर सकता है।
तकनीकी संकेतक विफलता का जोखिमः यह रणनीति तकनीकी संकेतक पर अत्यधिक निर्भर करती है, और यदि बाजार की स्थिति में कोई महत्वपूर्ण परिवर्तन होता है, तो रणनीति की प्रभावशीलता कम हो सकती है, जिससे संकेतक अपने मूल संकेतकों को खो देते हैं।
अधिक आयामों के संकेतकों को पेश करनाः मौजूदा द्वि-समान रेखा और एडीआर के आधार पर, संकेतों की विश्वसनीयता और स्थिरता को बढ़ाने के लिए अधिक प्रभावी तकनीकी संकेतकों जैसे कि एमएसीडी, आरएसआई आदि को पेश करने पर विचार किया जा सकता है।
गतिशील अनुकूलन पैरामीटरः एक पैरामीटर अनुकूलन तंत्र का निर्माण किया जा सकता है, जो विभिन्न बाजार स्थितियों (जैसे ट्रेंडिंग, आघात, आदि) के आधार पर रणनीति के महत्वपूर्ण पैरामीटर को गतिशील रूप से समायोजित करता है ताकि बाजार में बदलाव हो सके।
मौलिक तत्वों को शामिल करनाः आर्थिक आंकड़ों, नीतिगत रुझानों आदि जैसे कुछ महत्वपूर्ण मौलिक संकेतकों को उचित रूप से ध्यान में रखते हुए, रणनीति को बाजार के रुझानों को बेहतर ढंग से समझने में मदद मिल सकती है और समय पर प्रणालीगत जोखिम से बच सकती है।
स्टॉप लॉस तंत्र में सुधारः मौजूदा गतिशील स्टॉप लॉस के आधार पर, स्टॉप लॉस के तर्क को और अधिक अनुकूलित किया जा सकता है, जैसे कि ट्रैक लॉस, आंशिक स्टॉप आदि की शुरूआत, ताकि मुनाफे की बेहतर सुरक्षा और जोखिम को नियंत्रित किया जा सके।
बहु-लक्ष्य, बहु-समय चक्रः इस रणनीति को बहु-लक्ष्य और बहु-समय चक्रों में विस्तारित करें, ताकि निवेश और समय चक्र के अनुकूलन के माध्यम से रणनीति की अनुकूलनशीलता और स्थिरता को बढ़ाया जा सके।
एडीआर रेगुलर क्रॉसिंग रणनीति एक तकनीकी विश्लेषण पर आधारित एक मात्रात्मक ट्रेडिंग रणनीति है, जो दोहरे रेगुलर क्रॉसिंग के माध्यम से रुझानों का आकलन करती है और एडीआर सूचकांकों का उपयोग करके अस्थिरता फ़िल्टर करती है। इस रणनीति में डाउनसाइड जोखिम को नियंत्रित करने के लिए सख्त जोखिम नियंत्रण उपाय भी शामिल हैं, जिसमें गतिशील स्टॉप-लॉस, स्टॉप-लॉस बैलेंसिंग, अधिकतम दैनिक हानि सीमा आदि शामिल हैं। रणनीति की ताकत में प्रवृत्ति ट्रैकिंग क्षमता, अच्छी अस्थिरता अनुकूलनशीलता, सख्त जोखिम नियंत्रण, पैरामीटर लचीलापन और उच्च स्तर की स्वचालन शामिल है। लेकिन कुछ जोखिम भी हैं, जैसे कि पैरामीटर अनुकूलन जोखिम, अचानक घटनाओं का जोखिम, रुझान में बदलाव का जोखिम, तरलता जोखिम और तकनीकी संकेतक विफलता जोखिम। भविष्य में, यह रणनीति अधिक आयामी सूचकांकों को ध्यान में रखने से बदल सकती है, गतिशीलता लाभ, मौलिक पक्षों को शामिल करना, स्टॉप-लॉसिंग लाभों को सुधारना, बहु-चक्रमिकता मॉडल और अन्य पहलुओं को बढ़ाने के
/*backtest
start: 2024-02-26 00:00:00
end: 2024-03-27 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Sameh_Hussein
//@version=5
strategy('EMA Cross ADR Strategy with Stats', overlay=true)
// Adjustable Parameters
shortEmaLength = input(10, title='Short EMA Length')
longEmaLength = input(50, title='Long EMA Length')
adrLength = input(14, title='ADR Length')
riskRewardRatio = input(2.0, title='Risk/Reward Ratio')
lookbackCandles = input(10, title='Lookback Candles for Stop Loss')
startTime = input(0900, title='Start Time')
endTime = input(1600, title='End Time')
minAdrValue = input(10, title='Minimum ADR Value for Entry')
breakEvenProfit = input.float(1.0, title='Break-Even Profit', minval=0.0)
breakEvenRR = input.float(1.0, title='Break-Even Risk-Reward Ratio', minval=0.0)
dailyLossLimit = input(-2000.0, title='Daily Loss Limit')
// Exponential Moving Averages
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)
// Average Daily Range
adr = ta.sma(ta.tr, adrLength)
// Time Filter Function
timeFilter() => true
// Entry Conditions with ADR filter
longCondition = ta.crossover(shortEma, longEma) and timeFilter() and adr > minAdrValue
shortCondition = ta.crossunder(shortEma, longEma) and timeFilter() and adr > minAdrValue
// Calculate the average low and average high of the previous 'lookbackCandles' candles
averageLow = ta.sma(low, lookbackCandles)
averageHigh = ta.sma(high, lookbackCandles)
// Risk and Reward Calculation
stopLossLong = averageLow
takeProfitLong = close + (close - averageLow) * riskRewardRatio
stopLossShort = averageHigh
takeProfitShort = close - (averageHigh - close) * riskRewardRatio
// Entry Control Variables
var longEntryAllowed = true
var shortEntryAllowed = true
// Update entry price on trade execution
var float entryPriceLong = na
var float entryPriceShort = na
if (strategy.position_size > 0)
if (strategy.position_size[1] <= 0)
entryPriceLong := strategy.opentrades.entry_price(strategy.opentrades - 1)
else
entryPriceLong := entryPriceLong
else
entryPriceLong := na
if (strategy.position_size < 0)
if (strategy.position_size[1] >= 0)
entryPriceShort := strategy.opentrades.entry_price(strategy.opentrades - 1)
else
entryPriceShort := entryPriceShort
else
entryPriceShort := na
// Adjust stop loss to break-even plus the defined profit when the specified risk-reward ratio is reached
breakEvenTriggerLong = entryPriceLong + (entryPriceLong - stopLossLong) * breakEvenRR
breakEvenTriggerShort = entryPriceShort - (stopLossShort - entryPriceShort) * breakEvenRR
if (longEntryAllowed and close >= breakEvenTriggerLong)
stopLossLong := entryPriceLong + breakEvenProfit
if (shortEntryAllowed and close <= breakEvenTriggerShort)
stopLossShort := entryPriceShort - breakEvenProfit
// Close all trades at 1600
if (hour == 15 and minute == 59)
strategy.close_all(comment='Close at 1600')
// Define the daily loss variable and last trade day
var float[] dailyLossArray = array.new_float(1, 0.0)
var int[] lastTradeDayArray = array.new_int(1, na)
// Function to update the daily loss
updateDailyLoss() =>
_dailyLoss = array.get(dailyLossArray, 0)
_lastTradeDay = array.get(lastTradeDayArray, 0)
if na(_lastTradeDay) or dayofmonth != _lastTradeDay
_dailyLoss := 0.0
array.set(lastTradeDayArray, 0, dayofmonth)
if not na(strategy.closedtrades.entry_bar_index(strategy.closedtrades - 1))
_dailyLoss += strategy.closedtrades.profit(strategy.closedtrades - 1)
array.set(dailyLossArray, 0, _dailyLoss)
// Call the function to update the daily loss
updateDailyLoss()
// Execute Strategy
if longCondition and longEntryAllowed
strategy.entry('Long', strategy.long)
strategy.exit('Take Profit/Stop Loss', 'Long', stop=stopLossLong, limit=takeProfitLong)
longEntryAllowed := false
if shortCondition and shortEntryAllowed
strategy.entry('Short', strategy.short)
strategy.exit('Take Profit/Stop Loss', 'Short', stop=stopLossShort, limit=takeProfitShort)
shortEntryAllowed := false
// Reset entry control variables on position close
if strategy.position_size == 0
longEntryAllowed := true
shortEntryAllowed := true
// // Statistics
// winRate = strategy.wintrades / strategy.closedtrades * 100
// totalTrades = strategy.closedtrades
// averageProfit = strategy.grossprofit / strategy.wintrades
// averageLoss = strategy.grossloss / strategy.losstrades
// // Plotting
// plot(shortEma, color=color.new(color.red, 0), title='Short EMA')
// plot(longEma, color=color.new(color.blue, 0), title='Long EMA')
// // Display Table
// table statsTable = table.new(position=position.top_right, columns=2, rows=4, bgcolor=color.gray, border_width=1)
// table.cell(statsTable, column=0, row=0, text='Win Rate (%)', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=0, text=str.tostring(winRate), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=1, text='Total Trades', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=1, text=str.tostring(totalTrades), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=2, text='Average Profit', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=2, text=str.tostring(averageProfit), bgcolor=color.blue)
// table.cell(statsTable, column=0, row=3, text='Average Loss', bgcolor=color.blue)
// table.cell(statsTable, column=1, row=3, text=str.tostring(averageLoss), bgcolor=color.blue)