
جادوی فیلتر کردن
مقدمه
اکثر توسعهدهندگان سیستمهای ترید خودکار (ATS)، کموبیش، از برخی از فیلترینگهای سیگنال استفاده میکنند. اگرچه این روش تنها راه بهبود سیستم نیست، اما تقریباً موثرترینِ راههاست. معمولاً “تازهکارها” در فیلتر کردن خیلی خوب عمل نمیکنند. درصورتیکه خیلی راحت میشود چند استراتژی ترید انتخاب کرد که چندین فیلتر در آنها بهکار گرفته شده و در نهایت هم اکسپرتی سودده، حاصل کار خواهد بود.
هرچند، مخالفانی هم در استفاده از فیلتر داریم. فیلترها بهشکلی قابلتوجه (بعضیوقتها تا ۲ – ۳ برابر) تعداد معاملات را کاهش داده، و همچنین نمیشود تضمین کرد که در آینده نیز این فیلترها بهخوبیِ قبل، کار کنند. مسلماً دلایل الزامآور دیگری هم وجود دارد.
پس بیایید نگاهی عمیقتر داشته باشیم و تمام حرفها را یکمرتبه و یکجا بگوییم.
نظریهی بیمعنیبودن فیلترینگ
اگر اکسپرت ما سودده نباشد[۱]، خیلی بعید است که فیلتر بتواند به ما کمک کند. جادوی فیلتر کردن اینجا قدرتی ندارد.
بنابراین، در این مقاله اکسپرتها لحاظ نمیشوند. هرچند، باید بدانیم که مطالعاتی روی فیلترهای کوانتومی فرکانس صورت گرفته، که تقریباً [این فیلترها] قادر هستند هرنوع اکسپرت غیرسودده را به شبهگریل[۲] تبدیل کنند.
نظریهی خطرات فیلترینگ
اگر اکسپرتی داشته باشیم که در شرایط عادی، مطلوب کار میکند و به یک سیستم ایدهآل ترید تبدیل شده، آنگاه استفاده از فیلتر فقط عملکرد آن را مختل میکند [و اصلاً عقلانی نیست].
البته باید مشخص کنیم منظور ما از سیستم ایدهآل ترید چیست. در اینجا منظور ما یک استراتژی ترید است که فقط تراکنشهای سودده انجام میدهد؛ بهعبارت دیگر، هیچ ضرری برای ما ندارد. در چنین سیستمی، تعداد معاملات غیرسودده برابر است با صفر.
فیلتر چیست؟
به سادهترین شکل ممکن بگوییم، فیلتر سیگنال ترید، یک نوع محدودیت منطقی است، مانند: اگر A کمتر از B نباشد (A> = B)، آن سیگنال خط میخورد، و اگر کمتر باشد، سیگنال خط نخواهد خورد. در نتیجه بخشی از سیگنال حذف میشود. شرایط و قوانین فلیترینگ را توسعهدهندگان رباتهای ترید تعیین میکنند. بهمنظور ایجاد برخی از انواع روند، نیاز داریم تاثیر بعضی از فاکتورهای متفاوت را روی خصوصیات سیستمهای ترید خودکار (ATS)، بررسی، و تجزیه و تحلیل کنیم. متاسفانه یا خوشبختانه، طیف وسیعی از چنین فاکتورهایی وجود دارد. بنابراین میبایستی درک مستقیم و شهود را حذف کرده تا بتوان مرتبطترین و سازگارترین فاکتورها را انتخاب کرد.
مثال. شاید یک نوع همبستگی بین نتایج سیستمهای ترید خودکار (ATS) و فشار جوّ در روستای کوکوشکینو وجود داشته باشد. میتوانید فیلتری مناسب ایجاد کرده و سوددهی اکسپرت را افزایش دهید، بطوریکه شرایط جوی در این منطقهی کوچک در روسیه، در فیلتر و اکسپرت لحاظ شود. هرچند، بعید است کسی بابت این نوع خلاقیت در فیلترینگ، از شما تشکر کند، حتی با اینکه باعث شدهاید سوددهی سیستم بیشتر شود!
طبقهبندی فیلترها
هرچند طیف وسیعی از فیلترهای مورداستفاده در سیستمهای ترید خودکار موجود است، اما باز هم میتوان آنها را در دو گروه اصلی تقسیمبندی کرد:
- فیلترهای میانگذر یا Bandpass (فیلتر P) – این فیلتر یک باند از سیگنالها را مخابره میکند؛
- فیلتر مجزا یا Discrete (فیلتر D) – این فیلتر سیگنالها را بهصورت انتخابی با استفاده از ماسک (قالب) مخابره میکند.
از کجا شروع کنیم؟
بیایید مکانیزم فیلترینگ را با یک مثال بررسی کنیم. از اکسپرت DC2008_revers استفاده میکنیم (فایلهای پیوست را ببینید) که مخصوص این مقاله ایجاد شدهاست. خصوصیات این اکسپرت را بررسی کنید (بدون استفاده از هیچ نوع فیلتری). در اینجا گزارشی داریم که طی فرآیند تست آن را کامل کردهایم.
گزارش
شکل ۱. نتایج بدستآمده از انجام تست روی بخش تاریخچه. اکسپرت اولیه بدون فیلتر
تحلیل نتایج :
- اکسپرت ما سودده است و معاملات ما بیش از ۶۰ درصد بُرد بودهاند که این خیلی خوب است.
- بیشترین میزان ضرر ۲۰ درصد سرمایه بوده که میشود بیش از ۳۰۰۰ دلار آنهم با حداقل لاتیج که این اصلاً خوب نیست.
- تعداد کل معاملات برای استفاده از فیلتر کافی است (۳۰۰۰ <).
البته، این نتایج مربوط به همین بخش از تاریخچه میشوند که ما به اکسپرت دادهایم. و مشخص نیست اکسپرت جاهای دیگر چطور ترید خواهد کرد. هرچند، این موضوع باعث نمیشود از دست بردن در تنظیمات اکسپرت و استفاده از فیلترینگ منصرف شویم.
بنابراین، برای این اکسپرت باید دنبال فیلترهایی بگردیم که سوددهی را بالا برده و ضرر را کم کنند.
فیلترهای میانگذر یا 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
تحلیل نتایج:
- درآمد خالص در فیلتر P فقط در “PERIOD_H1” افزایش داشته است (۴۴۰۸.۹۱ => 4829.05).
- پیشگام در بازپرداخت مورد انتظار، فیلتر P “PERIOD_M30” بوده است (۱.۳۴ => 3.59).
- حداکثر ضرر، در تمام فیلترها کاهش داشته است. حداقل مقدار ضرر در فیلتر “PERIOD_M5” (3001.74 => 1608.30) دیده شد.
- فیلترینگ، تعداد کل تراکنشها را ۱.۵ تا ۳ برابر کاهش داد.
نتایج:
- فیلتر 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 با ساعت
تحلیل نتایج فیلتر کردن:
- کاهش ضرر – بدست نیامد. مقدار آن کاسته نشد، بلکه حتی خیلی کم افزایش هم داشت (۳۰۰۱.۷۴ => 3016.21)؟؟!!
- درآمد خالص تقریباً ۵۰ درصد (۴۴۰۸.۹۱ => 6567.66) افزایش داشت. اما تعداد تراکنشها تقریبا ۲ برابر کاهش داشته است (۳۲۸۴ => 1590).
- سود مورد انتظار فیلتر D (4.13) بیشتر از بهترین مقدار تمام فیلترهای P بررسیشده (۳.۵۹) میباشد.
- تعداد تراکنشهای سودده کاهش داشته است (۶۴.۹۸% => 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
تحلیل نتایج:
- اگر مبنای مقایسهی ما معیارهای درآمد، سود، و سود مورد انتظار، باشد، آنگاه بهترین نتایج ما وقتی بوده است که دو فیلتر را بههم اضافه کردهایم.
- اگر روی ضررها تمرکز کنیم، آنگاه برنده گزینهی بهینهسازی فیلتر خواهد بود.
- در هر صورت، فیلترینگ خصوصیات سیستمهای ترید خودکار را بهبود بخشیده است.
نتیجهگیری
- جادوی فیلترینگ چیست؟ درواقع جادوی آن درون ساده بودن آن و توانایی آن برای تغییر خصوصیات هر نوع اکسپرتی نهفته است.
- پیشنهاد ساختن فیلتر، صرفاً برای کپیکاری ارائه نشده است. بلکه نشان میدهد که چگونه فیلترهای P و D را میتوان برای هر نوع اکسپرت بخصوصی توسعه داد. فیلتری که برای این اکسپرت مناسب است، شاید باعث از کار اُفتادن دیگری شود!
- و به یاد داشته باشید که یک سیستم ایدهآل ترید خودکار نیازی به فیلتر ندارد! … رویای شما ساختن چنین سیستمی است. درست است؟
- میدانم که این کدها و اکسپرتها و فیلترها بهینهسازی نشدهاند و واقعاً ایدهآل نیستند اما بهخاطر اهداف این مقاله این نوع ساختار برنامهنویسی را انتخاب کردیم. این کار را کردیم تا هر “خل و چلی” هم بتواند فرآیندهای اشارهشده در بالا را تکرار کند و فیلتر منحصربهفرد خود را بسازد.
- توجه! اکسپرتی که در این مقاله آمده را اصلاً در ترید واقعی استفاده نکنید!!!
این مقاله دارای فایل پیوست است.
[۱] ) اکسپرت drainer که در اصطلاح به آن اکسپرت مکنده هم میگویند و سودده نیست.
[۲]) pseudo-Grail
[۳]) not enough money to open a position
۳۵ مورد نظر
ed medicines
buy prednisone without rx buy prednisone buy prednisone mexico
cost of prednisone in canada prednisone 20 mg tablet price cheap generic prednisone
ivermectin pellets for horses ivermectin dosage for lyme disease edenbridge pharmaceuticals ivermectin
ivermectin 500ml ivermectin for lice on humans ivermectin in canada
medicine for erectile buy prescription drugs from canada buy ed pills online
ordering cialis in canada cialis pills cialis with dapoxetine or viagra with dapoxetine better
ivermectin pour-on for horses ivermectin dose scabies buying ivermectin
cheap erectile dysfunction pills online online ed pills non prescription erection pills
ivermectin treatment for lyme disease how much 1.87 ivermectin for horses do i give 15 lb dog heartgard plus ivermectin pyrantel
natural remedies for ed mens ed pills best male enhancement pills
canadian online drugstore canadian pharmacy the canadian drugstore
cattle ivermectin for humans price of ivermectin tablets ivermectin toxicity treatment
ed meds ed pills gnc best ed drugs
erection pills online cure ed best medication for ed
erection pills online medication for ed dysfunction erection pills online
order modafinil 100mg online order modafinil 100mg generic
canadian pharmacies not requiring prescription online pharmacies without prior prescription highest rated canadian pharmacies
brand modafinil purchase modafinil
aarp approved canadian online pharmacies highest rated canadian pharmacies pharmacy without dr prescriptions
modafinil buy online order provigil 100mg for sale
buy modafinil 100mg pills
online purchase of tadalafil in india online purchase of tadalafil in india cialis
cheap modafinil 100mg modafinil tablet
stromectol price usa stromectol ivermectin without a doctor prescription
buy modafinil 200mg purchase modafinil online
buy provigil 200mg pills order provigil 200mg online
tadalafil best price 20 mg tadalafil best price 20 mg cialis pills
cialis pills cialis coupon cialis 20 mg price
stromectol without a doctor prescription stromectol pills for humans stromectol 3 mg tablets price
cheap modafinil 100mg provigil for sale
provigil for sale online
buy clomid buy clomid 50mg clomid for sale canada
modafinil cheap modafinil without prescription
buy generic modafinil 200mg