یک اکسپرتِ غیرمعاملاتی برای تست اندیکاتورها

یک اکسپرتِ غیرمعاملاتی برای تست اندیکاتورها

یک اکسپرتِ غیرمعاملاتی برای تست اندیکاتورها

مقدمه

تمام اندیکاتورها را می‌توان در دو گروه تقیسم‌بندی کرد: اندیکاتورهای اِستاتیک، که یک‌بار نمایش داده می‌شوند و همیشه به‌همان شکل در هیستوری می‌مانند و با آمدن خوانش‌های جدید، تغییر نمی‌کنند؛ و اندیکاتورهای دینامیک (پویا)، که وضعیت‌شان را فقط در لحظه‌ی کنونی نشان می‌دهند، و وقتی قیمت جدید می‌آید، کاملاً از نو ترسیم می‌شوند. بهره‌وری یک اندیکاتور اِستاتیک را مستقیماً روی نمودار می‌توانید ببینید. اما چگونه بررسی کنیم که یک اندیکاتور دینامیک خوب کار می‌کند یا نه؟ این مقاله به همین سوال می‌پردازد.

اکثریت قریب به اتفاق اندیکاتورهایی که در تحلیل تکنیکال استفاده می‌شوند، اِستاتیک هستند. بیایید MACD را به‌عنوان مثال، فرض کنیم. رسیدن یک خوانش جدید، در بهترین حالت، فقط نمایش آخرین دوره (period)، یا اگر دقیق‌تر باشیم، آخرین مرحله‌ی آن را، درگیر می‌کند. هرچند، نمودار آن در هیستوری “غیرقابل نفوذ” خواهد ماند. برای اینکه بررسی کنیم آیا یک اندیکاتور اِستاتیک خوب کار می‌کند یا نه، فقط کافیست نشانه‌های آن را در دیتاهای هیستوری بررسی کنیم. اگر چندین اندیکاتور دارید و می‌خواهید بهینه‌ترین آن‌ها را برای ترید خود انتخاب کنید، باز هم جای نگرانی نیست: تمام اندیکاتورها را روی نمودار بیاورید و سپس یکی از آن‌ها که نشانه‌های “صحیح‌تری” تولید می‌کند را، انتخاب کنید.

در بحث اندیکاتورهای دینامیک، شرایط بسیار پیچیده‌تر می‌شود و حتی به “غیرممکن” می‌رسیم. تقریباً تمام اندیکاتورهای کانالی را می‌توان به‌عنوان مثالی از چنین اندیکاتورهایی دانست. به‌عنوان یک قانون، این اندیکاتورها یک یا چند خط رسم می‌کنند که دامنه‌ی حرکات قیمت را نمایش می‌دهند. البته این خطوط برای لحظهی کنونی ساخته شده‌اند. بنابراین، رسیدن قیمت‌های جدید، که‌ به‌‌طور قابل ملاحظه‌ای تفاوت در آن‌ها دیده می‌شود، می‌تواند طی چند ثانیه چیدمان خطوط را در نمودار برای حالتی کاملاً متفاوت تغییر دهد.

اگر بخواهیم فقط با آخرین نقطه‌ی قیمت کنونی قضاوت کنیم، غیرممکن است بتوانیم تخمین بزنیم اندیکاتور چقدر برای تمام چیدمان‌های ممکن (برای قیمت)، صحیح کار می‌کند. ممکن است ببینید اندیکاتور شما برای ساعت‌ها خوب کار می‌کند و همه‌چیز را عالی فرض کنید. با این حال، وقتی تصمیم به معامله می‌گیرید، چنان شرایطی در بازار پیش می‌آید که اندیکاتور اشتباه می‌رود (مثالی از کانال‌های مووینگ باریش‌پولِت که توسط یکی از اندیکاتورها به‌ اشتباه ایجاد شده‌اند را در ادامه آورده‌ایم)، و در نهایت این می‌شود که معامله‌ی خود را در جهت مغایر، باز می‌کنید. خودِ اندیکاتور، نشانه‌گذاری‌هایش را تنها در چند کندل بعد، “اصلاح” می‌کند. اما خیلی دیر است زیرا پوزیشن شما از دست می‌رود!

