ребят объясните пожалуйста почему при увелечении шага параметров при оптимизации число проходов справа внизу терминала не уменьшается тобишь количество такое же как и при более детальной в чем может быть причина и время такое же как и при более подробной оптимизации вообщем шаг не помогает сократить время для оптимизации почему? и как ускорить вообще оптимизацию?
Продолжительное время воюю с webrequest (get),сперва на mql4, теперь на mql5 ,периодически откладывая решение вопроса.
Заключается он в следующем: нужно OnTick в индюк копировать с сайта цены ряда экзотических кросов. Мой брокер, к сожалению, не располагает ими. Пример кроса на сайте ниже:
Прошу помочь. Я почти готов заплатить за решение этой проблемы: представляете как далеко все зашло?))
Продолжительное время воюю с webrequest (get),сперва на mql4, теперь на mql5 ,периодически откладывая решение вопроса.
Заключается он в следующем: нужно OnTick в индюк копировать с сайта цены ряда экзотических кросов. Мой брокер, к сожалению, не располагает ими. Пример кроса на сайте ниже:
Прошу помочь. Я почти готов заплатить за решение этой проблемы: представляете как далеко все зашло?))
Всем Успехов ! BugRiver
/// Для MQL 4// url - адрес страницы сайта// timeot - время в течении которого будет ожидаться ответ (мс)// webData - сообщение-ответ на запрос т.е. данные страницы сайта в виде текста// cut - количество отбрасываемых символов от начала сообщения-ответа///// Функция возвращает - true в случае, если удалось получить сообщение-ответ на запрос.bool ReadURL(conststring url, int timeout, string &webData, int cut)
{
char
myMessage[],
webMessage[];
string sWebTitle;
if(url == NULL)
{
Print("URL: NULL");
returnfalse;
}
ResetLastError();
// метод HTTP, url-адрес, cookie, referer, таймаут, массив тела HTTP-сообщения, размер массива data[] в байтах, массив с данными ответа сервера, заголовки ответа сервераWebRequest("GET", url, NULL, NULL, timeout, myMessage, 0, webMessage, sWebTitle);
if(ArraySize(webMessage) == 0)
{
Print("В качестве ответа получено пустое сообщение.");
Print("URL: ", url);
returnfalse;
}
webData = CharArrayToString(webMessage, cut);
Print("URL: ", url);
Print("Title: ", sWebTitle);
returntrue;
}
Потом из переменной в которую получили сообщение-ответ ищете с помощью текстовых функций необходимые данные. Сообщение-ответ предварительно лучше посмотреть в браузере т. е. зайти на нужную страницу и открыть исходный код страницы. Найти там нужные данные и написать в программе уникальный фильтр.
С Инвестингом не работал таким образом и думаю это будет проблематично. Они специально сделали свой сайт тормозным для тех у кого нет подписки. Поэтому лучше найти другой источник котировок для автоматического чтения из кода программы.
PS> В индюке нельзя вызвать WebRequest. Так что придётся организовать связь между индюком и советником или индюком и зацикленным скриптом, для доставки данных индюку.
Как правильно использовать функцию обработки ошибок, чтобы при возникновении непреодолимой ошибки при отправки ордера, эксперт перестал делать запросы на отправку ордера.
а вызываемую функцию разместить после кода советника:
//+------------------------------------------------------------------+//| ФУНКЦИЯ ОБРАБОТКИ ОШИБОК |//+------------------------------------------------------------------+int Fun_Error(int Error)
{ switch(Error)
{ // Преодолимые ошибки case0: return (0);
case1: Print("Попытка изменить уже установленные значения такими же значениями.");return(1);
case2: Print("Общая ошибка. Прекратить все попытки торговых операций до выяснения обстоятельств.");return(0);
case3: Print("В торговую функцию переданы неправильные параметры.");return(1);
case4: Print("Торговый сервер занят.Пробуем ещё раз..");Sleep(3000);return(1);
case5: Print("Старая версия клиентского терминала.");return(0);
case6: Print("Нет связи с торговым сервером.");return(1);
case7: Print("Недостаточно прав.");return(1);
case8: Print("Слишком частые запросы.");return(1);
case9: Print("Недопустимая операция нарушающая функционирование сервера.");return(1);
case64: Print("Счет заблокирован. Необходимо прекратить все попытки торговых операций.");return(0);
case65: Print("Неправильный номер счета.");return(1);
case128: Print("Истек срок ожидания совершения сделки.");return(1);
case129: Print("Неправильная цена bid или ask, возможно, ненормализованная цена.");return(1);
case130: Print("Слишком близкие стопы или неправильно рассчитанные или ненормализованные цены в стопах (или в цене открытия отложенного ордера).");return(1);
case131: Print("Неправильный объем, ошибка в грануляции объема.");return(1);
case132: Print("Рынок закрыт.");return(1);
case133: Print("Торговля запрещена.");return(0);
case134: Print("Недостаточно денег для совершения операции.");return(0);
case135: Print("Цена изменилась. Пробуем ещё раз..");RefreshRates();return(1);
case136: Print("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тика Sleep(1);
return(1);
case137: Print("Брокер занят.Пробуем ещё раз..");Sleep(3000);return(1);
case138: Print("Запрошенная цена устарела, либо перепутаны bid и ask.");return(1);
case139: Print("Ордер заблокирован и уже обрабатывается.");return(1);
case140: Print("Разрешена только покупка. Повторять операцию SELL нельзя.");return(1);
case141: Print("Слишком много запросов.");return(1);
case142: Print("Ордер поставлен в очередь.");return(1);
case143: Print("Ордер принят дилером к исполнению.");return(1);
case144: Print("Ордер аннулирован самим клиентом при ручном подтверждении сделки.");return(1);
case145: Print("Модификация запрещена, так как ордер слишком близок к рынку и заблокирован из-за возможного скорого исполнения.");return(1);
case146: Print("Подсистема торговли занята.Пробуем ещё..");Sleep(500);return(1);
case147: Print("Использование даты истечения ордера запрещено брокером.");return(1);
case148: Print("Количество открытых и отложенных ордеров достигло предела, установленного брокером.");return(1);
case149: Print("Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено.");return(1);
case4000: return (0);
case4001: Print("Неправильный указатель функции.");return(1);
case4002: Print("Индекс массива - вне диапазона.");return(1);
case4003: Print("Нет памяти для стека функций.");return(1);
case4004: Print("Переполнение стека после рекурсивного вызова.");return(1);
case4005: Print("На стеке нет памяти для передачи параметров.");return(1);
case4006: Print("Нет памяти для строкового параметра.");return(1);
case4007: Print("Нет памяти для временной строки.");return(1);
case4008: Print("Неинициализированная строка.");return(1);
case4009: Print("Неинициализированная строка в массиве.");return(1);
case4010: Print("Нет памяти для строкового массива.");return(1);
case4011: Print("Слишком длинная строка.");return(1);
case4012: Print("Остаток от деления на ноль.");return(1);
case4013: Print("Деление на ноль.");return(1);
case4014: Print("Неизвестная команда.");return(1);
case4015: Print("Неправильный переход.");return(1);
case4016: Print("Неинициализированный массив.");return(1);
case4017: Print("Вызовы DLL не разрешены.");return(1);
case4018: Print("Невозможно загрузить библиотеку.");return(1);
case4019: Print("Невозможно вызвать функцию.");return(1);
case4020: Print("Вызовы внешних библиотечных функций не разрешены.");return(1);
case4021: Print("Недостаточно памяти для строки, возвращаемой из функции.");return(1);
case4022: Print("Система занята.");return(1);
case4050: Print("Неправильное количество параметров функции.");return(1);
case4051: Print("Недопустимое значение параметра функции.");return(1);
case4052: Print("Внутренняя ошибка строковой функции.");return(1);
case4053: Print("Ошибка массива.");return(1);
case4054: Print("Неправильное использование массива-таймсерии.");return(1);
case4055: Print("Ошибка пользовательского индикатора.");return(1);
case4056: Print("Массивы несовместимы.");return(1);
case4057: Print("Ошибка обработки глобальныех переменных.");return(1);
case4058: Print("Глобальная переменная не обнаружена.");return(1);
case4059: Print("Функция не разрешена в тестовом режиме.");return(1);
case4060: Print("Функция не подтверждена.");return(1);
case4061: Print("Ошибка отправки почты.");return(1);
case4062: Print("Ожидается параметр типа string.");return(1);
case4063: Print("Ожидается параметр типа integer.");return(1);
case4064: Print("Ожидается параметр типа double.");return(1);
case4065: Print("В качестве параметра ожидается массив.");return(1);
case4066: Print("Запрошенные исторические данные в состоянии обновления.");return(1);
case4067: Print("Ошибка при выполнении торговой операции.");return(1);
case4099: Print("Конец файла.");return(1);
case4100: Print("Ошибка при работе с файлом.");return(1);
case4101: Print("Неправильное имя файла.");return(1);
case4102: Print("Слишком много открытых файлов.");return(1);
case4103: Print("Невозможно открыть файл.");return(1);
case4104: Print("Несовместимый режим доступа к файлу.");return(1);
case4105: Print("Ни один ордер не выбран.");return(1);
case4106: Print("Неизвестный символ.");return(1);
case4107: Print("Неправильный параметр цены для торговой функции.");return(1);
case4108: Print("Неверный номер тикета.");return(1);
case4109: Print("Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.");return(1);
case4110: Print("Длинные позиции не разрешены. Необходимо проверить свойства эксперта.");return(1);
case4111: Print("Короткие позиции не разрешены. Необходимо проверить свойства эксперта.");return(1);
case4200: Print("Объект уже существует.");return(1);
case4201: Print("Запрошено неизвестное свойство объекта.");return(1);
case4202: Print("Объект не существует.");return(1);
case4203: Print("Неизвестный тип объекта.");return(1);
case4204: Print("Нет имени объекта.");return(1);
case4205: Print("Ошибка координат объекта.");return(1);
case4206: Print("Не найдено указанное подокно.");return(1);
case4207: Print("Ошибка при работе с объектом.");return(1);
return(0);
}
return(0);
}
Подскажите, ПОЖАЛУЙСТА, как мне прописать условия покупки/продажи, если мне необходимо взять данные из буфера индикатора 1 и 2 пустые - в бай, не пустые буферы 1 и 2 - в селл.
Я недавно спрашивал совета на счет того, что не всегда модифицируется ордер на ndd счете (спасибо всем кто откликнулся). Дело оказалось все же не в моем советнике. Я несколько раз пытался узнать у тех-поддержки [название удалено Artyom Trishkin] о возможных ограничениях при модификации - времени от открытия ордера до момента модификации, наличии минимального расстояние от цены открытия до уровня выставления стопа и профита. На первый вопрос мне отвечали - ограничений нет, на второй - только на величину спреда. Как оказалось либо ни они (тех-поддержка), ни их тех-отдел не знают, что у них в действительности происходит, либо обманывают. Во время начала торговой сессии они (ограничения) есть (расстояние от цены открытия до уровней стопа и профита) и очень существенные - например по фунт/франк в 6 раз больше спреда (180 пунктов, на пятизнаке, при с спреде 32, хотя средний по этой паре, согласно их документации 0.23), на австр/кан больше чем 10 раз - 160 п. при среде 11 и т.д. Так что не удивительно, что у меня не модифицируются ордера при ТП по этим парам 100 (пятизнак) пунктов. Хотя у [название удалено Artyom Trishkin] данный тип счетов позиционируется как скальперский. Так то. Пишу, может кому пригодится. Всем удачи.
Господа, Приветствую!
Продолжительное время воюю с webrequest (get),сперва на mql4, теперь на mql5 ,периодически откладывая решение вопроса.
Заключается он в следующем: нужно OnTick в индюк копировать с сайта цены ряда экзотических кросов. Мой брокер, к сожалению, не располагает ими. Пример кроса на сайте ниже:
Прошу помочь. Я почти готов заплатить за решение этой проблемы: представляете как далеко все зашло?))
Всем Успехов ! BugRiver
Как получить переменную типа string в советнике, если вызов длл функции возвращает только указатель на строку
Ссылка на документацию
Господа, Приветствую!
Продолжительное время воюю с webrequest (get),сперва на mql4, теперь на mql5 ,периодически откладывая решение вопроса.
Заключается он в следующем: нужно OnTick в индюк копировать с сайта цены ряда экзотических кросов. Мой брокер, к сожалению, не располагает ими. Пример кроса на сайте ниже:
Прошу помочь. Я почти готов заплатить за решение этой проблемы: представляете как далеко все зашло?))
Всем Успехов ! BugRiver
С Инвестингом не работал таким образом и думаю это будет проблематично. Они специально сделали свой сайт тормозным для тех у кого нет подписки. Поэтому лучше найти другой источник котировок для автоматического чтения из кода программы.
PS> В индюке нельзя вызвать WebRequest. Так что придётся организовать связь между индюком и советником или индюком и зацикленным скриптом, для доставки данных индюку.
зделал код, наверно лучше сказать пародию на код за пол дня учебы и изучения, выдает ошибку "return value of 'OrderSend' should be checked"
кто то может помочь разобраться? и подсказать как создать советник
зделал код, наверно лучше сказать пародию на код за пол дня учебы и изучения, выдает ошибку "return value of 'OrderSend' should be checked"
кто то может помочь разобраться? и подсказать как создать советник
Всё норм. Осталось почитать про функцию обработки ошибок и добавить в код.
https://www.mql5.com/ru/forum/64058
Всё норм. Осталось почитать про функцию обработки ошибок и добавить в код.
Да не найдёт он ошибку, вы уж сразу подскажите:
Да не найдёт он ошибку, вы уж сразу подскажите:
ок.
после каждой команды на открытие/закрытие любого ордера дописать эту строчку:
а вызываемую функцию разместить после кода советника:
Пишу советник по индикатору Ma_C.
Подскажите, ПОЖАЛУЙСТА, как мне прописать условия покупки/продажи, если мне необходимо взять данные из буфера индикатора 1 и 2 пустые - в бай, не пустые буферы 1 и 2 - в селл.
Буду очень признателен за помощь.