جادوی فیلتر کردن

جادوی فیلتر کردن

جادوی فیلتر کردن

مقدمه

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

هرچند، مخالفانی هم در استفاده از فیلتر داریم. فیلترها به‌شکلی قابل‌توجه (بعضی‌وقت‌ها تا ۲ – ۳ برابر) تعداد معاملات را کاهش داده، و همچنین نمی‌شود تضمین کرد که در آینده نیز این فیلترها به‌خوبیِ قبل، کار کنند. مسلماً دلایل الزام‌آور دیگری هم وجود دارد.

پس بیایید نگاهی عمیق‌تر داشته باشیم و تمام حرف‌ها را یک‌مرتبه و یکجا بگوییم.

نظریه‌ی بی‌معنی‌بودن فیلترینگ

اگر اکسپرت ما سودده نباشد[۱]، خیلی بعید است که فیلتر بتواند به ما کمک کند. جادوی فیلتر کردن اینجا قدرتی ندارد.

بنابراین، در این مقاله اکسپرت‌ها لحاظ نمی‌شوند. هرچند، باید بدانیم که مطالعاتی روی فیلترهای کوانتومی فرکانس صورت گرفته، که تقریباً [این فیلترها] قادر هستند هرنوع اکسپرت غیرسودده را به شبه‌گریل[۲] تبدیل کنند.

نظریه‌ی خطرات فیلترینگ

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

البته باید مشخص کنیم منظور ما از سیستم ایده‌آل ترید چیست. در اینجا منظور ما یک استراتژی ترید است که فقط تراکنش‌های سودده انجام می‌دهد؛ به‌عبارت دیگر، هیچ‌ ضرری برای ما ندارد. در چنین سیستمی، تعداد معاملات غیرسودده برابر است با صفر.

فیلتر چیست؟

به ساده‌ترین شکل ممکن بگوییم، فیلتر سیگنال ترید، یک نوع محدودیت منطقی است، مانند: اگر A کمتر از B نباشد (A> = B)، آن سیگنال خط می‌خورد، و اگر کمتر باشد، سیگنال خط نخواهد خورد. در نتیجه بخشی از سیگنال حذف می‌شود. شرایط و قوانین فلیترینگ را توسعه‌دهندگان ربات‌های ترید تعیین می‌کنند. به‌منظور ایجاد برخی از انواع روند، نیاز داریم تاثیر بعضی از فاکتورهای متفاوت را روی خصوصیات سیستم‌های ترید خودکار (ATS)، بررسی، و تجزیه و تحلیل کنیم. متاسفانه یا خوشبختانه، طیف وسیعی از چنین فاکتورهایی وجود دارد. بنابراین می‌بایستی درک مستقیم و شهود را حذف کرده تا بتوان مرتبط‌ترین و سازگارترین فاکتورها را انتخاب کرد.

مثال. شاید یک نوع همبستگی بین نتایج سیستم‌های ترید خودکار (ATS) و فشار جوّ در روستای کوکوشکینو وجود داشته باشد. می‌توانید فیلتری مناسب ایجاد کرده و سوددهی اکسپرت را افزایش دهید، بطوریکه شرایط جوی در این منطقه‌ی کوچک در روسیه، در فیلتر و اکسپرت لحاظ شود. هرچند، بعید است کسی بابت این نوع خلاقیت در فیلترینگ، از شما تشکر کند، حتی با اینکه باعث شده‌اید سوددهی سیستم بیشتر شود!

طبقه‌بندی فیلترها

هرچند طیف وسیعی از فیلترهای مورداستفاده در سیستم‌های ترید خودکار موجود است، اما باز هم می‌توان آن‌ها را در دو گروه اصلی تقسیم‌بندی کرد:

  • فیلترهای میان‌گذر یا Bandpass (فیلتر P) – این فیلتر یک باند از سیگنال‌ها را مخابره می‌کند؛
  • فیلتر مجزا یا Discrete (فیلتر D) – این فیلتر سیگنال‌ها را به‌صورت انتخابی با استفاده از ماسک (قالب) مخابره می‌کند.

از کجا شروع کنیم؟

بیایید مکانیزم فیلترینگ را با یک مثال بررسی کنیم. از اکسپرت DC2008_revers استفاده می‌کنیم (فایل‌های پیوست را ببینید) که مخصوص این مقاله ایجاد شده‌است. خصوصیات این اکسپرت را بررسی کنید (بدون استفاده از هیچ ‌نوع فیلتری). در اینجا گزارشی داریم که طی فرآیند تست آن را کامل کرده‌ایم.

گزارش

جادوی فیلتر کردن

جادوی فیلتر کردن

شکل ۱. نتایج بدست‌آمده از انجام تست روی بخش تاریخچه. اکسپرت اولیه بدون فیلتر

تحلیل نتایج :

  1. اکسپرت ما سودده است و معاملات ما بیش از ۶۰ درصد بُرد بوده‌اند که این خیلی خوب است.
  2. بیشترین میزان ضرر ۲۰ درصد سرمایه بوده که می‌شود بیش از ۳۰۰۰ دلار آن‌هم با حداقل لاتیج که این اصلاً خوب نیست.
  3. تعداد کل معاملات برای استفاده از فیلتر کافی است (۳۰۰۰ <).

البته، این نتایج مربوط به همین بخش از تاریخچه می‌شوند که ما به اکسپرت داده‌ایم. و مشخص نیست اکسپرت جاهای دیگر چطور ترید خواهد کرد. هرچند، این موضوع باعث نمی‌شود از دست بردن در تنظیمات اکسپرت و استفاده از فیلترینگ منصرف شویم.

بنابراین، برای این اکسپرت باید دنبال فیلترهایی بگردیم که سوددهی را بالا برده و ضرر را کم کنند.

فیلترهای میان‌گذر یا Bandpass (فیلتر P)

این نوع فیلتر، یکی از رایج‌ترین‌ها و ساده‌ترین‌هاست زیرا نتایج را می‌توان بلافاصله پس از تست گرفتن ارزیابی کرد و هیچ فرآیند اضافی لازم نیست. گزینه‌های محتمل برای استفاده از آن در اکسپرت موردآزمایش را درنظر بگیرید. به‌عنوان یکی از پارامترها، از skipping band استفاده کرده، و قیمت را در لحظه‌ی بازشدن کندل با قیمت بسته‌شدن، در دوره‌های زمانی مختلف، مقایسه می‌کنیم.

بازه‌ی H4

 //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H4,1)<iClose(NULL,PERIOD_H4,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H4,1)>iClose(NULL,PERIOD_H4,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

 

جادوی فیلتر کردن

شکل ۲. نتایج بدست‌آمده از انجام تست روی بخش تاریخچه. اکسپرت با فیلتر P (H4)

 

بازه‌ی H1

 //+---------------------------------------------------------------------------------+
   //   BUY Signal
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signal
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

 

جادوی فیلتر کردن

شکل ۳. نتایج بدست‌آمده از انجام تست روی بخش تاریخچه. اکسپرت با فیلتر P (H1)

بازه‌ی M30

 //+---------------------------------------------------------------------------------+
   //  BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M30,1)<iClose(NULL,PERIOD_M30,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M30,1)>iClose(NULL,PERIOD_M30,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

 

جادوی فیلتر کردن

شکل ۴. نتایج بدست‌آمده از انجام تست روی بخش تاریخچه. اکسپرت با فیلتر P (M30)

 

بازه‌ی M5

 //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M5,1)<iClose(NULL,PERIOD_M5,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M5,1)>iClose(NULL,PERIOD_M5,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

 

جادوی فیلتر کردن

شکل ۵. تغییرات بالانس حساب. فیلتر P برای بازه‌ی M5