اندیکاتورهای تست در استراتژی‌تستر

اولین کار استراتژی‌تستر، تست اکسپرت‌ها است. از آنجایی که بعضی از اکسپرت‌ها از اندیکاتورها در عملکرد خود استفاده می‌کنند، تستر هم باید بتواند آن‌ها را تست کند. از این ویژگی استفاده می‌کنیم!

یک اکسپرت را می‌توان در دو حالت تست کرد: استاندارد و ویژوال (بصری). در حالت استاندارد، تستر تمام دستورهای اکسپرت را در [فرآیند] پردازش هیستوری خودش، پردازش می‌کند و زمانی برای اعلام نتیجه‌ی نهایی متوقف می‌شود که دیگر دیتای هیستوریِ جفت‌اَرزی که تست روی آن انجام می‌شود، موجود نباشد. در حالت ویژوال، جدا از فرآیندی که گفته شد، تستر، هر کندل/تیک نمودار را ترسیم می‌کند که تقلیدی از عملکرد بازار در حالتِ real-time (زمان واقعی) است. در تستر، می‌توانید زمان را سریع، آهسته یا متوقف کنید، و این کار هنگام تست اندیکاتورها بسیار به ما کمک خواهد کرد.

اکسپرت غیرمعاملاتی برای تصویربرداری

قبل از اینکه مبحث اندیکاتورهای تست را آغاز کنیم، باید یک اکسپرت نسبتاً غیرمعمول را آماده ‌کنیم. برای اینکه به نتیجه برسیم، این اکسپرت نباید ترید کند. و عملکرد آن نیز نباید حواس ما را از تست اندیکاتورها، پَرت کند، و نکته‌ی مهم‌تر اینکه، سپرده‌ی اولیه‌ی از دست رفته به‌ دلیل خطاهای معاملاتی، نباید مانع فرآیند تست اندیکاتورها باشد. بنابراین، رسماً اکسپرتی می‌خواهیم که هیچ کاری نمی‌کند.

تنها کاری که این اکسپرت انجام می‌دهد این است که از وضعیت کنونی معامله، تصویربرداری می‌کند. این تصویربرداری وقتی می‌خواهیم قدم به قدم تحلیل عملکرد اندیکاتورها را آغاز کنیم، بسیار مفید خواهد بود.

در اینجا کد این اکسپرت را مشاهده می‌کنید:

الگوریتم تصویربرداری بسیار ساده است: صبر می‌کنیم تا، زمانی که می‌خواهیم از آن زمان، گرفتن یک سری اِسکرین‌شات شروع شود، فرا برسد (ScreenShotStart) و سپس تا اِسکرین‌شات‌های ScreenShotMax در هر کندل ScreenShotStep، پیش می‌رویم. هر اِسکرین‌شات در یک فایل ذخیره می‌شود که نام آن فایل با پیشوند از پیش تعیین‌شده‌، FilesPrefix، همراه با شماره‌ی اِسکرین‌شات کنار نام، شروع می‌شود.

برای ایجاد یک شماره با صفرهایی قبل از عدد (این کار برای مرتب‌ شدن صحیح اِسکرین‌شات‌ها نیاز است، تا بلافاصله بعد از _۱.gif، _۱۰.gif نیاید بلکه _۲.gif باشد) از یک روش شماره‌گذاری که کمی غیرمعمول است، استفاده می‌کنیم. شماره‌گذاری با ScreenShotCur=0.001; آغاز می‌شود؛ و سپس در هر مرحله (با اِسکرین‌شات بعدی)، ۰.۰۰۱ به نام فایل اضافه می‌شود (ScreenShotCur+=0.001;). خودِ شماره، از تغییر یک عدد اعشاری به یک رشته کاراکتر، گرفته شده‌است، و از آن یک زیررشته به‌عنوان شماره انتخاب می‌شود که با کاراکتر سوم آغاز می‌گردد. بنابراین، “۰.”های شروع را حذف کرده و صفرهای قبل عدد را، قبل از ارقام شماره، بدست می‌آوریم. این روش به ما اجازه می‌دهد تا هزار اِسکرین‌شات را اندوخته داشته باشیم، که برای تحلیل ما کافیست. هرچند، اگر کافی نبود، “بزرگی” عدد اول را افزایش دهید و در هر مرحله با ۰.۰۰۰۱ پیش بروید. آنگاه می‌توانید تا ۱۰ هزار اِسکرین‌شات را انباشته کنید.

ورود به تست

اکنون، وقتی همه‌چیز آماده است و اکسپرت بدون خطا کامپایل شده‌است، بیایید تست گرفتن را شروع کنیم. با استفاده از منوی View/Tester، یا کلیدهای ترکیبی Ctrl+R، تستر را اجرا کنید. در بخش “Expert Advisor”، اکسپرت خودمان، یعنی IndicatorTester را انتخاب می‌کنیم. سپس نماد و دوره‌ی مورد نظر را انتخاب می‌کنیم، و اگر لازم بود، می‌توانید دامنه‌ی تست را با فعال کردن گزینه‌ی “Use date” تعیین کنید، و بازه‌ی تاریخی مورد نظرتان را از یک تاریخ (From) تا تاریخ معین دیگر (To) انتخاب کنید. برای فعال‌سازی حالت ویژوال، گزینه‌ی “Visual mode” را تیک بزنید. اکنون می‌‌توانیم دکمه‌ی “Expert properties” را زده و تمام ورودی‌های مورد نیاز برای اِسکرین‌شات گرفتن را مشخص کنیم.

خب، تقریباً همه‌چیز آماده است. دکمه‌ی “Start” را زده و سپس بلافاصله بعد از آن، دکمه‌ی “||” را بزنید؛ این دکمه سمت راستِ اِسلایدر تنظیم سرعت تصویرسازی، قرار گرفته است. اکسپرت تست گرفتن را متوقف خواهد کرد. اکنون می‌توانید اندیکاتور را برای تست به نمودار اضافه کنید، و با زدن مجدد دکمه‌ی “||“، تست گرفتن از اکسپرت ادامه خواهد یافت. همانطور که به‌یاد داریم، این اکسپرت هیچ‌گونه معامله‌ای انجام نمی‌دهد. اما تستر این موضوع را نمی‌فهمد و پردازش خوانش‌ها را با وسواس زیاد انجام می‌دهد—تیک به تیک، کندل به کندل… از آنجایی که فقط یک یا [نهایت] سه-چهار اندیکاتور به نمودار اضافه شده‌اند، تستر بایستی آن‌ها را مجدد محاسبه کرده و مجدد ترسیم کند، چراکه یک اکسپرت معمولی مطمئناً از دیتای بدست‌آمده از این اندیکاتورها استفاده می‌کند.

کل موضوع همین است. اکنون، همانطور که برخی از برنامه‌نویس‌ها در باکس‌های پاپ‌آپ خودشان می‌نویسند، “بنشینید و تماشا کنید” که اندیکاتور شما چطور کار می‌کند. می‌توانید در هر لحظه (با زدن “||”) تست را متوقف سازید، یا سرعت [تست را] زیاد و کم کنید. به‌محض اینکه تستر به تاریخ/زمانی که از پیش به‌عنوان ScreenShotStart تعیین کرده‌اید، می‌رسد، شروع به اِسکرین‌شات گرفتن با دوره‌ی از پیش تعیین‌شده می‌کند و اِسکرین‌شات‌های آماده را در مسیر c:\Program Files\MetaTrader 4\tester\files ذخیره خواهد کرد. اگر به اِسکرین‌شات گرفتن نیاز ندارید و فقط می‌خواهید ببینید اندیکاتور شما چطور کار می‌کند، پارامتر ScreenShotStep اکسپرت را، قبل از زدن دکمه‌ی Start، برابر یا کمتر از صفر، تعیین کنید، آنگاه، اِسکرین‌شات گرفتن غیرفعال خواهد شد.

مثال کاربردی

وقتی که می‌خواستم “صحیح‌ترین” اندیکاتور کانال‌های مووینگ باریش‌پولت را برای تحقیقم پیدا کنم، ابتدا این کار را برای خودم انجام دادم. در توضیح چگونه ساختن کانال‌ها، نکاتی وجود دارد که احتمالاً منجر به نادرست ساختنِ یک کانال می‌شوند. اول از همه، این مربوط به شرایطی می‌شود که دو اکسترمم، که توسط آن‌ها یکی از خطوط کانال باید رسم شود، نزدیک یکدیگر قرار گرفته‌اند. در چنین شرایطی، بعضی از اندیکاتورها شروع به “پرتاب” کانال از ۴۵ درجه نزولی به ۴۵ درجه صعودی می‌کنند، و سپس بازگشت، از بالا به پایین – و همینطور الی آخر.

متاسفانه، توسعه‌دهندگان اندیکاتورها، سربسته به صاحبِ امتیاز باریش‌پولت اعتماد دارند، و از روی عادت فقط از قوانین او تبعیت می‌کنند (البته باید اشاره کرد که این قوانین، در اکثریت قریب به اتفاق مواقع، کاملاً خوب کار می‌کنند). با این حال، فراموش کرده‌اند که بازار ممکن است هر نوع سورپرایزی را بر سر ما بریزد. در چنین مواقعی، راس یا همان بالای اندیکاتور شروع به “متورم شدن” می‌کند، و اندیکاتوری که باید ابزار مفیدی برای جمع‌آوری سود باشد، می‌‌شود دلیل ضرر ما.

برای مقایسه‌ی روش‌های متفاوتِ ساختن کانال‌های مووینگ باریش‌پولت، اندیکاتور خودم را نوشتم که کانال‌ها را می‌سازد، اما “شیءگرایانه‌تر” – آن‌هم توسط خط حرکت میانگین قیمت. بسیار شبیه به عملکرد ابزار استاندارد Equidistant Channel است، اما مرز‌های کانال، توسط الگوریتمی که کمی متفاوت است، ایجاد می‌شوند (جزئیات بیشتر را می‌توانید در وب‌سایت من، Two-Channel Method، پیدا کنید – البته به روسی). اکنون بیایید ببینیم، یکی از اندیکاتورهای کانال‌های مووینگ باریش‌پولت (SHI_Channel_true) که در CodeBase قرار دارد، در مقایسه با mean price channel (کانال میانگین قیمت) “صحیح”، چگونه رفتار خواهد کرد. خطوطِ اندیکاتور تحتِ تست، با رنگ سبز کشیده شده‌اند، خطوطِ کانال طولانی‌مدت (هفتگی) از اندیکاتور دو-کاناله، نارنجی هستند، و خطوطی که برای کانال کوتاه‌مدت (۳۳ ساعته) هستند، آبی روشن می‌باشند. و به‌محض اینکه به مرز‌های کانال برسند، قرمز می‌شوند.

بسیار خب، آنچه گرفته شده‌است را داریم، اما بیایید نگاهی دقیق‌تر به بعضی از اِسکرین‌شات‌های گرفته‌شده بیندازیم.

برای دوره‌ای که از ۴ تا ۷ دسامبر ۲۰۰۷ (EURUSD M30) شروع می‌شود، می‌توانیم ببینیم که چند بار اندیکاتور کانال‌های مووینگ باریش‌پولت “دور زده” و به خط حرکت میانگین قیمت برگشته است.

یک اکسپرتِ غیرمعاملاتی برای تست اندیکاتورها

در اینجا ممکن است کانالی شکسته شده باشد (هرچند این کانال کاملاً صحیح رسم نشده‌است، و قیمت در واقع به مرزِ کانالِ هفتگی می‌رسد). می‌توانید ببینید که اندیکاتور چگونه رفتار می‌کند. کانال روی کندل بعدی، دور می‌زند و عملاً با کانال هفتگی تطبیق پیدا می‌کند:

یک اکسپرتِ غیرمعاملاتی برای تست اندیکاتورها

این اتفاق اُفتاد، زیرا اکسترمم جدیدی شکل گرفت و اندیکاتور کاملاً منصفانه به پردازش آن پرداخت. هرچند، بعد از فقط چند کندل، دوباره دور زد و به موقعیت نادرست خود برگشت.

یک اکسپرتِ غیرمعاملاتی برای تست اندیکاتورها

