Навигатор по форуму и ответы на часто задаваемые вопросы. Настоятельно Рекомендуется к Прочтению!

 
Навигатор по форуму community
Правила Поиск Как оформить пост Администрация форума Сообщить о нарушении Клуб Телепатов
Вопросы, которые задавать не надо
Как правильно задавать вопросы
Полезная литература Полезный софт Ищу индикатор (советник, скрипт) Как правильно гуглить?
Язык MQL: вопросы, ответы, решения
Документация Учебник Программные решения Ответы новичкам Советник - бесплатно Заказать Эксперта
Список кодов ошибок Полезные функции от KimIV С чего начать ? Ответы профи Помощь в составлении ТЗ Как составить ТЗ
Торговый терминал MetaTrader и Тестер торговых стратегий
Тур по терминалу МТ4
Терминал Тестер Сообщить об ошибке
Минимальные требования к процессорам

Тур по терминалу МТ5





 

FAQ -

ЧАСТО ВСТРЕЧАЮЩИЕСЯ ВОПРОСЫ

  • РАБОТА С ФОРУМОМ

Как связаться с модератором/администратором, куда сообщить об ошибке МТ, спаме, нарушении Правил?
Как оформить пост, вставить код программы, изображение, видео
Не могу прикрепить файл к своему посту. В чем может быть проблема?
Как дать ссылку не на страничку, а на конкретный пост на форуме?

  • ТЕРМИНАЛ
Ключи веб-инсталлятора для пользовательской установки терминала
Как установить в MetaTrader 4 советник?
Как установить set-файл настроек советника?
Как установить индикатор, скрипт, библиотеку dll, шаблон tpl ?

Где МТ4 хранит физически значения GlobalVariables?
Как создать нестандартный таймфрейм в МetaТrader 4?
В папке experts/indicators есть файлы индикаторов, но они не все видны в терминале.
Как получить тиковый график и строить индикаторы на нём?
- Где посмотреть ошибку (логи) и что она значит?- ждем ответа
Есть ли возможность отключить всплывающее окно логина и работать в оффлайне?

  • ТЕСТЕР
Как сделать, чтобы при тестировании в режиме визуализации на график автоматически устанавливались нужные индикаторы?
Почему 14-го января не было закрытия по стоплосу?

Что означают цифры в отчёте тестирования эксперта?
Как самому вычислить значения из Statement?
Как получить тиковый график и строить индикаторы на нём?

Подскажите, где можно почитать толковую информацию методах работы с этой оптимизацией?
Как остановить тестер с клавиатуры (вариант №2)?
- Как протестировать советник?- ждем ответа
- Зацените отчетец...- ждем ответа
- Как подкачать историю котировок перед тестированием?: Ссылка на скрипт
- Что значат ошибки истории в отчете теста и на что они влияют?
- Почему я не могу подкачать минутки на большую глубину, от чего это зависит?
- Почему не идет тест, а тестер мне что-то пишет в журнале?
- Как перейти со вкладки "Результаты" на нужную мне сделку на графике?


  • ЭКСПЕРТЫ

Может ли эксперт/скрипт видеть индикаторы, которые я поместил на график?
Чем отличается эксперт от советника?

  • ПРОГРАММНЫЕ РЕШЕНИЯ

С чего начать новичку?
КАК найти цену последнего фрактала?
КАК получить сигнал пересечения двух МА?
КАК проверить пересечение МА с учетом требуемого расхождения?
КАК получить Open и Close, другой валюты, не открывая ее графика?
КАК программно узнать - выделен ли объект (трендовая, горизонтальная, пользовательская средняя и т.д.) на графике?
КАК программно определить подкачку истории в индикаторе?
КАК наложить боллинджера на рси? Руками это сделать можно, а вот как сделать это программно?

КАК запрограммировать работу советника по открытию бара?

ПОЧЕМУ при делении одного числа на другое получается 0?
ПОЧЕМУ 3 деленное на 2 равно 1, а не 1.5?
ПОЧЕМУ выражение вычисляется неправильно?
ПОЧЕМУ выводится значение равное 0, хотя оно точно не равно 0?
ПОЧЕМУ при сравнении двух double, эксперт пишет, что они не равны, хотя я в журнале вижу, что они равны?
ПОЧЕМУ 0.0039 > 0.0039 и 0.0039 >= 0.0039 одинаковы

В журнале эксперта появилась ошибка с номером NNNN. Что она означает?
- Как тоговать "по барам"- ждем ответа

КАК присоединить MySQl к MQL?
КАК импортировать данных из Excel в МТ4?
КАК можно узнать время терминала, например, EET, GMT или какое-то другое?

КАК используя PostMessageA в указанном графике поменять валютную пару?


Как: Облегчить программирование
Зачем делать нормализацию чисел
Правильная нормализация цены
Обновление торгового окружения
Нормализация лота
Поиск причин ошибок
Получение типов ордеров
Получение цен для типов ордеров
Расширение типов ордеров
Как рассчитать стоимость пункта, маржу, результат операции?
Как определить стоимость пункта?

Как: Получить ордерную информацию
Получение массива тикетов «своих» ордеров

- Краткое описание структуры программы (терминал/ тестер/ редактор)- ждем ответа
- Почему не торгует в тестере/терминале?- ждем ответа

  • ПРОЧИЕ

В чем отличие Instant Executuion и Market Execution?
Расписание торговых сессий Forex
Подскажите кто сможет написать эксперта по моей идее?
ЧТО ТАКОЕ плечо (leverage)?
Ну так кто-нибудь может помочь написать советник по моей профитной стратегии ?
- Посоветуйте ДЦ? (не обсуждают их тут, если обсуждают, то предельно корректно, и т.д.)- ждем ответа

SMS извещение о состоянии советника
Немного про волновой анализ

КАК правильно открыть .csv в Excel?
Процессоры удовлетворяющие минимальным требованиям для запуска МетаТрейдер 4

 

Уважаемые пользователи, прежде чем производить любые действия на этом форуме, ознакомьтесь пожалуйста с

ПРАВИЛАМИ ФОРУМА MQL4 COMMUNITY

ПРАВИЛА

  1. На сайте запрещены любые формы открытого выяснения личных отношений между участниками. Подобные диалоги будут удаляться.
  2. Запрещены любые обсуждения любых банковских, брокерских и иных финансовых организаций. Подобные сообщения подлежат удалению.
  3. Запрещены любые высказывания, которые могут задеть или оскорбить других посетителей. Эти сообщения будут удалены.
  4. Запрещено любое использование нецензурных выражений. Подобные сообщения будут удалены.
  5. Запрещена явная реклама, cпам и флуд. Подобные сообщения подлежат удалению.
  6. Неоднократные нарушения правил, игнорирование замечаний модератора, а тем более открытое неуважение к администрации данного ресурса влекут за собой блокировку доступа.
  7. Администрация MQL4.com имеет право изменять правила, если сочтёт это необходимым.
  8. Регистрация на форуме MQL4.COM не означает автоматической регистрации на форуме MQL5.COM. Для каждого форума своя процедура регистрации.
  1. Общие положения:
    1. Форум является постмодерируемым (т.е. добавление сообщений происходит сразу, а их «проверка» потом);
    2. Если Вы не согласны с действиями модератора – Вы можете сообщить об этом администратору форума без согласования с модератором, или покинуть форум;
    3. Все сообщения отражают мнения их авторов, и Администрация никакой ответственности за них не несёт;
    4. Модераторы осуществляют контроль над форумом, могут удалять сообщения, закрывать темы и лишать доступа участников форума. Слово модератора – не тема для дискуссий, а инструкции к их выполнению;
  2. Рекомендуется:
    1. Перед созданием темы или написанием сообщений просмотреть страницы форума с целью лучшего знакомства с участниками, разделами форума и их тематикой, существующими темами и обзорами;
    2. До того, как задать вопрос, воспользоваться функцией «Поиск» для поиска существующих тем по вашей проблеме; Помните, что Ваше нежелание использовать поиск наносит вред всем – прежде всего Вам самим, т.к. Вы пренебрегаете накопленным чужим опытом и не хотите получить ответы за кратчайшее время, а также постоянным посетителям, которым не интересно видеть в форумах темы с одними и те же вопросами;
    3. Для сокращения объема форума созданы специальные постоянно действующие темы Любой вопрос новичка, Любой вопрос ПРОФИ к СУПЕРПРОФИ, в которых концентрируются запросы определенного уровня, по которым нецелесообразно создавать отдельные темы;
    4. Задавая вопрос – максимально подробно и доступно описывать возникшую ситуацию. Выложить исходные файлы, поясняющие скрины. При размещении исходного кода в теле сообщения обязательно использовать кнопку SRC;
    5. Cоставлять заголовок своего сообщения или новой темы так, чтобы он отражал смысл проблемы или информации, которую Вы хотите донести до посетителей форума, а не просто Ваши эмоции или Ваше мнение;
    6. Не отклоняться от заданной автором темы (автором темы является участник, написавший первое сообщение в теме, топикстартер). За нарушение Вы получите предупреждение от модератора, при повторе доступ на форум Вам будет закрыт (временно либо навсегда, на усмотрение администратора);
    7. Цитировать собеседника минимально или не цитировать, если Ваше сообщение идет следующим;
    8. Писать грамотно, без синтаксических, стилистических ошибок. Всем "Медведам" и "Преведам", а также любителям коверкать великий и могучий, перед созданием темы или размещением сообщения ознакомиться с учебником грамматики. При умышленном нарушении синтаксических и орфографических норм языка, тема или сообщение могут быть удалены, а авторы лишены доступа;
    9. Обсуждение посторонних тем, не имеющих прямого отношения к тематике форума можно проводить в специальных темах (Юмор, Музыка, Курилка.);
    10. Перед созданием темы ознакомиться с Правилами.
  3. Запрещается:
    1. Реклама в любых ее проявлениях, особенно с прямыми ссылками на внешние сайты, партнерки, рефералки, необоснованное использование файловых хостингов без согласования с администрацией форума;
    2. Проявлять неуважительное отношение к собеседнику, размещать клевету или оскорблять кого-либо, нецензурно выражаться, размещать угрозы (в том числе по отношению к личности, национальности, расовой или религиозной, политической принадлежности), призывать к нарушению действующего законодательства, и всего прочего, что попадает под действие УК РФ;
    3. Публично обсуждать действия модератора или администратора;
    4. Распространять заведомо ложную информацию, вирусы (зловредные программы, трояны, публиковать декомпилированный код);
    5. Публиковать ссылки на порнографические ресурсы, ресурсы с ненормативной лексикой и ресурсы MLM;
    6. Оставлять несколько одинаковых сообщений в разных разделах (это расценивается как спам и удаляется немедленно); оставлять сообщения, содержащие флуд и флейм;
    7. Использовать односложные заголовки тем, как то: «Спасите», «Помогите», «Нужна помощь!», «Вопрос», «Help Me», «Проблема!!!». Такие темы будут удаляться, либо их заголовок будет изменен (на усмотрение модератора);
    8. Использовать в имени (Nicname):
      • адреса веб-сайтов (pupkin.ru, homepage.com);
      • грубые и нецензурные выражения;
      • злоупотребление специальными знаками (__, +++, ***, ===, !!! и т.п.);
      • псевдографику и пр.;
      • бессмысленный флуд (например: йцукенгшщ123123123);
    9. Использование в подписях и аватаре:
      • любой открытой рекламы сайтов, различных организаций, телефонов, а также ссылки на какие-либо ресурсы;
      • выражений, которые могу вызвать неприязнь у других пользователей форума;
      • эмоциональных выражений, состоящих из одних смайликов.
    10. При публикации в Code Base удаляются:
      • ссылки на собственный Профиль - его и так можно найти;
      • ссылки на собственные ресурсы - его можно разместить в своем Профиле;
      • контактные данные автора (мэйл, аська, скайп, телефон) - это тоже можно указать в Профиле;
      • призывы заказывать у автора софт - желающие сами обратятся в личку;
  4. Заключительные положения
    1. Если Вы согласны с данными правилами то «Добро пожаловать!»;
    2. Если Вы не согласны с данными правилами, то Вы имеете полное право найти для себя более подходящий ресурс.
 

