متعدد اشارے متحرک اوسط پیش رفت کی DCA متحرک منافع لینے کی حکمت عملی کی تصدیق کرتے ہیں۔

EMA RSI MACD BB DCA HTF
تخلیق کی تاریخ: 2025-04-11 11:09:00 آخر میں ترمیم کریں: 2025-04-11 11:09:00
کاپی: 1 کلکس کی تعداد: 341
2
پر توجہ دیں
319
پیروکار

متعدد اشارے متحرک اوسط پیش رفت کی DCA متحرک منافع لینے کی حکمت عملی کی تصدیق کرتے ہیں۔ متعدد اشارے متحرک اوسط پیش رفت کی DCA متحرک منافع لینے کی حکمت عملی کی تصدیق کرتے ہیں۔

جائزہ

ملٹی اشارے کی تصدیق یکساں طور پر توڑنے والی ڈی سی اے متحرک اسٹاپ حکمت عملی ایک اعلی درجے کی شارٹ لائن ٹریڈنگ سسٹم ہے جو تکنیکی تجزیہ اور ڈالر کی لاگت کی اوسط سے ملتی ہے۔ یہ حکمت عملی ممکنہ داخلی مقامات کی تصدیق کے لئے ای ایم اے 48 ، آر ایس آئی 14 ، ایم اے سی ڈی اور برلن بینڈ جیسے متعدد تکنیکی اشارے کا استعمال کرتی ہے ، جبکہ ساختہ پوزیشن مینجمنٹ طریقہ کار اور پیش وضاحتی رسک کنٹرول میکانزم کو نافذ کیا جاتا ہے۔ حکمت عملی کا مرکز قیمتوں کی شناخت اور ای ایم اے کے ساتھ کراس پوائنٹس کی نشاندہی کرنا ہے ، اور اس کی تصدیق کے لئے آر ایس آئی ، ایم اے سی ڈی اور برلن بینڈ کا استعمال کیا جاتا ہے ، جو غلط سگنل سے بچنے کے لئے اعلی ٹائم فریم تجزیہ کے ساتھ مل کر ہے ، جس میں تین درجے کی ڈی سی اے حکمت عملی کا استعمال کیا جاتا ہے ، اور منافع کو روکنے اور متحرک اسٹاپ نقصان سے بچانے کے لئے متعدد سطحوں کے ساتھ۔

حکمت عملی کا اصول