این اتفاق به این دلیل اُفتاد که یک خوانش جدید باعث شد که نقطه‌ی اکسترمم به یک نقطه‌ی درونی معمولی تبدیل شود، و اندیکاتور این تغییر را دوباره پردازش کرد. روی کندل بعدی، یک دور زدن جدید اتفاق می‌اُفتد:

یک اکسپرتِ غیرمعاملاتی برای تست اندیکاتورها

دو یا سه کندل بعد، و دوباره دور زدن:

یک اکسپرتِ غیرمعاملاتی برای تست اندیکاتورها

روی این نمودار می‌توانیم “حداکثر” دیگری از ایجاد کانال‌های مووینگ باریش‌پولت را ببینیم – دو اکسترمم نزدیک به هم، یکی از مرزهای کانال را شکل می‌دهند، هرچند، تصویر کاملاً واضحی را هم می‌توان در این نمودار دید: قیمت در کانال کوتاه‌مدت ۳۳ ساعته، کاملاً خوب مسیرش را [در جهت] مرزهای کانال هفتگی می‌پیماید، که به احتمال قوی از آن برگشته و درون کانال هفتگی می‌رود. در واقع، اینطور اتفاق می‌اُفتد – تصویر “پیش‌بینی‌شده”‌مان را در روز بعد می‌بینیم:

یک اکسپرتِ غیرمعاملاتی برای تست اندیکاتورها

در کل، با استفاده از اکسپرت غیرمعاملاتی‌مان برای اِسکرین‌شات گرفتن، می‌توانیم حکم منطقی درباره‌‌ی اندیکاتور  SHI_Channel_true  صادر کنیم: این ابزار، ابزاری بسیار “متفاوت” است. تردید داشتم که به آن اطمینان کنم و ممکن است بدون وجود سازوکار مناسب سرمایه‌گذاری انجام شود (این یکی از دلایلی بود که Two-Channel Methods را ساختم).

نتیجه‌گیری

حوزه‌ی کاربردی کدی که مطرح شد، محدود به تست اندیکاتورها نمی‌شود. می‌توانید مکانیزم مشابهی را در یک اکسپرت معاملاتی وارد کنیم. در این شرایط، قادر خواهید بود تا کد اِشکال‌زدایی‌شده را “مهر و موم” کرده و هیستوری عملکرد اکسپرت خود و اندیکاتورهایی که با این اکسپرت کار می‌کنند را ذخیره کنید، تا نتایج معامله‌ی اکسپرت را برای اندیکاتورهای مورد استفاده برای محاسبه‌ی سیگنال‌های اکسپرت، آنالیز کنید. این کار اِشکال‌زدایی از یک اکسپرتی که روی یک حساب واقعی کار می‌کند را، سریع‌تر خواهد کرد.

یک ویژگی مهم از روش تست اندیکاتورهای پیشنهادی، قابلیت اِسکرین‌شات گرفتن است. بسیاری از برنامه‌های مشاهده‌ی عکس (برای مثال، IrfanView رایگان) می‌توانند فایل‌ها را در حالت صفحه‌بندی نمایش دهند. با فشردن PageDown، به عکس بعدی می‌روید، درست همانند دستی رفتن به کندل بعدی در تستر. اما کاری که در تستر نمی‌توانید انجام دهید ولی در IrfanView به‌راحتی قابل انجام است، رفتن به کندل قبلی است. فقط کافیست PageUp را زده و آنگاه “هیستوری را به‌ عقب برمی‌گردید”. با یک بار فشردن بیشتر [این دکمه]، بیشتر و بیشتر در هیستوری [به عقب] پیش می‌روید. این کار به شما اجازه می‌دهد عملکرد اندیکاتورها را دیده و آن‌ها را بررسی کنید، و دلایل درست کار نکردن آن‌ها را پیدا کنید.

این مقاله دارای فایل پیوست است.

 

مقالات پیشنهادی :

امینی

→ خواندن مطلب قبلی

قانون طلایی معاملات

خواندن مطلب بعدی ←

تبدیل کد اندیکاتور به کد اکسپرت. نتیجه‌گیری.

نوشتن نظر شما

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *