dzennn2 Опубликовано 28 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 декабря, 2015 Парни, такая проблема... А возможно получить данные с другого периода при тестировании 99.9 в Тикстори? У меня например, при тестировании советника на м15, обычная функция iClose(Symbol(), PERIOD_M1, 1) отдает нули, т.е. с м1 данные не подгружает. Сами понимаете, при тестировании индикаторов и функций с значениями периодов отличными от текущего будут косяки. Может слишком поздно реагирую, но очень часто встречаю такие стереотипы.В ТЕСТЕРЕ Все прекрасно работаети iOpenи iCloseи iHighи iLowи iTimeи iVolumeВ моем примере есть fxt только для М5, а все iOpen.... тянут с М1 и все показывают и 0 баре и на 1 баре.Источником данных скорее всего являются hst файлы вот они должны быть для всех ТФ.Hst файлы автоматом должны все делаться, главное галочку в тикстори поставить Generate HST files - одна галка для всех ТФ сразу.А вот когда речь идет не о ТЕСТЕРЕ, а о РЕАЛЕ, то тут сбойная iClose..... может дать результат, а может и не дать. И каждый вызов iClose..... надо контролировать на успешность выполнения GetLastError. Вот здесь начинается гемор.Пример iOpenW1_0 = iOpen(NULL, PERIOD_W1, 0); Err_GetLast = GetLastError(); if(iOpenW1_0 == 0 || Err_GetLast != 0) { if(Err_GetLast != 4059) // { Print(Symbol(), " !!! NEWBAR iOpenW1_0 Err= ", Err_GetLast); Print(" } if(!IsTesting() && !IsOptimization() ) return; }Постоянным обращением к серверу функция iOpen со временем заставит подкачать нужные данные, но надо ждать и постоянно обращаться.iClose....pngFolder.png0_Comment.mq4 Изменено 28 декабря, 2015 пользователем dzennn2 6 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SnikI Опубликовано 28 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 декабря, 2015 На MQL4 , вроде бы, возможно ООП. А как создать свою библиотеку классов, чтобы их можно было потом использовать в своих программах? Примеры реализации классов на ОПП есть в папке ...MQL4\Includeочень много простых наглядных классов в папке... MQL4\Include\ChartObjects 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
serpent989 Опубликовано 30 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 декабря, 2015 Здравствуйте! Проделал по видео урок по "Классам". Уже несколько раз проверил, ошибок нет, в editore компилит без ошибок и предупреждений, а в тестере стратегий (в журнале выдаёт): invalid pointer access in 'Lesson_Class.mq4' (126,32). Ругается на ES.SignalOpen() и аналогичные в условиях if, в функции void OnTick(). Никто с таким не сталкивался?! Код прилагаю, может кто посмотрит и подскажет:)Так же, хочу обратиться конкретно к Сергею и предложить рассмотреть тему, следующего характера. Допустим, пишем советник по индикатору, который у нас есть с открытым кодом. Задача: наш советник должен состоять из одного файла, без вспомогательных файлов (файла индикатора). Вопрос: можно ли вписать код индикатора в код советника, чтобы все обращения были внутри одного файла. Спасибо. Lesson_Class.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 30 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 декабря, 2015 serpent989, посмотрите. Может, найдете что-то более свежее.http://articles.mql4.com/ru/309 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dzennn2 Опубликовано 30 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 декабря, 2015 Спойлер Здравствуйте! Проделал по видео урок по "Классам". Уже несколько раз проверил, ошибок нет, в editore компилит без ошибок и предупреждений, а в тестере стратегий (в журнале выдаёт): invalid pointer access in 'Lesson_Class.mq4' (126,32). Ругается на ES.SignalOpen() и аналогичные в условиях if, в функции void OnTick(). Никто с таким не сталкивался?! Код прилагаю, может кто посмотрит и подскажет:)Так же, хочу обратиться конкретно к Сергею и предложить рассмотреть тему, следующего характера. Допустим, пишем советник по индикатору, который у нас есть с открытым кодом. Задача: наш советник должен состоять из одного файла, без вспомогательных файлов (файла индикатора). Вопрос: можно ли вписать код индикатора в код советника, чтобы все обращения были внутри одного файла. Спасибо. А может вам надо это-"Работа с пользовательскими индикаторами, подключенными в качестве ресурсовДля работы mql4-программ может потребоваться один или несколько пользовательских индикаторов, все они могут быть включены в код исполняемой mql4-программы. Включение индикаторов в качестве ресурсов позволяет упростить распространение программ."тогда сюда_http://docs.mql4.com/ru/runtime/resources 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
wawilon Опубликовано 3 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2016 Объясните пожалуйста как тут работает флаг, а точнее обновление котировок происходит с каждым циклом или нет и почему? Я считаю, что обновление происходит на каждом новом цикле, пока if(IsTradeContextBusy())==trueif(IsTradeContextBusy()) // True, если поток для выполнения торговых операций занят { Print("Торговый поток занят. Ждем 3 сек..."); Sleep(3000); Delay=True; // Устанавливаем флаг - в работе цикла была задержка и необходимо обновление котировок // Значит if(Delay) обновляет котировки continue; // Уходим на начало цикла } if(Delay)// Если во время выполнения цикла была задержка { RefreshRates();//Обновляем котировки доступные советнику Delay=False;//И сбрасываем флаг наличия задержки }И верхний код равнозначен этому:if(IsTradeContextBusy()) // True, если поток для выполнения торговых операций занят { Print("Торговый поток занят. Ждем 3 сек..."); Sleep(3000); RefreshRates();//Обновляем котировки доступные советнику continue; // Уходим на начало цикла }Или я полный ОЛЕНЬ! Изменено 3 января, 2016 пользователем wawilon Ссылка на сообщение Поделиться на другие сайты More sharing options...
geugene Опубликовано 3 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2016 Играюсь с графическими элементами на графике. К примеру, от экстремумов отложить 200пп и нарисовать прямоугольник. Прикольная штука, чтобы облегчить себе жизнь и не использовать фибо сеткой или трендовой линией как линейкой.Но, столкнулся с одной проблемой. Хочу отложить значение ATR от хая/лоя. Как узнать значение ATR на том баре, от которого и нужно отложить на расстоянии ATR прямоугольник?Как определить экстремум среди небольшой "кучи" свечей - это сделано. Но с ATR гемор, т.к. он постоянно меняется.Я думал iShiftBar и iBars использовать. Но как, хз. В самой iATR есть параметр shift. Вот туда и нужно, я так думаю, задавать смещение, которое и должно указывать на тот самый бар. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2016 в shift пишите № бара найденного экстремума (из функции iHighest/iLowest) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2016 Или я полный ОЛЕНЬ! :dГде код цикла? или Вы имели ввиду OnTick()?функция Sleep(3000); - вешает терминал, т.е. пока не пройдёт 3 сек исполнение кода не будет...Обычно определяют количество попыток коннекта, потом в цикле по количеству попыток отправляют запросы серверу и в зависимости от ошибки или Слип+новая попытка или выход. Ссылка на сообщение Поделиться на другие сайты More sharing options...
wawilon Опубликовано 4 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2016 Или я полный ОЛЕНЬ! :dГде код цикла? или Вы имели ввиду OnTick()?функция Sleep(3000); - вешает терминал, т.е. пока не пройдёт 3 сек исполнение кода не будет...Обычно определяют количество попыток коннекта, потом в цикле по количеству попыток отправляют запросы серверу и в зависимости от ошибки или Слип+новая попытка или выход. Я просто не весь код отобразил! Да уже разобрались с хозяином этого кода! Спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 6 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 января, 2016 Прошу совета у знающих. Такая ситуация: Пишу советник. Стоит на М30. При пересечении быстрой и медленной машек на текущем баре - сигнал на открытие позиции. Открыли ордер. И если ордер закрылся на этом же текущем баре, то, т.к. условия на вход еще актуальны, он снова открывает позицию, а цена уже не выгодная. Как запретить советнику открывать повторный ордер на том же баре? Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 6 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 января, 2016 Делать проверку на новый бар. Тут в теме была функция от Oll, не так давно, поищите. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Arius777 Опубликовано 6 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 января, 2016 Коллеги, подскажите, пожалуйста, почему для советника компилятор выдает предупреждение "no OnStart function defined in the script"? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2016 Sergey Forex введите переменную дататайм и присваивайте ей время открытия бара на котором открыли сделку, а потом сравнивайте при следующей попытке открытия. примерно так:static datetime dt_open = 0;if ( signal_open() && Time[0] != dt_open ){ dt_open = Time[0]; SendOrder(...);}Arius777 компилятору кажется, что Вы делаете скрипт... Внимательнее посмотрите заголовки. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 7 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2016 Коллеги, подскажите, пожалуйста, почему для советника компилятор выдает предупреждение "no OnStart function defined in the script"? Наверно Вы используете функцию Start() (которая используется обычно в скриптах) вместо OnTick(). 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Arius777 Опубликовано 7 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 января, 2016 Это было бы слишком легко, если так. )))На будущее для новичков - у меня в заголовках стояла директива - #property show inputs, которая работает только для скриптов, поэтому компилятор ищет дальше, где же этот OnStart...Прошу прощения за такой поспешный вопрос - новичкам это свойственно...)) Изменено 7 января, 2016 пользователем Arius777 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Kiman Опубликовано 9 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2016 Добрый день! Помогите написать сову простую, суть оной в том, чтобы блокировать любые операции над ордерами (открытие, закрытие, модификация) в течении трех минут, потом одна секунда на эти операции, потом снова блокировка. Теперь расскажу подробно. Есть у меня советник, купил его за 150 бакинских. Торгует так себе ни в плюс ни в минус, но для адекватной торговли ему надо сделать такие перерывы - три минуты ждет, потом закрыл ордер, открыл новый и снова ждет. Так как разработчик отказался сам добавить такую функцию, думаю как самому это сделать. Думаю вторым советником на втором графике. Только вот не могу найти функции на блокировку выполнений операций и обработку ожидания. Помогите добить эту тему, уж очень жаль если деньги просто так отдал(( Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 9 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2016 Блокировать операции другой совы нельзя.Но можно повесить терминал на 3 сек. после появления нового ордера с помощью Sleep(3000); 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 9 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2016 по-моему, это невозможно. как ты "займешь" торговый поток чтобы на сервер брокера не посылалась ни одна команда OrderSend/Modify/Close/Delete не вмешиваясь в код самого mt4?Oll, разве Sleep не вешает основной исполняемый код данного советника? причем здесь код другой совы, работающей вобще параллельно? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 9 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2016 Kiman, если бот в mq4, выкладывайте - один хрен реально использовать не можете.А если программисты отшаманят бота, то может и деньги отобьёте.Жаться уже смысла нет... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Kiman Опубликовано 9 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2016 Kiman, если бот в mq4, выкладывайте - один хрен реально использовать не можете.А если программисты отшаманят бота, то может и деньги отобьёте.Жаться уже смысла нет... В том то и дело, что не в mq4, иначе я бы не стал делать все через вторую сову. Добавлено: 09-01-2016 20:08:20по-моему, это невозможно. как ты "займешь" торговый поток чтобы на сервер брокера не посылалась ни одна команда OrderSend/Modify/Close/Delete не вмешиваясь в код самого mt4?Oll, разве Sleep не вешает основной исполняемый код данного советника? причем здесь код другой совы, работающей вобще параллельно? А нельзя ли оборвать или заблокировать соединение с сервером программно? Ссылка на сообщение Поделиться на другие сайты More sharing options...
sanich Опубликовано 9 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2016 Есть тема. Нужно сделать машку со смещением по оси У в процентном отношении и в ту и в другую сторону, должно получиться три машки в виде болинджера...Есть вот такая хрень, но он по оси У плавает как болинджер, то дальше от средней, то ближе, а надо чтобы не плавал... Спойлер Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 9 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2016 Оборвать соединение можно, но геморрой. все совы в МТ4 работают в одном потоке, когда одна сова спит - спят все. Изменено 9 января, 2016 пользователем 0ll 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 9 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2016 Оборвать соединение можно, но геморрой. все совы в МТ работают в одном потоке, когда одна сова спит - спят все. то есть если у меня запущено 3 совы в одном терминале и если в одной из них пропишу Sleep(овердохренацифр) то все 3 совы этого терминала будут "спать"? :-o @-) :-oесли это правда то метаквотовцев пора кастрировать за такое Изменено 9 января, 2016 пользователем dermitay Ссылка на сообщение Поделиться на другие сайты More sharing options...
Kiman Опубликовано 9 января, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 января, 2016 Оборвать соединение можно, но геморрой. все совы в МТ работают в одном потоке, когда одна сова спит - спят все. понял, жаль.Спасибо всем, кто подсказал. Добавлено: 09-01-2016 20:41:01Оборвать соединение можно, но геморрой. все совы в МТ работают в одном потоке, когда одна сова спит - спят все. Стапэ! Т.е. если я в сове напишу через каждую секунду спать 3 минуты, то первая сова ничего не сможет сделать? Так то что надо же :)Попробую. Если кому интересно, что за советник, то в лс пишите, а то ведь интеллектуальная собственность, еще покарают за выкладывание. Изменено 9 января, 2016 пользователем Kiman Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти