Индикатор форекс spr v3.6

индикатор форекс spr v3.6

Технический анализ SPR. На этой странице Тех. индикаторы:Активно покупатьПокупать (8)Продавать (0) STOCH(9,6), 88,585, Перекупленность. Идея - смотрим корреляции валют на сайте на сайте Forex Ticket или Oanda 6. Индикаторы для про трейдера; 7. Индикаторы инфо-панели, несущие 3. Time Indicators (bar close, sessions, time zones and etc.); 4. в настройках индикатора регулируется параметрами (P/Spr) - можно. Автор и разработчик Торговых систем, универсальных Индикаторов и подключаем Индикаторы и Советник на 3 недели, после 5-6 занятия, Вы проводит Professional SPR-M Indicator – сигнальный индикатор;; Professional TF.

Индикатор форекс spr v3.6 - authoritative

Как написать индикатор: выводим спрэд

Чтобы в полной мере понять, как написать индикатор на языке программирования MQL4, необходимо это практически сделать.

Напишем индикатор, который будет отображать спрэд в правом верхнем углу графика.

Ранее в блоге уже была затронута тема программирования на MQL 4 для начинающих. Подробно и с "нуля" я рассказывал про написание скрипта для открытия ордера по текущему торговому инструменту. Если данная запись покажется сложной, можно прежде обратиться к указанной.

Создание файла индикатора

Для написания индикатора нам нужен пустой шаблон:

  1. откройте MetaEditor;
  2. нажмите "Файл → Создать";
  3. из появившегося списка выберите "Пользовательский индикатор" и нажмите "Далее";
  4. введите имя индикатор с использованием латинских букв, к примеру, mySpread;
  5. нажмите "Далее" и потом "Готово".

Перед вами откроется новый файл с базовыми параметрами. Выделите все содержимое файла и нажмите "Delete".

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

Займемся написанием индикатора с нуля. Первое, что необходимо сделать, задать глобальные настройки индикатора, а именно: в каком окне онбудет отображаться – в окне с графиком или в отдельном. Нас интересует окно с графиком. Данное свойство необходимо обозначить с помощью префикса #property. Соответственно:

  • indicator_separate_window позволит отобразить индикатор в отдельном окне;
  • indicator_chart_window позволит отобразить индикатор на графике.

Прописываем 1-й строчкой в нашем файле:

#property indicator_chart_window

Теперь индикатор будет выводиться в окне с графиком.

Индикатор имеет три основные функции:

  1. функция init() – запускается один раз сразу после прикрепления индикатора к графику (также в случае изменения периода графика и валютной пары);
  2. функция start() – запускается каждый раз с изменением цены, т.е. с приходом нового тика;
  3. функция deinit() – запускается один раз при удалении индикатора.

В функции init() обычно производятся предварительные вычисления или задаются значения переменных.

В нашем индикаторе, который будет выводить спрэд с правом верхнем углу графика, функция init() сделает следующее:

  1. создаст "Текстовую метку" в заданном углу и с указанным смещением;
  2. задаст начальный спрэд.

За создание объекта отвечает функция ObjectCreate(…). В качестве обязательных аргументов необходимо задать: название и тип объекта, окно, в котором он будет создан, время и цену. Время и цена нас не интересуют, т.к. для смещения объекта типа "Текстовая метка" используются координаты относительно заданного угла.

Переходим к программированию. Создаем текстовую метку с именем "mySpread":

ObjectCreate("mySpread", OBJ_LABEL, 0, 0, 0);

OBJ_LABEL означает, что тип объекта "Текстовая метка". Значение "0" после типа объекта указывает на то, что используется основное окно с графиком для отображения. Последние два нуля для нас не принципиальны.

После создания объекта, нам нужно установить три параметра: угол, координату x, координату y. Параметр устанавливается с помощью функции ObjectSet("имя_объекта", тип_параметра, значение). Задаем последовательно три параметра:

ObjectSet("mySpread", OBJPROP_CORNER, 1); ObjectSet("mySpread", OBJPROP_XDISTANCE, 4); ObjectSet("mySpread", OBJPROP_YDISTANCE, 0);

Параметр OBJPROP_CORNER задает угол отображения. Отсчет угла начинается с левого верхнего и далее по часовой стрелке. "1" означает правый верхний угол.

Указанные операции не случайно выполняются в функции init() – объект необходимо создать один раз. Функция start() будет работать постоянно и выполнение в ней указанных операций было бы неуместно.

После создания объекта, зададим значение текста, т.е. отобразим спрэд (текстовая метка уже создана на графике, но мы ее не увидим, пока не будет задан текст). Текущий спрэд мы получим с помощью функции MarketInfo(…). Данная функция возвращает различную информацию по выбранному финансовому инструменту.

Валютную пару, к которой прикреплен индикатор, получим с помощью функции Symbol().

Функция ObjectSetText(…) позволит присвоить текстовой метке определенный Текст. В функцию мы передадим: название текстовой метки, текст, размер шрифта. Необязательными параметрами для данной функции являются: название шрифта и его цвет. В виде текста мы сразу передадим значение, полученное через MarketInfo(…).

ObjectSetText("mySpread", MarketInfo(Symbol(), MODE_SPREAD), 8, "Tahoma", White);

Стоит отметить, что если в Дилинговом центре используется 5 цифр после запятой, то будет отображен спрэд в некорректном формате, к примеру, "10" по валютной паре EURUSD. Для этого нам необходимо разделить полученное значение на "10". В данном случае, если мы хотим создать универсальный индикатор, требуется добавление переменной. Тип переменной должен быть double, т.е. с плавающей точкой.