Подскажите, как найти цену последнего фрактала?


sergeev: Для этого можно воспользоваться индикатором iFractals. Он возвращает значение 0, если на баре нет фрактала и значение цены фрактала если он есть. Фракталы делятся на верхние и нижние. Если вам надо получить верхние, то в функцию iFractals передается MODE_UPPER, а для нижних - MODE_LOWER. Поэтому для поиска фрактала надо пройти в цикле по барам и первое не 0 значение и будет искомым фракталом.

пример:

double frac;
for (int i=3; i<Bars; i++)
{
   frac=iFractals(Symbol(), Period(), MODE_UPPER, i); if (frac>0) break;
   frac=iFractals(Symbol(), Period(), MODE_LOWER, i); if (frac>0) break;
}
if (frac>0) Print("Цена последнего фрактала: ", frac);


пример организации отдельной функции:

//---------------------------------------------------------------   GetLastFrac
double GetLastFrac(string smb, int tf, int iB)
{
   int n=iBars(smb, tf);  double frac;
   for (int i=iB; i<n; i++)
   {
      frac=iFractals(smb, tf, MODE_UPPER, i); if (frac>0) return(frac);
      frac=iFractals(smb, tf, MODE_LOWER, i); if (frac>0) return(frac);
   }
   return(0);
}
.....
Print("Последний фрактал: ", GetLastFrac("EURUSD", 60, 3));

теги: фрактал, iBars, числовые константы, вызов индикаторов

смотри также на форуме:

- как обратиться к пользовательскому индикатору
- как узнать значение буфера на закрытом баре
 


Как связаться с модераторами, куда сообщить об ошибке МТ, спаме, нарушении Правил?

Общественные модераторы

Старший модератор Mathemat
https://www.mql5.com/ru/users/mathemat
Модератор Vinin
https://www.mql5.com/ru/users/vinin
Модератор DDFedor
https://www.mql5.com/ru/users/ddfedor
Модератор granit77
https://www.mql4.com/ru/users/granit77
Модератор FAQ

