Svob Опубликовано 18 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 марта, 2020 7 часов назад, MikR0ReR сказал: @Svob Можно! Это все делается тоже через объекты. Прошлых сообщения я говорил не только о линиях и об прямоугольниках тоже. Хм.. Это уже сложнее Пробовал привязаться к цвету прямоугольника через ObjectGet, но возникла загводка с именем прямоугольника. Оно имеет всегда разный порядковый номер, например: А1, А2 и т.д. А в функции имя всегда жёстко прописывается, насколько я понял. Как можно сделать, чтобы цвет читался именно из последнего? Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 18 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 марта, 2020 @Svob обидно. есть 5 элементов а1 а2 а3 а4 а5 есть группы "Строковые функции" и "Преобразование данных" вырезаешь "а" или извлекаешь "№" остается "№" вычехляешь последний, то есть большее "5" к "а" прибавляешь "5" это и будет последнее имя объекта "а5" Как то так. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Svob Опубликовано 20 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 марта, 2020 Помогите разобраться, пожалуйста.. Есть скрипт (приложил), который должен выдавать список объектов в журнал.. А у меня не выдаёт, в журнале только отчитывается о старте и удалении. Почему? test_obj_name.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 20 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 марта, 2020 @Svob Может потому что нужно смотреть вкладку "Эксперты", а не "Журнал". Скрипт рабочий! Спойлер 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
VNG_nemo Опубликовано 23 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 марта, 2020 Нужна помощь в вопросе импорта биржевых данных из Quik в MT4 для возможности проведения теханализа с использованием реальных данных, предоставляемых биржей - объемов, открытых позиций, заявок (спрос/предложение) и других. Тема обширная и непростая, нужен пинок в правильном направлении. Что знаю и умею- программировал на MQL, VB? VBA под эксель, LUA, немного Паскаль, СИ. Нужна руководящая и направляющая сила (наставник), разбирающийся в вопросах передачи данных по сети и между приложениями (все под винду). Делать готов все сам, но пока даже не понимаю с какой стороны подступиться. На росбирже у меня открыт реальный счет, торгую уже больше 12 лет. Под МТ4 есть индикатор, который я использую в работе - не грааль, а просто взгляд на рынок под определенным своеобразным углом. Есть также советник, который достаточно легко адаптировать под себя, использую для ММ. Проблема в том, при портировании кода советника в КВИК столкнулся с тем, что разработчики КВИКа не предоставляют доступ к объектам графика, необходимым для построения индикатора (линии, прямоугольники, равноудаленные каналы), соответственно, построить нормальный индикатор не получается. И это не единственный подводный камень, там их много. Итак, задача, как я её себе представляю, такая - связать два приложения МТ4 и КВИК посредством любого из предоставляемых WINAPI способов (мейлслот, пайп, мейморимаппед, или любого другого, хотя использование промежуточных файлов с записью на диск крайне нежелательно), при этом КВИК должен быть сервером, а МТ4 клиентом. Сервер по запросу клиента предоставляет данные, а клиент, приняв их, в реальном времени строит график, на который можно наложить индикатор (какой, значения не имеет) и запустить советник, который будет генерировать сделки. Как эти сгенерированные сделки передать обратно в КВИК пока не парюсь, до этого сильно далеко. Буду благодарен за любую помощь. В благодарность покажу эффективный способ торговли, основанный на нестандартном анализе рынка, работающий на любом рынке и любом инструменте если к нему подходить с умом, а также дам ссылку на описание очень эффективного торгующего автоматически советника под МТ4, правда логику нужно будет прикрутить самому или задать ограничения ручками. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 марта, 2020 @VNG_nemo просмотр чужого потока в МТ4? - даже не слышал о таком, это нужно ломать МТ очень сильно и долго. Теоретически можно написать советник, который будет получать данные и отображать графически на неком пустом графике, но нужно озаботится удалением ненужных данных, сдвигом и т.д., возможно будут трудности с отображением временных меток и интервалов. Для отработки советника нужны будут тики, их тоже нужно генерировать по таймеру. Ссылка на сообщение Поделиться на другие сайты More sharing options...
VNG_nemo Опубликовано 24 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 марта, 2020 Огромное спасибо за ответ. На форуме метаквотов, не помню год, где-то 2011, была выложена либа с помощью которой я воспроизводил тики из таблицы обезличенных сделок КВИКа на офлайн графике МТ4 посредством вывода этой таблицы через DDE в ЭКСЕЛЬ. Из экселя эта либа транслировала данные из ячейки в МТ4. И ничего ломать было не нужно. В то время еще к КВИКу не прилагалась LUA.dll, поэтому и приходилось использовать костыль. Сейчас же все данные КВИКа легко можно забрать посредством таблиц LUA. Кроме того, к LUA цепляется библиотека FFI, которая позволяет работать с СИ. Копаясь в сети нашел вот такую инфу https://www.forexfactory.com/showthread.php?t=834471, может быть кто-то подскажет как это дело могло бы помочь в решении данной проблемы. Итого, данные из таблиц КВИКа легко забираются. Их можно без всякого ломания запихнуть непосредственно в МТ4. Вопрос в том, как создать прямой канал передачи таких данных, желательно через сокет. Покопаюсь и позже выложу ссылки на упомянутую библиотеку для передачи данных через ЭКСЕЛЬ. Upd. ссылка https://www.mql5.com/ru/code/8175 , по ней вы найдете библиотеку для передачи данных из ЭКСЕЛЬ в МТ4 и примеры ее использования. Изменено 24 марта, 2020 пользователем VNG_nemo Обновление 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
VNG_nemo Опубликовано 24 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 марта, 2020 Нашел в базе кодов библиотеку сокетов, выполненную полностью на MQL. https://www.mql5.com/en/code/9296 Возможно ли ее прикрутить к поставленной задаче? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 26 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 марта, 2020 Здравствуйте! Для советника хотел использовать индикатор A/D, но не в чистом виде, его moving average. Поскольку я не нашел способа как в стандартную функцию iMA() запихать значение не цены, а показания A/D, поэтому сочинил функции: //+------------------------------------------------------------------+ //| Функция A/D | //+------------------------------------------------------------------+ double A_D(ENUM_TIMEFRAMES tf, int shift) { double res=0; res=iAD(NULL,tf, shift); return res; } //+------------------------------------------------------------------+ //| Функция A/D _moving | //+------------------------------------------------------------------+ double A_D_moving(ENUM_TIMEFRAMES tf, int sq_, int shift) { double res=0; double a=0; // sq_=5; for(int i=sq_+shift; i>=0+shift; i--) { a+= A_D(tf, i); } res=a/sq_; return res; } Но при тестировании стало очевидно, что значения функции A_D_moving() отличаются от показаний MA натянутой на A/D. Прошу, кто может, помогите в следующих вопросах: 1.Можно ли в стандартную функцию iMA() запихать значение не цены, а показания A/D?Если да, то как корректно это сделать? 2. Насколько корректно написана функция A_D_moving()? Если есть ошибки прошу указать... Спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 26 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 марта, 2020 @Владимир Стариков iMAOnArray для этого существует чтоб туда пихать не цены. Ошибки есть. Это не подписывать строки, х.з че ты там хотел сделать. Это тебе понятно, для нас х.з че в твоей голове. Распиши, тогда можно будет о чем то говорить. Ссылка на сообщение Поделиться на другие сайты More sharing options...
VNG_nemo Опубликовано 26 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 марта, 2020 Обещанная ссылка на скрипт передачи данных из ЭКСЕЛя в МТ4. https://www.mql5.com/ru/code/10498 Все проверял на боевом счете, работало на ура. Задача по прежнему состоит в том, чтобы передавать данные минуя эксель посредством таблиц КВИКА напрямую через сокет винды в МТ4. Обработка таблиц легко реализуется на LUA, который встроен в КВИК, к LUA прикручивается библиотека FFI и WIN API. Кто-нибудь может пнуть в правильном направлении? Изменено 26 марта, 2020 пользователем VNG_nemo Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 26 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 марта, 2020 1 минуту назад, MikR0ReR сказал: @Владимир Стариков iMAOnArray для этого существует чтоб туда пихать не цены. Ошибки есть. Это не подписывать строки, х.з че ты там хотел сделать. Это тебе понятно, для нас х.з че в твоей голове. Распиши, тогда можно будет о чем то говорить. Спасибо! //+------------------------------------------------------------------+ //| Функция A/D должна возвращать (по идее) среднее значение за период sq_ | //+------------------------------------------------------------------+ double A_D_moving(ENUM_TIMEFRAMES tf, int sq_, int shift) { double res=0; double a=0; for(int i=sq_+shift; i>=0+shift; i--) - цикл набора значений индикатора A/D за период от sq_+shift до 0+shift { a+= A_D(tf, i); } res=a/sq_; - вычисление среднего значения индикатора A/D за период от sq_+shift до 0+shift return res; } Про iMAOnArray видел в справке. Но не понимаю как использовать в моем случае. Буду признателен, если поможете... Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 26 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 марта, 2020 @Владимир Стариков (0+shift) ставит под сомнение понимание не только что ты делаешь но и математику. 0+1=1, 0+10=10, 0+100=100, просто ставь (shift) Твой график расходится с оригиналом так как МА считает по хитрой формуле. Ты считаешь тупо среднее значение. Собираешь значения АД в массив и передаешь в iMAOnArray. Чего не понятного? Ссылка на сообщение Поделиться на другие сайты More sharing options...
ademen Опубликовано 27 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 марта, 2020 Добрый день. Не могу поставить панельку - терминал зависает, скорее всего проблема на 252-255 строке кода. Подскажите пожалуйста в чем может быть проблема Tabl.rar Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 27 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 марта, 2020 @ademen Множественное открытие индикатора. Скрин это капля в море. Что приводит к переполнения памяти компьютера, в связи с чем дальнейшая работа не возможна. Воспользовался принтом, чтоб увидеть где что происходит. Спойлер 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 28 марта, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 марта, 2020 @VNG_nemo когда-то давно писал сокеты для связи двух прог, уже не помню на чём..., тогда всё получилось и работало. Нужно просто делать - создайте клиента на Квике и сервер на МТ и пытайтесь установить коннект и передачу любой инфы. Инфу для передачи нужно упаковать в некий формат типа: 1 байт - код инфы, 8 байт - время, 8 байт - цена. Если будут торговые приказы, то передавать нужно больше инфы и расширять формат. Ссылка на сообщение Поделиться на другие сайты More sharing options...
spoiltboy Опубликовано 6 апреля, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2020 Приветствую. Появились сомнения в "правильности" некоторой части подаваемой в уроках логики, и вот что на это ответили на форуме MQL: Andrey Sokolov: Добрейшего вечера. Подскажите, пожалста, уместно ли сравнивать последовательность открытия ордеров из истории по номеру тикета? (Как это делают в известных видео-уроках) Сомнения возникли от того что OrderSend() возвращает тип int, который не бесконечен, и, предположу, когда-то обнуляется. в общем это некорректно. Просто так исторически сложилось и пока-что поддерживается. Int переполнить, это надо ещё и суметь :-) помимо переполнения это ещё и security-bug, думаю что в неких перспективных релизах это "сломают" и все идентификаторы получаемые с сервера станут непредсказуемы. для сохранения последовательности есть метки времени, если их нехватает то magic и comments в помощь PS/ кстати даже в 4-ке возможны ситуации когда более поздний ордер получит меньший ticket без целочисленного переполнения. Например одновременная работа двух советников на разных чартах в одной стратегии. https://www.mql5.com/ru/forum/160683/page1114#comment_15781243 Прошу принять к сведению, или возразить, если доводы ошибочны. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 8 апреля, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 апреля, 2020 В 06.04.2020 в 19:24, spoiltboy сказал: Прошу принять к сведению, или возразить, если доводы ошибочны. Int, который может в себе хранить число 2 147 483 647 превысить сложно. У Альпари, где у меня счет открыт более 6 лет сейчас номер тикета 1 477 019 223, а сам брокер я даже не знаю с какого года начал вести нумерацию тикетов. Так что нам еще долго ждать переполнения. А даже, если оно и произодет, то косяк в подсчете ордеров будет только первые 10-20 ордеров после обнуления, потом все встанет на свои места. Но вообще, для каждой системы нужно применять разные методы. Если у меня сетка ордеров, которая закрыла сразу в одну секунду 15 ордеров, то я смогу понять, какой был открыт первый только по тикету, либо по торговому лоту, поэтому их и использую в анализе. Если торговля без сетки, то можно сортировать и по времени закрытия. Ко всему прочему нужно помнить, что последовательность ордеров у брокера храниться по разному, не всегда по времени закрытия. Т.е. чтобы точно узнать последовательность ордеров по времени закрытия, нужно вначале их добавить в массив, отсортировать по убыванию, а потом уже проводить работу с самим массивом. Так или иначе - обучающие курсы показывают только один из вариантов поискать ордеров, ученик же сам пополняет свою базу из практики их применения. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
spoiltboy Опубликовано 14 апреля, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 апреля, 2020 В 08.04.2020 в 15:22, Rever27 сказал: Int, который может в себе хранить число 2 147 483 647 превысить сложно. У Альпари, где у меня счет открыт более 6 лет сейчас номер тикета 1 477 019 223, а сам брокер я даже не знаю с какого года начал вести нумерацию тикетов. Так что нам еще долго ждать переполнения. А даже, если оно и произодет, то косяк в подсчете ордеров будет только первые 10-20 ордеров после обнуления, потом все встанет на свои места. На демо счетах уже через несколько дней новые ордера были с меньшим тикетом. Да и косяк с первыми ордерами после обнуления может быть критичныи. Ссылка на сообщение Поделиться на другие сайты More sharing options...
spoiltboy Опубликовано 14 апреля, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 апреля, 2020 В уроке по трейлинг стоп ошибка. При такой логике, если сл задается 0 (а здесь он задается 0), то будут сразу модифицированы. Возможно в сточках 1 следует убрать " || OrderStopLoss()==0 " Изменено 14 апреля, 2020 пользователем spoiltboy Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 14 апреля, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 апреля, 2020 44 минуты назад, spoiltboy сказал: В уроке по трейлинг стоп ошибка. Я бы вначале добавил условие: if(TrailingStop > 0) { } чтобы при 0 он вообще не использовался. Под цифрой 1 OrderStopLoss() == 0 нужно убрать. И еще в строке 82 два раза повторяется TrailingStep. И в строке самой модификации не указан текущий OrderTakeProfit(), экспирейшн и цвет. Хз, насколько это критично, но с таким типом записи вроде бы будет ошибка компиляции. 1 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
chww Опубликовано 16 апреля, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2020 Здравствуйте! Подскажите начинающему, можно ли к советнику добавить MTF индикатор ( к примеру Ozumandias) , если да то как правильно брать его значения, в случае если советник стоит на минутном графике данные нужны с дневного ,часового. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 16 апреля, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2020 3 часа назад, chww сказал: Подскажите начинающему, можно ли к советнику добавить MTF индикатор ( к примеру Ozumandias) , если да то как правильно брать его значения, в случае если советник стоит на минутном графике данные нужны с дневного ,часового. Индикатор не обязан быть МТФ, чтобы взять с него любой период. int Amplitude = 2 double up = iCustom(Symbol(),PERIOD_H1,"Ozymandias",Amplitude,0,1); double down = iCustom(Symbol(),PERIOD_H1,"Ozymandias",Amplitude,1,1); Данный код берет значение с часового графика PERIOD_H1 на 1 закрытой свече. При том не важно, на какой именно ТФ будет установлен советник с этим кодом. Если нужен на дневках, то меняется на PERIOD_D1. Значения два, потому что в коде индикатор разбит на 2 буфера, один выдает значение, когда канал идет вверх, второй, когда вниз. Индикатор, который использовал во вложении. Ozymandias.mq4 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
chww Опубликовано 16 апреля, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 апреля, 2020 Спасибо! Изучил половину обучающих уроков, а про периоды что то упустил , всегда "0" ставил еще раз спасибо, 17 минут назад, Rever27 сказал: Индикатор не обязан быть МТФ, чтобы взять с него любой период. int Amplitude = 2 double up = iCustom(Symbol(),PERIOD_H1,"Ozymandias",Amplitude,0,1); double down = iCustom(Symbol(),PERIOD_H1,"Ozymandias",Amplitude,1,1); Данный код берет значение с часового графика PERIOD_H1 на 1 закрытой свече. При том не важно, на какой именно ТФ будет установлен советник с этим кодом. Если нужен на дневках, то меняется на PERIOD_D1. Значения два, потому что в коде индикатор разбит на 2 буфера, один выдает значение, когда канал идет вверх, второй, когда вниз. Индикатор, который использовал во вложении. Ozymandias.mq4 2 \u043a\u0411 · 1 загрузка Ссылка на сообщение Поделиться на другие сайты More sharing options...
leonidza23 Опубликовано 4 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2020 Кто сможет написать Написать информационный советник, в котором ордера не открываются. 1. В окне настроек ввести строку Distance (по умолчанию =4 бара) целое положительное число 2. При запуске на первом тике произвести анализ текущей ситуации. 3. Определить Open бара №0. Алерт «Open бара №0=…» 4. В окне терминала комментарии слева в столбик Заголовок «Алгоритм №1» +(количество строк = Distance): Алгоритм №1 Бар №1: O1=(Open), Н1=(High), L1=(Low), C1=(Close) Бар №2: O2=(Open), Н2=(High), L2=(Low), C2=(Close) Бар №3: O3=(Open), Н3=(High), L3=(Low), C3=(Close) Бар №4: O4=(Open), Н4=(High), L4=(Low), C4=(Close) 5. Произвести проверку по поиску максимальное значение High (maxHigh). Алерт: «maxHigh=…, Bar №…» 6. Произвести проверку по поиску максимальное значение Close(maxClose). Алерт:«maxClose=…, Bar №…» 7. Произвести проверку по поиску минимальное значение Close(minClose). Алерт: minClose=…, Bar №…» 8. Произвести проверку по поиску минимальное значение Low(minLow). Алерт: minLow=…, Bar №…» 9. Отразить эти значения в окне терминала в следующей строке в том же столбике: maxHigh=…, maxClose=…, minClose=…, minLow=…, 10. Производить действия с п.6 по п.9 каждый раз при открытии нового бара. То есть все значения должны оставаться неизменными на протяжении формирования нового(нулевого) бара. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти