روشی برای ترسیم خطوط ساپورت و رزیستنس

روشی برای ترسیم خطوط ساپورت و رزیستنس

مقدمه

خطوط ساپورت و رزیستنس جزء یکی از ابتدایی‌ترین و اصلی‌ترین ابزارهایی هستند که تقریباً هر تریدری با آنها کار می‌کند. این خطوط را می‌توانید در بسیاری از پیش‌بینی‌ها پیدا کنید، و هر تریدری باید بتواند این خطوط را به‌طور مستقل شناسایی کند.

این مقاله فرآیند ساخت یک اسکریپت ساده برای شناسایی خطوط ساپورت و رزیستنس را توصیف می‌کند. این مقاله برای تازه‌کارها نوشته شده‌است و می‌توانید‌ توضیحات هر مرحله از فرآیند را همراه با جزئیات، داشته باشید. هرچند، با اینکه این اسکریپت خیلی ساده است اما این مقاله برای تریدرها و کاربران حرفه‌ای متاتریدر ۴ هم بسیار مفید خواهد بود. این مقاله شامل مثال‌هایی از خروجی گرفتن داده‌ها با فُرمت[۱] جدولی است، [که می‌توان] جدول را در مایکروسافت اِکسل وارد کرد و نمودارها را برای تحلیل‌های بیشتر و جزئی‌تر، رسم نمود.

خطوط ساپورت و رزیستنس

در پایین می‌توانید دو خط ساپورت و رزیستنس را مشاهده کنید.

خیلی نمی‌خواهیم عمیق وارد معنای این اصطلاح شویم. در بیشتر کتاب‌هایی که خطوط ساپورت و رزیستنس را توضیح داده‌اند، این گزاره را پیدا می‌کنید که، بیشتر وقت‌ها خوانش‌ها بین این دو خط در حرکت هستند و خیلی به‌نُدرت این دو خط را قطع می‌کنند.

مدرکِ اثبات این گفته را در تصویر زیر می‌توانید ببینید.

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

ساخت یک اسکریپت

ابتدا، باید یک اسکریپت جدید بسازیم.

روشی برای ترسیم خطوط ساپورت و رزیستنس

برای انجام این کار، به پنجره‌ی “Navigator” می‌رویم و سپس روی بخش “Scripts” راست‌کلیک کرده و “Create” را انتخاب می‌کنیم. پنجره‌ی جدید ظاهر می‌شود. مطمئن شوید نوع برنامه‌ای که می‌خواهید بسازید، از نوع اسکریپت است و سپس “Next” را کلیک کنید.

روشی برای ترسیم خطوط ساپورت و رزیستنس

سپس از شما خواسته می‌شود نام اسکریپت و پارامترهای آن را وارد کنید. بعد از کلیک کردن روی “Done”، می‌توانید نوشتن اسکریپت را شروع کنید.

روشی برای ترسیم خطوط ساپورت و رزیستنس

نوشتن اسکریپت

سورس کد اسکریپت بیش از ۲۰ خط نمی‌شود:

//+------------------------------------------------------------------+
//|                                                 ExportLevels.mq4 |
//|                      Copyright © ۲۰۰۶, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © ۲۰۰۶, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
 
#property show_inputs
extern int MaxLimit = 1000;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   int handle;
   handle = FileOpen("FindLevels.txt", FILE_CSV|FILE_WRITE, '\t');
   FileWrite(handle, "Cost", "Bars Num");
   double d1 = Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)];
   double d2 = High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)];
   for (double d = d1; d d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i MaxLimit; i++)
           if(d > Low[i] && d High[i])
               a+=1;   
       FileWrite(handle, d, a);
     } 
   FileClose(handle);
   return(0);
  }
//+------------------------------------------------------------------+

این اسکریپت فقط از یک تابع، یعنی تابع start()، تشکیل شده‌است. و هر بار که اسکریپت را فرامی‌خوانید، اجرا می‌شود. در اینجا می‌توانید توضیحات جزئی‌تر سورس کد را مشاهده کنید:

#property show_inputs
extern int MaxLimit = 1000;

اولین خط، مشخص می‌کند که قبل از اجرای اسکریپت، از کاربر خواسته می‌شود، پارامترهای اکسترنال را انتخاب کند. در واقع، تنها یک پارامتر در خط دوم تعریف شده‌است. پارامتر MaxLimit، با تعداد کندل‌های هیستوری که برنامه از آنها استفاده می‌کند، سَروکار دارد. به‌طور پیش‌فرض این تعداد ۱۰۰۰ است، اما کاربر می‌تواند هر زمان، آن را تغییر دهد.

 int handle;
   handle = FileOpen("FindLevels.txt", FILE_CSV|FILE_WRITE, '\t');
   FileWrite(handle, "Cost", "Bars Num");

دو خطِ اولِ تابع start()، با باز کردن فایل “FindLevels.txt” با پارامترهای FILE_CSV (یعنی این فایل یک جدول متنی است) و FILE_WRITE (یعنی این فایل برای نوشتن، باز شده‌است)، سروکار دارد. پارامتر ‘\t’ مشخص می‌کند که ارقام درون فایل، با جدول‌بندی از هم جدا می‌شوند. در این فایل دو ستون خواهیم داشت: ستون اول “Cost” – قیمت، نام دارد و ستون دوم، “Bars Num” – تعداد کندل‌هایی که این قیمت را قطع می‌کنند. با استفاده از تابع FileWrite()، نام ستون‌ها را در فایل “FindLevels.txt” می‌نویسیم.

  double d1 = Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)];
   double d2 = High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)];

آنگاه حداقل و حداکثر قیمت، از کندل صفر تا کندلی که در هیستوری، عدد MaxLimit را دارد، پیدا می‌کنیم (منظور از عدد MaxLimit این است که ما قبلاً برای تعداد کندل‌های هیستوری که برنامه از آنها استفاده می‌کند، محدودیتی تعیین کرده‌ایم، و در اینجا می‌گوید از صفر تا آن عددِ تعیین‌شده، پیش‌ می‌رویم). iLowest() شاخص کندل را، جاییکه پایین‌ترین قیمت را می‌توان پیدا کرد، نشان می‌دهد. یک Low[]، پایین‌ترین مقدار قیمت برای این کندل است. همین رویه را برای iHighest() و High[] هم داریم.

  for (double d = d1; d <= d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i < MaxLimit; i++)
           if(d > Low[i] && d < High[i])
               a+=1;   
       FileWrite(handle, d, a);
     }

بعد از آن، یک سیکل for داریم. این سیکل قیمت‌ها را از پایین‌ترین قیمت d1 تا بالاترین قیمت d2 با ۰.۰۰۰۱ [رقم اعشار]، اداره می‌کند. متغیر “a”، تعداد کندل‌هایی است که قیمت “d” را قطع می‌کنند. دومین سیکل قرارداده‌شده، کندل‌های هیستوری MaxLimit را اداره کرده و بررسی می‌کند که آیا آنها قیمت “d” را قطع کرده‌اند یا نه. بعد از پایان سیکل قرارداده‌شده، رویه‌ی FileWrite، قیمت “d” و تعداد کندل‌های “a” را درون فایل می‌نویسد.

  FileClose(handle);
   return(0);

در پایانِ رویه‌ی start()، فایل را می‌بندیم و با استفاده از تابع return()، رویه را تمام می‌کنیم. بعد از آنکه اسکریپت را نوشتیم، می‌توانیم با کلیک کردن روی “Compile” آن را کامپایل کنیم و از بخش “Scripts” در متاتریدر در پنجره‌ی “Navigator”، آن را اجرا کنیم.

فایل با اِکسل

بعد از فراخوانی اسکریپت، برنامه، فایل “FindLevels.txt” را در پوشه‌ی “\experts\files\” می‌سازد. بیایید آن را در اِکسل باز کنیم. برای انجام این کار، باید اِکسل را باز کرده و در قمست Open، نوع فایل‌ها را      “Text Files” انتخاب کرده، فایل را پیدا و آن را باز می‌کنیم.

روشی برای ترسیم خطوط ساپورت و رزیستنس

در دو پنجره‌‌ی اول، نباید چیزی را تغییر دهیم. فقط روی Next کلیک کنید.

روشی برای ترسیم خطوط ساپورت و رزیستنس

در پنجره‌ی سوم، روی دکمه‌ی Advanced کلیک کرده، و نماد نقطه ( . ) را برای نقطه اَعشار، و نماد ‘ (apostrophe) را برای جداسازی هزارتا هزارتا، انتخاب کنید. سپس Ok را زده و بعد از آن Finish.

روشی برای ترسیم خطوط ساپورت و رزیستنس

در نتیجه، دو ستون در اِکسل خواهیم داشت. اکنون باید نمودار را رسم کنیم. به تَبِ Insert و سپس Chart بروید.

روشی برای ترسیم خطوط ساپورت و رزیستنس

آخرین کاری که باید انجام دهیم انتخاب نوع نمودار و نحوه‌ی نمایش آن است.

روشی برای ترسیم خطوط ساپورت و رزیستنس

در نهایت، نمودار کندل بر قیمت را داریم.

روشی برای ترسیم خطوط ساپورت و رزیستنس

می‌توانید ببینید که مقادیر حداقلی نمودار در نقاط ۱.۲۵۸۲، ۱.۲۶۱۶، ۱.۲۶۴۴، ۱.۲۷۰۵، ۱.۲۷۱۲، ۱.۲۷۳۰، ۱.۲۷۴۴، ۱.۲۸۵۰، ۱.۲۸۷۹، واقع شده‌اند. اینها خطوط ساپورت و رزیستنس هستند.

می‌توانیم نتایج تاریخ ۱۰/۱۱/۲۰۰۶ را با تاریخ قبلی یعنی ۹/۱۰/۲۰۰۶ مقایسه کنیم:

رزیستنس ۴  $۱.۲۸۸۰  بیشترین مقدار در ۳۱ آگوست

رزیستنس ۳  $۱.۲۸۶۵  ۱.۶۱۸ هدف سوئینگ بعد از سقوط از ۱.۲۷۹۵ به ۱.۲۶۸۰

رزیستنس ۲  $۱.۲۸۳۰  ۷۶.۴% فیبوناچی از ۱.۲۹۴۰ تا ۱.۲۴۸۵

رزیستنس ۱  $۱.۲۸۰۵  رزیستنس ساعت[۲]

خط کنونی: ۱.۲۶۷۰

ساپورت ۱   $۱.۲۷۴۵   خط روند صعودی برای سه هفته

ساپورت ۲   $۱.۲۷۳۰  ۶۱.۸% فیبوناچی از ۱.۲۶۸۰ تا ۱.۲۸۲۰

ساپورت ۳   $۱.۲۷۱۵  ۷۶.۴% فیبوناچی از ۱.۲۶۸۰ تا ۱.۲۸۲۰

ساپورت ۴   $۱.۲۶۸۰  کمترین مقدار در ۳ نوامبر

همانطور که می‌بینید، همبستگی خوبی بین نمودار و پیش‌بینی‌ها وجود دارد. و این یعنی، خطوطی که پیدا کردیم، خطوط ساپورت و رزیستنس واقعی هستند!

 

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

[۱]) Tabular

[۲]) The hour resistance

M23admin

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

زبان MQL4 برای تازه‌کارها، سوالات سخت با جملات ساده

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

رویـداد‌هـا در مـتـاتـریـدر ۴

۲۴ مورد نظر

نوشتن نظر شما

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