
Один способ построения уровней поддержки и сопротивления
Введение
В данной статье описывается процесс создания простейшего скрипта для вычисления уровней поддержки и сопротивления. Статья ориентирована на новичков, поэтому каждый момент процесса разобран очень подробно. Однако, несмотря на всю простоту скрипта, изучение данной статьи, вероятно, будет полезным и для людей более продвинутых в трейдинге и владении платформой 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’ем
В первых двух окнах, которые откроет нам 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 ноября
Как видно совпадение с прогнозами неплохое. А это значит что те уровни, которые мы нашли, действительно уровни поддержки и сопротивления!





- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Имелись ввиду локальные минимумы
минимум потому и называется локальным, что он он является минимумом только на некотором интервале значений функции.
возникает вопрос - а как выбираются интервалы?
з.ы. идея интересная, статья хорошая, но тема не раскрыта ;)
Имелись ввиду локальные минимумы
минимум потому и называется локальным, что он он является минимумом только на некотором интервале значений функции.
возникает вопрос - а как выбираются интервалы?
з.ы. идея интересная, статья хорошая, но тема не раскрыта ;)
Согласен, что тема с вышеописанным способом определения уровней поддержки не раскрыта до конца. В настоящее время я пишу статью по индикатору отображающему уровни поддержки. В ней я надеюсь вы найдете ответ на вопрос о выбираемых интервалах, и возможно на другие аналогичные вопросы, не затронутые в этой статье. Следите за новыми статьями =)
з.ы. Спасибо за добрые отзывы ;)
Имелись ввиду локальные минимумы
минимум потому и называется локальным, что он он является минимумом только на некотором интервале значений функции.
возникает вопрос - а как выбираются интервалы?
з.ы. идея интересная, статья хорошая, но тема не раскрыта ;)
Согласен, что тема с вышеописанным способом определения уровней поддержки не раскрыта до конца. В настоящее время я пишу статью по индикатору отображающему уровни поддержки. В ней я надеюсь вы найдете ответ на вопрос о выбираемых интервалах, и возможно на другие аналогичные вопросы, не затронутые в этой статье. Следите за новыми статьями =)
з.ы. Спасибо за добрые отзывы ;)
Было бы полезней отображать уровни на основном графике , при этом толщина и насыщенность линий должна соответствовать силе уровня. Пригодилось бы для экспертописания.