اس حکمت عملی کا اصول متعدد تکنیکی اشارے کے مجموعے پر مبنی ہے ، جس میں بنیادی طور پر درج ذیل کلیدی اجزاء شامل ہیں:

  1. داخلے کی شرائط نظام

    • قیمت کو 48 سائیکل ای ایم اے سے گزرنا ہوگا ، جب وہ اوپر کی طرف بڑھتی ہے تو ، اور نیچے کی طرف جاتی ہے جب وہ خالی ہوتی ہے۔
    • RSI کو سمت کی طاقت کی تصدیق کرنی ہوگی ((کثیر سر> 60 ، خالی سر < 40)
    • MACD لائن کو سگنل لائن سے گزرنا چاہئے تاکہ اس بات کی تصدیق کی جاسکے کہ اس کی رفتار کہاں ہے۔
    • قیمتوں کو پہلے کی حمایت / مزاحمت کے علاقے کے قریب ہونا ضروری ہے
    • RSI 5 ویں چوٹی / وادی میں سگنل سے دور دکھاتا ہے
    • ہائی ٹائم فریم اس بات کی تصدیق ہے کہ یہ دوسری بیس پوائنٹ کی پوزیشن ہے
  2. متحرک پوزیشن مینجمنٹ

    • ابتدائی خطرہ اکاؤنٹ کے 1-3٪ تک محدود ہے
    • پوزیشن کا سائز 1-2-6 ڈی سی اے تناسب پر عمل کرتا ہے
    • پہلی سٹاپ نقصان کی رقم کے حساب سے 1 سے 3 فیصد تک کی پوزیشن پر مقرر کی گئی
    • تمام ڈی سی اے کی تعیناتی کے بعد ، اسٹاپ نقصان کی تازہ کاری کے لئے انٹری پوائنٹ کی 1.3٪ پوزیشن
  3. اسمارٹ منافع

    • جب قیمت 0.5 فیصد منافع حاصل کرتی ہے تو 25 فیصد پوزیشن بند کریں
    • جب قیمت 1٪ منافع حاصل کرے تو 50٪ پوزیشن بند کریں
    • دوسرے منافع کے بعد، سٹاپ نقصان کو بیس پوزیشن میں منتقل کیا گیا

کوڈ کی گہرائی سے تجزیہ سے پتہ چلتا ہے کہ اس حکمت عملی میں سمارٹ چوٹی کی وادی کی شناخت کا نظام بھی شامل ہے جو قیمت اور آر ایس آئی کے حالیہ 5 پوائنٹس کی نقل و حرکت کو ٹریک کرکے پیٹرن سے انحراف کا پتہ لگاتا ہے۔ اعلی ٹائم فریم کی تصدیق کا نظام دن کی لکیر کے چارٹ پر معاونت اور مزاحمت کی جگہوں کا تجزیہ کرکے کم ٹائم فریم پر جھوٹے سگنل سے بچتا ہے۔

اسٹریٹجک فوائد

اس حکمت عملی کے کوڈ کو گہرائی سے تجزیہ کرنے کے بعد ، ہم ان اہم فوائد کا خلاصہ کرسکتے ہیں:

  1. کثیر سطحی تصدیق کا نظام: متعدد تکنیکی اشارے کے ہم آہنگی کے ذریعہ ، جعلی سگنل کا امکان بہت کم کردیا گیا ہے ، اور تجارت کی جیت کی شرح میں اضافہ ہوا ہے۔ ای ایم اے ، آر ایس آئی ، ایم اے سی ڈی اور برن بینڈ کے مجموعی استعمال سے داخلے کے نقطہ کی اعلی معیار کو یقینی بنایا گیا ہے۔

  2. اسمارٹ فنڈ مینجمنٹ1- 2-6 ڈی سی اے تناسب کا استعمال کرتے ہوئے ، مارکیٹ میں اتار چڑھاؤ کی اوسط لاگت کا فائدہ اٹھایا جاتا ہے ، اور مجموعی طور پر خطرے کی نالی کو محدود کیا جاتا ہے۔ ابتدائی خطرہ صرف 1-3٪ اکاؤنٹ تک محدود ہے ، اس بات کو یقینی بناتا ہے کہ بدترین صورت حال میں بھی کوئی تباہ کن نقصان نہیں ہوگا۔

  3. متحرک سٹاپ نقصان تحفظنقصان کا نظام تجارت کے ساتھ ساتھ ایڈجسٹ ہوتا ہے ، خاص طور پر جب منافع کا کچھ حصہ حاصل کرنے کے بعد نقصان کو محفوظ مقام پر منتقل کیا جاتا ہے ، جو منافع کی حفاظت اور تجارت کو سانس لینے کی اجازت دینے کی ضرورت کو مؤثر طریقے سے متوازن کرتا ہے۔

  4. مرحلہ وار منافع کی حکمت عملیاس حکمت عملی میں 0.5٪ اور 1٪ منافع کے نقطہ پر 25٪ اور 50٪ پوزیشنوں کو بند کرنے کے ذریعہ ، اس حکمت عملی کو منافع کے کچھ حصوں کو لاک کرنے کے قابل بنایا گیا ہے ، جبکہ مارکیٹ میں زیادہ سے زیادہ نقل و حرکت کو پکڑنے کے لئے پوزیشنوں کو برقرار رکھا گیا ہے ، تاکہ خطرہ اور منافع کا توازن قائم کیا جاسکے۔

  5. ہائی ٹائم فریم کی تصدیق: اعلی ٹائم فریموں کی حمایت اور مزاحمت کی پوزیشنوں کو ٹریڈنگ سگنل کو فلٹر کرنے کے لئے استعمال کیا جاتا ہے ، جس سے کم ٹائم فریموں پر عام شور اور جعلی توڑنے کے اثرات کو کم کیا جاتا ہے۔

اسٹریٹجک رسک

اس حکمت عملی کے پیچیدہ ڈیزائن کے باوجود ، کچھ خطرہ عوامل موجود ہیں جن پر توجہ دینے کی ضرورت ہے:

  1. پیرامیٹر کی حساسیت: حکمت عملی کی کارکردگی بہت زیادہ پیرامیٹرز کی ترتیبات پر منحصر ہے ، بشمول ای ایم اے کی مدت ، آر ایس آئی کی حد اور ڈی سی اے کی سطح۔ ان پیرامیٹرز میں معمولی تبدیلیوں سے تجارتی نتائج میں نمایاں اختلافات پیدا ہوسکتے ہیں ، جس میں محتاط اصلاح اور جانچ پڑتال کی ضرورت ہوتی ہے۔

  2. بڑے پیمانے پر اتار چڑھاو کا خطرہ: ڈی سی اے کے باوجود ، مارکیٹ میں شدید اتار چڑھاؤ کی صورت میں ، قیمتیں تیزی سے تمام مقررہ اسٹاپ لاس پوائنٹس سے تجاوز کر سکتی ہیں ، جس کے نتیجے میں اصل نقصانات توقع سے زیادہ ہوجاتے ہیں۔ اس خطرے کے لئے ، سخت ابتدائی پوزیشن سائز کا استعمال کرنے یا اعلی اتار چڑھاؤ کے دوران تجارت کو روکنے پر غور کیا جاسکتا ہے۔

  3. مسلسل نقصانات کے اثرات: یہاں تک کہ اگر انفرادی تجارت کا خطرہ محدود ہے تو ، لگاتار نقصانات کی وجہ سے فنڈز کی وکر میں نمایاں کمی واقع ہوسکتی ہے۔ اضافی مجموعی خطرے کے کنٹرول کو نافذ کرنے کی تجویز ہے ، جیسے روزانہ یا ہفتہ وار زیادہ سے زیادہ نقصان کی حد۔

  4. RSI کی شناخت کی پیچیدگیکوڈ میں آر ایس آئی کے انحراف کی جانچ تاریخی اعداد و شمار کی درستگی پر منحصر ہے ، جو کچھ مارکیٹ کے حالات میں کافی قابل اعتماد نہیں ہوسکتی ہے۔ انحراف کے اشارے کی تصدیق کے لئے مزید جدید اعدادوشمار کے استعمال پر غور کیا جاسکتا ہے۔

  5. مارکیٹ کی لیکویڈیٹی پر انحصار: کم لیکویڈیٹی والے بازاروں میں ، ڈی سی اے آرڈرز کی ایک بڑی تعداد کو اسکیلپنگ کے مسائل کا سامنا کرنا پڑ سکتا ہے ، جو حکمت عملی کی مجموعی کارکردگی کو متاثر کرتا ہے۔ اس حکمت عملی کو اعلی لیکویڈیٹی والے بازاروں میں استعمال کرنے پر پابندی عائد کی جانی چاہئے۔

حکمت عملی کی اصلاح کی سمت

کوڈ کے گہرے تجزیے کی بنیاد پر ، اس حکمت عملی کو بہتر بنانے کے لئے کچھ نکات یہ ہیں:

  1. متحرک پیرامیٹرز ایڈجسٹمنٹ: مارکیٹ میں اتار چڑھاؤ کی بنیاد پر متحرک پیرامیٹر ایڈجسٹمنٹ میکانزم متعارف کرایا جاسکتا ہے۔ مثال کے طور پر ، اعلی اتار چڑھاؤ کے دوران خود بخود آر ایس آئی کی کمی کی ضرورت کو بڑھانا ، یا مارکیٹ کے مختلف ادوار میں ایڈجسٹ کرنے کے لئے ای ایم اے کی لمبائی کو ایڈجسٹ کرنا۔ اس طرح کے موافقت کے میکانزم سے مختلف مارکیٹ کے ماحول میں حکمت عملی کی استحکام کو بہتر بنایا جاسکتا ہے۔

  2. بڑھا ہوا انحراف کی جانچ: موجودہ آر ایس آئی کا پتہ لگانا نسبتا simple آسان ہے اور اس میں زیادہ پیچیدہ الگورتھم متعارف کرانے سے درستگی میں اضافہ کیا جاسکتا ہے ، جیسے فشر کو تبدیل کرنا آر ایس آئی کا استعمال کرنا یا ٹرانسفر کی تصدیق میں اضافہ کرنا۔ اس سے غلط سگنل کو کم کیا جائے گا اور حکمت عملی کی درستگی میں اضافہ ہوگا۔

  3. اسمارٹ منافع کی اصلاح: موجودہ فکسڈ فوائد کو مارکیٹ کے اتار چڑھاؤ پر مبنی متحرک فوائد میں تبدیل کیا جاسکتا ہے۔ مثال کے طور پر ، اعلی اتار چڑھاؤ کے دوران اعلی منافع کا ہدف طے کریں ، اور کم اتار چڑھاؤ کے دوران ہدف کو کم کریں ، تاکہ مارکیٹ کے حالات میں تبدیلی کو ایڈجسٹ کیا جاسکے۔

  4. فنڈز کا انتظام: مارکیٹ کے ڈھانچے اور موجودہ رجحان کی طاقت کے مطابق ڈی سی اے کے تناسب اور ٹرگر پوائنٹس کو بہتر بنایا جاسکتا ہے۔ مثال کے طور پر ، مضبوط رجحانات کے دوران ڈی سی اے کے زیادہ شدت پسند تناسب کا استعمال کیا جاتا ہے ، جبکہ کمزور رجحانات کے دوران زیادہ محتاط ہوتا ہے۔

  5. ٹرانزیکشن وقت کی اصلاح: تجارتی حجم اور اتار چڑھاؤ پر مبنی ٹائم فلٹر متعارف کروائیں ، اور کم سرگرمی کے اوقات میں تجارت سے گریز کریں۔ یہ تاریخی اعداد و شمار کا تجزیہ کرکے بہترین تجارتی وقت کی کھڑکیوں کا تعین کرکے کیا جاسکتا ہے۔

خلاصہ کریں۔

کثیر اشارے کی تصدیق یکساں طور پر توڑنے والی ڈی سی اے متحرک اسٹاپ اسٹریٹجی ایک عمدہ ڈیزائن کردہ شارٹ لائن ٹریڈنگ سسٹم ہے جس میں متعدد تکنیکی تجزیاتی ٹولز اور جدید فنڈ مینجمنٹ ٹکنالوجی کا ہوشیار امتزاج کیا گیا ہے۔ ای ایم اے ، آر ایس آئی ، ایم اے سی ڈی اور برلن بینڈ جیسے اشارے کے ساتھ مل کر کام کرنے سے ، یہ حکمت عملی اعلی امکانات کے داخلے کے مقامات کی نشاندہی کرنے کے قابل ہے ، جبکہ اسٹریٹجک ڈی سی اے طریقہ کار اور متحرک اسٹاپ نقصان / اسٹاپ میکانزم کا استعمال کرتے ہوئے خطرات کا انتظام کرنے اور منافع کو مقفل کرنے کے لئے۔

اگرچہ اس حکمت عملی میں واضح فوائد ہیں ، بشمول سخت خطرے پر قابو پانے ، کثیر سطحی تصدیق کے نظام اور ذہین منافع بخش میکانزم ، صارفین کو اب بھی پیرامیٹرز کی حساسیت اور مارکیٹ میں شدید اتار چڑھاؤ سے متعلق خطرات سے آگاہ رہنے کی ضرورت ہے۔ اس حکمت عملی کی استحکام اور منافع بخش صلاحیت کو مزید بہتر بنانے کے لئے تجویز کردہ اصلاحاتی اقدامات جیسے متحرک پیرامیٹرز کی ایڈجسٹمنٹ ، بڑھا ہوا انحراف کا پتہ لگانے اور ذہین منافع بخش اصلاحات کو نافذ کرکے مزید بہتر بنانے کی امید ہے۔

اس حکمت عملی کو تاجروں کے لئے مناسب طور پر مناسب لیکویڈیٹی والی مارکیٹوں میں لاگو کیا جاتا ہے اور اس کے استعمال سے پہلے کافی حد تک تاریخ کی واپسی اور پیرامیٹرز کی اصلاح کی جانی چاہئے۔ محتاط نفاذ اور مسلسل نگرانی کی ایڈجسٹمنٹ کے ساتھ ، یہ کثیر سطحی تجارتی نظام مختصر لائن تاجروں کے ٹول کٹ میں ایک طاقتور ہتھیار بن سکتا ہے۔

حکمت عملی کا ماخذ کوڈ
/*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)