کثیر سطحی قیمت کے ڈھانچے کی شناخت اور مناسب قیمت کے فرق کا مقداری تجارتی نظام

CHoCH FVG Pivot Points Risk-Reward Ratio Price Structure SWING POINTS Quantitative Trading
تخلیق کی تاریخ: 2025-06-03 10:50:29 آخر میں ترمیم کریں: 2025-06-03 10:50:29
کاپی: 0 کلکس کی تعداد: 347
2
پر توجہ دیں
319
پیروکار

کثیر سطحی قیمت کے ڈھانچے کی شناخت اور مناسب قیمت کے فرق کا مقداری تجارتی نظام کثیر سطحی قیمت کے ڈھانچے کی شناخت اور مناسب قیمت کے فرق کا مقداری تجارتی نظام

جائزہ

کثیر سطحی قیمت کی ساخت کی شناخت اور منصفانہ قیمت کے فرق کی پیمائش کا تجارتی نظام ایک خودکار تجارتی حکمت عملی ہے جو قیمت کے رویے پر مبنی ہے اور اس میں دو اہم تجارتی تصورات شامل ہیں: تبدیلی کی خصوصیت ((CHoCH، Change of Character) اور منصفانہ قیمت کا فرق ((FVG، Fair Value Gap) ۔ یہ حکمت عملی مارکیٹ کی ساخت میں تبدیلی کے پوائنٹس اور عدم توازن والے علاقوں کی نشاندہی کرکے اعلی امکانات کے ساتھ تجارت کے مواقع کو پکڑتی ہے ، اور جب قیمتیں منصفانہ قیمت کے فرق میں واپس آجاتی ہیں تو ، داخل ہونے اور باہر نکلنے کا عین مطابق کنٹرول حاصل کرتی ہے۔ یہ منظم طریقہ کار تاجروں کو مارکیٹ کو معروضی طور پر تجزیہ کرنے ، جذباتی عوامل کو ختم کرنے اور واضح خطرے کے انتظام کے قواعد کے ساتھ فراہم کرنے کی اجازت دیتا ہے۔

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

یہ نظام مندرجہ ذیل بنیادی اصولوں پر مبنی ہے:

  1. قیمتوں کے ڈھانچے کی شناخت: مارکیٹ میں اتار چڑھاؤ کی اونچائیوں اور اتار چڑھاؤ کی نچلی سطحوں کی نشاندہی کرنے کے لئے Pivot Points کی تکنیک کا استعمال کریں۔ یہ پوائنٹس مارکیٹ کے ڈھانچے کے اہم اجزاء ہیں۔ ان اہم پوائنٹس کی نشاندہی کرنے کے لئے سسٹم پیرامیٹرائزڈ اتار چڑھاؤ کی لمبائی کا استعمال کرتا ہے (ڈیفالٹ 5 سائیکل) ۔

  2. تبدیلی کی خصوصیت ((CHoCH) کا پتہ لگانا:

    • متعدد CHoCH: قیمتیں کم کم ہونے کے بعد پچھلی اتار چڑھاؤ کی اونچائیوں کو توڑ دیتی ہیں
    • کھوکھلی چوچ: قیمتوں میں اعلی اونچائی کے بعد پہلے کی اتار چڑھاؤ کی کم سطح کو توڑنا سسٹم نے CHoCH کی تشکیل کے وقت کے وقفے کو کم سے کم فاصلے کی ضرورت کو پورا کرنے کے لئے کہا ہے (ڈیفالٹ 10 سائیکل) ، تاکہ غیر موثر سگنل کو فلٹر کیا جاسکے۔
  3. فکسڈ ویلیو گیپ (FVG) شناخت:

    • ملٹی ہیڈ ایف وی جی: موجودہ سالگرہ کی کم قیمت دو دورانیہ کے سابقہ سالگرہ کی اونچائی سے زیادہ ہے
    • خالی سر FVG: موجودہ شیڈول کی اونچائی پچھلے دو دورانیہ کی کم سے کم ہے سسٹم نے کم سے کم FVG سائز کی حد مقرر کی ہے (ڈیفالٹ 2 پوائنٹس) ، اس بات کو یقینی بناتے ہوئے کہ صرف قیمتوں میں عدم توازن کو پکڑنے کے قابل ہو۔
  4. ان پٹ منطق:

    • کثیر سر داخلہ: کثیر سر CHoCH کی تصدیق کے بعد ، کثیر سر FVG زون تک قیمتوں میں واپسی کا انتظار کریں
    • ہوائی جہاز میں داخلہ: ہوائی جہاز CHoCH کی تصدیق کے بعد ، قیمتوں کے ہوائی جہاز کے FVG علاقے میں واپس آنے کا انتظار کریں داخلہ کی قیمتوں کو ایف وی جی کے علاقے کے وسط کے طور پر مقرر کیا گیا ہے، جس میں متوازن داخلہ کی قیمت فراہم کی جاتی ہے.
  5. خطرے کے انتظام کے طریقہ کار:

    • سٹاپ نقصان کی ترتیب میں حالیہ جھولی کم ((multihead) یا جھولی اعلی ((بھاری سر)
    • روک تھام پر مبنی خطرہ واپسی تناسب (ڈیفالٹ 2.0) یا فکسڈ ہدف پوائنٹس
    • اختیاری پوزیشن خود کار طریقے سے ایڈجسٹ کرنے کی خصوصیت ، پوزیشن کا سائز اکاؤنٹ کے خطرے کے فیصد اور اسٹاپ نقصان کے فاصلے پر مبنی ہے

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

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

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

  2. داخلہ کا صحیح وقت: CHoCH کے بعد FVG کی تشکیل کا انتظار کرکے ، حکمت عملی فائدہ مند قیمت کی سطح پر داخلے میں مدد دیتی ہے ، اعلی اور کم کے تعاقب سے گریز کرتی ہے ، اور داخلے کے معیار کو بہتر بناتی ہے۔

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

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

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

  6. کارکردگی کو بہتر بنانے کے ڈیزائنکوڈ میں پرانے ایف وی جی بکسوں کو صاف کرنے کا طریقہ کار شامل ہے تاکہ یہ یقینی بنایا جاسکے کہ طویل عرصے تک چلنے پر نظام کی کارکردگی کم نہیں ہوگی۔

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

اسٹریٹجک رسک

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

  1. جعلی دراندازی کا خطرہ:CHoCH سگنل ایک جھوٹی بریک ہوسکتی ہے ، جس کی وجہ سے قیمت تیزی سے پیچھے ہٹ جاتی ہے اور اسٹاپ نقصان کو متحرک کردیتی ہے۔ اس خطرے کو کم کرنے کے لئے ، تصدیق کے طریقہ کار کو شامل کرنے پر غور کیا جاسکتا ہے ، جیسے ڈورگن K لائن کی تصدیق کے لئے انتظار کرنا۔

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

  3. پیرامیٹر کی حساسیت: حکمت عملی کی کارکردگی انتہائی پیرامیٹرز کی ترتیب پر منحصر ہے جیسے جھول کی لمبائی ، کم سے کم CHoCH فاصلہ اور FVG سائز۔ مختلف مارکیٹوں اور ٹائم فریموں میں پیرامیٹرز کے مختلف مجموعوں کی ضرورت ہوسکتی ہے ، اور ایک جامع فیڈ بیک کی اصلاح کی سفارش کی جاتی ہے۔

  4. مارکیٹ کے ماحول پر انحصار: یہ حکمت عملی رجحان مارکیٹ میں بہتر کارکردگی کا مظاہرہ کرتی ہے ، اور اس کے نتیجے میں مارکیٹ میں اکثر غلط سگنل پیدا ہوسکتے ہیں۔ رجحان فلٹر یا مارکیٹ کی حالت کی شناخت کے طریقہ کار کو شامل کرنے پر غور کریں۔

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

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

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

کوڈ کے تجزیہ پر مبنی ، مندرجہ ذیل اصلاحات کی تجاویز ہیں:

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

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

  3. داخلہ کی اصلاح:

    • گروپ میں داخلے کی حکمت عملی کو نافذ کریں ، جیسے کہ ایف وی جی کے مختلف علاقوں میں متعدد داخلے کے مقامات کی ترتیب
    • اضافی داخلے کی توثیق شامل کریں ، جیسے ٹرانزیکشن کی توثیق یا متحرک اشارے کی توثیق
  4. خطرے کے انتظام میں بہتری:

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

    • مارکیٹ کی حالت کی شناخت ((رجحان / توازن / اعلی اتار چڑھاؤ) شامل کریں ، اور مختلف حالتوں کے مطابق حکمت عملی کے پیرامیٹرز کو ایڈجسٹ کریں
    • مجموعی مارکیٹ میں تجارت میں کمی یا اس سے گریز
    • اچانک بڑھتی ہوئی اتار چڑھاؤ کی صورت میں زیادہ محتاط پوزیشن کی پیمائش
  6. مشین سیکھنے میں اضافہ: مشین لرننگ الگورتھم متعارف کرایا گیا ہے تاکہ تاریخی CHoCH اور FVG نمونوں کا تجزیہ کیا جاسکے ، تاکہ اعلی کامیابی کی شرح والے نمونوں کی شناخت کی جاسکے ، اور اس کے مطابق داخلے کے فیصلے میں وزن کو ایڈجسٹ کیا جاسکے۔

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

خلاصہ کریں۔

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

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

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

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-06-03 00:00:00
end: 2025-06-02 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("ICT CHoCH & FVG Strategy - NQ1!", overlay=true, pyramiding=0, calc_on_every_tick=false, calc_on_order_fills=false, max_boxes_count=500, max_lines_count=100, max_labels_count=100)

// ============================================================================
// INPUT PARAMETERS
// ============================================================================

// Strategy Settings
riskRewardRatio = input.float(2.0, title="Risk:Reward Ratio", minval=0.5, maxval=10.0, group="Strategy Settings")
fixedTarget = input.int(40, title="Fixed Target (Ticks)", minval=5, maxval=200, group="Strategy Settings")
useRRTarget = input.bool(true, title="Use Risk:Reward Target", tooltip="If false, uses fixed target", group="Strategy Settings")
riskPercent = input.float(2.0, title="Risk % of Account", minval=0.1, maxval=10.0, group="Strategy Settings")
useAutoSize = input.bool(false, title="Auto Size Positions", tooltip="Size based on risk % and stop distance", group="Strategy Settings")

// Visual Settings
showCHoCH = input.bool(true, title="Show CHoCH Labels", group="Visual Settings")
showFVG = input.bool(true, title="Show FVG Boxes", group="Visual Settings")
showSwings = input.bool(true, title="Show Swing Points", group="Visual Settings")
showTradeLines = input.bool(true, title="Show Entry/SL/TP Lines", group="Visual Settings")

// CHoCH Detection Settings
swingLength = input.int(5, title="Swing Detection Length", minval=2, maxval=20, group="CHoCH Settings")
minCHoCHDistance = input.int(10, title="Min CHoCH Distance (bars)", minval=5, maxval=50, group="CHoCH Settings")

// FVG Settings
minFVGSize = input.float(2.0, title="Min FVG Size (ticks)", minval=0.25, maxval=10.0, group="FVG Settings")
maxFVGAge = input.int(50, title="Max FVG Age (bars)", minval=10, maxval=200, group="FVG Settings")

// ============================================================================
// VARIABLES AND ARRAYS
// ============================================================================

// Swing point detection
var float lastSwingHigh = na
var float lastSwingLow = na
var int lastSwingHighBar = na
var int lastSwingLowBar = na

// CHoCH tracking
var bool bullishCHoCH = false
var bool bearishCHoCH = false
var float chochLevel = na
var int chochBar = na
var bool waitingForFVG = false

// FVG tracking
var array<box> bullishFVGs = array.new<box>()
var array<box> bearishFVGs = array.new<box>()
var float activeFVGTop = na
var float activeFVGBottom = na
var bool lookingForEntry = false

// Trade management
var float stopLossLevel = na
var float takeProfitLevel = na
var bool inPosition = false

// ============================================================================
// HELPER FUNCTIONS
// ============================================================================

// Convert ticks to price for NQ
ticksToPrice(ticks) => ticks * 0.25

// Calculate position size based on risk
calcPositionSize(stopDistance) =>
    if useAutoSize and strategy.equity > 0
        accountValue = strategy.equity
        riskAmount = accountValue * (riskPercent / 100)
        stopDistancePrice = stopDistance * syminfo.mintick
        math.max(1, math.floor(riskAmount / stopDistancePrice))
    else
        1

// ============================================================================
// SWING POINT DETECTION
// ============================================================================

// Detect swing highs and lows
swingHigh = ta.pivothigh(high, swingLength, swingLength)
swingLow = ta.pivotlow(low, swingLength, swingLength)

// Update swing points
if not na(swingHigh)
    lastSwingHigh := swingHigh
    lastSwingHighBar := bar_index - swingLength
    if showSwings
        label.new(bar_index - swingLength, swingHigh, "SH", style=label.style_triangledown, color=color.red, size=size.tiny)

if not na(swingLow)
    lastSwingLow := swingLow
    lastSwingLowBar := bar_index - swingLength
    if showSwings
        label.new(bar_index - swingLength, swingLow, "SL", style=label.style_triangleup, color=color.green, size=size.tiny)

// ============================================================================
// CHoCH DETECTION
// ============================================================================

// Check for bullish CHoCH (break above prior swing high after making lower low)
bullishCHoCHCondition = not na(lastSwingHigh) and not na(lastSwingLow) and 
                       high > lastSwingHigh and 
                       lastSwingLow < lastSwingHigh and
                       bar_index - lastSwingHighBar > minCHoCHDistance and
                       strategy.position_size == 0

// Check for bearish CHoCH (break below prior swing low after making higher high)
bearishCHoCHCondition = not na(lastSwingHigh) and not na(lastSwingLow) and 
                       low < lastSwingLow and 
                       lastSwingHigh > lastSwingLow and
                       bar_index - lastSwingLowBar > minCHoCHDistance and
                       strategy.position_size == 0

// Process CHoCH signals
if bullishCHoCHCondition and not bullishCHoCH
    bullishCHoCH := true
    bearishCHoCH := false
    chochLevel := lastSwingHigh
    chochBar := bar_index
    waitingForFVG := true
    lookingForEntry := false
    


if bearishCHoCHCondition and not bearishCHoCH
    bearishCHoCH := true
    bullishCHoCH := false
    chochLevel := lastSwingLow
    chochBar := bar_index
    waitingForFVG := true
    lookingForEntry := false
    


// ============================================================================
// FVG DETECTION
// ============================================================================

// Check for FVG formation (3-candle pattern)
if bar_index >= 2
    // Bullish FVG: low[0] > high[2]
    bullishFVG = low[0] > high[2] and (low[0] - high[2]) >= ticksToPrice(minFVGSize)
    
    // Bearish FVG: high[0] < low[2]  
    bearishFVG = high[0] < low[2] and (low[2] - high[0]) >= ticksToPrice(minFVGSize)
    
    // Process bullish FVG after bullish CHoCH
    if bullishFVG and bullishCHoCH and waitingForFVG and bar_index > chochBar
        fvgTop = low[0]
        fvgBottom = high[2]
        

        
        // Set active FVG for entry
        activeFVGTop := fvgTop
        activeFVGBottom := fvgBottom
        waitingForFVG := false
        lookingForEntry := true
    
    // Process bearish FVG after bearish CHoCH
    if bearishFVG and bearishCHoCH and waitingForFVG and bar_index > chochBar
        fvgTop = low[2]
        fvgBottom = high[0]
        

        
        // Set active FVG for entry
        activeFVGTop := fvgTop
        activeFVGBottom := fvgBottom
        waitingForFVG := false
        lookingForEntry := true

// ============================================================================
// ENTRY LOGIC
// ============================================================================

// Long entry: price touches bullish FVG after bullish CHoCH
longCondition = lookingForEntry and bullishCHoCH and 
               not na(activeFVGTop) and not na(activeFVGBottom) and
               low <= activeFVGTop and high >= activeFVGBottom and
               strategy.position_size == 0

// Short entry: price touches bearish FVG after bearish CHoCH  
shortCondition = lookingForEntry and bearishCHoCH and  not na(activeFVGTop) and not na(activeFVGBottom) and low <= activeFVGTop and high >= activeFVGBottom and  strategy.position_size == 0

// Process long entries
if longCondition
    var float entryPrice = na
    var float stopLoss = na
    var float takeProfit = na
    
    entryPrice := math.avg(activeFVGTop, activeFVGBottom)
    stopLoss := lastSwingLow
    stopDistance = entryPrice - stopLoss
    
    if useRRTarget
        takeProfit := entryPrice + (stopDistance * riskRewardRatio)
    else
        takeProfit := entryPrice + ticksToPrice(fixedTarget)
    
    // Calculate position size
    qty = calcPositionSize(stopDistance / syminfo.mintick)
    
    // Enter trade
    strategy.entry("Long", strategy.long, qty=qty)
    strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)
    
    // Update tracking
    stopLossLevel := stopLoss
    takeProfitLevel := takeProfit
    inPosition := true
    lookingForEntry := false
    
    // Reset CHoCH state
    bullishCHoCH := false
    activeFVGTop := na
    activeFVGBottom := na
    


// Process short entries
if shortCondition
    var float entryPrice = na
    var float stopLoss = na
    var float takeProfit = na
    
    entryPrice := math.avg(activeFVGTop, activeFVGBottom)
    stopLoss := lastSwingHigh
    stopDistance = stopLoss - entryPrice
    
    if useRRTarget
        takeProfit := entryPrice - (stopDistance * riskRewardRatio)
    else
        takeProfit := entryPrice - ticksToPrice(fixedTarget)
    
    // Calculate position size
    qty = calcPositionSize(stopDistance / syminfo.mintick)
    
    // Enter trade
    strategy.entry("Short", strategy.short, qty=qty)
    strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)
    
    // Update tracking
    stopLossLevel := stopLoss
    takeProfitLevel := takeProfit
    inPosition := true
    lookingForEntry := false
    
    // Reset CHoCH state
    bearishCHoCH := false
    activeFVGTop := na
    activeFVGBottom := na
    

// ============================================================================
// POSITION MANAGEMENT
// ============================================================================

// Reset position state when trade is closed
if inPosition and strategy.position_size == 0
    inPosition := false
    stopLossLevel := na
    takeProfitLevel := na

// ============================================================================
// VISUAL SIGNALS
// ============================================================================

// Plot entry signals
plotshape(longCondition, title="Long Entry", location=location.belowbar, color=color.green, 
          style=shape.triangleup, size=size.normal)

plotshape(shortCondition, title="Short Entry", location=location.abovebar, color=color.red, 
          style=shape.triangledown, size=size.normal)

// Plot active stop loss and take profit levels
plot(inPosition ? stopLossLevel : na, title="Stop Loss", color=color.red, linewidth=2, style=plot.style_linebr)
plot(inPosition ? takeProfitLevel : na, title="Take Profit", color=color.green, linewidth=2, style=plot.style_linebr)

// ============================================================================
// CLEANUP
// ============================================================================

// Clean up old FVG boxes (helps with performance)
if bar_index % 100 == 0
    while array.size(bullishFVGs) > 20
        box.delete(array.shift(bullishFVGs))
    while array.size(bearishFVGs) > 20
        box.delete(array.shift(bearishFVGs))

// ============================================================================
// ALERTS
// ============================================================================

// Alert conditions
alertcondition(longCondition, title="Long Entry Signal", message="ICT Strategy: Long entry at FVG - SL: {{strategy.position_avg_price}}")
alertcondition(shortCondition, title="Short Entry Signal", message="ICT Strategy: Short entry at FVG - SL: {{strategy.position_avg_price}}")