dermitay Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 эм... я минус не увидел у maxprice. извиняйте за лекцию :-b :-b :-b :)) :)) :)) Изменено 30 ноября, 2015 пользователем dermitay 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 dermitay, спасибо за оригинальный подход (во всяком случае для меня) для определения точки опоры от нулевого бара: Цитата minprice = MarketInfo(Symbol(), MODE_BID);maxprice = MarketInfo(Symbol(), MODE_BID);ну или простоminprice = Bid;maxprice = Bid; Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 В http://tlap.com/forum/ugolok-programmista/13/obuchenie-yazyku-mql4-pod-metatrader-4/4034/?do=findComment&comment=249236 Kroft указал фрагмент с ошибкой, на которую я и указал.Новый фрагмент кода без этой ошибки Sergey Forex выложил позже - когда на неё указали.Sergey Forex и Kroft - кто из вас ведет дискуссию?Обсуждается непонятно чей фрагмент кода...Kroft, что это? Цитата Вот такая вот петрушка, мой бот берет только общую максимальную цену, а максимальную дня не пересчитывает, вроде все по уроку второму сделал. может кто разъяснит ситуацию по второму уроку - обновленному.Настройкиextern int BarCount = 10;extern int HourStart = 10;extern int HourEnd = 23; void GetMaxPrice(){ for (int i = 0; i { mp = iLow (Symbol(), PERIOD_CURRENT, i); if (mp > maxprice) maxprice = mp; } return;} Вы в цикле обсчитываете 10 баров неизвестно какого ТФ - и не известно в какой момент времени (из фрагмента кода не видно).Хай какого дня (вчера или текущего) вам надо вы тоже не сообщили.Если выявление максимума дня (вчерашнего или текущего) выполняется в начале торгов в 10, то после замены mp = iHigh... текущий хай текущего дня вы найти вроде должны - если ТФ н1, конечно.Если же выявление хая/лоя (текущего?) дня вы выполняете в ходе торгов неоднократно в разное время, то именно на этих жестко заданных вами 10 барах хай текущего и тем более вчерашнего дня быть не обязаны - искомые вами экстремумы дня могли быть раньше последних 10 баров, только которые вы проверяете.Нет желания подумать и более тщательно сформулировать свой вопрос?-----Парни, без обид: но тут не продленка в школе - учителя на зарплате ваши тетрадки проверять не обязаны...Всё, что здесь делается - бесплатно и в личное время. И по мере возможности - времени и сил.Если появилась какая-то проблема в освоении языка, первым делом попробуйте сами её понять.Если не получается понять самому - постарайтесь предельно точно описать свою проблему!Конечно, никто не запрещает и даже приветствуется то, что вы выкладываете свои наработки - изучать чужой код очень хороший способ самообучения и взаимного обучения.Но если есть что-то, что непонятно, то старайтесь как можно четче описать/показать что не понимаете или что не так работает.Очень часто в процессе обдуманного описания проблемы наступает пониманием что сделано не так.Да и другим будет легче вам помочь, если вы достаточно строго опишете что пытаетесь сделать и что именно не получается. Изменено 30 ноября, 2015 пользователем Старик 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 1 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 декабря, 2015 Пара советов начинающим: Создавать методы, которые модифицируют какие-то глобальные переменные - это зло в большом кол-ве случаев. Eсли вам нужно получить максимальную цену за период, то данный метод не должен где-то изменять глобальные переменные. Суть совета в том что старайтесь не использовать глобальные переменные. (Привет фортран) При создание метод нужно опираться на то что метод должен делать одну какую-то операцию и эта операция должна максимально отражена в название. Если у вас метод возвращает, что то и у него логичное название это очень хорошо, если внутри этот метода еще где-то проставляется глобальная переменная или метод изменяет что-то во входных параметрах (например если вы передаете класс) - это зло. Если уж начали программировать, то придерживайтесь определенному стилю написания кода это сильно упростит жизнь в будущем. Начните хотя бы с именования (Snake case, Camel case). Тут есть не большое описание по оформлению кода. Вообще рекомендации можно писать бесконечно. 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 1 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 декабря, 2015 а если у меня идёт связка индюк, читающий параметры одной совы и передающий эти параметры в глобальные переменные для другой совы, это тоже зло?)в чем суть такой ненависти к изменению глобальных переменных? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 1 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 декабря, 2015 а если у меня идёт связка индюк, читающий параметры одной совы и передающий эти параметры в глобальные переменные для другой совы, это тоже зло?)в чем суть такой ненависти к изменению глобальных переменных? Это общемировая практика, которая сильно упрощает работу. Делается отдельный метод по получению данных, которые пакуются в какую-нибудь структуру и метод который берет данные из этой структуры и задает их в глобальные переменные.struct data = get_data();set_data_to_expert(data); Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 1 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 декабря, 2015 а если у меня идёт связка индюк, читающий параметры одной совы и передающий эти параметры в глобальные переменные для другой совы, это тоже зло?)в чем суть такой ненависти к изменению глобальных переменных? Это общемировая практика, которая сильно упрощает работу. Делается отдельный метод по получению данных, которые пакуются в какую-нибудь структуру и метод который берет данные из этой структуры и задает их в глобальные переменные.struct data = get_data();set_data_to_expert(data); ничего не понял. ты хочешь сказать чтобы в сове был только один метод(функция/процедура), работающий с глобальными переменными? в чем суть-то того что ты написал? зачем обязательно данные, которые ты тащишь из/в глобальные переменные запихивать в структуру?у меня так и сделано, индюк пишет/удаляет/модифицирует , сова только читает. ну и как бы логично что нет двух потоков, одновременно удаляющие переменные(да я бы и рад создать грамотную очередь/стек, да только что-то не встретил понятия распределения доступа к ресурсам на mql4 вобще по сути). так же логично что перед тем как лезть в переменную идут проверки на то есть ли она вобще в текущий момент или нет.еще вопрос - чем грозит использование структур(с смешанными типами полей, стринг в их числе тоже) как таковых? Изменено 2 декабря, 2015 пользователем dermitay Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 декабря, 2015 dermitay Ваш пример с заплатками не совсем корректен - Qj говорил об обычных задачах. Ну и, конечно, не всегда получается следовать этим правилам, особенно если надо по-быстрому что-то сляпать..., для работы с классами нужен плановый подход, детальная проработка алгоритма и т.д.То что 1 поточный мт4 не располагает к широкому п Ссылка на сообщение Поделиться на другие сайты More sharing options...
Arius777 Опубликовано 3 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 декабря, 2015 Коллеги, а почему в некоторых исходниках не работает режим отладки, то есть кнопки не подсвечиваются? :-? Сам привык везде принты расставлять, если честно, даже сначала и не заметил, что появилась возможность пошаговой отладки в МТ4... Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 3 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 декабря, 2015 Коллеги, а почему в некоторых исходниках не работает режим отладки, то есть кнопки не подсвечиваются? :-? Сам привык везде принты расставлять, если честно, даже сначала и не заметил, что появилась возможность пошаговой отладки в МТ4... я тоже это только недавно увидел, нарадоваться теперь не могу :)) <:-p :x>а вобще вот почитай, там вобще пробегись по всем разделам, может что новое, полезное и удобное для себя найдёшь.http://www.metatrader5.com/ru/metaeditor/help/development/debug Изменено 3 декабря, 2015 пользователем dermitay Ссылка на сообщение Поделиться на другие сайты More sharing options...
Arius777 Опубликовано 3 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 декабря, 2015 ОК, спасибо!! Сейчас кстати глянул одно из последних видео Сергея, там Play активна :-? :-? - я в синхроне набираю код - ничего подобного, будем разбираться... (как обычно лень победила, поэтому и задал вопрос - так не хотелось самому искать :d) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 4 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 декабря, 2015 Всем привет. Подскажите как записать в код такую команду: если ордер закрылся по ТП - удалить все отложки. Или направьте где можно поискать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 4 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 декабря, 2015 Всем привет. Подскажите как записать в код такую команду: если ордер закрылся по ТП - удалить все отложки. Или направьте где можно поискать. логика проста - сначала ищешь ордер в истории закрытых ордеров(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)), потом сравниваешь его OrderClosePrice и OrderTakeProfit(). если между ними разница невелика(ну я к примеру беру не более 10пп по пятизнаку), то вызываешь собственноручно написанную функцию удаления всех отложенных ордеров. функция тоже проста, перебираешь все ткущие ордера(MODE_TRADES) и удаляешь(OrderDelete) все у которых OrderType()>1.пример кода:int ord=OrdersHistoryTotal();for(int i=ord; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if(MathAbs(OrderClosePrice()-OrderTakeProfit()) { Kill(); } }//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Kill() { int ord=OrdersTotal(); for(int i=ord; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS)) continue; if(OrderType()>1) { int tick=OrderTicket(); if(OrderDelete(tick)) { Print("yeee!! mutherfucker!!! i kill him!! ",tick); } } } } Изменено 4 декабря, 2015 пользователем dermitay 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
htp87 Опубликовано 5 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 декабря, 2015 Добрый день! Помогите пожалуйста, ищу обычный индикатор Tma.mq4, который используется в 3-ем уроке по обучению программированию.Сбросьте, пожалуйста, у кого есть. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 6 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 декабря, 2015 Добрый день! Помогите пожалуйста, ищу обычный индикатор Tma.mq4, который используется в 3-ем уроке по обучению программированию.Сбросьте, пожалуйста, у кого есть. Индикатор во вложении. Взят из темы ТС Победа. Называется он по другому, но это он и есть. TMA_with_Distances.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
htp87 Опубликовано 6 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 декабря, 2015 Спасибо. Но этот индикатор при компилировании в Meta Editor выдает много ошибок и не ставится на график. Изменено 6 декабря, 2015 пользователем htp87 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Stampo Опубликовано 6 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 декабря, 2015 Всем доброго здравия. У меня вот такой вопрос, может кто подскажет. Как в MT4 разрешить открытие ордеров только с одним мэджиком, а с другими запретить без возможности даже открытия? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 6 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 декабря, 2015 Stampo Вы имеете в виду запрет мэджика в терминале? - ни как, а зачем? ордера открывают эксперты или Вы сами - запретите торговать эксперту и всё. Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 7 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2015 Вопрос знатокам. уже мозги себе все переломал.Суть проблемы: сова висит на активном графике, при перекомпиляции сова НЕ деинициализируется и не инициализируется(как должна с деинит резон 2). При вызове свойств совы и нажатии ок - тоже самое, ничего не происходит(а должен быть деинит ризон 5), в логах никаких ошибок нет, при вышеописанных двух действиях(перкомпил кода и смена входных данных) - появляется только строчка с инпутами, без деинит и инит.нормальный деинит/инит идет только в том случае, если мы сменим таймфрейм(деинит ризон 3). но и тут лог чист аки слеза младенца - никаких ошибок(никаких абнормалов и таймаутов).весь код гоняется через EventSetMillisecondTimer - OnTimer. OnTimer вызывается только в OnInit.в коде нет ни одного цикла while, все for'ы перепроверил - везде всё ок.в OnDeinit конечно же убиваю таймер: void OnDeinit(const int reason) {//--- destroy timer ArrayFree(BD_Signals); ArrayFree(BD_Orders); ArrayFree(BD_News); EventKillTimer(); } Такой проблемы не было, откатится назад к старому коду нереально так как очень много новых функций прилеплено и всё это с исходником тесно связано.Кто сталкивался с таким глюком - подскажите, в чем может быть проблема?Добавлено: 07-12-2015 08:38:19толи глюки толи я чего-то не понимаю.берем старый код - кидаем на график, после этого заходим в свойства - ничего не меняем нажимаем "ОК" - идет полный круг деинит-инит. итак можно делать хоть стопицот раз(не меняя параметры по-умолчанию) - будет всегда идти полный круг деинит-инит.берем новый код - кидаем на график, после этого заходим в свойства - ничего не меняем нажимаем "ОК" - ничего не происходит, пишет строку только с инпутами. опять заходим в свойства - меняем какой-либо параметр, нажимаем "ОК" - и тут наконец-таки происходит полный круг деинит-инит.всё равно не пойму, почему тогда в первом случае полный круг происходит всегда? код по сути свой особо ничем не отличается, добавена просто туева хуча математических функций и анализа объектов графика, не более, структура кода-то осталась та же(через таймер) Изменено 7 декабря, 2015 пользователем dermitay Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 7 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2015 Старый и новый код откомпилирован в одной версии мэтаэдитра?По нормальному деинт-инит по ОК без изменения значений входных параметров не нужен - это явный атавизм.Может, в последнем эдиторе сделали наконец. Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 7 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2015 Старый и новый код откомпилирован в одной версии мэтаэдитра?По нормальному деинт-инит по ОК без изменения значений входных параметров не нужен - это явный атавизм.Может, в последнем эдиторе сделали наконец. сова пишется мной - конечно же, все что я выше написал делал в одном и том же эдиторе. ну по поводу смены входных параметров - соглашусь, ок, аттавизм. но... перекомпил-то не меняет код совы на графике... почему?..то есть, не особо критично конечно, но стало неудобно. то есть после перекомпиляции надо опять кидать сову на график, чтобы все изменения в коде стали актуальными, так как сова, которая крутится-вертится на графике - это сова со старым кодом(который по факту загружен в ОЗУ получается). бред бредом блин...с другой стороны, очень похоже на зацикливание. но тогда бы при смене таймфрейма/закидывании заново совы на график в логах бы выдалось что предыдущий экземпляр совы завершил работу некорректно - но это нет, ошибок нет и при этом всё равно то пишет то не пишет деинит ризон 1(для предыдущего экземпляра, просто пишет что ремувд иногда и всё, никаких деинитов), а должен... Изменено 7 декабря, 2015 пользователем dermitay Ссылка на сообщение Поделиться на другие сайты More sharing options...
htp87 Опубликовано 7 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2015 Добрый день! В домашнем задании к 3-ему уроку не совсем понятно как интегрировать индикатор Stochastic в советник. Какие исходные значения нужно переносить? Какой буфер за какую линию отвечает? По идее, покупка происходит, если синяя линия пересекает снизу вверх красную при значении ниже 20, и соответственно при пересечении синей линии сверху вниз красной выше значения 80 - продажа. Помогите, пожалуйста, разобраться. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 7 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2015 сова пишется мной - конечно же, все что я выше написал делал в одном и том же эдиторе. ну по поводу смены входных параметров - соглашусь, ок, аттавизм. но... перекомпил-то не меняет код совы на графике... почему?..то есть, не особо критично конечно, но стало неудобно. то есть после перекомпиляции надо опять кидать сову на график, чтобы все изменения в коде стали актуальными, так как сова, которая крутится-вертится на графике - это сова со старым кодом(который по факту загружен в ОЗУ получается). бред бредом блин... А чего перекомпил какого-то кода в какой-то папке должен самостоятельно менять коды/тела/настройки загруженных/активных сов на всех графиках?Совершенно не вижу оснований для такого беспредела!...На графика пользователь может держать несколько копий совы, в т.ч. одинаково называющиеся старые версии.И что, перекомпиляция какой-то версии в папке должна приводить к замене всех одинаково названных сов на всех графиках?Да метаквот за такие дела уже бы живьем закопали...Чё-то вы путаете, коллега... :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2015 Старик он не путает. такая фича была. перекомпил совы приводил к её переинициализации в терминале. Как в новых билдах не знаю - давно руками перегружаю сову - во избежании недопонимания, так сказать. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 7 декабря, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 декабря, 2015 Ну и фича! Реально татарская хитрость! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти