Скачать MetaTrader 5

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

14 ноября 2006, 17:16
Slobodov Gleb
7
3 104

Введение

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

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

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

 

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

 


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

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


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

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


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


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


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

           

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


     

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

 

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

//+------------------------------------------------------------------+
//|                                                 ExportLevels.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://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 ноября 


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


Прикрепленные файлы |
ExportLevels.mq4 (1.33 KB)
Max
Max | 15 ноя 2006 в 13:51
shobvas писал(а):
Имелись ввиду локальные минимумы
такс, уже лучше, но все равно не понятно...
минимум потому и называется локальным, что он он является минимумом только на некотором интервале значений функции.
возникает вопрос - а как выбираются интервалы?

з.ы. идея интересная, статья хорошая, но тема не раскрыта ;)
Slobodov Gleb
Slobodov Gleb | 15 ноя 2006 в 14:10
Demax:
shobvas писал(а):
Имелись ввиду локальные минимумы
такс, уже лучше, но все равно не понятно...
минимум потому и называется локальным, что он он является минимумом только на некотором интервале значений функции.
возникает вопрос - а как выбираются интервалы?

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

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

з.ы. Спасибо за добрые отзывы ;)
MQL4 Comments
MQL4 Comments | 18 ноя 2006 в 18:05
shobvas:
Demax:
shobvas писал(а):
Имелись ввиду локальные минимумы
такс, уже лучше, но все равно не понятно...
минимум потому и называется локальным, что он он является минимумом только на некотором интервале значений функции.
возникает вопрос - а как выбираются интервалы?

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

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

з.ы. Спасибо за добрые отзывы ;)
Было бы полезней отображать уровни на основном графике , при этом толщина и насыщенность линий должна соответствовать силе уровня. Пригодилось бы для экспертописания.
Slobodov Gleb
Slobodov Gleb | 19 ноя 2006 в 00:07
FION:
Было бы полезней отображать уровни на основном графике , при этом толщина и насыщенность линий должна соответствовать силе уровня. Пригодилось бы для экспертописания.
Следите за новыми статьями =) Больше мне сказать нечего
Chingiz Gavryushkaev
Chingiz Gavryushkaev | 2 янв 2009 в 13:33
отличная статья, тока вот у меня в экселе не числа а дата отображается хотя делаю все так как в статье. посоветуйте не пойму чето
Индивидуальная психология трейдера Индивидуальная психология трейдера

Описание поведения трейдера на финансовом рынке. Личная подборка автора из книги А.Элдера "Как играть и выигрывать на бирже".

Запуск на Linux-desktop клиентского терминала MetaTrader 4 build 198 Запуск на Linux-desktop клиентского терминала MetaTrader 4 build 198

Описание пошаговой подготовки Linux-desktop с использованием неэмулятора wine для запуска на нем клиентского терминала MetaTrader 4 build 198.

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

Эта статья посвящена поиску и отображению Уровней Поддержки и Сопротивления в программе MetaTrader 4. На основе простого алгоритма строится удобный и универсальный индикатор. Эта статья затрагивает так же такую полезную тему, как создание простого индикатора, способного отображать в одну рабочую область результаты с разных периодов времени.

Фильтр на основании истории торговли Фильтр на основании истории торговли

В статье рассматривается использование виртуальной торговли, как составной части фильтра открытия сделок.