Bar Magnifier در حالت بکتستینگ چیه؟
کاربرهایی که اکانت Premium دارن، میتونن با فعال کردن گزینهی Bar Magnifier توی بکتست استراتژیهاشون، اجرای سفارشها (Order Fill) رو با دقت بیشتری و به شکل واقعیتری شبیهسازی کنن.
Bar Magnifier با بررسی حرکات قیمت داخل هر کندل (intrabar inspection) کار میکنه. یعنی بهجای اینکه فقط از قیمتهای OHLC (باز، بالا، پایین، بسته) استفاده کنه، میاد با استفاده از تایمفریم پایینتر، حرکت دقیقتری از قیمت داخل همون کندل رو در نظر میگیره. این کار باعث میشه اجرای سفارشها توی بکتست طبیعیتر و واقعیتر باشه.
در حالت عادی، شبیهساز بروکر (Broker Emulator) فقط به OHLC نگاه میکنه و بین اونها فرضیهسازی میکنه که قیمت چطور حرکت کرده. ولی با Bar Magnifier، این فرضها کنار میرن و قیمت واقعی داخل کندل بررسی میشه.
نکته مهم:
تایمفریم داخلی که برای Bar Magnifier استفاده میشه بهصورت خودکار با توجه به تایمفریم چارت اصلی تنظیم میشه. یعنی اگه تایمفریم چارت رو بالا ببری، Bar Magnifier بهصورت خودکار از تایمفریم مناسب پایینتر برای بررسی دقیقتر استفاده میکنه.
جدول زیر (که در منبع اصلی هست) مشخص میکنه که برای هر تایمفریم اصلی، چه تایمفریم داخلیای استفاده میشه.

برای هر تایمفریم چارت، Bar Magnifier بهصورت خودکار از یه تایمفریم پایینتر برای بررسی دقیقتر حرکات قیمتی داخل کندل استفاده میکنه
مثال از استراتژیای که از سفارش استاپ استفاده میکنه بدون فعال بودن گزینهی Bar Magnifier:
//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = false)
if bar_index == 10381
strategy.entry("Long", strategy.long, stop = 157.0)
strategy.exit("Exit", stop = 156.0)
در این مثال، شبیهساز بروکر روی کندل شمارهی 10381 یه سفارش استاپ برای ورود در قیمت 157.0 قرار میده. همون لحظهای که توی کندل بعدی قیمت به 157.0 برسه، سفارش اجرا میشه.
شبیهساز بر اساس یه فرض ساده از ترتیب حرکت قیمت توی اون کندل استفاده میکنه، به این شکل:
اول open بعد low بعد high (که باعث ورود میشه) و در نهایت close.
بعد از چند کندل (مثلاً ۱۱ روز در تایمفریم فعلی)، شرط خروج از معامله با قیمت استاپ 156.0 فعال میشه و پوزیشن بسته میشه.

وقتی گزینهی Bar Magnifier فعال باشه ، قیمتهای ورود و خروج تغییری نمیکنن؛ اما خروج از پوزیشن ممکنه داخل همون کندلی اتفاق بیفته که ورود توش انجام شده.
کد پاین اسکریپت:
//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = true)
if bar_index == 10381
strategy.entry("Long", strategy.long, stop = 157.0)
strategy.exit("Exit", stop = 156.0)

اگه بریم و چارت تایمفریم پایینتر همون نماد رو بررسی کنیم (مثلاً تایمفریم ۶۰ دقیقهای که طبق جدول intrabar برای تایمفریم فعلی استفاده میشه)، و بازهی زمانیای که مربوط به کندل شماره ۱۰۳۸۲ هست رو پیدا کنیم، میتونیم ببینیم که:
روی تایمفریم یکساعته، بعد از اینکه قیمت به 157.0 رسید و شرط ورود (entry) فعال شد، قیمت پایینتر از 156.0 هم رفته. این یعنی شرط خروج با استاپ stop = 156.0
هم داخل همون کندل برآورده شده.

وقتی گزینهی Bar Magnifier روشن باشه، شبیهساز بروکر (Broker Emulator) توی بکتست به تغییرات قیمت در تایمفریمهای پایینتر دسترسی پیدا میکنه. این باعث میشه رفتار استراتژی در بکتست خیلی شبیهتر به فوروارد تست (تست زنده) در همون بازهی زمانی باشه.
برای فعال یا غیرفعال کردن Bar Magnifier، کافیه از طریق پنجرهی Settings/Properties استراتژی، تیک گزینهی مربوطه رو بزنید یا بردارید.

یه نکته مهم در مورد Bar Magnifier اینه که یه محدودیت داره: استراتژی نمیتونه بیشتر از ۲۰۰٬۰۰۰ کندل از تایمفریم پایینتر درخواست کنه.
یعنی چی؟
فرض کن یه نماد کلی دادهی تاریخی داشته باشه، و تایمفریم چارت بالا باشه (مثلاً روزانه)، ولی Bar Magnifier بخواد برای هر کندل روزانه، تعداد زیادی کندل ساعتی یا دقیقهای بررسی کنه. اگه تعداد کندلهای کلی که لازم میشه از تایمفریم پایینتر بررسی بشه از ۲۰۰٬۰۰۰ تا بیشتر بشه، Bar Magnifier دیگه نمیتونه اون اطلاعات رو لود کنه.
نتیجهش اینه که اولین معاملات روی چارت (یعنی کندلهای اول چارت) ممکنه تحتتأثیر Bar Magnifier قرار نگیرن و با همون فرضهای ساده اجرا بشن.
یه فرمول تقریبی برای محاسبه اینکه Bar Magnifier از کجا به بعد روی چارت تأثیر داره:
scssCopyEditlast_bar_index - (200000 / (1
/ تعداد کندل تایمفریم پایینتر برای هر کندل چارت اصلی))
این عدد فقط یه تخمین تقریبیه، چون تعداد کندلهای تایمفریم پایینتر برای هر کندل چارت ممکنه متغیر باشه (مثلاً بعضی کندلها آخر هفتهان یا حجم معاملات کمتر بوده).