https://www.mql5.com/ru/users/faq
Модератор sergeev
https://www.mql5.com/ru/users/sergeev

Ветка для сообщения о спаме и нарушениях Правил
СПАМ, СПАМЕРЫ и их ПОСОБНИКИ...

Жалобы на действия модераторов посылаются администратору форума.
Жалобы на администратора посылаются Господу Богу прямым обращением в устной форме.
Помните!
Обращение "через голову" может иметь обратный эффект.

Сообщения о багах, глюках, ошибках языка MQL4 и терминала MT4 необходимо посылать через свой профиль на Форуме MQL5. Там принимаются заявки по MT4 и MT5
На сообщения в темах форума разработчики отвечать не обязаны!


 

Почему при делении одного числа на другое получается 0? MQL неправильно производит арифметические операции?


alsu:
Скорее всего, вы написали выражение вида

c = a/b;  // (1)

объявив при этом переменные a и b как целочисленные:

int a,b;

В этом случае компилятор языка MQL интерпретирует значок "косая черта" как операцию "целочисленное деление". Таким образом, даже если до появления в коде выражения (1) переменным a и b присваиваются какие-либо значения, пусть даже нецелые, в переменную c все равно будет записан ответ "число b умещается в числе a столько-то целых раз". А это, в свою очередь значит, что если до вычисления выражения (1) a было меньше, чем b, то его результат будет равен нулю, причем независимо от типа переменной c (она в приведенном примере может быть и double).

Описанная ошибка довольно часто является причиной случаев "неправильного" поведения программы в терминале - "неизвестно откуда берущегося" сообщения divide by zero в логах экспертов, неотображения одной или нескольких линий индикатора в окне терминала и др.

Решение проблемы:

исправить в объявлении переменных тип данных на тот, который соответствует планируемым к использованию операциям:

double a,b;
 

Почему 3 деленное на 2 равно 1, а не 1.5?


Alert(3/2);
Integer: Числа 3 и 2 в этом выражении представляют собой целые числа. Целое число не делится без остатка. Для того, чтобы получить результат 1.5 необходимо указать, что делимое является числом с плавающей точкой:

Alert(3.0/2);
 

Почему выражение вычисляется неправильно?


  double price=1.0; // Цена
  double point=0.0001; // Величина пункта
  double level=272.0; // Уровень в пунктах от цены
  double levelprice; // Значение цены уровня
   
  levelprice=price+point*level; // должно быть 1.0272
   
  if(levelprice==1.0272){
  Alert("Правильно");
  }
  else{
  Alert("Неправильно");
  }
Integer: У переменных с плавающей точкой ограниченное количество знаков после запятой. Из-за этого, в процессе вычисления, значения могут незначительно искажаться. После вычисления выражения, перед сравнением чисел с плавающей точкой, их необходимо нормализовать до уровня требуемой точности:

  levelprice=NormalizeDouble(levelprice,4);

  if(levelprice==1.0272){
  Alert("Правильно");
  }
  else{
  Alert("Неправильно");
  }
 

Почему выводится значение равное 0, хотя оно точно не равно 0?


  double point=0.00001; // Величина пункта
  Print(point);
Integer: Функциями Print() и Alert() выводится только четыре знака после зяпятой. Если нужно больше, нужно преобразовать число double в string функцией DoubleToStr().
Print(DoubleToStr(point,5));
 

Что такое плечо (leverage)?


Integer: Можно сказать это некая характеристика отражающая необходимое количество залоговых средств на открытие и поддержание позиции. Например, с плечом 200 и депозитом 1000$ на EURUSD можно открыть позицию объемом не более одного лота. С плечом 100, при тех же условиях - максимальная позиция - 0.7 лота и т.д и т.п.
 

Почему при сравнении двух double, эксперт пишет, что они не равны, хотя я в журнале вижу, что они равны?

sergeev:
Причина этому - особенность представления double в компьютере.

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

Например, когда вы выполняете безобидную операцию

double a=3;
double b=2;
double R=a/b;

то результат R - не будет ровно 1.5. Но будет равен 1.49999999999

Поэтому сравнение

if (R==1.5)  тождественно  false

Для выхода из этой ситуации необходимо всегда пользоваться функцией NormalizeDouble . И нормализовать числа до требуемой точности. Это особенно актуально для вычисленных цен при передаче их в функцию OrderSend или OrderModify

Так как в торговле практически имеем дело с ценами, то обычно достаточно нормализовать до Digits знаков после запятой

if (NormalizeDouble(R, Digits)==1.5)

Для дополнительной информации прочитайте статью Особенности работы с числами типа double в MQL4

Причина обращения: