
बहु-सूचक पुष्टिकरण सम-रेखा तोड़ना डीसीए गतिशील स्टॉप रणनीति एक उन्नत शॉर्ट-लाइन ट्रेडिंग प्रणाली है जो तकनीकी विश्लेषण और डॉलर लागत औसत ((डीसीए) को जोड़ती है। यह रणनीति ईएमए 48, आरएसआई 14, एमएसीडी और ब्रीनिंग बैंड जैसे कई तकनीकी संकेतकों का उपयोग करके संभावित प्रवेश बिंदुओं की पुष्टि करती है, जबकि एक संरचित स्थिति प्रबंधन विधि और पूर्व-निर्मित जोखिम नियंत्रण तंत्र को लागू करती है। रणनीति का मूल मूल्य को ईएमए के साथ चौराहे की पहचान करना है, और आरएसआई, एमएसीडी और ब्रीनिंग बैंड का उपयोग करके पुष्टि करना है, उच्च समय-सीमा विश्लेषण के साथ संयोजन में झूठे संकेतों से बचें, थ्री-लेयर डीसीए रणनीति का उपयोग करें और लाभ को कई स्तरों के स्टॉप और गतिशील स्टॉप-लॉस के माध्यम से सुरक्षित रखें।
इस रणनीति का सिद्धांत कई तकनीकी संकेतकों के संयोजन पर आधारित है, जिसमें मुख्य रूप से निम्नलिखित प्रमुख घटक शामिल हैंः
प्रवेश शर्त प्रणाली:
गतिशील स्थिति प्रबंधन:
स्मार्ट मुनाफा:
कोड में गहराई से विश्लेषण से पता चलता है कि रणनीति में एक स्मार्ट पीक वैली पहचान प्रणाली भी शामिल है, जो मूल्य और आरएसआई के हालिया 5 उतार-चढ़ाव बिंदुओं को ट्रैक करके पैटर्न से विचलन का पता लगाने के लिए है। उच्च समय सीमा की पुष्टि प्रणाली दिन की रेखा के चार्ट पर समर्थन और प्रतिरोध बिंदुओं का विश्लेषण करके कम समय सीमा पर झूठे संकेतों से बचती है।
इस रणनीति के कोड को गहराई से विश्लेषण करते हुए, हम निम्नलिखित प्रमुख लाभों को संक्षेप में बता सकते हैंः
बहुस्तरीय सत्यापन प्रणाली: कई तकनीकी संकेतकों के समन्वय के माध्यम से, झूठे संकेतों की संभावना को काफी कम कर दिया गया है, व्यापार जीत की दर में वृद्धि हुई है। ईएमए, आरएसआई, एमएसीडी और ब्रिन बैंड के संयोजन का उपयोग प्रवेश बिंदु की उच्च गुणवत्ता सुनिश्चित करता है।
स्मार्ट धन प्रबंधन1-2-6 डीसीए अनुपात का उपयोग करने से बाजार की अस्थिर औसत लागत का लाभ उठाया जा सकता है और समग्र जोखिम को सीमित किया जा सकता है। प्रारंभिक जोखिम केवल 1-3% खाते तक सीमित है, जिससे यह सुनिश्चित किया जा सकता है कि सबसे खराब स्थिति में भी कोई विनाशकारी नुकसान नहीं होगा।
गतिशील क्षति रोकथाम: ट्रेडों के विकास के साथ स्टॉप लॉस को समायोजित करने के लिए, विशेष रूप से स्टॉप लॉस को कैपिटल पोजीशन में स्थानांतरित करने के लिए, जो लाभ की सुरक्षा और ट्रेडों को सांस लेने की अनुमति देने की आवश्यकता को प्रभावी रूप से संतुलित करता है।
चरणबद्ध मुनाफा कमाने की रणनीति0.5% और 1% के लाभ बिंदु पर क्रमशः 25% और 50% की स्थिति को बंद करके, रणनीति कुछ मुनाफे को लॉक करने में सक्षम है, जबकि बड़े बाजार आंदोलनों को पकड़ने के लिए स्थिति को बनाए रखना, जोखिम और रिटर्न का संतुलन प्राप्त करना।
उच्च समय सीमा की पुष्टिउच्च समय सीमा पर समर्थन और प्रतिरोध बिंदुओं का उपयोग करके ट्रेडिंग संकेतों को फ़िल्टर करें, जिससे कम समय सीमा पर सामान्य शोर और झूठी दरारों का प्रभाव कम हो जाए।
हालांकि इस रणनीति को अच्छी तरह से डिजाइन किया गया है, लेकिन कुछ जोखिम कारक हैं जिन पर ध्यान देना चाहिएः
पैरामीटर संवेदनशीलता: रणनीति का प्रदर्शन कई पैरामीटर सेटिंग्स पर अत्यधिक निर्भर करता है, जिसमें ईएमए चक्र, आरएसआई थ्रेशोल्ड और डीसीए स्तर शामिल हैं। इन पैरामीटरों में मामूली परिवर्तन से व्यापार के परिणामों में महत्वपूर्ण अंतर हो सकता है, जिसे सावधानीपूर्वक अनुकूलित और मापा जाना चाहिए।
भारी उतार-चढ़ाव का खतरा: डीसीए तंत्र के बावजूद, जब बाजार में भारी उतार-चढ़ाव होता है, तो कीमतें तेजी से सभी निर्धारित स्टॉपलॉस को पार कर सकती हैं, जिससे वास्तविक नुकसान उम्मीद से अधिक हो जाता है। इस जोखिम के लिए, अधिक सख्त प्रारंभिक स्थिति आकार का उपयोग करने या उच्च उतार-चढ़ाव के दौरान व्यापार को निलंबित करने पर विचार किया जा सकता है।
लगातार घाटे का ओवरलैप प्रभाव: यहां तक कि एक एकल व्यापार के लिए सीमित जोखिम के बावजूद, लगातार नुकसान के कारण पूंजी वक्र में एक महत्वपूर्ण गिरावट आ सकती है। अतिरिक्त समग्र जोखिम नियंत्रण लागू करने की सिफारिश की जाती है, जैसे कि दैनिक या साप्ताहिक अधिकतम हानि सीमा।
RSI की पहचान की जटिलता: कोड में आरएसआई विचलन का पता लगाने के लिए ऐतिहासिक डेटा की सटीकता पर निर्भर करता है, जो कुछ बाजार स्थितियों में पर्याप्त विश्वसनीय नहीं हो सकता है। विचलन संकेतों की पुष्टि करने के लिए अधिक उन्नत सांख्यिकीय तरीकों का उपयोग करने पर विचार किया जा सकता है।
बाजार की तरलता पर निर्भर: कम तरलता वाले बाजारों में, बड़ी संख्या में डीसीए ऑर्डर स्लाइडपॉइंट समस्या का सामना कर सकते हैं, जो रणनीति की समग्र दक्षता को प्रभावित करते हैं। इस रणनीति का उपयोग उच्च तरलता वाले बाजारों में सीमित किया जाना चाहिए।
कोड के गहन विश्लेषण के आधार पर, इस रणनीति को अनुकूलित करने के लिए निम्नलिखित दिशाएं हैंः
गतिशील पैरामीटर समायोजन: बाजार की अस्थिरता के आधार पर गतिशील पैरामीटर समायोजन तंत्र को पेश किया जा सकता है। उदाहरण के लिए, उच्च अस्थिरता के दौरान आरएसआई के लिए एक स्वतः वृद्धि की आवश्यकता, या विभिन्न बाजार चक्रों के लिए ईएमए की लंबाई को समायोजित करना। इस तरह के आत्म-अनुकूलन तंत्र विभिन्न बाजार स्थितियों में रणनीति की स्थिरता को बढ़ा सकते हैं।
प्रबलित विक्षेपण: वर्तमान आरएसआई का पता लगाना अपेक्षाकृत सरल है, और अधिक जटिल एल्गोरिदम को पेश करके सटीकता में सुधार किया जा सकता है, जैसे कि फिशर रूपांतरण आरएसआई का उपयोग करना या मात्रा की पुष्टि करना। यह गलत संकेतों को कम करेगा और रणनीति की सटीकता में सुधार करेगा।
स्मार्ट लाभप्रदतावर्तमान निश्चित लाभ को बाजार की अस्थिरता पर आधारित गतिशील लाभ में सुधार किया जा सकता है। उदाहरण के लिए, उच्च अस्थिरता के दौरान उच्च लाभ लक्ष्य निर्धारित करें और बाजार की परिस्थितियों में बदलाव के लिए कम अस्थिरता के दौरान लक्ष्य को कम करें।
धन प्रबंधन में सुधार: डीसीए के अनुपात और ट्रिगर को अनुकूलित किया जा सकता है, जो बाजार संरचना और वर्तमान प्रवृत्ति की ताकत के अनुसार गतिशील रूप से समायोजित होता है। उदाहरण के लिए, मजबूत प्रवृत्ति के दौरान अधिक आक्रामक डीसीए अनुपात का उपयोग किया जाता है, जबकि कमजोर प्रवृत्ति के दौरान अधिक रूढ़िवादी।
व्यापार समय अनुकूलन: व्यापार की मात्रा और अस्थिरता के आधार पर समय फ़िल्टर को पेश करना, कम गतिविधि के समय के दौरान व्यापार करने से बचें। यह ऐतिहासिक डेटा का विश्लेषण करके सबसे अच्छा व्यापार समय विंडो निर्धारित करने के लिए किया जा सकता है।
बहु-सूचक पुष्टिकरण सम-रेखा तोड़ना डीसीए गतिशील स्टॉप रणनीति एक अच्छी तरह से डिज़ाइन की गई शॉर्ट-लाइन ट्रेडिंग प्रणाली है, जो चतुराई से कई तकनीकी विश्लेषणात्मक उपकरणों को उन्नत धन प्रबंधन तकनीकों के साथ जोड़ती है। ईएमए, आरएसआई, एमएसीडी और ब्रिनबैंड जैसे संकेतकों के साथ मिलकर काम करने के माध्यम से, रणनीति उच्च संभावना वाले प्रवेश बिंदुओं की पहचान करने में सक्षम है, जबकि एक संरचित डीसीए दृष्टिकोण और गतिशील स्टॉप-लॉस / स्टॉप तंत्र का उपयोग करके जोखिम को प्रबंधित करने और मुनाफे को लॉक करने के लिए।
हालांकि इस रणनीति के स्पष्ट फायदे हैं, जिसमें सख्त जोखिम नियंत्रण, बहु-स्तरीय पुष्टिकरण प्रणाली और बुद्धिमान मुनाफा तंत्र शामिल हैं, उपयोगकर्ताओं को अभी भी पैरामीटर संवेदनशीलता और बाजार में भारी उतार-चढ़ाव से उत्पन्न जोखिमों के लिए सतर्क रहना होगा। इस रणनीति की स्थिरता और लाभप्रदता को और बेहतर बनाने की उम्मीद है, जैसे कि गतिशील पैरामीटर समायोजन, बढ़ी हुई विचलन का पता लगाने और बुद्धिमान मुनाफा अनुकूलन जैसे अनुशंसित अनुकूलन उपायों को लागू करना।
व्यापारियों के लिए, यह रणनीति उन बाजारों के लिए सबसे उपयुक्त है जहां पर्याप्त तरलता है, और इसका उपयोग करने से पहले पर्याप्त ऐतिहासिक प्रतिक्रिया और पैरामीटर अनुकूलन किया जाना चाहिए। सावधानीपूर्वक कार्यान्वयन और निरंतर निगरानी समायोजन के साथ, यह बहुस्तरीय व्यापार प्रणाली शॉर्ट-लाइन व्यापारियों के टूलबॉक्स में एक शक्तिशाली हथियार बन सकती है।
/*backtest
start: 2024-04-11 00:00:00
end: 2025-04-10 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Scalping Strategy with DCA - V2", overlay=true, margin_long=100, margin_short=100)
// Input parameters
emaLength = input.int(48, title="EMA Length", minval=1, group="Main Indicators")
rsiLength = input.int(14, title="RSI Length", minval=1, group="Main Indicators")
macdShortLength = input.int(12, title="MACD Short Length", minval=1, group="Main Indicators")
macdLongLength = input.int(30, title="MACD Long Length", minval=1, group="Main Indicators")
macdSignalLength = input.int(9, title="MACD Signal Length", minval=1, group="Main Indicators")
bbLength = input.int(20, title="Bollinger Bands Length", group="Main Indicators")
bbMult = input.float(2.0, title="Bollinger Bands Multiplier", group="Main Indicators")
// Risk management parameters
initialRiskPercent = input.float(1.0, title="Initial Risk % of Account", minval=0.1, maxval=3.0, step=0.1, group="Risk Management")
stopLossPercent = input.float(1.5, title="Stop Loss % (Unboosted)", minval=0.5, maxval=3.0, step=0.1, group="Risk Management")
fixedSLPercent = input.float(1.3, title="Fixed SL % after full DCA", minval=0.1, maxval=5.0, step=0.1, group="Risk Management")
takeProfitPercent1 = input.float(0.5, title="First Take Profit % (25% Volume)", minval=0.1, group="Risk Management")
takeProfitPercent2 = input.float(1.0, title="Second Take Profit % (50% Volume)", minval=0.1, group="Risk Management")
// DCA parameters
enableDCA = input.bool(true, title="Enable DCA", group="DCA Settings")
dcaLevel1 = input.float(1.0, title="DCA Level 1 % Drop", minval=0.1, group="DCA Settings")
dcaLevel2 = input.float(2.0, title="DCA Level 2 % Drop", minval=0.1, group="DCA Settings")
// Higher Timeframe parameters
higherTF = input.timeframe("D", title="Higher Timeframe for Confirmation", group="Advanced Settings")
useHTFConfirmation = input.bool(true, title="Use Higher Timeframe Confirmation", group="Advanced Settings")
// Debug parameters
showLabels = input.bool(true, title="Show Entry/Exit Labels", group="Visual")
showSL = input.bool(true, title="Show Stop Loss Lines", group="Visual")
showTP = input.bool(true, title="Show Take Profit Lines", group="Visual")
// Calculate indicators
ema = ta.ema(close, emaLength)
rsi = ta.rsi(close, rsiLength)
[macdLine, signalLine, _] = ta.macd(close, macdShortLength, macdLongLength, macdSignalLength)
[middle, upper, lower] = ta.bb(close, bbLength, bbMult)
// Variables for tracking peaks and troughs
var priceHighs = array.new_float(0)
var priceLows = array.new_float(0)
var rsiHighs = array.new_float(0)
var rsiLows = array.new_float(0)
// Track last 5 peaks and troughs for both price and RSI
pivot_high = ta.pivothigh(high, 2, 2)
if not na(pivot_high)
array.push(priceHighs, pivot_high)
if array.size(priceHighs) > 5
array.shift(priceHighs)
pivot_low = ta.pivotlow(low, 2, 2)
if not na(pivot_low)
array.push(priceLows, pivot_low)
if array.size(priceLows) > 5
array.shift(priceLows)
rsi_pivot_high = ta.pivothigh(rsi, 2, 2)
if not na(rsi_pivot_high)
array.push(rsiHighs, rsi_pivot_high)
if array.size(rsiHighs) > 5
array.shift(rsiHighs)
rsi_pivot_low = ta.pivotlow(rsi, 2, 2)
if not na(rsi_pivot_low)
array.push(rsiLows, rsi_pivot_low)
if array.size(rsiLows) > 5
array.shift(rsiLows)
// Check for RSI divergence
rsiDivergenceBullish = array.size(priceLows) >= 5 and array.size(rsiLows) >= 5 and array.get(priceLows, array.size(priceLows) - 1) < array.get(priceLows, array.size(priceLows) - 5) and array.get(rsiLows, array.size(rsiLows) - 1) > array.get(rsiLows, array.size(rsiLows) - 5)
rsiDivergenceBearish = array.size(priceHighs) >= 5 and array.size(rsiHighs) >= 5 and array.get(priceHighs, array.size(priceHighs) - 1) > array.get(priceHighs, array.size(priceHighs) - 5) and array.get(rsiHighs, array.size(rsiHighs) - 1) < array.get(rsiHighs, array.size(rsiHighs) - 5)
// Check if price is near previous high/low (Rule #4)
isNearPrevHigh = array.size(priceHighs) >= 2 and math.abs(high - array.get(priceHighs, array.size(priceHighs) - 2)) / array.get(priceHighs, array.size(priceHighs) - 2) < 0.01
isNearPrevLow = array.size(priceLows) >= 2 and math.abs(low - array.get(priceLows, array.size(priceLows) - 2)) / array.get(priceLows, array.size(priceLows) - 2) < 0.01
// Higher timeframe confirmation (Rule #10)
// Get pivot points from higher timeframe
htf_is_pivot_low = request.security(syminfo.tickerid, higherTF, not na(ta.pivotlow(low, 2, 2)), barmerge.gaps_off, barmerge.lookahead_off)
htf_is_pivot_high = request.security(syminfo.tickerid, higherTF, not na(ta.pivothigh(high, 2, 2)), barmerge.gaps_off, barmerge.lookahead_off)
// Count pivots in higher timeframe to check if this is the 2nd pivot
var htf_pivot_low_count = 0
var htf_pivot_high_count = 0
if htf_is_pivot_low
htf_pivot_low_count := htf_pivot_low_count + 1
htf_pivot_low_count := math.min(htf_pivot_low_count, 10) // Prevent unlimited counting
if htf_is_pivot_high
htf_pivot_high_count := htf_pivot_high_count + 1
htf_pivot_high_count := math.min(htf_pivot_high_count, 10) // Prevent unlimited counting
// Reset counts after a while to maintain relevance
if not htf_is_pivot_low and not htf_is_pivot_high and bar_index % 100 == 0
htf_pivot_low_count := 0
htf_pivot_high_count := 0
// Check if this is the 2nd pivot in higher timeframe
isHTFSecondPivotLow = htf_is_pivot_low and htf_pivot_low_count == 2
isHTFSecondPivotHigh = htf_is_pivot_high and htf_pivot_high_count == 2
// Check crossing of Bollinger Bands
crossUpperBand = ta.crossover(close, upper)
crossLowerBand = ta.crossunder(close, lower)
// Entry conditions refined with higher timeframe confirmation
longCondition = close > ema and close[1] <= ema[1] and rsi > 60 and macdLine > signalLine and isNearPrevLow and rsiDivergenceBullish and (not useHTFConfirmation or isHTFSecondPivotLow)
shortCondition = close < ema and close[1] >= ema[1] and rsi < 40 and macdLine < signalLine and isNearPrevHigh and rsiDivergenceBearish and (not useHTFConfirmation or isHTFSecondPivotHigh)
// Additional entry conditions when price crosses Bollinger Bands (Rule #11)
longBBCondition = crossLowerBand and rsi < 30
shortBBCondition = crossUpperBand and rsi > 70
// Calculate position sizes for DCA
initialSize = strategy.equity * initialRiskPercent / 100 / 9 // Initial sizing according to the 1-2-6 rule
dca1Size = initialSize * 2
dca2Size = initialSize * 6
// Calculate SL in money terms (Rule #3)
slMoneyAmount = strategy.equity * initialRiskPercent / 100 * stopLossPercent / 100
// Variables to track DCA levels
var float longEntryPrice = 0.0
var float shortEntryPrice = 0.0
var int longDCACount = 0
var int shortDCACount = 0
var float stopLossLevel = 0.0
var float takeProfit1Level = 0.0
var float takeProfit2Level = 0.0
var float slMoneyValue = 0.0
// Close partial positions at take profit levels
if strategy.position_size > 0
if close >= takeProfit1Level and takeProfit1Level > 0 and strategy.position_size == initialSize + (longDCACount > 0 ? dca1Size : 0) + (longDCACount > 1 ? dca2Size : 0)
strategy.order("Long TP1", strategy.short, qty=strategy.position_size * 0.25)
if showLabels
label.new(bar_index, high, "TP1 (25%)", color=color.green, textcolor=color.white, style=label.style_label_down)
if close >= takeProfit2Level and takeProfit2Level > 0 and strategy.position_size > initialSize * 0.25
strategy.order("Long TP2", strategy.short, qty=strategy.position_size * 0.5)
stopLossLevel := longEntryPrice // Move SL to breakeven after TP2
if showLabels
label.new(bar_index, high, "TP2 (50%) & SL→BE", color=color.green, textcolor=color.white, style=label.style_label_down)
if strategy.position_size < 0
if close <= takeProfit1Level and takeProfit1Level > 0 and math.abs(strategy.position_size) == initialSize + (shortDCACount > 0 ? dca1Size : 0) + (shortDCACount > 1 ? dca2Size : 0)
strategy.order("Short TP1", strategy.long, qty=math.abs(strategy.position_size) * 0.25)
if showLabels
label.new(bar_index, low, "TP1 (25%)", color=color.red, textcolor=color.white, style=label.style_label_up)
if close <= takeProfit2Level and takeProfit2Level > 0 and math.abs(strategy.position_size) > initialSize * 0.25
strategy.order("Short TP2", strategy.long, qty=math.abs(strategy.position_size) * 0.5)
stopLossLevel := shortEntryPrice // Move SL to breakeven after TP2
if showLabels
label.new(bar_index, low, "TP2 (50%) & SL→BE", color=color.red, textcolor=color.white, style=label.style_label_up)
// DCA Logic
if enableDCA and strategy.position_size > 0 and longDCACount < 2
if close < longEntryPrice * (1 - dcaLevel1/100) and longDCACount == 0
strategy.entry("Long DCA1", strategy.long, qty=dca1Size)
longDCACount := 1
if showLabels
label.new(bar_index, low, "DCA1", color=color.blue, textcolor=color.white, style=label.style_label_up)
if close < longEntryPrice * (1 - dcaLevel2/100) and longDCACount == 1
strategy.entry("Long DCA2", strategy.long, qty=dca2Size)
longDCACount := 2
// Update SL to fixed percentage after full DCA (Rule #6)
stopLossLevel := longEntryPrice * (1 - fixedSLPercent/100)
if showLabels
label.new(bar_index, low, "DCA2 & SL Update", color=color.blue, textcolor=color.white, style=label.style_label_up)
if enableDCA and strategy.position_size < 0 and shortDCACount < 2
if close > shortEntryPrice * (1 + dcaLevel1/100) and shortDCACount == 0
strategy.entry("Short DCA1", strategy.short, qty=dca1Size)
shortDCACount := 1
if showLabels
label.new(bar_index, high, "DCA1", color=color.purple, textcolor=color.white, style=label.style_label_down)
if close > shortEntryPrice * (1 + dcaLevel2/100) and shortDCACount == 1
strategy.entry("Short DCA2", strategy.short, qty=dca2Size)
shortDCACount := 2
// Update SL to fixed percentage after full DCA (Rule #6)
stopLossLevel := shortEntryPrice * (1 + fixedSLPercent/100)
if showLabels
label.new(bar_index, high, "DCA2 & SL Update", color=color.purple, textcolor=color.white, style=label.style_label_down)
// Entry with initial position
if longCondition or longBBCondition
strategy.close("Short")
strategy.entry("Long", strategy.long, qty=initialSize)
longEntryPrice := close
longDCACount := 0
shortDCACount := 0
// Set SL based on money value (not percentage)
slMoneyValue := slMoneyAmount
// Convert to price level - simplified version
stopLossLevel := close * (1 - stopLossPercent/100)
takeProfit1Level := close * (1 + takeProfitPercent1/100)
takeProfit2Level := close * (1 + takeProfitPercent2/100)
if showLabels
label.new(bar_index, low, "LONG", color=color.green, textcolor=color.white, style=label.style_label_up)
if shortCondition or shortBBCondition
strategy.close("Long")
strategy.entry("Short", strategy.short, qty=initialSize)
shortEntryPrice := close
longDCACount := 0
shortDCACount := 0
// Set SL based on money value (not percentage)
slMoneyValue := slMoneyAmount
// Convert to price level - simplified version
stopLossLevel := close * (1 + stopLossPercent/100)
takeProfit1Level := close * (1 - takeProfitPercent1/100)
takeProfit2Level := close * (1 - takeProfitPercent2/100)
if showLabels
label.new(bar_index, high, "SHORT", color=color.red, textcolor=color.white, style=label.style_label_down)
// Stop Loss
if strategy.position_size > 0 and low <= stopLossLevel
strategy.close("Long")
if showLabels
label.new(bar_index, low, "SL", color=color.red, textcolor=color.white, style=label.style_label_up)
if strategy.position_size < 0 and high >= stopLossLevel
strategy.close("Short")
if showLabels
label.new(bar_index, high, "SL", color=color.red, textcolor=color.white, style=label.style_label_down)
// Market cap and holder % check can't be done directly in TradingView, but we display a reminder
if strategy.position_size != 0 and bar_index % 100 == 0
label.new(bar_index, close, "Remember: Only trade coins with large market cap and >7% holder ratio",
color=color.yellow, textcolor=color.black, style=label.style_label_left)
// Plot indicators - these must be at the global scope in Pine Script v6
plot(ema, color=color.blue, title="48 EMA")
plot(upper, color=color.red, title="Upper BB")
plot(lower, color=color.green, title="Lower BB")
plot(middle, color=color.yellow, title="Middle BB")
// Plot stop loss and take profit levels - conditions need to be part of the plot function in v6
plotSL = showSL and stopLossLevel > 0 ? stopLossLevel : na
plot(plotSL, color=color.red, style=plot.style_circles, linewidth=2, title="Stop Loss")
// TP for long positions
plotTP1Long = showTP and strategy.position_size > 0 and takeProfit1Level > 0 ? takeProfit1Level : na
plot(plotTP1Long, color=color.green, style=plot.style_circles, linewidth=1, title="TP1 Long")
plotTP2Long = showTP and strategy.position_size > 0 and takeProfit2Level > 0 ? takeProfit2Level : na
plot(plotTP2Long, color=color.green, style=plot.style_circles, linewidth=2, title="TP2 Long")
// TP for short positions
plotTP1Short = showTP and strategy.position_size < 0 and takeProfit1Level > 0 ? takeProfit1Level : na
plot(plotTP1Short, color=color.green, style=plot.style_circles, linewidth=1, title="TP1 Short")
plotTP2Short = showTP and strategy.position_size < 0 and takeProfit2Level > 0 ? takeProfit2Level : na
plot(plotTP2Short, color=color.green, style=plot.style_circles, linewidth=2, title="TP2 Short")
// Additional table with strategy information
if barstate.islastconfirmedhistory
var table infoTable = table.new(position=position.top_right, columns=2, rows=5, bgcolor=color.new(color.black, 70), frame_width=1)
table.cell(infoTable, 0, 0, "Strategy:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 0, "Scalping with DCA", text_color=color.white)
table.cell(infoTable, 0, 1, "Initial Risk:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 1, str.tostring(initialRiskPercent, "#.##") + "% of account", text_color=color.white)
table.cell(infoTable, 0, 2, "DCA Ratio:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 2, "1-2-6", text_color=color.white)
table.cell(infoTable, 0, 3, "SL After DCA:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 3, str.tostring(fixedSLPercent, "#.##") + "%", text_color=color.white)
table.cell(infoTable, 0, 4, "REMINDERS:", bgcolor=color.new(color.red, 90), text_color=color.white)
table.cell(infoTable, 1, 4, "Only trade coins with market cap and >7% holder ratio", text_color=color.white)