Qj Опубликовано 21 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 ноября, 2015 Господа помогите...Просмотрел первые три урока Сергея. Здорово!Пытаюсь воспроизвести сову по третьему уроку.... по ТМА.Засада на ровном месте. Вопрос - почему высвечиваются ошибки и symbol не подсвечивается в цвет?http://joxi.ru/eAOlzELIJOnBro (для увеличения кликните мышкой на картинку) С большой буквы нужно Symbol() код регистрозависимый. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gtnh Опубликовано 21 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 ноября, 2015 Во!!! Ёжики печоные!!! x_xСПАСИБО!Всех благ! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рустам 68 Опубликовано 22 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 ноября, 2015 Уважаемые программисты не подскажите почему получается так что если выписать все прибыльные сделки по определённому шагу цены от точки до точки в столбец друг за другом игнорируя убыточные то выходит согласованность между ними по входам и выходам более 90% это на кроссах, а на слабо волатильных валютах меньше? Просто у меня сложилось такое впечатление что Рынок закономерен или я не прав? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 ноября, 2015 Уважаемые программисты не подскажите почему получается так что если выписать все прибыльные сделки по определённому шагу цены от точки до точки в столбец друг за другом игнорируя убыточные то выходит согласованность между ними по входам и выходам более 90% это на кроссах, а на слабо волатильных валютах меньше? Просто у меня сложилось такое впечатление что Рынок закономерен или я не прав?Подробнее с примерами, а то понять трудно. Некоторые закономерности в рынке есть. нужно внимательно их изучать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рустам 68 Опубликовано 23 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 ноября, 2015 Уважаемые программисты не подскажите почему получается так что если выписать все прибыльные сделки по определённому шагу цены от точки до точки в столбец друг за другом игнорируя убыточные то выходит согласованность между ними по входам и выходам более 90% это на кроссах, а на слабо волатильных валютах меньше? Просто у меня сложилось такое впечатление что Рынок закономерен или я не прав?Подробнее с примерами, а то понять трудно. Некоторые закономерности в рынке есть. нужно внимательно их изучать. Создаём шаг на бай и на сел где один смещён в большую или в меньшую сторону кому как угодно, но это нужно для работы по тренду, далее связываем шаг бай и сел между собой. Далее получается статистика по шагу из неё выбираем только прибыльные для анализа записываем в столбец и получаем практическую закономерность. В данном примере выборку не делал только шаги кому надо сам выберет и посмотрит. Выписывать на бай вход прибыль и на сел вход прибыль в отдельный столбец и получается очень высокая точность (Закономерность).EURJPYM1.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
garanyan1985 Опубликовано 23 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 ноября, 2015 Добрый день!Есть ли в видеоуроках информация о удалении несработанного отложенного ордера, если например сработал тейк проф, спасибо. :-b Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 23 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 ноября, 2015 garanyan1985, боюсь, что те, кто в этом топике в основном отвечают, интересующих вас видео уроков как раз и не смотрели. :( :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alex Fato Опубликовано 24 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 ноября, 2015 Здравствуйте, пишу бота на цикле. 1) открывается сделка (все равно в какую сторону) к примеру BUY 0,02 лота с фиксом прибыли в 1$ далее если сделка закрывается в + , сразу открывается такая же2) если пара идет в другую сторону , через 4 пункта (старые) открывается сделка объемом в 3 раза больше 0,06 Sell , и ждем закрытия сделок с общим профитом в 1$ 3) и так далее но не более 5 сделок , если 5-ая опять идет не туда , закрывается убыток но не более 10% от депозитаНе открывает третью противоположную сделку, и не закрывает все ордера когда AccountProfit() = 1 $ Добавлено: 24-11-2015 21:44:49Добрый день!Есть ли в видеоуроках информация о удалении несработанного отложенного ордера, если например сработал тейк проф, спасибо. :-b _https://www.mql5.com/ru/articles/1413 здесь второй боттак же можешь через OrderDelete() написать:if(OrderProfit() == TakeProfit){ OrderSelect(...); { OrderDelete(...); }} // ну или OrderProfit() можешь чем то другим заменить.14.mq4 Изменено 24 ноября, 2015 пользователем Alex Fato Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pioner_rus Опубликовано 25 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 ноября, 2015 :-/ Как корректно переводить пипсы в цену и обратно? Может, кто кинет ссылку, где это толково объясняется? Вообще, есть какие-то служебные функции типа NormalizeDouble -для чего они, и как ими пользоваться? Может, где то это понятно описано? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 25 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 ноября, 2015 :-/ Как корректно переводить пипсы в цену и обратно? Может, кто кинет ссылку, где это толково объясняется? Вообще, есть какие-то служебные функции типа NormalizeDouble -для чего они, и как ими пользоваться? Может, где то это понятно описано? Пипс * Point - Цена, Цена / Point - Пипс.NormalizeDouble - округляет число. Изменено 25 ноября, 2015 пользователем Qj 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Kroft Опубликовано 26 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 ноября, 2015 Подскажите пожалуйста!Урок № 2 обновленный.При компилировании выдает ошибку ""BuyLimitCount" - функция не определена"- function not defined и для 'BuyCount''SellLimitCount' тоже, а для 'SellCount' - нет. Что делать?Еще засунул в бот со второго урока старого, функцию "DeleteOrders()" убирать не сработавшие ордера. - Выдает предупреждение -Возвращаемое значение '' OrderDelete должны быть проверены - return value of 'OrderDelete' should be checked. Заранее спасибо. Изменено 26 ноября, 2015 пользователем Kroft Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 26 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 ноября, 2015 Подскажите пожалуйста!Урок № 2 обновленный.При компилировании выдает ошибку ""BuyLimitCount" - функция не определена"- function not defined и для 'BuyCount''SellLimitCount' тоже, а для 'SellCount' - нет. Что делать?Еще засунул в бот со второго урока старого, функцию "DeleteOrders()" убирать не сработавшие ордера. - Выдает предупреждение -Возвращаемое значение '' OrderDelete должны быть проверены - return value of 'OrderDelete' should be checked. Заранее спасибо. ну потомучто ты используешь нестандартные функции, не описанные за пределами рабочего исполняемого кода, поэтому это логично что он ругается. откуда ты вобще взял эти функции?второй вопрос - да, они желательно должны быть проверяемыми.лучше делать так:if (OrderDelete(параметры функции)){можно вывести какое либо ссобщение. или вобще ничего тут не делать}тоже самое касается OrderSelect, OrderModify и тому подобных. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Kroft Опубликовано 26 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 ноября, 2015 откуда ты вообще взял эти функции?Со второго урока - все в точь исполнил, убрал - перестал ругаться.Второй вопрос:лучше делать так:if (OrderDelete(параметры функции)){можно вывести какое либо сообщение. или вообще ничего тут не делать - Убрал параметр.}убрал параметр - получил:Ноль ошибок и ноль замечаний.Спасибо, это мой первый советник - кривой, но все же.Будем работать. Добавлено: 26-11-2015 18:27:08Вот такая вот петрушка, мой бот берет только общую максимальную цену, а максимальную дня не пересчитывает, вроде все по уроку второму сделал. может кто разъяснит ситуацию по второму уроку - обновленному.Настройки extern int BarCount = 10;extern int HourStart = 10;extern int HourEnd = 23; void GetMinPrice(){ for (int i = 0; i { mp = iLow (Symbol(), PERIOD_CURRENT, i); if (mp minprice = mp; } return;} //+------------------------------------------------------------------+ void GetMaxPrice(){ for (int i = 0; i { mp = iLow (Symbol(), PERIOD_CURRENT, i); if (mp > maxprice) maxprice = mp; } return;} Спасибо. 501888090.jpg Изменено 27 ноября, 2015 пользователем Kroft Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 27 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 ноября, 2015 Подскажите пожалуйста!Урок № 2 обновленный.При компилировании выдает ошибку ""BuyLimitCount" - функция не определена"- function not defined и для 'BuyCount''SellLimitCount' тоже, а для 'SellCount' - нет. Что делать? Заранее спасибо. Сделал все по уроку №2. При компиляции ошибок не было. Файл прилагаю. Огромное спасибо xbms !test2.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pioner_rus Опубликовано 27 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 ноября, 2015 Можно как-нибудь(например, массивом строк) получить список ВСЕХ валютных пар, которые поддерживает брокер? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 ноября, 2015 Можно как-нибудь(например, массивом строк) получить список ВСЕХ валютных пар, которые поддерживает брокер? Почитайте здесьВ цикле читаете символы (SymbolName) и пишете в массив. Изменено 20 августа, 2017 пользователем Pavel888 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 Выполнил домашнее задание к обновленному второму уроку. От себя добавил:[list type=decimal] время открытия ордеров не только в часах, но и в минутах, возможность отключать/включать установку лимитных ордеров возможность отключать/включать установку стоп ордеров проверку на количество знаков у брокера (из старых уроков) (все параметры в советнике задаем в старых пунктах) Прошу уважаемого xbms проверить и указать на ошибки, если таковые будут ( а куда они денутся :) )test2_dom_zadanie.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 void GetMinPrice(){ for (int i = 0; i { mp = iLow (Symbol(), PERIOD_CURRENT, i); if (mp minprice = mp; } return;} //+------------------------------------------------------------------+ void GetMaxPrice(){ for (int i = 0; i { mp = iLow (Symbol(), PERIOD_CURRENT, i); if (mp > maxprice) maxprice = mp; } return;} Спасибо. у тебя в обеих функциях(а они по идее должны быть процедурами с возвращающим double), возвращает всегда null в независимости от расчётов? так и должно быть? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 Спойлер void GetMinPrice(){ for (int i = 0; i { mp = iLow (Symbol(), PERIOD_CURRENT, i); if (mp minprice = mp; } return;} //+------------------------------------------------------------------+ void GetMaxPrice(){ for (int i = 0; i { mp = iLow (Symbol(), PERIOD_CURRENT, i); if (mp > maxprice) maxprice = mp; } return;} Спасибо. у тебя в обеих функциях(а они по идее должны быть процедурами с возвращающим double), возвращает всегда null в независимости от расчётов? так и должно быть? Так и должно быть. Мы находим mp в цикле и сравниваем его с заданным minpice. И, если mp Как-бы возвращать функция ничего и не должна. Поэтому для выхода из нее используем команду return.Тут специально используется тип void Цитата Синтаксически тип void является фундаментальным типом наравне с типами char, uchar, bool, short, ushort, int, uint, color, long, ulong, datetime, float, double и string. Этот тип используется либо для указания того, что функция не возвращает значения, либо в качестве параметра функции обозначает отсутствие параметров. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 ок, понял, типичная ошибка новичка при поиске минимального значения)))чему равен записываемый минимум ДО сравнения? который minprice? нулю? null??? none??? то все логично, ЛЮБОЙ другой минимум будет больше этого значения - и перезаписи не будет.обходится эта ошибка легко - перед входом в цикл присвой минимуму текущее значение пары(бид/аск - не суть важно, перезапись будет все равно по биду). Изменено 30 ноября, 2015 пользователем dermitay 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 dermitay, спасибо за ваши советы, я только начал обучение, и любая информация полезна. Цитата чему равен записываемый минимум ДО сравнения? который minprice? нулю? null??? none??? то все логично, ЛЮБОЙ другой минимум будет больше этого значения - и перезаписи не будет. так мы в самом начале задаем переменные double minprice=99999, maxprice=-99999,а потом в цикле сравниваем mp, найденное через iLow(iHigh) с заданными значениями. Цитата void GetMinPrice(){ for (int i=0; i { mp = iLow(Symbol(), PERIOD_CURRENT, i); if(mp minprice = mp; } return;} Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 dermitay, спасибо за ваши советы, я только начал обучение, и любая информация полезна. Цитата чему равен записываемый минимум ДО сравнения? который minprice? нулю? null??? none??? то все логично, ЛЮБОЙ другой минимум будет больше этого значения - и перезаписи не будет. так мы в самом начале задаем переменные double minprice=99999, maxprice=-99999,а потом в цикле сравниваем mp, найденное через iLow(iHigh) с заданными значениями. Цитата void GetMinPrice(){ for (int i=0; i { mp = iLow(Symbol(), PERIOD_CURRENT, i); if(mp minprice = mp; } return;} смотри. допустим цена сейчас равна 1.0570 (евробакс сейчас), пусть это будет и минимум(iLow) и максимум(iHigh).это меньше 99999? да, перезаписываем минимум.это больше 99999? нет, не перезаписываем максимум. следующая итерация. цена поменялась бар назад на 1.0560.это меньше 1,0570? да, перезаписываем минимум.это больше 99999? нет, не перезаписываем максимум. следующая итерация. цена поменялась бар назад на 1.0580.это меньше 1,0560? нет, не перезаписываем минимум.это больше 99999? нет, не перезаписываем максимум. и так далее.ты считаешь такой код будет корректно работать? значение максимума по евробаксу на последних 10ти барах 99999?)))) просто я обычно, когда вытворяю таки штуки, для начала беру текущие значения на нулевом баре и уже от них пляшу. в операциях сравнения всегда важна точка опоры. здесь ты если переменные не инициализируешь. то функция поиска минимума не будет корректно работать(вобще тебе сам компилятор должен будет об этом намекнуть), если ты задашь изначальные какие-то значения(конкретные цифры с потолка), то ты можешь в будущем проиграть в поиске как максимума, так и минимума. так как для одной пары эти цифры будут адекватны, а для каких-то, я привел выше евробакс, будут неадекватны.minprice = MarketInfo(Symbol(), MODE_BID);maxprice = MarketInfo(Symbol(), MODE_BID);ну или просто minprice = Bid;maxprice = Bid;и дальше у тебя уже неважно какая пара будет анализироваться - ты будешь знать что в операциях сравнения всё будет ок. Изменено 30 ноября, 2015 пользователем dermitay 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Serge25 Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 Здравствуйте. Вот я тут что-то сделал , но не получилось, посмотрите пожалуйста и подскажите как надо.Идея ТС.Торговля на пробое.Открытие позиций:Линия S1 взята от внешнего индикатора. Буферы в индикаторе выключены.При пересечении линии S1 ценой вверх советник открывает ордер на покупку.При пересечении той же линии S1 ценой вниз советник открывает ордер на продажу.Одновременно может быть открыта только одна сделка.Закрытие позиций:Cоветник закрывает позиции автоматически при достижении уровня стоп-лосс или тейк профит. Test-1.ex4 в тесте ордера не открывает. Если я меняю условие на if( Bid if(Ask>LastAsk) - ордера открываются, но они никак не связаны с индикатором (в приложение- скрин).Что надо добавить, чтобы ордера открывались только при пробое линии. Test_-1.mq4Screen.pngok.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 так мы в самом начале задаем переменные double minprice=99999, maxprice=-99999,а потом в цикле сравниваем mp, найденное через iLow(iHigh) с заданными значениями. Цитата void GetMinPrice(){ for (int i=0; i { mp = iLow(Symbol(), PERIOD_CURRENT, i); if(mp minprice = mp; } return;} имхо, начальное значение maxprice=-99999 корректно.Хотя вариант dermitay тоже рабочий.Ошибка, как мне кажется, в другом. void GetMaxPrice(){ for (int i = 0; i { mp = iLow (Symbol(), PERIOD_CURRENT, i); if (mp > maxprice) maxprice = mp; } return;} Почему mp = iLow? Хай дня по лоям свечей не узнаешь... Вроде должен быть mp = iHigh... :) Изменено 30 ноября, 2015 пользователем Старик 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 30 ноября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 ноября, 2015 Спойлер так мы в самом начале задаем переменные double minprice=99999, maxprice=-99999,а потом в цикле сравниваем mp, найденное через iLow(iHigh) с заданными значениями. Цитата void GetMinPrice(){ for (int i=0; i { mp = iLow(Symbol(), PERIOD_CURRENT, i); if(mp minprice = mp; } return;} имхо, начальное значение maxprice=-99999 корректно.Хотя вариант dermitay тоже рабочий.Ошибка, как мне кажется, в другом. void GetMaxPrice(){ for (int i = 0; i { mp = iLow (Symbol(), PERIOD_CURRENT, i); if (mp > maxprice) maxprice = mp; } return;} Почему mp = iLow? Вроде должен быть iHigh. :) Старик, и тот и тот вариант работают одинаково, я специально проверил. А на счет того, что mp = iLow? Вроде должен быть iHigh. :), так это просто кусок кода без контекста. На самом деле mp присваивается либо minprice из iLow, либо maxprice из iHigh. Цитата //+------------------------------------------------------------------+//Находим минимальную цену за n баров |//+------------------------------------------------------------------+void GetMinPrice(){ for (int i=0; i { mp = iLow(Symbol(), PERIOD_CURRENT, i); if(mp minprice = mp; } return;}//+------------------------------------------------------------------+//Находим максимальную цену за n баров |//+------------------------------------------------------------------+void GetMaxPrice(){ for (int i=0; i { mp = iHigh(Symbol(), PERIOD_CURRENT, i); if(mp>maxprice)maxprice = mp; } return;} Тут я виноват, что вырвал кусок без объяснения. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти