0ll Опубликовано 6 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2015 В первом уроке нет описания как обратиться к внешней переменной. к любой переменной обращаются по имени (названию). Я не буду делать задание за Вас.Не обращайте внимания на мелочи, задание такое: ввести в программу любое число, проанализировать и вывести сообщение на экран. Как ввести число читайте в справке. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Дмитрий_2008 Опубликовано 6 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2015 уважаемые, подскажите, что я делаю не так - дважды отправлял запрос на скачивание КУРСА, стаканчик симпатичный с уведомлением ГОТОВО тоже дважды получил, а КУРСА все нет :|спасибо Добавлено: 06-09-2015 23:22:02в спаме смотрел, если что Изменено 6 сентября, 2015 пользователем Дмитрий_2008 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Сахалинец Опубликовано 7 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 сентября, 2015 Я тоже не смог скачать нашёл какой то левый торрент по названию Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 7 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 сентября, 2015 Oll я нашел ошибку...только не знаю как ее исправить...вот кусок кода который вы скидывали: static double minBB = 0; if (curtime >= Start_calculation * 60 && curtime { if (IsNewBar()) { double bb = iCustom(NULL, 0, "Bollinger BandWidth", BBPeriod, StdDeviation, 0, 1); if ( bb } } else { if ( minBB > 0 ) Comment("Min BB =", NormalizeDouble(minBB,_Digits) ); minBB = 0; }ошибка в выделенной строке...этот индюк просто выводит минимальное растояние между верхней и нижней лентами Боллинджера...т е там не может быть отрицательного значения...я попытался сам чтото придумать, но не вышло... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 сентября, 2015 kempo сделай static double minBB = 99999999; и потом minBB = 99999999 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 7 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 сентября, 2015 if (curtime >= Start_calculation * 60 && curtime { if (IsNewBar()) { double bb = iCustom(NULL, 0, "Bollinger BandWidth", BBPeriod, StdDeviation, 0, 1); if ( bb } } else { if ( minBB > 0 ) Comment("Min BB =", NormalizeDouble(minBB,_Digits) ); minBB = 0; }а эти скобки стоят на месте???а то логика тогда не понятна... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 сентября, 2015 kempo скобки на месте. логика следующая: если время наше, то раз в бар проверяем индюк и сравниваем с минимумом, если время не наше, то публикуем минимум и переменную в исходное. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sharovik Опубликовано 8 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 сентября, 2015 Добрый день, подскажите пожалуйста, чем заменить Sleep при тестировании в тестере? нужна паузу после выполнения определенного условия на 1 час. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 8 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 сентября, 2015 Вопрос наверно тупой, но все же задам. Возможно ли в mql описать умный указатель?Пока придумал только убогий вариант через макросы :*( #define declare_smart_pointer(type_name, type) \class type_name { \ type *_obj; \public: \ type_name(type *obj) { _obj = obj; } \ ~type_name() { delete _obj; } \ type* get() { return _obj; } \};class order_count_t {public: int count; int stop_count; int all_count() { return count + stop_count; } order_count_t() { count = 0; stop_count = 0; }};declare_smart_pointer(order_count_t_sp, order_count_t) Изменено 8 сентября, 2015 пользователем Qj Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 сентября, 2015 В тестере? т.е. Вы хотите замедлить тест? - попробуйте GetTickCount(), правда я не знаю как он в тестере работает, или нужен цикл бестолковых вычислений. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 8 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 сентября, 2015 Можно реализовать таймер, и опрашивать его не прошло ли определенное время. Все удобство в том что даже в тестере будет работать. class timer_t {private: int _interval_in_sec; datetime _start;public: timer_t() { reset(); } void reset() { _start = TimeCurrent(); } bool is_elapsed() { return get_distance() >= _interval_in_sec; } int get_distance() { return ( int ) ( TimeCurrent() - _start ); } static timer_t *create ( int interval_in_sec ) { return timer_t::create ( TimeCurrent(), interval_in_sec ); } static timer_t *create ( datetime start, int interval_in_sec ) { timer_t *result = new timer_t(); result._start = start; result._interval_in_sec = interval_in_sec; return result; }}; Изменено 8 сентября, 2015 пользователем Qj 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 8 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 сентября, 2015 Qj прав, я почему-то подумал, что надо тест приостановить... :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sharovik Опубликовано 9 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 сентября, 2015 Спасибо, сделал чуть по другому, if(TimeCurrent() Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pavel_Bass Опубликовано 9 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 сентября, 2015 Подскажите пожалуйста , если использовать вместо блока void OnTick() , блок void OnTimer(). Я так понимаю в блоке инициализации ставим функцию EventSetTimer(60); где значение 60 это интервал времени в секундах, через сколько секунд выполняется программа void OnTimer(). Соответственно, если я поставлю большее значение например 100 секунд, будет ли в таком случае меньше затрачиваться ресурсов компьютера или ВПС сервера? Т.е. сделать так, чтобы бот работал не по тикам, а по таймеру, будет ли в таком случае меньше тратиться ресурсов железа на работу советника? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 9 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 сентября, 2015 Pavel_Bass будет меньше нагружать. но дело не в способе запуска - сова написана не рационально или используется тяжёлый индюк. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Robin Hood Опубликовано 10 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 сентября, 2015 Приветствую! есть вот такой индикатор который рисует вертикальные линии в заданные часы, но хотелось бы чтобы линии он рисовал на перспективу хотя бы на день а не за пять минуть до приближения цены. Можно ли это в нем как то поправить? 10_Vert_Line.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
nik171978 Опубликовано 10 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 сентября, 2015 Подскажите, как прописать условие:если последний открытый ордер был бай, то следующий только сел, и наоборот, чтоб тип окрываемого ордера чередовался.Я записал это так: if(Type!=-1 && Type!=Last_Type) { ticket=OrderSend(Symbol(),Type,LOT,oprice,Slip,0,0,NULL,Magic,0); if(ticket>0) { OrderModify(ticket,OrderOpenPrice(),SL1,TP1,0); Last_Type=Type; } } Начало выдавать ошибку (131) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 10 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 сентября, 2015 Подскажите, как прописать условие:если последний открытый ордер был бай, то следующий только сел, и наоборот, чтоб тип окрываемого ордера чередовался.Я записал это так: if(Type!=-1 && Type!=Last_Type) { ticket=OrderSend(Symbol(),Type,LOT,oprice,Slip,0,0,NULL,Magic,0); if(ticket>0) { OrderModify(ticket,OrderOpenPrice(),SL1,TP1,0); Last_Type=Type; } } Начало выдавать ошибку (131) Order:131:Invalid Trade Volume у вас не правильно задан лот. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 11 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 сентября, 2015 Подскажите, как бороться с ошибкой: 4204: no object nameСоздаю на каждом новом баре трендовые линии, перед каждым созданием удаляю все линии с графика. Все линии создаются. В чем может быть проблема? Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 11 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 сентября, 2015 Перед удалением нужно проверять на существование объекта:if (ObjectFind("объект") >= 0) ObjectDelete("объект"); 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 13 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 сентября, 2015 Перед удалением нужно проверять на существование объекта:if (ObjectFind("объект") >= 0) ObjectDelete("объект"); В этом то и загвоздка, потому что я вначале нахожу свои объекты, а потом удаляюObjectsDelete("имя");void ObjectsDelete(string search){ //Удаление определенных объектов с графика for (int i = ObjectsTotal() - 1; i >= 0; i--) { if (StringFind(ObjectName(i), search) != -1) ObjectDelete(ObjectName(i)); } } updРазобрался. Ошибка была не в удалении вовсе. Добавил в if ObjectFind(k) - все заработало. Но не понятно, почему он выдавал ошибку, если шла все равно проверка на тип существующего объекта. Возможно как то поизящнее написать эту часть кода?for (int k = ObjectsTotal(); k >= 0; k--) { if (ObjectFind(k) != -1 && ObjectType(ObjectName(k))==OBJ_TREND {NearLine = true; break;}} upd2Запутал всех, включая себя )Ошибка была из-за этой строчки: for (int k = ObjectsTotal(); k >= 0; k--) исправив ее на for(int k=0; k - она пропала и не понадобилась проверка на существование линий Изменено 13 сентября, 2015 пользователем Rever27 Ссылка на сообщение Поделиться на другие сайты More sharing options...
rom_kaxxx Опубликовано 13 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 сентября, 2015 Может кто подскажет, как усреднить TakeProfit для всех открытых позиций (OP_BUY и OP_SELL могут быть открыты одновременно)? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 сентября, 2015 Rever27 в цикле по перебору от 0 только не удаляйте объекты. кстати в процедуре удаления всё сделано правильно.rom_kaxxx вопрос не понял - Вы хотите закрыть разнонаправленные ордера по общему тейку? Ваш вопрос в расчёте уровня закрытия или алгоритме выставления СЛ/ТР? Ссылка на сообщение Поделиться на другие сайты More sharing options...
rom_kaxxx Опубликовано 14 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 сентября, 2015 rom_kaxxx вопрос не понял - Вы хотите закрыть разнонаправленные ордера по общему тейку? Ваш вопрос в расчёте уровня закрытия или алгоритме выставления СЛ/ТР? Алгоритм выставления я написал, некорректно идет расчет уровня закрытия. Надо для всех открытых ордеров посчитать уровень бу и + учесть ТР, чтоб сова в холостую не торговала. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 сентября, 2015 rom_kaxxx вопрос не понял - Вы хотите закрыть разнонаправленные ордера по общему тейку? Ваш вопрос в расчёте уровня закрытия или алгоритме выставления СЛ/ТР?Алгоритм выставления я написал, некорректно идет расчет уровня закрытия. Надо для всех открытых ордеров посчитать уровень бу и + учесть ТР, чтоб сова в холостую не торговала.Задачка хорошая. Тут будет 2 решения (имхо): - надо вычислить общий объём ордеров в каждую сторону и отдельно уровни БУ для каждой стороны.- объёмы должны быть разные, иначе общего уровня БУ либо не будет, либо будет очень далеко...- потом вычислить общий БУ для "бай в +" и общий БУ для "селл в +" по формуле: если (бай в +) то общБУ = (Лотс*БУс - Лотб*БУб) / (Лотс-Лотб)перепроверь и дальше сам... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти