Один способ построения уровней поддержки и сопротивления

Slobodov Gleb | 14 ноября, 2006

Введение

Уровни поддержки и сопротивления - базовый инструмент, которым пользуются практически все трейдеры. В большинстве прогнозов присутствуют эти уровни и каждый трейдер должен уметь находить их самостоятельно.

В данной статье описывается процесс создания простейшего скрипта для вычисления уровней поддержки и сопротивления. Статья ориентирована на новичков, поэтому каждый момент процесса разобран очень подробно. Однако, несмотря на всю простоту скрипта, изучение данной статьи, вероятно, будет полезным и для людей более продвинутых в трейдинге и владении платформой MetaTrader 4, так как содержит в себе  пример экспорта данных в текстовую таблицу, импорта ее в MicrosoftExcel и построения графиков для дальнейшего подробного анализа.
   

Уровни поддержки и сопротивления

 

На рисунке показаны два уровня поддержки и сопротивления.

 


Не будем точно углубляться в определение этого понятия, просто заметим, что в большинстве литературы, которая затрагивает уровни поддержки и сопротивления, сказано, что в течении подавляющего количества времени котировки колеблются между этими линиями и пересекают их достаточно редко.

Это хорошо видно на следующем рисунке.


Воспользуемся этим свойством уровней поддержки и сопротивления. Для их поиска нам необходимо посчитать, сколько раз котировки пересекают каждый уровень цены.
 

Сам по себе этот подсчет не представляет проблемы. В результате расчетов мы получим соответствие между каждой ценой и количеством баров, которые эту цену пересекли. Проблема заключается в том, чтобы вывести результаты. Сделать это с помощью графика индикатора в MetaTrader’е невозможно, так как нам нужен не график цены от времени, а график количества баров от цены. Поэтому и придется экспортировать данные и анализировать их в какой-то другой программе.


Создание скрипта


Сперва нам надо создать новый скрипт.


Для этого в окне «Навигатор» нажмем правой кнопкой мыши на разделе «Скрипты» и выберем команду «Создать». В появившемся новом окне убедимся, что тип программы, которую мы создаем, именно скрипт и нажмем кнопку «Далее».

           

Затем нам предложат ввести имя и параметры скрипта. После нажатия кнопки  «Готово» можно будет приступать собственно к самому написанию скрипта.


     

Написание скрипта

 

Исходный текст скрипта представляет из себя не более двадцати строчек:

//+------------------------------------------------------------------+
//|                                                 ExportLevels.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, 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 отвечает за количество баров в истории, по которым проходит программа. По умолчанию он 1000, но пользователь может его поменять по своему усмотрению.

   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. Функция 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 с шагом 0.0001. Переменная a – количество баров, которые пересекают данную цену d. Второй вложенный цикл for прогоняет MaxLimit баров истории и проверяет на пересечение с ценой d. Если некоторый бар пересекает эту цену, то a увеличивается на единицу. После завершения вложенного цикла процедура FileWrite записывает в наш файл цену d и количество баров a.
   FileClose(handle);
   return(0);
В конце самой процедуры start() мы закрываем файл и выходим из процедуры функцией return().
 

После того, как мы написали скрипт, можно смело его компилировать, нажав на кнопку «Compile» и запускать его в MetaTrader’e из раздела «Скрипты» в окне «Навигатор».


Открытие файла Excel’ем


После запуска скрипта программа создала файл «FindLevels.txt» в папке «\experts\files\». Откроем ее с помощью Excel’а. Для этого запустим MicrosoftExcel и нажмем кнопку открыть, выберем тип файлов «Text Files», найдем наш файл и нажмем кнопку «Open».

 

В первых двух окнах, которые откроет нам Excel ничего не меняем, просто нажимаем кнопку «Next».


 



В третьем окне нажимаем на кнопку «Advanced» и выбираем символ точку «.» для разделителя целой и дробной части и символ апостроф «’» для разделителя тысяч. После этого жмем «Ok» и «Finish».


 Как результат в Excel должны загрузиться два столбца. Теперь осталось только нарисовать график. Для этого выбираем Insert-> «Chart».



И  самое последнее, что мы делаем, это выбираем тип будущего графика и тип его отображения.

 



В результате мы получим график количества баров от цены.
 


Легко заметить что минимумы полученного графика находятся в точках 1.2582, 1.2616, 1.2644, 1.2705, 1.2712, 1.2730, 1.2744,  1.2850, 1.2879. Это и есть уровни поддержки и сопротивления.


Можно сравнить полученные нами результаты на 10.11.2006 с прогнозами для предыдущего дня от 9.10.2006:

RES 4 $1.2880 максимум 31 августа
RES 3 $1.2865 1.618 свинговая цель после падения от 1.2795 до 1.2680
RES 2 $1.2830 Фибоначчи 76.4% от 1.2940 до 1.2485
RES 1 $1.2805 часовое сопротивление
Текущий уровень: 1.2760
SUP 1 $1.2745 линия 3-недельного восходящего тренда
SUP 2 $1.2730 Фибоначчи 61.8% от 1.2680 до 1.2820
SUP 3 $1.2715 Фибоначчи 76.4% от 1.2680 до 1.2820
SUP 4 $1.2680 минимум 3 ноября 


Как видно совпадение с прогнозами неплохое. А это значит что те уровни, которые мы нашли, действительно уровни поддержки и сопротивления!