Переменная Digits содержит количество цифр после десятичной точки в цене текущего инструмента. Обозначим условие, что если цифр 5 или 3 (if (Digits == 5 || Digits == 3)), то полученный спрэд делим на "10".

double spread = MarketInfo(Symbol(), MODE_SPREAD); if (Digits == 5 || Digits == 3) { spread = spread / 10; }

Теперь строчка с заданием текста будет иметь вид:

ObjectSetText("mySpread", spread, 8, "Tahoma", White);

Получив значение спрэда мы задаем текст. Выглядит правильно, но на практике индикатор не будет работать. 2-й параметр, передаваемый в функцию ObjectSetText(…) должен иметь тип string, а мы передаем переменную spread типа double.

При написании индикатора всегда нужно обращать внимание на тип возвращаемой переменной и передаваемой.

Для того, чтобы избежать указанную эту проблему и не создавать дополнительную переменную, будем использовать функцию DoubleToStr(…). 1-м параметром функции будет значение типа double, вторым – количество разрядов, т.е. чисел после запятой. Функция преобразует значение типа double в значение типа string с заданной точностью.

ObjectSetText("mySpread", DoubleToStr(spread, 1), 8, "Tahoma", White);

Перед тем, как идти дальше стоит отметить, что каждая функция на языке MQL4 требует перед объявлением указать тип возвращаемого значения. Если мы создаем функцию суммирования целых чисел, к примеру, sum(a, b), которая возвращает нам результат как целое число, значит тип возврата также должен быть целым. Для это перед названием функции обозначается ее тип int sum(a, b). Функция будет иметь вид:

int sum(a, b) { return a + b; }

Оператор return говорит о том, что функция возвращает результат (ответ), который соответствует формату функции (int в данном случае). После использования оператора return, функция завершает свое исполнение, даже если после него находится программный код. Данный оператор также используется для предварительного выхода из функции.

Если же функция имеет тип void, то получения ответа не ожидается и оператор return можно не использовать. Функция завершит работу после исполнения последней строчки программного кода.

В нашем пользовательском индикаторе все три основные функции не возвращают ответ, значит уместно использовать для них тип void.

В итоге функция init() будет иметь вид:

void init() { ObjectCreate("mySpread", OBJ_LABEL, 0, 0, 0); ObjectSet("mySpread", OBJPROP_CORNER, 1); ObjectSet("mySpread", OBJPROP_XDISTANCE, 4); ObjectSet("mySpread", OBJPROP_YDISTANCE, 0); double spread = MarketInfo(Symbol(), MODE_SPREAD); if (Digits == 5 || Digits == 3) { spread = spread / 10; } ObjectSetText("mySpread", DoubleToStr(spread, 1), 8, "Tahoma", White); }

Функция start() будет всего лишь получать новое значение спрэда и обновлять значение Текстовой метки.

void start() { double spread = MarketInfo(Symbol(), MODE_SPREAD); if (Digits == 5 || Digits == 3) { spread = spread / 10; } ObjectSetText("mySpread", DoubleToStr(spread, 1), 8); }

При использовании функции ObjectSetText(…) в теле функции start() мы сократили количество передаваемых параметров. Текстовая метка уже имеет заданные значения: название шрифта и его цвет.

Для того, чтобы не засорять график, после удаления индикатора необходимо удалить созданную Текстовую метку. Для этого понадобится функция ObjectDelete("название_объекта").

void deinit() { ObjectDelete("mySpread"); }

В принципе мы могли использовать альтернативный способ получения спрэда, а именно вычесть из цены Спроса цену Предложения, т.е. Ask – Bid.

Тестирование

Для того, чтобы возможно было запустить индикатор в MetaTrader 4, нажимаем "F5", т.е. компилируем программу, затем открываем MetaTrader 4 и находим наш индикатор с именем "mySpread". Добавляем его на график и видим следующее:

MetaTrader 4: Пользовательский индикатор показа спрэда

Исходный код

Скачать исходный код индикатора (пароль "cafeforex"): mySpread.zip

Полный код пользовательского индикатора вывода спрэда в окно графика:

#property indicator_chart_window void init() { ObjectCreate("mySpread", OBJ_LABEL, 0, 0, 0); ObjectSet("mySpread", OBJPROP_CORNER, 1); ObjectSet("mySpread", OBJPROP_XDISTANCE, 4); ObjectSet("mySpread", OBJPROP_YDISTANCE, 0); double spread = MarketInfo(Symbol(), MODE_SPREAD); if (Digits == 5 || Digits == 3) { spread = spread / 10; } ObjectSetText("mySpread", DoubleToStr(spread, 1), 8, "Tahoma", White); } void start() { double spread = MarketInfo(Symbol(), MODE_SPREAD); if (Digits == 5 || Digits == 3) { spread = spread / 10; } ObjectSetText("mySpread", DoubleToStr(spread, 1), 8); } void deinit() { ObjectDelete("mySpread"); }

Остались вопросы? Есть что сказать? Пишите на Форуме.

Источник: [https://torrent-igruha.org/3551-portal.html]

Are absolutely: Индикатор форекс spr v3.6

Индикатор форекс spr v3.6 Форекс стратегии на 1d
Индикатор форекс spr v3.6 Грамотный пирамидинг на форекс
Индикатор форекс spr v3.6 Прогноз форекс на 16 декабря 2015
индикатор форекс spr v3.6

2 thoughts to “Индикатор форекс spr v3.6”

Leave a Reply

Your email address will not be published. Required fields are marked *