برای ساده‌تر کردن تحلیل گزارش‌های دریافتی، آنها را در جدول زیر خلاصه‌ کرده‌ایم.

جادوی فیلتر کردن

جدول ۱. جدول مقایسه‌ی گزارش‌های تست برای فیلتر P

تحلیل نتایج:

  1. درآمد خالص در فیلتر P فقط در “PERIOD_H1” افزایش داشته است (۴۴۰۸.۹۱ => 4829.05).
  2. پیشگام در بازپرداخت مورد انتظار، فیلتر P “PERIOD_M30” بوده است (۱.۳۴ => 3.59).
  3. حداکثر ضرر، در تمام فیلترها کاهش داشته است. حداقل مقدار ضرر در فیلتر “PERIOD_M5” (3001.74 => 1608.30) دیده شد.
  4. فیلترینگ، تعداد کل تراکنش‌ها را ۱.۵ تا ۳ برابر کاهش داد.

نتایج:

  • فیلتر P، خصوصیات سیستم‌های ترید خودکار را ارتقاء می‌دهد.
  • برای تحلیل بیشتر، فیلتر P “PERIOD_H1” را انتخاب می‌کنیم، که بهترین نتایج سود را به ما نشان می‌دهد.

فیلتر مجزا یا Discrete (فیلتر D)

ساده‌ترین و مستقیم‌ترین راه برای درک این فیلتر را ترید با ساعت [(منظور این است که در چه ساعاتی ترید کنیم که سود بیشتری کسب کنیم، پس مبنای کار ما ساعت/زمان است)]، به ما می‌دهد. منطقی است که فرض کنیم در طول روز یک اکسپرت، در ترید ناپایدار باشد. در طی ساعاتی سوددهی آن بیشتر است و گاهی هم عکس این قضیه است و فقط ضرر می‌دهد. برای این منظور، بیایید تاثیر این نوع فیلتر را روی نتایج ترید بررسی کنیم. منتها از قبل باید یک متغیر اکسترنال اضافی را درون کد اکسپرت قرار دهیم:

extern int        Filter.Hour=0;    // D-filter: trade by hour
//----
extern double     Lots=0.1;
extern int        Symb.magic=9001,
                  nORD.Buy = 5,     // max buy orders
                  nORD.Sell = 5;    // max sell orders

و سپس خود فیلتر:

 //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

بنابراین اگر ساعت کنونی همزمان با مقدار مجزای فیلتر D باشد، آنگاه سیگنال BUY یا SELL را تولید می‌کنیم (اجازه می‌دهیم) – درغیراین‌صورت خیر.

تستر را در حالت بهینه اجرا می‌کنیم (پارامترهای ورودی در تصویر مشخص شده‌اند). سرمایه را باید در حالت ماکسیمم قرار دهیم تا با “عدم موجودی کافی برای باز کردن پوزیشن[۳]” مواجه نشویم و بخشی از تراکنش‌ها از دست نَرَوند.

 جادوی فیلتر کردن

 

جادوی فیلتر کردن

شکل ۶. پارامترهای ورودی برای جستجوی مشخصات فیلتر D

در نتیجه، خصوصیات پاسخ فیلتر را بدست می‌آوریم: سود، تعداد تراکنش‌ها و ضرر (محورY) به‌عنوان تابعی از زمان روز (محور X).

جادوی فیلتر کردن

شکل ۷. خصوصیات پاسخ فیلتر. فیلترینگ D با ساعت

فرض ما این بود که اکسپرت سودهای مختلف در زمان‌های مختلف به ما می‌دهد که این فرض تایید شد!

… و این موضوع تایید شد، اما با آن باید چه کنیم؟ اولین چیزی که به ذهن می‌رسد این است که به اکسپرت در آن ساعت‌‌هایی که ضرر می‌دهد، اجازه‌ی ترید ندهیم. کاملاً منطقی است. خب، سپس فیلتر D را تغییر می‌دهیم و به آن اجازه می‌دهیم فقط در ساعت‌های سودده ترید کند. به‌عبارت دیگر، یک نوع ماسک فیلتر ایجاد می‌کنیم. اکنون می‌توانیم فیلتر D نهایی‌شده را درون کد قرار داده و گزارش تست را ببینیم.

 //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && (Hour()==0                       
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         ) 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && (Hour()==0 
         || Hour()==6 
         || Hour()==9 
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         ) 
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }   

 

جادوی فیلتر کردن

 

جادوی فیلتر کردن

شکل ۸. نمودار بالانس سرمایه. فیلتر D با ساعت

تحلیل نتایج فیلتر کردن:

  1. کاهش ضرر – بدست نیامد. مقدار آن کاسته نشد، بلکه حتی خیلی کم افزایش هم داشت (۳۰۰۱.۷۴ => 3016.21)؟؟!!
  2. درآمد خالص تقریباً ۵۰ درصد (۴۴۰۸.۹۱ => 6567.66) افزایش داشت. اما تعداد تراکنش‌ها تقریبا ۲ برابر کاهش داشته است (۳۲۸۴ => 1590).
  3. سود مورد انتظار فیلتر D (4.13) بیشتر از بهترین مقدار تمام فیلتر‌های P بررسی‌شده (۳.۵۹) می‌باشد.
  4. تعداد تراکنش‌های سودده کاهش داشته است (۶۴.۹۸% => 62.52%). به‌عبارت دیگر، این فیلتر نه‌تنها تراکنش‌های غیرسودده بلکه حتی برخی از تراکنش‌های سودده را نیز حذف کرده است.

نتایج:

  • فیلترینگ مجزا (فیلتر D) تاثیرگذارتر از فیلتر P است، اما نیازمند تنظیم‌های دقیق‌تر و همینطور شرایط ورودی مطلوب، می‌باشد.

فیلترینگ سیگنال‌ها با استفاده از ۲ یا چند فیلتر

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

برای دست‌یابی به این هدف، فیلتر‌های اشاره‌شده را برداشته و برای ساده‌سازی کار، آن‌ها را بدین شکل برچسب‌گذاری می‌کنیم: فیلتر شماره ۱ (P-filter “PERIOD_H1”) و فیلتر شماره ۲ (D-filter). در ابتدا، خیلی ساده یکی را به‌ دیگری اضافه می‌کنیم. برای این کار باید کد اکسپرت را تغییر دهیم.

  //+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      //---- filter №۱
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filter №۲
      && (Hour()==0                                                         
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )       
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      //---- filter №۱
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filter №۲
      && (Hour()==0                       
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )       
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }

سپس این ترکیب ایجادشده از فیلترها را تست کرده و گزارش زیر را دریافت خواهیم کرد.

بالانس سرمایه

جادوی فیلتر کردن

شکل ۹. نمودار تغییرات بالانس سرمایه. دو فیلتر: فیلتر P و فیلتر D (اضافه کردن)

هرچند، می‌شد این دو فیلتر را طور دیگری به هم متصل کرد. فرض کنید فیلتر شماره ۱ بهتر از فیلتر شماره ۲ تنظیم شده‌است. پس نیاز خواهیم داشت که یک فیلتر D جدید بسازیم. اکنون کد اکسپرت ما مانند زیر خواهد بود. تستر را در حالت بهینه اجرا کرده و خصوصیات فیلتر شماره ۲ را بدست می‌آوریم (ترید با ساعت).

جادوی فیلتر کردن

 

//+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      //---- filter №۱
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filter №۲
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      //---- filter №۱
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filter №۲
      && Hour()==Filter.Hour 
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }

 

جادوی فیلتر کردن

شکل ۱۰. تغییرات سود با توجه به زمان برای ۲ فیلتر D. مقایسه‌ی تطبیقی

