Навигатор по форуму и ответы на часто задаваемые вопросы. Настоятельно Рекомендуется к Прочтению!
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 |
ПРАВИЛА
|
|
Подскажите, как найти цену последнего фрактала?
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;
Почему выражение вычисляется неправильно?
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
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Минимальные требования к процессорам