
मल्टी-सोर्स कन्फर्मेशन इंडिकेटर फीडबैक फ्रेमवर्क एक पेशेवर-स्तरीय मात्रात्मक ट्रेडिंग टेस्टिंग सिस्टम है, जिसे विशेष रूप से कस्टम इंडिकेटर और ट्रेडिंग सिग्नल का मूल्यांकन करने के लिए डिज़ाइन किया गया है। यह फ्रेमवर्क कई सिग्नल डिटेक्शन विधियों, एक उन्नत कन्फर्मेशन फ़िल्टरिंग सिस्टम और पेशेवर जोखिम प्रबंधन सुविधाओं को एकीकृत करता है, जिससे व्यापारी अपनी ट्रेडिंग रणनीतियों का पूर्ण परीक्षण कर सकते हैं। सिस्टम का मुख्य लाभ इसकी लचीलापन में है, जो उपयोगकर्ताओं को किसी भी कस्टम इंडिकेटर या अंतर्निहित अध्ययन से कनेक्ट करने की अनुमति देता है, और मूल्य परिवर्तन, चौराहे और ट्रिगरिंग सहित कई तरीकों से सिग्नल का पता लगाने की अनुमति देता है। इसके अलावा, यह फ्रेमवर्क उन्नत जोखिम प्रबंधन सुविधाएं प्रदान करता है, जैसे कि स्थिर स्टॉप/लॉस, बेंचमार्क फ़ंक्शन और पोजीशन आकार प्रबंधन, और एक स्वतंत्र आउटफील्ड लॉजिक और स्पष्ट दृश्य प्रतिक्रिया प्रणाली।
इस रणनीति का मुख्य सिद्धांत एक व्यापक परीक्षण वातावरण प्रदान करना है, जो व्यापारियों को विभिन्न संकेतकों की प्रभावशीलता का मूल्यांकन करने की अनुमति देता है। कोड निम्नलिखित महत्वपूर्ण कार्यों को पूरा करता हैः
विभिन्न प्रकार के सिग्नल: रणनीति detectLongSignal () और detectShortSignal () कार्यों के माध्यम से पांच अलग-अलग सिग्नल का पता लगाने के तरीकों को लागू करता हैः
पुष्टिकरण प्रणाली: longConfirmation () और shortConfirmation () फंक्शंस के माध्यम से एक बहु-स्रोत पुष्टिकरण प्रणाली को लागू किया गया है, जिसमें ट्रेडिंग सिग्नल को निर्दिष्ट रिटर्न अवधि के भीतर अतिरिक्त शर्तों को पूरा करने की आवश्यकता होती है। यह फ़ंक्शन झूठे संकेतों को काफी कम करता है।
प्रवेश और निकास तर्क: रणनीतियाँ strategy.entry और strategy.exit फ़ंक्शंस का उपयोग करके ट्रेडों के प्रवेश और निकास को प्रबंधित करती हैं। प्रवेश की शर्तें सिग्नल डिटेक्शन और कन्फर्मेशन सिस्टम द्वारा संयुक्त रूप से निर्धारित की जाती हैं, और निकास कई तरीकों से किया जा सकता हैः
पॉपन तर्कजब व्यापार निर्दिष्ट ब्रेक लाभ संख्या तक पहुंचता है, तो रणनीति स्वचालित रूप से स्टॉप लॉस को प्रवेश मूल्य पर स्थानांतरित कर देती है, जो कि पहले से ही किए गए लाभ को संरक्षित करती है। यह वर्तमान मूल्य और प्रवेश मूल्य के बीच अंतर का पता लगाने और ब्रेक ईवन ट्रिगर द्वारा निर्धारित अंक तक पहुंचने पर स्टॉप लॉस स्तर को संशोधित करके किया जाता है।
दृश्यता और निगरानी: रणनीति सभी प्रवेश और निकास संकेतों को चार्ट पर चिह्नित करने के लिए plotshape फ़ंक्शन का उपयोग करती है और table.new के माध्यम से एक वास्तविक समय स्थिति तालिका बनाती है जो वर्तमान रणनीति सेटिंग्स और व्यापार की स्थिति को प्रदर्शित करती है।
उच्च लचीलापन: रणनीति किसी भी संकेतक को सिग्नल स्रोत के रूप में जोड़ने की अनुमति देती है, जिससे यह विभिन्न ट्रेडिंग शैलियों और बाजार स्थितियों के लिए उपयुक्त है। उपयोगकर्ता केवल इनपुट स्रोतों को बदलकर विभिन्न संकेतक संयोजनों का परीक्षण कर सकते हैं।
मल्टीलेयर फ़िल्टरिंग सिस्टमपुष्टि फ़िल्टर के माध्यम से, रणनीति को ट्रेडों को निष्पादित करने के लिए कई शर्तों को एक साथ पूरा करने की आवश्यकता होती है, जो गलत संकेतों को काफी कम करती है। यह बहु-स्रोत पुष्टिकरण विधि पेशेवर व्यापारियों के लिए अनुकरण करती है जो व्यापारिक निर्णय लेने से पहले कई संकेतकों की एकरूपता की तलाश करते हैं।
पूर्ण जोखिम प्रबंधनइस नीति में पेशेवर स्तर की जोखिम प्रबंधन सुविधाएं शामिल हैं, जिनमें शामिल हैंः
वास्तविक समय प्रतिक्रिया और निगरानी: सिग्नल मार्कर और स्टेटस टेबल के माध्यम से, ट्रेडर रणनीतियों के संचालन की स्थिति और प्रदर्शन को सहजता से समझ सकते हैं, जिससे उन्हें शुरू करने और अनुकूलित करने में आसानी होती है।
संगतता: रणनीति पाइन स्क्रिप्ट v6 के साथ संगत है, जो किसी भी ट्रेडिंग प्लेटफॉर्म पर चल सकती है जो इस संस्करण का समर्थन करता है और ट्रेडर्स को ऐतिहासिक प्रदर्शन का आकलन करने में सक्षम बनाने के लिए फीडबैक का समर्थन करता है।
सिग्नल डिटेक्शन निर्भरता: रणनीति की प्रभावशीलता अत्यधिक चयनित सिग्नल जांच विधि और थ्रेशोल्ड सेटिंग्स पर निर्भर करती है। अनुचित विन्यास से बहुत अधिक झूठे संकेत या महत्वपूर्ण व्यापारिक अवसरों को याद किया जा सकता है। यह सलाह दी जाती है कि व्यापारी विभिन्न बाजार स्थितियों में विभिन्न सेटिंग्स के संयोजन का परीक्षण करें ताकि सिग्नल जांच विधि का पता लगाया जा सके जो किसी विशेष संकेतक के लिए सबसे उपयुक्त है।
सिस्टम फ़िल्टरिंग जोखिम की पुष्टि करें: हालांकि बहु-स्रोत पुष्टिकरण प्रणाली झूठे संकेतों को कम कर सकती है, यह लाभदायक व्यापार के अवसरों को खोने का भी कारण बन सकती है। बहुत सख्त पुष्टिकरण आवश्यकताओं से रणनीति तेजी से विकसित होने वाले बाजार के रुझानों को याद कर सकती है। समाधान पुष्टिकरण प्रणाली की कठोरता को संतुलित करना है, या विभिन्न बाजार स्थितियों के लिए अलग-अलग पुष्टिकरण मानदंडों को डिजाइन करना है।
फिक्स्ड स्टॉप/स्टॉप लॉस की सीमाएं: एक निश्चित अंक के साथ स्टॉप/लॉस का उपयोग करना सभी बाजार स्थितियों के लिए उपयुक्त नहीं हो सकता है, विशेष रूप से उन बाजारों में जहां अस्थिरता अधिक होती है। विभिन्न बाजार स्थितियों के अनुकूल होने के लिए स्टॉप/लॉस बिंदुओं को बाजार की अस्थिरता के संकेतकों (जैसे एटीआर) से जोड़ने की सिफारिश की जाती है।
वास्तविक डिस्क के विपरीत: सभी रिटर्न्स के परिणामों में वास्तविक ट्रेडिंग से भिन्नता का जोखिम होता है, क्योंकि रिटर्न्स पूरी तरह से स्लिप पॉइंट, ट्रेडिंग लागत और तरलता की समस्याओं का अनुकरण नहीं कर सकते हैं। व्यापारियों को वास्तविक ट्रेडिंग से पहले सिमुलेशन वातावरण में रणनीति के प्रदर्शन को सत्यापित करना चाहिए।
कोड जटिलता: नीति की जटिलता डिबगिंग और रखरखाव की कठिनाई को बढ़ा सकती है। विस्तृत टिप्पणी और मॉड्यूलर डिजाइन इस जटिलता को प्रबंधित करने में मदद कर सकते हैं और कोड की रखरखाव सुनिश्चित कर सकते हैं।
गतिशील जोखिम प्रबंधनवर्तमान रणनीतियों में एक निश्चित संख्या में स्टॉप/लॉस का उपयोग किया जाता है, जिसे बाजार की अस्थिरता के आधार पर एक गतिशील जोखिम प्रबंधन प्रणाली के रूप में अनुकूलित किया जा सकता है। उदाहरण के लिए, स्टॉप/लॉस बिंदु को एटीआर (औसत सच्ची सीमा) से जोड़ा जाता है, जो अस्थिरता बढ़ने पर स्टॉप-लॉस रेंज को बढ़ाता है और अस्थिरता कम होने पर स्टॉप-लॉस रेंज को कम करता है। यह विभिन्न बाजार स्थितियों के लिए बेहतर अनुकूल है।
प्रमाणीकरण प्रणाली में सुधारवर्तमान पुष्टिकरण प्रणाली को और अधिक फ़िल्टरिंग शर्तों को शामिल करने के लिए विस्तारित किया जा सकता है, जैसे कि समय फ़िल्टरिंग ((किसी विशेष बाजार समय पर व्यापार से बचें), अस्थिरता फ़िल्टर ((कम अस्थिरता वाले वातावरण में व्यापार से बचें) या रुझान फ़िल्टर ((केवल प्रमुख रुझानों के अनुरूप दिशा में व्यापार करें)) । यह झूठे संकेतों को और कम करेगा और रणनीति की स्थिरता को बढ़ाएगा।
आंशिक स्थिति प्रबंधन: रणनीतियाँ कुछ स्थिति प्रबंधन सुविधाओं को जोड़ सकती हैं, जो एक बार में पूरे पदों को खोलने या बंद करने के बजाय कई बार प्रवेश करने और कई बार बाहर निकलने की अनुमति देती हैं। यह विधि एकल प्रविष्टि / निकास के जोखिम को कम कर सकती है और समग्र रणनीति प्रदर्शन में सुधार कर सकती है।
मशीन लर्निंग अनुकूलन: सिग्नल पैरामीटर और जोखिम सेटिंग्स को अनुकूलित करने के लिए मशीन लर्निंग एल्गोरिदम को पेश किया जा सकता है, जो विभिन्न बाजार स्थितियों के अनुकूल रणनीति पैरामीटर को स्वचालित रूप से ऐतिहासिक डेटा के आधार पर समायोजित करता है।
प्रदर्शन को बढ़ाएँ: जबकि रणनीति पहले से ही बुनियादी स्थिति की निगरानी प्रदान करती है, अधिक प्रदर्शन संकेतक, जैसे कि शार्प अनुपात, अधिकतम वापसी, लाभ-हानि अनुपात, आदि को एक अधिक व्यापक रणनीति मूल्यांकन प्रदान करने के लिए जोड़ा जा सकता है। ये संकेतक स्थिति तालिका में प्रदर्शित किए जा सकते हैं, जिससे व्यापारियों को रणनीति के प्रदर्शन का बेहतर मूल्यांकन करने में मदद मिलती है।
मल्टी-सोर्स कन्फर्मेशन इंडिकेटर फीडबैक फ्रेमवर्क एक पूर्ण-फ़ंक्शनल क्वांटिफाइड ट्रेडिंग टेस्टिंग सिस्टम है जो व्यापारियों को अपनी ट्रेडिंग रणनीतियों का मूल्यांकन और अनुकूलन करने के लिए एक शक्तिशाली उपकरण प्रदान करता है। यह कई प्रकार के सिग्नल डिटेक्शन विधियों, एक बहु-स्तरीय कन्फर्मेशन सिस्टम और पेशेवर जोखिम प्रबंधन सुविधाओं को एकीकृत करता है। फ्रेमवर्क का मुख्य लाभ इसकी लचीलापन और अनुकूलन क्षमता है, जो व्यापारियों को लगभग किसी भी प्रकार के सूचक संयोजन और सिग्नल जनरेशन विधियों का परीक्षण करने की अनुमति देता है।
हालांकि कुछ अंतर्निहित जोखिम और सीमाएं हैं, जैसे कि सिग्नल डिटेक्शन निर्भरता और फिक्स्ड रिस्क पैरामीटर की सीमाएं, इन समस्याओं को प्रस्तावित अनुकूलन दिशाओं के माध्यम से हल किया जा सकता है, जैसे कि गतिशील जोखिम प्रबंधन को लागू करना, पुष्टिकरण प्रणाली को बढ़ाना और आंशिक पोजीशन प्रबंधन को पेश करना। इन अनुकूलन के माध्यम से, यह ढांचा अपनी प्रभावशीलता और अनुकूलनशीलता को और बढ़ा सकता है और व्यापारियों के शस्त्रागार में एक मूल्यवान उपकरण बन सकता है।
संक्षेप में, मल्टी-सोर्स कन्फर्मेशन इंडिकेटर फीडबैक फ्रेमवर्क ट्रेडिंग रणनीतियों का परीक्षण और मूल्यांकन करने के लिए एक पेशेवर, व्यवस्थित दृष्टिकोण का प्रतिनिधित्व करता है, जो सरल सिग्नल जनरेशन से परे है, जिसमें जोखिम प्रबंधन और बहु-स्तरीय पुष्टि शामिल है, जो सफल ट्रेडिंग सिस्टम के महत्वपूर्ण घटक हैं। यह फ्रेमवर्क एक व्यापक समाधान प्रदान करता है जो व्यापारियों के लिए एक कस्टम ट्रेडिंग रणनीति बनाने और परीक्षण करने की तलाश में है।
/*backtest
start: 2024-07-08 00:00:00
end: 2025-07-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("FULLY FUNCTIONAL INDICATOR TESTER", overlay=true, margin_long=100, margin_short=100)
// Entry/Exit Signal Inputs
longEntry = input.source(close, 'Long Entry Trigger', 'Source for long signal (connect your indicator here)')
shortEntry = input.source(close, 'Short Entry Trigger', 'Source for short signal (connect your indicator here)')
activateLongExit = input.bool(false, 'Activate Long Exit Signals')
longExit = input.source(high, 'Long Exit Trigger', 'Source for long exit signal')
activateShortExit = input.bool(false, 'Activate Short Exit Signals')
shortExit = input.source(low, 'Short Exit Trigger', 'Source for short exit signal')
// Signal Detection Method
signalMethod = input.string('Value Change', 'Signal Detection Method', options=['Value Change', 'Crossover Above', 'Crossover Below', 'Value Above Threshold', 'Value Below Threshold'])
signalThreshold = input.float(0, 'Signal Threshold', tooltip='Threshold value for signal detection methods')
// Take Profit and Stop Loss
fixedTp = input.int(0, 'Static TP (in ticks)', 0, tooltip='0 = disabled')
initialSL = input.int(0, 'Initial SL (in ticks)', 0, tooltip='0 = disabled')
// Break Even Settings
breakEvenTrigger = input.int(0, 'Break Even Trigger (in ticks)', 0, tooltip='Move SL to break even after this many ticks profit. 0 = disabled')
// Confluence Settings
useConfluence = input.bool(false, 'Use Confluence Filter', 'Activate confluence filter for entries')
longConfluence = input.source(high, 'Long Signal Confluence', 'Source for long confluence filter')
longConfluenceTrigger = input.source(low, 'Long Confluence Trigger', 'Value that must be below confluence source for long entry')
shortConfluence = input.source(high, 'Short Signal Confluence', 'Source for short confluence filter')
shortConfluenceTrigger = input.source(low, 'Short Confluence Trigger', 'Value that must be above confluence source for short entry')
confluenceLookback = input.int(0, 'Confluence Lookback Period', 0, 10, 1, 'Number of candles to look back for confluence')
// Variables to track entry prices for break-even
var float longEntryPrice = na
var float shortEntryPrice = na
// Signal Detection Functions
detectLongSignal() =>
switch signalMethod
'Value Change' => longEntry != longEntry[1] and longEntry > 0
'Crossover Above' => ta.crossover(longEntry, signalThreshold)
'Crossover Below' => ta.crossunder(longEntry, signalThreshold)
'Value Above Threshold' => longEntry > signalThreshold and longEntry[1] <= signalThreshold
'Value Below Threshold' => longEntry < signalThreshold and longEntry[1] >= signalThreshold
=> false
detectShortSignal() =>
switch signalMethod
'Value Change' => shortEntry != shortEntry[1] and shortEntry > 0
'Crossover Above' => ta.crossover(shortEntry, signalThreshold)
'Crossover Below' => ta.crossunder(shortEntry, signalThreshold)
'Value Above Threshold' => shortEntry > signalThreshold and shortEntry[1] <= signalThreshold
'Value Below Threshold' => shortEntry < signalThreshold and shortEntry[1] >= signalThreshold
=> false
detectLongExit() =>
switch signalMethod
'Value Change' => longExit != longExit[1] and longExit > 0
'Crossover Above' => ta.crossover(longExit, signalThreshold)
'Crossover Below' => ta.crossunder(longExit, signalThreshold)
'Value Above Threshold' => longExit > signalThreshold and longExit[1] <= signalThreshold
'Value Below Threshold' => longExit < signalThreshold and longExit[1] >= signalThreshold
=> false
detectShortExit() =>
switch signalMethod
'Value Change' => shortExit != shortExit[1] and shortExit > 0
'Crossover Above' => ta.crossover(shortExit, signalThreshold)
'Crossover Below' => ta.crossunder(shortExit, signalThreshold)
'Value Above Threshold' => shortExit > signalThreshold and shortExit[1] <= signalThreshold
'Value Below Threshold' => shortExit < signalThreshold and shortExit[1] >= signalThreshold
=> false
// Confluence confirmation functions
longConfirmation() =>
confirmation = false
if confluenceLookback == 0
confirmation := longConfluenceTrigger < longConfluence
else
for x = 0 to confluenceLookback
if longConfluenceTrigger[x] < longConfluence[x]
confirmation := true
break
confirmation
shortConfirmation() =>
confirmation = false
if confluenceLookback == 0
confirmation := shortConfluenceTrigger > shortConfluence
else
for x = 0 to confluenceLookback
if shortConfluenceTrigger[x] > shortConfluence[x]
confirmation := true
break
confirmation
// Entry conditions
longConfirmed = useConfluence ? longConfirmation() : true
shortConfirmed = useConfluence ? shortConfirmation() : true
longCondition = detectLongSignal() and longConfirmed
shortCondition = detectShortSignal() and shortConfirmed
// Entry logic
if (longCondition and strategy.opentrades == 0)
strategy.entry('Long', strategy.long)
longEntryPrice := close
// Set initial exit orders
if fixedTp > 0 or initialSL > 0
strategy.exit('Long Exit', 'Long',
profit = fixedTp > 0 ? fixedTp : na,
loss = initialSL > 0 ? initialSL : na,
comment_profit = 'TP Hit',
comment_loss = 'SL Hit')
if (shortCondition and strategy.opentrades == 0)
strategy.entry('Short', strategy.short)
shortEntryPrice := close
// Set initial exit orders
if fixedTp > 0 or initialSL > 0
strategy.exit('Short Exit', 'Short',
profit = fixedTp > 0 ? fixedTp : na,
loss = initialSL > 0 ? initialSL : na,
comment_profit = 'TP Hit',
comment_loss = 'SL Hit')
// Custom exit signal logic
if (activateLongExit and detectLongExit() and strategy.position_size > 0)
strategy.close('Long', 'Custom Long Exit')
if (activateShortExit and detectShortExit() and strategy.position_size < 0)
strategy.close('Short', 'Custom Short Exit')
// Break-even logic
if (breakEvenTrigger > 0)
// Long position break-even
if (strategy.position_size > 0 and not na(longEntryPrice))
ticksProfit = math.round((high - longEntryPrice) / syminfo.mintick)
if (ticksProfit >= breakEvenTrigger)
strategy.exit('Long Exit', 'Long', stop = longEntryPrice, comment_loss = 'Break Even')
// Short position break-even
if (strategy.position_size < 0 and not na(shortEntryPrice))
ticksProfit = math.round((shortEntryPrice - low) / syminfo.mintick)
if (ticksProfit >= breakEvenTrigger)
strategy.exit('Short Exit', 'Short', stop = shortEntryPrice, comment_loss = 'Break Even')
// Reset entry prices when no position
if (strategy.position_size == 0)
longEntryPrice := na
shortEntryPrice := na
// Plot signals for debugging
plotshape(longCondition, title='Long Signal', location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(shortCondition, title='Short Signal', location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plotshape(activateLongExit and detectLongExit() and strategy.position_size > 0, title='Long Exit', location=location.abovebar, color=color.orange, style=shape.xcross, size=size.small)
plotshape(activateShortExit and detectShortExit() and strategy.position_size < 0, title='Short Exit', location=location.belowbar, color=color.orange, style=shape.xcross, size=size.small)
// Display current settings in a table for easy reference
if barstate.islast
var table infoTable = table.new(position.top_right, 2, 8, bgcolor=color.white, border_width=1)
table.cell(infoTable, 0, 0, "Signal Method:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 0, signalMethod, text_color=color.black)
table.cell(infoTable, 0, 1, "Threshold:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 1, str.tostring(signalThreshold), text_color=color.black)
table.cell(infoTable, 0, 2, "TP (ticks):", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 2, str.tostring(fixedTp), text_color=color.black)
table.cell(infoTable, 0, 3, "SL (ticks):", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 3, str.tostring(initialSL), text_color=color.black)
table.cell(infoTable, 0, 4, "Break Even:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 4, str.tostring(breakEvenTrigger), text_color=color.black)
table.cell(infoTable, 0, 5, "Confluence:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 5, useConfluence ? "ON" : "OFF", text_color=color.black)
table.cell(infoTable, 0, 6, "Position:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 6, strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "FLAT", text_color=color.black)
table.cell(infoTable, 0, 7, "Status:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 7, "FULLY FUNCTIONAL", text_color=color.green)