در واقع، پاسخ خصوصیات فیلتر تغییر کرده است. و جای تعجب ندارد اگر خصوصیات آن، با توجه به اضافه کردن فیلتر شماره ۱، عوض شده باشند. متعاقباً، نیاز است ماسک فیلتر ۲ را هم تغییر دهیم.

جادوی فیلتر کردن

شکل ۱۱. خصوصیات پاسخ فیلتر شماره ۲. فیلترینگ D با ساعت (بهینه‌سازی‌شده)

 

شکل نهایی اکسپرت

//+---------------------------------------------------------------------------------+
   //   BUY Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      //---- filter №۱
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filter №۲
      && (Hour()==0                       
         || Hour()==1                     
         || Hour()==6                     
         || Hour()==7                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==12 
         || Hour()==14 
         || Hour()==15 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )      
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   SELL Signals
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      //---- filter №۱
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filter №۲
      && (Hour()==0                       
         || Hour()==1                     
         || Hour()==6                     
         || Hour()==7                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==12 
         || Hour()==14 
         || Hour()==15 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )      
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

 

بالانس سرمایه

جادوی فیلتر کردن

 

جادوی فیلتر کردن

شکل ۱۲. نمودار تغییرات بالانس سرمایه، که نتیجه‌ی بهینه‌سازی خصوصیات دو فیلتر است.

 

برای ساده‌تر کردن تحلیل گزارش‌های دریافتی، آن‌ها را در جدول زیر آورده‌ایم.

جادوی فیلتر کردن

جدول ۲. جدول مقایسه‌ی گزارش‌های تست ترکیب دو فیلتر: فلیترهای P و D

تحلیل نتایج:

  1. اگر مبنای مقایسه‌ی ما معیارهای درآمد، سود، و سود مورد انتظار، باشد، آن‌گاه بهترین نتایج ما وقتی بوده است که دو فیلتر را به‌هم اضافه کرده‌ایم.
  2. اگر روی ضررها تمرکز کنیم، آنگاه برنده‌ گزینه‌ی بهینه‌سازی فیلتر خواهد بود.
  3. در هر صورت، فیلترینگ خصوصیات سیستم‌های ترید خودکار را بهبود بخشیده است.

نتیجه‌گیری

  1. جادوی فیلترینگ چیست؟ درواقع جادوی آن درون ساده بودن آن و توانایی آن برای تغییر خصوصیات هر نوع اکسپرتی نهفته است.
  2. پیشنهاد ساختن فیلتر، صرفاً برای کپی‌کاری ارائه نشده است. بلکه نشان می‌دهد که چگونه فیلترهای ‌P و D را می‌توان برای هر نوع اکسپرت بخصوصی توسعه داد. فیلتری که برای این اکسپرت مناسب است، شاید باعث از کار اُفتادن دیگری شود!
  3. و به یاد داشته باشید که یک سیستم ایده‌آل ترید خودکار نیازی به فیلتر ندارد! … رویای شما ساختن چنین سیستمی است. درست است؟
  4. می‌دانم که این کدها و اکسپرت‌ها و فیلتر‌ها بهینه‌سازی نشده‌اند و واقعاً ایده‌آل نیستند اما به‌خاطر اهداف این مقاله این نوع ساختار برنامه‌نویسی را انتخاب کردیم. این کار را کردیم تا هر “خل و چلی” هم بتواند فرآیند‌های اشاره‌شده در بالا را تکرار کند و فیلتر منحصربه‌فرد خود را بسازد.
  5. توجه! اکسپرتی که در این مقاله آمده را اصلاً در ترید واقعی استفاده نکنید!!!

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

[۱] ) اکسپرت drainer که در اصطلاح به آن اکسپرت مکنده هم می‌گویند و سودده نیست.

[۲]) pseudo-Grail

[۳]) not enough money to open a position


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

M23admin

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

نمونه اکـــســپــرت

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

یک‌بار دیگر زیگزاگ‌ها

۳۵ مورد نظر

نوشتن نظر شما

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