
यह एक प्रवृत्ति-अनुसरण-आधारित ब्रेकआउट रणनीति है। यह प्रवृत्ति-अनुसरण को प्राप्त करने के लिए एक ब्रेकआउट होने पर मजबूत इनपुट वाले शेयरों को खरीदता है और एक ब्रेकआउट होने पर कमजोर इनपुट वाले शेयरों को बेचता है।
यह रणनीति मुख्य रूप से दो संकेतकों पर आधारित है जो प्रवेश और निकास संकेतों को निर्धारित करते हैं, एक उच्चतम () फ़ंक्शन द्वारा निर्धारित एक निश्चित अवधि में उच्चतम मूल्य है, और एक निम्नतम () फ़ंक्शन द्वारा निर्धारित एक निश्चित अवधि में निम्नतम मूल्य है।
जब समापन मूल्य पिछले निश्चित अवधि के उच्चतम मूल्य से अधिक होता है, तो यह माना जाता है कि यह उछाल की प्रवृत्ति का एक ब्रेक है, इसलिए एक अधिक संकेत दिया जाता है। जब समापन मूल्य पिछले निश्चित अवधि के निचले मूल्य से कम होता है, तो यह माना जाता है कि यह गिरावट की प्रवृत्ति का एक ब्रेक है, इसलिए एक शून्य संकेत दिया जाता है।
इस रणनीति में एक ही समय में एक चलती रोक और एक निश्चित रोक की स्थापना की गई है। चलती रोक एटीआर पर आधारित है, जो एक निश्चित अवधि में एटीआर मानों की गणना करके और एक गुणांक (पैरामीटर trailingAtrMultiplier) को एक चलती रोक के रूप में गुणा करके प्राप्त की जाती है। फिक्स्ड रोक भी इसी तरह एटीआर पर आधारित है।
पहले रूट के लाइन पर एक निश्चित स्टॉप लागू होता है, जो अतिरिक्त स्टॉप के बाद किया जाता है; इसके बाद इसे मुख्य रूप से एक चलती स्टॉप के रूप में बदल दिया जाता है। इस संयोजन से ट्रेंड को ट्रैक करने के साथ-साथ कुछ मुनाफे को लॉक किया जा सकता है।
इस रणनीति में स्थिति की गणना के लिए नियम भी निर्धारित किए गए हैं। स्थिति की गणना अधिकतम नुकसान के प्रतिशत के आधार पर की जाती है, खाता अधिकारों और हितों के आधार पर। और व्यापार की किस्मों की संख्या को ध्यान में रखते हुए, एकल किस्मों की स्थिति को कम करना उचित है।
कुल मिलाकर, यह एक विशिष्ट प्रवृत्ति-अनुवर्ती रणनीति है, जो एक ब्रेकडाउन होने पर प्रवेश करती है, स्टॉप-लॉक के माध्यम से लाभ को लॉक करती है और प्रवृत्ति को ट्रैक करती है, और जब प्रवृत्ति उलट जाती है तो बाहर निकलती है।
यह एक सफलता की रणनीति है, और इसके मुख्य फायदे हैंः
प्रवृत्ति का आकलन करना सटीक है। उच्चतम और निम्नतम कीमतों का उपयोग करके प्रवृत्ति के उलट होने का आकलन करें, सटीकता बहुत अधिक है, गलत संकेत नहीं देना आसान है।
पोजीशन और स्टॉप साइंस को उचित बनाना। अधिकतम हानि अनुपात सेट करना, खाता अधिकार हित संबंध आदि पोजीशन को उचित बनाते हैं, ओवरवॉल्ट या अमान्य व्यापार से बचते हैं। पोर्टफोलियो स्टॉप विधि मुनाफे को लॉक करती है और ट्रेंड को ट्रैक करती है।
सरल, व्यावहारिक और समझने में आसान। केवल सबसे बुनियादी संकेतकों की आवश्यकता है, रणनीति तर्क सरल और स्पष्ट है, और इसे आसानी से समझना आसान है।
स्केलेबिलिटी अच्छी है. सूचक पैरामीटर, स्थिति नियम आदि इनपुट बॉक्स प्रदान करते हैं, जिन्हें उपयोगकर्ता आवश्यकता के अनुसार समायोजित कर सकते हैं.
कुल मिलाकर, यह एक बहुत ही व्यावहारिक और मजबूत रणनीति है। निर्णय के लिए सुरक्षित और विश्वसनीय है, जबकि रणनीति के डिजाइन में जोखिम नियंत्रण और ट्रैकिंग को ध्यान में रखा गया है। मध्यम और लंबी लाइन के लिए बहुत उपयुक्त है।
इस रणनीति के मुख्य जोखिम हैंः
रुझान में बदलाव का जोखिम। ब्रेकआउट रणनीति रुझान निर्णय पर बहुत निर्भर करती है, और एक गलत निर्णय से भारी नुकसान हो सकता है।
गलत पैरामीटर जोखिम. उच्चतम मूल्य कम से कम मूल्य चक्र पैरामीटर का गलत चयन प्रवृत्ति को याद कर सकता है, गलत स्थिति पैरामीटर सेट करना बहुत अधिक नुकसान हो सकता है।
स्टॉप लॉस को बहुत अधिक जोखिम भरा माना जाता है। यदि स्टॉप लॉस की दूरी बहुत छोटी है, तो बाजार के शोर से बाहर रखा जा सकता है।
मुख्य समाधान हैंः
प्रवृत्ति फ़िल्टर जोड़ें. उदाहरण के लिए, अन्य सूचकांकों को शामिल करने के लिए, गलत ब्रेकडाउन से बचें.
पैरामीटर का चयन अनुकूलित करें। पैरामीटर का परीक्षण करें और स्थिरता सुनिश्चित करने के लिए इसे अनुकूलित करें।
स्टैम दूरी को उचित रूप से छूट दी जा सकती है।
इस रणनीति को मुख्य रूप से निम्नलिखित दिशाओं में अनुकूलित किया जा सकता हैः
अधिक सूचक प्रवृत्ति निर्णय जोड़ें. उच्चतम न्यूनतम मूल्य के अलावा, चलती औसत जैसे निर्णय जोड़े जा सकते हैं, जिससे प्रवृत्ति निर्णय अधिक सटीक हो सके।
ऑप्टिमाइज़ेशन पैरामीटर सेटिंग्स। उच्चतम न्यूनतम मूल्य चक्र पैरामीटर, स्टॉप लॉस गुणांक पैरामीटर आदि का परीक्षण करें, सबसे अच्छा पैरामीटर संयोजन चुनें।
बाजार समायोजन के अनुसार स्थिति एल्गोरिथ्म. स्थिति को बाजार की अस्थिरता से जोड़ा जा सकता है, जैसे कि VIX के बढ़ने पर स्थिति को कम करना.
बढ़ी हुई क्षमता के संकेत फ़िल्टर. केवल वृद्धि हुई क्षमता के साथ प्रवेश करें, झूठी सफलताओं से बचें।
बेसिक मार्जिन और प्रासंगिकता को ध्यान में रखते हुए पसंदीदा ट्रेडिंग किस्मों को चुनें। बेसिक मार्जिन में कम उतार-चढ़ाव वाले, कम प्रासंगिकता वाले किस्मों के संयोजन का चयन करने से संयोजन जोखिम कम हो सकता है।
रोकथाम तंत्र को अनुकूलित और समायोजित करें। गतिशील रोकथाम और स्थिर रोकथाम के अनुपात संयोजन का परीक्षण करने के लिए, रोकथाम के अति-कठोर होने के जोखिम को कम करें।
यह रणनीति एक प्रवृत्ति-अनुसरण प्रकार के रूप में एक ब्रेकआउट रणनीति के रूप में अच्छी तरह से प्रदर्शन करती है क्योंकि यह निर्णय सटीकता, स्थिति और जोखिम नियंत्रण, और संचालन की सरलता के लिए अच्छी तरह से काम करती है। यह प्रवृत्ति के शुरुआती चरणों को पकड़ती है, लाभ को लॉक करने और प्रवृत्ति-अनुसरण को संतुलित करने के लिए मोबाइल स्टॉप-लॉस का उपयोग करती है।
बेशक, एक ब्रेकआउट रणनीति के रूप में, यह प्रवृत्ति के फैसले पर बहुत अधिक निर्भरता है और शोर के लिए अतिसंवेदनशील है। इसके अलावा, गलत पैरामीटर सेटिंग भी रणनीति के प्रदर्शन को प्रभावित कर सकती है। इसे आगे के अनुकूलन के माध्यम से हल करने की आवश्यकता है।
कुल मिलाकर, यह एक बहुत ही व्यावहारिक रणनीति है, इसकी मूल संरचना में पहले से ही एक मात्रात्मक रणनीति के लिए आवश्यक सबसे महत्वपूर्ण तत्व शामिल हैं। यदि यह लगातार अनुकूलित और सुधार करने में सक्षम है, तो यह पूरी तरह से एक स्थिर लाभदायक प्रोग्रामेटिक रणनीति बन सकती है। यह सीखने और संदर्भ के लायक है।
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(shorttitle="Trend Surfers - Breakout", title="Trend Surfers - Premium Breakout",
overlay=true)
// Risk for position and pyramid
maxriskval = input(2, "Max % risk", type = input.float,
tooltip="Risk % over total equity / Position", group = "Risk Management")
pairnumber = input(title = "How many pairs",type = input.integer, defval= 1,
tooltip="How many pairs are you trading with the strategy?", group = "Risk Management")
// Emtry Exit
highPeriod = input(title="Highest High Period", type=input.integer, defval=168
, tooltip="Highest High of X bars - This will trigger a Long Entry when close is above. (Thin Green Line)"
, group = "Entry Condition")
lowPeriod = input(title="Lowest Low Period", type=input.integer, defval=168,
tooltip="Lowest low of X bars - This will trigger a Short Entry when close is under. (Thin Red Line)"
, group = "Entry Condition")
// Stoploss
trailingAtrPeriod = input(title="Trailing ATR Pediod", type=input.integer, defval=10,
tooltip="Average True Range for the Trailing Stop. (Thick Green Line) "
, group = "Exit Condition")
trailingAtrMultiplier = input(title="Trailing ATR Multiplier", type=input.float, defval=8
, group = "Exit Condition")
fixAtrPeriod = input(title="Fix ATR Pediod", type=input.integer, defval=10,
tooltip="Average True Range for the Fix Stoloss. (Thick Yellow Line)"
, group = "Exit Condition")
fixAtrMultiplier = input(title="Fix ATR Multiplier", type=input.float, defval=2
, group = "Exit Condition")
// Pair info
pair = syminfo.basecurrency + syminfo.currency
// High Low Variable
highestHigh = highest(high, highPeriod)[1]
lowestLow = lowest(low, lowPeriod)[1]
trailingAtr = atr(trailingAtrPeriod) * trailingAtrMultiplier
// Trade Condition
longCondition = crossover(close, highestHigh)
shortCondition = crossunder(close, lowestLow)
// Risk Variable
fixAtr = atr(fixAtrPeriod) * fixAtrMultiplier
stopvaluelong = close[1] - fixAtr[1]
stopvalueshort = close[1] + fixAtr[1]
// Position size Long
maxpossize = strategy.equity / close
positionsizelong = ( ( ( (maxriskval/100) * strategy.equity) / (close - stopvaluelong)))
stopperclong = ((close - stopvaluelong) / close) * 100
leveragelong = max(1, ceil(positionsizelong / maxpossize)) * 2
posperclong = (((positionsizelong * close) / strategy.equity) *100 / leveragelong) / pairnumber
realposlong = (((posperclong / 100) * strategy.equity) * leveragelong) / close
// Position size Short
positionsizeshort = ( ( ( (maxriskval/100) * strategy.equity) / (stopvalueshort - close)))
stoppercshort = ((close - stopvalueshort) / close) * 100
leverageshort = max(1, ceil(positionsizeshort / maxpossize)) * 2
pospercshort = (((positionsizeshort * close) / strategy.equity) *100 / leverageshort) / pairnumber
realposshort = (((pospercshort / 100) * strategy.equity) * leverageshort) / close
// Alert Message
entry_long_message = '\nGo Long for ' + pair + 'NOW!' +
'\nPosition Size % =' + tostring(posperclong) +
'\nLeverage' + tostring(leveragelong) +
'\nStoploss Price =' + tostring(stopvaluelong) +
'\nClose any Short position that are open for ' + pair + '!' +
'\n\nVisit TrendSurfersSignals.com' +
'\nFor automated premium signals (FREE)'
entry_short_message ='\nGo Short for ' + pair + 'NOW!' +
'\nPosition Size % =' + tostring(pospercshort) +
'\nLeverage' + tostring(leverageshort) +
'\nStoploss Price =' + tostring(stopvalueshort) +
'\nClose any Long position that are open for ' + pair + '!' +
'\n\nVisit TrendSurfersSignals.com' +
'\nFor automated premium signals (FREE)'
exit_short_message = '\nExit Short for ' + pair + 'NOW!' +
'\n\nVisit TrendSurfersSignals.com' +
'\nFor automated premium signals (FREE)'
exit_long_message = '\nExit Long for ' + pair + 'NOW!' +
'\n\nVisit TrendSurfersSignals.com' +
'\nFor automated premium signals (FREE)'
// Order
if longCondition
strategy.entry("Long", strategy.long, stop=highestHigh, comment="Long", qty=realposlong
, alert_message = entry_long_message)
if shortCondition
strategy.entry("Short", strategy.short, stop=lowestLow, comment="Short", qty=realposshort
, alert_message = entry_short_message)
// Stoploss Trailing
longTrailing = close - trailingAtr
shortTrailing = close + trailingAtr
var longTrailingStop = 0.0
var shortTrailingStop = 999999.9
trailingStopLine = 0.0
trailingStopLine := na
fixedStopLine = 0.0
fixedStopLine := na
var inTrade = 0
if longCondition or shortCondition
if 0 == inTrade
if longCondition
inTrade := 1
else
inTrade := -1
if 1 == inTrade and (shortCondition or low <= max(fixedStopLine[1], longTrailingStop))
inTrade := 0
if -1 == inTrade and (longCondition or high >= min(fixedStopLine[1], shortTrailingStop))
inTrade := 0
longTrailingStop := if (1 == inTrade)
stopValue = longTrailing
max(stopValue, longTrailingStop[1])
else
0
shortTrailingStop := if (-1 == inTrade)
stopValue = shortTrailing
min(stopValue, shortTrailingStop[1])
else
999999
// Fix Stoploss
firstPrice = 0.0
firstFixAtr = 0.0
firstPrice := na
firstFixAtr := na
if 0 != inTrade
firstPrice := valuewhen(inTrade != inTrade[1] and 0 != inTrade, close, 0)
firstFixAtr := valuewhen(inTrade != inTrade[1] and 0 != inTrade, fixAtr, 0)
if 1 == inTrade
fixedStopLine := firstPrice - firstFixAtr
trailingStopLine := longTrailingStop
else
fixedStopLine := firstPrice + firstFixAtr
trailingStopLine := shortTrailingStop
if (strategy.position_size > 0)
strategy.exit(id="L Stop", stop=max(fixedStopLine, longTrailingStop)
, alert_message = exit_long_message)
if (strategy.position_size < 0)
strategy.exit(id="S Stop", stop=min(fixedStopLine, shortTrailingStop)
, alert_message = exit_long_message)
// Plot
plot(highestHigh, color=color.green, linewidth=1, transp=0, title='Highest High')
plot(lowestLow, color=color.red, linewidth=1, transp=0, title='Lowest Low')
plot(trailingStopLine, color=color.lime, linewidth=2, transp=0, offset=1, title='Trailing Stop')
plot(fixedStopLine, color=color.orange, linewidth=2, transp=0, offset=1, title='Fixed Stop')