Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 412
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот здорова... я конечно рад, что проблема стала у Вас решаться, но моё сообщение Вы почему то не заметили, где я сказал то же самое, чуть другими словами, и сразу сказал на недочёты, кроме закрытия файла, не сразу увидел где это у Вас происходит:)
Вы написали ответ из трёх пунктов. В первом Вы ошиблись (моя запись весьма корректна), во втором Вы тоже ошиблись (хотя данным сообщением это нивелировали :) Третий же пункт звучал так, будто Вы предлагали уводить курсор в конец уже после записи, а не до неё (что было воспринято опять же за ошибку). На фоне такой картины я предпочёл делать уточнения у ответившего многоопытного модератора.
Тем не менее, действительно, спасибо Вам за Ваш отклик. И с Новым годом! :)
Здравствуйте. Столкнулся с неприятной ситуацией. Помогите разобраться.
Есть советник. В тестере работает отлично, не каких претензий. А вот запускаешь на демке и к некоторым ордерам советник не может выставить стопы. Есть некая ошибка, которая проявляется не всегда, временами. Найти ее самостоятельно отчаялся, надеюсь на Вашу помощь. При этом замечу во всем остальном советник работает безупречно, как и в тестере не каких претензий, только вот беда, что не всегда устанавливаются стопы. Ошибка проявляется у разных брокеров на разных счетах. Привожу часть кода, отвечающую за торговые операции
Вот код функции Error(int er)
И так, когда советнику не удается выставить стопы, то появляется сообщение, в котором выводится информация об ошибки и параметры ордера, который он пытался модифицировать. То что он пишет для меня и есть самая настоящая загадка. Как видно из рисунков ниже, постоянно пишет, что неправильный объем. Странно. Добавлю, все параметры ордера перед модификацией рассчитываются верно, это видно из сообщений. К тому же в ином случае была бы совсем другая ошибка. Тестирование программы проводилось с более высоким спредом, чем тот что на демке.
Здравствуйте. Столкнулся с неприятной ситуацией. Помогите разобраться.
Есть советник. В тестере работает отлично, не каких претензий. А вот запускаешь на демке и к некоторым ордерам советник не может выставить стопы. Есть некая ошибка, которая проявляется не всегда, временами. Найти ее самостоятельно отчаялся, надеюсь на Вашу помощь. При этом замечу во всем остальном советник работает безупречно, как и в тестере не каких претензий, только вот беда, что не всегда устанавливаются стопы. Ошибка проявляется у разных брокеров на разных счетах. Привожу часть кода, отвечающую за торговые операции
Вот код функции Error(int er)
И так, когда советнику не удается выставить стопы, то появляется сообщение, в котором выводится информация об ошибки и параметры ордера, который он пытался модифицировать. То что он пишет для меня и есть самая настоящая загадка. Как видно из рисунков ниже, постоянно пишет, что неправильный объем. Странно. Добавлю, все параметры ордера перед модификацией рассчитываются верно, это видно из сообщений. К тому же в ином случае была бы совсем другая ошибка. Тестирование программы проводилось с более высоким спредом, чем тот что на демке.
Относитесь аккуратно к значениям своих глобальных переменных. Могу предположить, что ord_ticket глобальная переменная, а значит, в ней может сохраняться предыдущее значение. И перед вызовом GetLastError() для отлова ошибки, нужно сбросить предыдущее показание, вызовом её же в начале кода.
ord_ticket объявлена на локальном уровне. Да и потом даже в случае ее объявления на глобальном уровне в первой строчке
ее значение обязательно измениться. Либо номер ордера, в случае успешного проведения операции, либо -1 в противном случае. Так что если ордер не открыт, то в блок установки стопов мы не попадаем
Так же замечу, функция OrderSend() всегда изменяет значение последней ошибки(согласно документации и логике), поэтому сброс предыдущего показания в данном случае не обязателен и приведет к простой потери времени. То есть ошибка 131 появляется после входа в блок установки стопов и до вывода сообщения об ошибке. В силу того, что стопы реально не устанавливаются получается функция OrderModify() является последней вызываемой функцией, которая так же как и предыдущая всегда изменяет значение последней ошибки. Только я не как не могу понять почему же 131??? Откуда? Еще раз скажу, что в тестере ни каких проблем не было.
Была мысль, что брокер мудрит, ведь именно сервер присылает терминалу, а тот в свою очередь советнику номер ошибки. От нее я быстро отказался, потому что такая штука происходит только с ордерами одного советника, у остальных советников работающих параллельно не каких ошибок в работе не наблюдается.
ord_ticket объявлена на локальном уровне. Да и потом даже в случае ее объявления на глобальном уровне в первой строчке
ее значение обязательно измениться. Либо номер ордера, в случае успешного проведения операции, либо -1 в противном случае. Так что если ордер не открыт, то в блок установки стопов мы не попадаем
Так же замечу, функция OrderSend() всегда изменяет значение последней ошибки(согласно документации и логике), поэтому сброс предыдущего показания в данном случае не обязателен и приведет к простой потери времени. То есть ошибка 131 появляется после входа в блок установки стопов и до вывода сообщения об ошибке. В силу того, что стопы реально не устанавливаются получается функция OrderModify() является последней вызываемой функцией, которая так же как и предыдущая всегда изменяет значение последней ошибки. Только я не как не могу понять почему же 131??? Откуда? Еще раз скажу, что в тестере ни каких проблем не было.
Была мысль, что брокер мудрит, ведь именно сервер присылает терминалу, а тот в свою очередь советнику номер ошибки. От нее я быстро отказался, потому что такая штука происходит только с ордерами одного советника, у остальных советников работающих параллельно не каких ошибок в работе не наблюдается.
Добавлю. У параллельно работающего советника точно такой же код, отвечающий за установку стопов. Так вот у этого советника не разу не было ситуации при которой стопы к ордерам не устанавливались.
Получается, что есть ошибка при расчете параметров где-то выше, но если бы хоть один параметр был бы не верен, то появиться должна другая ошибка. Например, всем известная 130
ord_ticket объявлена на локальном уровне. Да и потом даже в случае ее объявления на глобальном уровне в первой строчке
ее значение обязательно измениться. Либо номер ордера, в случае успешного проведения операции, либо -1 в противном случае. Так что если ордер не открыт, то в блок установки стопов мы не попадаем
Так же замечу, функция OrderSend() всегда изменяет значение последней ошибки(согласно документации и логике), поэтому сброс предыдущего показания в данном случае не обязателен и приведет к простой потери времени. То есть ошибка 131 появляется после входа в блок установки стопов и до вывода сообщения об ошибке. В силу того, что стопы реально не устанавливаются получается функция OrderModify() является последней вызываемой функцией, которая так же как и предыдущая всегда изменяет значение последней ошибки. Только я не как не могу понять почему же 131??? Откуда? Еще раз скажу, что в тестере ни каких проблем не было.
Была мысль, что брокер мудрит, ведь именно сервер присылает терминалу, а тот в свою очередь советнику номер ошибки. От нее я быстро отказался, потому что такая штука происходит только с ордерами одного советника, у остальных советников работающих параллельно не каких ошибок в работе не наблюдается.
Вы написали ответ из трёх пунктов. В первом Вы ошиблись (моя запись весьма корректна), во втором Вы тоже ошиблись (хотя данным сообщением это нивелировали :) Третий же пункт звучал так, будто Вы предлагали уводить курсор в конец уже после записи, а не до неё (что было воспринято опять же за ошибку). На фоне такой картины я предпочёл делать уточнения у ответившего многоопытного модератора.
Тем не менее, действительно, спасибо Вам за Ваш отклик. И с Новым годом! :)
:D ок, и Вас с новым годом:)
Возвращаясь к написанному на 411 стр ... есть у кого-нибудь идея как объединить тот код и условия для входа-выхода по пересечению двух МА? или отложенные ордера единственный вариант?
После открытия сделки по сигналу мувингов начинайте следить за количеством ордеров или за этим ордером конкретно, если количество ордеров уменьшиться или как по второму варианту закроется конкретно этот ордер, то выясните каким образом он закрылся, если по стопу, то открывается просто противоположный орде по текущей цене, вот и всё
После открытия сделки по сигналу мувингов начинайте следить за количеством ордеров или за этим ордером конкретно, если количество ордеров уменьшиться или как по второму варианту закроется конкретно этот ордер, то выясните каким образом он закрылся, если по стопу, то открывается просто противоположный орде по текущей цене, вот и всё
Это-то я понимаю, но не получается написать. Советник либо торгует только по сигналам мувингов и не происходит открытие обратной позиции в случае убытка, либо просто вылетает терминал при начале тестирования. Значит я чего вообще написал что-то не обрабатываемое. Туго у меня с написанием. Нужна помощь ввиде написанного кода.
Вот кусок который как раз смотрит есть ли закрытые ордера и если OrderProfit()<0 получен убыток, то открывает противоположный. Но в связке с сигналами от мувингов не получается. Можете написать единый код чтобы и сигналы от мувингов и условие открытия противоположной позиции были?