الگویی برای تریلینگ اِستاپ و خروج از بازار

تریلینگ اِستاپ

الگویی برای تریلینگ اِستاپ و خروج از بازار

مقدمه

توسعه‌دهندگانِ الگوریتم‌های اصلاح یا بستن معامله، همواره یک دغدغه‌ی تمام‌نشدنی دارند – چگونه نتایج بدست‌آمده از روش‌های مختلف را با یکدیگر مقایسه کنیم؟ مکانیزم این کار کاملا مشخص است – استراتژی تستر. اما چگونه اکسپرتی بسازیم که برای معاملات بازشونده/بسته‌شونده، به یک نسبت کار کند؟ این مقاله ابزاری را معرفی می‌کند که [این ابزار] شرایط را برای تکرارِ قویِ بازشدن‌های معامله، فرآهم می‌آورد، و این کار به ما اجازه می‌دهد که یک پلتفرم درست ریاضی را حفظ کرده و نتایج الگوریتم‌های مختلف برای تریلینگ اِستاپ‌ها و خروج از بازار را با یکدیگر مقایسه کنیم.

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

بیان مسئله

  • الگوهای نقطه‌ی بازشدن/بسته‌شدن معامله، در نمودار علامت‌گذاری شده‌اند.
  • زمآن‌های بازشدن/بسته‌شدن و جهت ترید (buy/sell) در یک فایل ذخیره شده‌اند.
  • اکسپرتی که قرار است فایل آماده‌شده را بخواند و دستورات آن را مو به مو اجرا کند، ایجاد شده‌است.

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

تریلینگ اِستاپ

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

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

  1. تریلینگ پُرجنب‌وجوش در کمترین فاصله از قیمت کنونی.
  2. تریلینگ نُرمال و “صبور”.
  3. تریلینگ ایده‌آل که سودها را تا آخرین قطره از بین می‌برد.

علاوه بر این‌ها، جایی نزدیک نقطه‌ی شماره ۴، ممکن است به اشتباه، تریلینگ بیش از حد “ناصبور”، اتفاق بیُفتد.

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

ابزارهای علامت‌گذاری

برای راحت‌تر کردن علامت‌گذاری نمودار با خطوط موردنظر، بیایید دسته‌ای از اسکریپت‌ها را آماده کنیم. دو اسکریپتِ TL_Buy و TL_Sell خطوط علامت‌گذاری را برای Sell و Buy ایجاد می‌کنند. اسکریپتِ TL_Write تمام خطوط ایجادشده را بررسی کرده و ویژگی‌های آن‌ها را درون یک فایل برای اکسپرتِ TL_Trade جهت کار کردن با آن‌ها، ذخیره می‌کند. اسکریپت دیگر یعنی TL_Read قادر خواهد بود فایل ایجادشده را بخواند، و تمام خطوط را برمبنای آن [فایل] اصلاح کند. این کار احتمالاً برای اصلاح خطوط موجود یا برای اضافه کردن خطوط جدید، یا حتی حذف خطوط کنونی، مفید است.

برای اینکه اسکریپت‌های خواندن/نوشتن قادر باشند با خطوط‌شان کار کنند، تمام این خطوط را بر اساس قوانین خاصی نام‌گذاری خواهیم کرد:

  1. اسامی تمام خطوط ایده‌آل، با یک پیشوند آغاز می‌شوند (TL_). بعدها می‌توانید از این پیشوند برای انتخاب یا حذف خطوط استفاده کنید؛
  2. بعد از پیشوند یک حرف می‌آید که کد عملیات است، B برای Buy، و S برای Sell؛
  3. در اسم خط، بعد از کد عملیات، شماره‌ی خط می‌آید تا خطوط از یکدیگر مجزا باشند.

در نتیجه، برای مثال، در نمودار باید خطوطی با این اسامی داشته باشیم: TL_B1 TL_B2, TL_S3 …

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

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

تثبیت موقعیت فایل

بحث موقعیت فایل‌ها، بسیار بحث مهمی است. در حالت استاندارد، اسکریپت‌های در حالِ کار، فقط می‌توانند فایل‌ها را در مسیر c:\Program Files\MetaTrader 4\experts\files ایجاد کنند. هرچند، هنگام تست اکسپرت‌ها، تستر، به پوشه‌ی دارای همان نام، واقع “در مسیر خودش”، یعنیc:\Program Files\MetaTrader 4\tester\files، دسترسی دارد.

به همین دلیل است که، بعد از ایجاد فایل‌ها، و قبل از استفاده از آن‌ها در اکسپرت آزمایشی، می‌بایستی به‌صورت جداگانه آن‌ها را از c:\Program Files\MetaTrader 4\experts\files  به c:\Program Files\MetaTrader 4\tester\files کپی کنید.

اگر فایل مجدد ایجاد شود و تغییراتی در خطوط آن اتفاق بیفتد، بایستی این کار را تکرار کرد.

اکسپرت آزمایشی

مشکلی با کد اکسپرت آزمایشی نخواهید داشت، و روی این سه قسمت نیز تاکید شده‌است:

  1. قسمتِ بستن معامله هنگامی که به انتهای بخش الگو می‌رسیم؛
  2. قسمت بازکردن معامله هنگامی که به ابتدای بخش الگو می‌رسیم؛
  3. قسمت آزمایش تریلینگ اِستاپ و خروج از بازار.

عملکرد این‌ها کاملا در سورس کد مشخص است. فقط باید به چند مسئله توجه کرد:

  1. از آنجایی که خطوط می‌توانند بدون هیچ نظم خاصی ایجاد شوند، تمام مجموعه‌ی خطوط در هر “تیک” تستر آزمایش خواهد شد، و هدف این کار پیدا کردن خطوطی است که روی آن‌ها بازشدن/بسته‌شدن ضروری است.
  2. زمان‌های بازشدن/بسته‌شدن، با همان فرمت داخلی ثبت زمان و تاریخ، در توضیحات معامله نوشته می‌شوند. این کار ضروری است؛ اول از همه، برای خودمان تا اگر تریلینگ یک معامله را بدون اِشکال، قبل از پایان یافتن خط الگویش، بست، آن را مجدد چندین بار، باز نکنیم. و دوم، هنگام بررسی معاملات باز و مشاهده‌ی زمان بسته‌شدن آن‌ها از قسمت توضیحات، معامله را دقیقاً زمانی که خط کنترل آن پایان یافته‌ است، می‌بندیم، زیرا زمان بسته‌شدن در معامله‌ی باز نوشته شده است.
  3. پارامترProcedTrailing  فرآیند تریلینگ را فعال/غیرفعال می‌کند. این کار به ما اجازه می‌دهد اکسپرت را بدون هیچ‌گونه تریلینگ جهت گرفتن خوشبینانه‌ترین نتیجه برای مقایسه‌ی آن با نتایج بهینه‌سازی بدست‌آمده، داشته باشیم.

چگونه این سیستم هنگامی که “کاملا یکپارچه” است کار می‌کند

جهت تست این سیستم، از یک دسته‌ی کوچک ۱۴ خطی استفاده کرده‌ایم. در اینجا محتوای فایل الگو با نام TL_DATA.txt را می‌بینید:

این فایل روی نمودار اینگونه خواهد بود:

تریلینگ اِستاپ

بهترین ترید نبود، اما بستر خوبی برای تست تریلینگ بود. 🙂

اگر تستر را با تریلینگ اِستاپ‌های غیرفعال (ProcedTrailing=false) اجرا کنیم، چنین نتیجه‌ی ضعیفی خواهیم داشت:

تریلینگ اِستاپ

یک بهینه‌سازی ساده‌ی تریلینگ‌اِستاپ‌گونه، مقدار بهینه‌ی ۹۵ پوینت را به ما می‌دهد.

تریلینگ اِستاپ

این مقدارِ بهینه که بیشترین سود را به ما داده، انطباق خوبی با آمار اندازه‌ی کندل‌های دوره‌ی تحتِ آزمایش، دارد: ۹۵ پوینت، یعنی ۹۸ درصد تمام کندل‌های این دوره، که به‌وضوح می‌توان در نمودارِ اندیکاتور ft.BarStat این را دید.

تریلینگ اِستاپ

همانطور که می‌بینید، نتایج بهینه‌سازی‌شده، بسیار جذاب‌تر به‌نظر می‌رسند:

تریلینگ اِستاپ

حتی می‌توان در نمودار، واضح‌تر این مسئله را دید. لطفاً توجه داشته باشید که تمامی معاملات دقیقاً در آغاز خطوط الگو باز شده‌اند!

تریلینگ اِستاپ

به اولین بخش نگاه کنید (March, 5). یک میله‌ی به سمت پایین بخشی از سود را با خود کَنده و بُرده، اما روند کلی Buy پابرجا مانده است. اگر تریلینگ را با یک اکسپرت معمولی تست می‌کردیم، کاملاً محتمل بود که یک پوزیشن Buy باز کند که تا انتهای خط دوم (بعد از March 17) باقی می‌ماند. در این صورت، نتایج غیرقابل‌مقایسه‌ای بدست می‌آوریم. سودی که در مورد دوم بدست آمد، حاصلِ با موفقیت باز شدنِ تکراری یک معامله‌ی جدید است، نه مکانیزم تریلینگ اِستاپ. هرچند، موضوع، بدست آوردن بیشترین حد سود نیست، بلکه، تا جای ممکن، داشتنِ مکانیزم تریلینگ اِستاپ کارآمد است. به همین دلیل، برای ما بسیار اهمیت دارد که تمامی معاملات همزمان باز شده‌، و برای مدتی طولانی نگه داشته نشده‌اند. هرچند، در این مورد، افزایشِ سودِ حاصل از بهینه‌سازی، کارایی الگوریتم تریلینگ را منعکس خواهدکرد!

نتیجه‌گیری

بسیار امیدوار هستم که بحث در مورد این مقاله تبدیل نشود به صحبت درباره‌ی چیز ناجوری که هیچ‌گاه من انجامش نداده‌ام! – خواننده‌ی مشتاق قطعاً کاربردی برای الگوریتم تحقیقاتی پیشنهاد‌شده پیدا خواهد کرد، حتی اگر به همین شکلی که اینجا آورده شده‌است، باشد. این مقاله ابزاری را توصیف می‌کند که من به آن دست یافته‌ام و ایده‌ی آن مدت‌ها ساکن ذهن من بوده و در نهایت، نظم به آن دادم و به شکل کد MQL4 آن را درآوردم. وقت برای اداره و هدایت تحقیقاتی که این ابزار برای آن ایجاد شده است را نداشتم. و به همین دلیل این مقاله هیچ‌گونه مقایسه‌ی تطبیقی بین الگوریتم‌های تریلینگ مختلف، ندارد. در آینده‌ای نزدیک به این موضوع خواهم پرداخت، و قسمت دوم مقاله به‌زودی برای انتشار آماده خواهد شد. با این حال، این مقاله به‌نظر به همین شکلی که هست، برای کسانی که MQL4 کار می‌کنند، مفید است.

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

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

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

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

امینی

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

اکسپرت متاتریدر ۴ با دنیای بیرون تبادل اطلاعات می‌کند…

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

تست بصری سودآوری اندیکاتورها و هشدارها

نوشتن نظر شما

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

5 + دوازده =