| / | Статьи |
Cтатьи
Примеры
Один способ построения уровней поддержки и сопротивления
Авторизуйтесь или зарегистрируйтесь , чтобы добавить новую статью
|
Один способ построения уровней поддержки и сопротивления [ en ]Введение
Уровни поддержки и сопротивления - базовый инструмент, которым пользуются практически все трейдеры. В большинстве прогнозов присутствуют эти уровни и каждый трейдер должен уметь находить их самостоятельно. В данной статье описывается процесс создания простейшего скрипта для вычисления уровней поддержки и сопротивления. Статья ориентирована на новичков, поэтому каждый момент процесса разобран очень подробно. Однако, несмотря на всю простоту скрипта, изучение данной статьи, вероятно, будет полезным и для людей более продвинутых в трейдинге и владении платформой 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». И самое последнее, что мы делаем, это выбираем тип будущего графика и тип его отображения. В результате мы получим график количества баров от цены.
Можно сравнить полученные нами результаты на 10.11.2006 с прогнозами для предыдущего дня от 9.10.2006: RES 4 $1.2880 максимум 31 августа Как видно совпадение с прогнозами неплохое. А это значит что те уровни, которые мы нашли, действительно уровни поддержки и сопротивления! Предупреждение:
все права на данные материалы
принадлежат MetaQuotes Software Corp. Полная или частичная перепечатка запрещена.
отличная статья, тока вот у меня в экселе не числа а дата отображается хотя делаю все так как в статье. посоветуйте не пойму чето
02.01.2009 14:33 Samura
FION wrote: Следите за новыми статьями =) Больше мне сказать нечего Было бы полезней отображать уровни на основном графике , при этом толщина и насыщенность линий должна соответствовать силе уровня. Пригодилось бы для экспертописания.
19.11.2006 01:07 shobvas
shobvas писал(а): Было бы полезней отображать уровни на основном графике , при
этом толщина и насыщенность линий должна соответствовать силе
уровня. Пригодилось бы для экспертописания.Demax писал(а): Для анализа на глаз (как это было предложено в этой статье) необязательно
пользоваться точным определением локального минимума, каждый
для себя может выбрать интуитивно какие локальные минимумы
ему кажутся более подходящими на роль уровня поддержки. shobvas писал(а): такс, уже лучше, но все равно не понятно...Имелись ввиду локальные минимумы минимум потому и называется локальным, что он он является минимумом только на некотором интервале значений функции. возникает вопрос - а как выбираются интервалы? з.ы. идея интересная, статья хорошая, но тема не раскрыта ;) Согласен, что тема с вышеописанным способом определения уровней поддержки не раскрыта до конца. В настоящее время я пишу статью по индикатору отображающему уровни поддержки. В ней я надеюсь вы найдете ответ на вопрос о выбираемых интервалах, и возможно на другие аналогичные вопросы, не затронутые в этой статье. Следите за новыми статьями =) з.ы. Спасибо за добрые отзывы ;)
18.11.2006 19:05 FION
Demax писал(а): Для анализа на глаз (как это было предложено в этой статье) необязательно
пользоваться точным определением локального минимума, каждый
для себя может выбрать интуитивно какие локальные минимумы
ему кажутся более подходящими на роль уровня поддержки. shobvas писал(а): такс, уже лучше, но все равно не понятно...Имелись ввиду локальные минимумы минимум потому и называется локальным, что он он является минимумом только на некотором интервале значений функции. возникает вопрос - а как выбираются интервалы? з.ы. идея интересная, статья хорошая, но тема не раскрыта ;) Согласен, что тема с вышеописанным способом определения уровней поддержки не раскрыта до конца. В настоящее время я пишу статью по индикатору отображающему уровни поддержки. В ней я надеюсь вы найдете ответ на вопрос о выбираемых интервалах, и возможно на другие аналогичные вопросы, не затронутые в этой статье. Следите за новыми статьями =) з.ы. Спасибо за добрые отзывы ;)
15.11.2006 15:10 shobvas
shobvas писал(а): такс, уже лучше, но все равно не понятно...Имелись ввиду локальные минимумы минимум потому и называется локальным, что он он является минимумом только на некотором интервале значений функции. возникает вопрос - а как выбираются интервалы? з.ы. идея интересная, статья хорошая, но тема не раскрыта ;)
15.11.2006 14:51 Demax
Demax писал(а): Имелись ввиду локальные минимумы> Легко заметить что минимумы полученного графика находятся в точках 1.2582, 1.2616, 1.2644, 1.2705, 1.2712, 1.2730, 1.2744, 1.2850, 1.2879 Это мне напоминает умные книжки, где пишут "Очевидно, что. . .", и ты осознаешь себя тупым, ибо тебе это совершенно не очевидно :D Я всегда думал, что минимум - это минимальное значение некой величины (по Фрейду ;)). На приведенном интервале лично я вижу два минимума - ~1.2480 и ~1. 2900 Может имеется ввиду экстремум? Но они далеко не все в приведенном списке.
15.11.2006 09:58 shobvas
> Легко заметить что минимумы полученного графика находятся
в точках 1.2582, 1.2616, 1.2644, 1.2705, 1.2712, 1.2730, 1.2744, 1.2850, 1.2879
Это мне напоминает умные книжки, где пишут "Очевидно, что. . .", и ты осознаешь себя тупым, ибо тебе это совершенно не очевидно :D Я всегда думал, что минимум - это минимальное значение некой величины (по Фрейду ;)). На приведенном интервале лично я вижу два минимума - ~1.2480 и ~1. 2900 Может имеется ввиду экстремум? Но они далеко не все в приведенном списке.
15.11.2006 00:48 Demax
7 комментариев
|