Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
printf, он же PrintFormat, более удобен и универсален, чем Print. Учебник описывает старую версию MQL4, так что устарел. Общего списка обновлений по версиям нет, некоторые сведения печатаются на этом форуме.
Спасибо.
Т.е. если что-то перестало работать или работает не корректно, то я либо случайно замечу это на форуме либо код не будет выполнятся?
Спасибо.
Т.е. если что-то перестало работать или работает не корректно, то я либо случайно замечу это на форуме либо код не будет выполнятся?
Надо ориентироваться на встроенную справку, а не на учебник. Справка обновляется постоянно и там редко бывают ошибки. Если я нахожу там или в МТ ошибку, пишу в сервис-дек, обычно реагируют оперативно исправляют в следующей версии терминала.
Пример по массивам:
1. В старом MQL4 можно было передавать массивы по ссылке или не по ссылке. Теперь можно только по ссылке. Но эта ошибка отслеживается компилятором.
2. В старом MQL локальные массивы сохранялись при выходе из функции, т.е. по умолчанию были static. Теперь это привели к правилам С/С++ и массивы уничтожаются. Старые программы, скомпилированные новым компилятором, могут работать некорректно с такими массивами.
Здравствуйте Роман.
Вам удалось решить проблему с ошибкой 1, функции OrderModify()? Информации по этому вопросу найти не получается. Эта ветвь в форуме, пожалуй, лучшее, что попалось на глаза. Но указанная в ней информация не решить проблему не помогла помогла....
Если Вы более удачливы в этом вопросе, не поделитесь информацией?
Здравствуйте Роман.
Вам удалось решить проблему с ошибкой 1, функции OrderModify()? Информации по этому вопросу найти не получается. Эта ветвь в форуме, пожалуй, лучшее, что попалось на глаза. Но указанная в ней информация не решить проблему не помогла помогла....
Если Вы более удачливы в этом вопросе, не поделитесь информацией?
Мне лениво перечитывать всё что написано здесь, поэтому может быть повторю уже сказанное.
Ошибка #1 -
1
ERR_NO_RESULT
Нет ошибки, но результат неизвестен
Мне лениво перечитывать всё что написано здесь, поэтому может быть повторю уже сказанное.
Ошибка #1 -
1
ERR_NO_RESULT
Нет ошибки, но результат неизвестен
Спасибо за скорый ответ, но (по моему субъективному мнению, возникшему вскоре после написания 1-го сообщения) ....
Вообще то, void TrallTP() - функция усреднения, а не трала. Просто вначале не внимательно просмотрел...
void TrallTP() "
Если происходит модификация 1-го ордера, то основная проблема будет заключаться в условии: for (int i = OrdersTotal() - 1; i >= 0; i--) т.к., если ордер 1, то логическое выражение в конечном итоге будет равно 0. Более того, при компиляции MetaEditor честно предупреждает, что "expression has no effect" - т.е. "не эффективно". Указанное условие имеет смысл, если ордеров не менее 2-х. В противном случае - ошибка 1 будет возникать постоянно. Указанное условие следует применять при усреднении ордеров, где предполагается возникновение отрицательного TakeProfit (положительного StopLoss) - иначе, при использовании метода Мартингейла (в разных вариантах).Если речь идет о модификации 1-го предварительно выбранного ордера, то лучше использовать "правильное" условие (минимум 1): for (i = 0; i < ot; i++), где int ot = OrdersTotal(). При этом обязательно нормализировать цены и пункты, как и говорили другие участники обсуждения. И если всё сделать нормально - ошибка 1 не возникает. А ещё лучше задачи модификации разделить на: OrderModify() StopLoss и OrderModify() TakeProfit.
Но суть вопроса в том, что если установлен 1 ордер, и функция OrderModify() содержит условие for (int i = OrdersTotal() - 1; i >= 0; i--) и предполагает усреднение, то ошибка 1 возникает постоянно. Пока не хватает мозгов, чтобы её исправить. Хотя некоторые догадки, требующие проверки ещё остались, но лучше предварительно спросить у коллективного разума. Поэтому, я и уточняю:
- удалось ли решить проблему непосредственно в функции OrderModify() ? (может какое-нибудь "исключительное" условие-проверка)
- или лучше всё же придумывать условие для вызова функции OrderModify() обособленно?
PS: чтобы приказ модифицировать ордер с теми параметрами которые уже установлены не отправлялся, необходимо прописать обязательное условие:
=====================
// только для трала ордеров; всегда будет устанавливаться минимальный StopLoss +1 пт; для трала - TakeProfit проверять и модифицировать (как и его наличие вообще) не обязательно.
bool Trailing;
int Tral = FALSE, SL = 0;
// для Buy-ордеров
SL = NormalizeDouble(Bid - (Tral - 1)*Point, Digits);
if ((Bid - OrderOpenPrice() > Tral*Point ) && (OrderStopLoss() < Bid - Tral*Point))
// для Sell-ордеров
if ((OrderOpenPrice() - Ask > Tral*Point) && (OrderStopLoss() > Ask + Tral*Point || OrderStopLoss() == 0))
// сама функция
bool Trailing = OrderModify(OrderTicket(), OrderOpenPrice(), SL, OrderTakeProfit(), 0, clrYellow);
=====================
Если прописано: for (i = 0; i < ot; i++), где int ot = OrdersTotal() , ошибка 1 при модификации 1-го ордера (OrdersTotal() = 1) не возникает (про группу ордеров не уверен; если не подводит память, при таком условии группа ордеров модифицироваться не будет вообще).
Если прописано: for (int i = OrdersTotal() - 1; i >= 0; i--) , ошибка 1 будет возникать если установлен 1 ордер (OrdersTotal() = 1). Если ордеров больше чем 1, ошибок не будет. При этом ордера модифицируются все. Может нужно прописать, например: for (int i = OrdersTotal() - 1; i > 0; i--) ? Нужно будет проверить...
Не надо путать ошибку 1 и работу цикла в одну кучу.
Пишу "на коленке" поэтому извиняйте если что-то пропустил
sl и tp в этом примере уже должны быть в виде цены.
Если ордер всего 1 то цикл повторится только 1 раз.
Не надо путать ошибку 1 и работу цикла в одну кучу.
Пишу "на коленке" поэтому извиняйте если что-то пропустил
sl и tp в этом примере уже должны быть в виде цены.
Если ордер всего 1 то цикл повторится только 1 раз.
Алексей!
Ошибка 1 и циклы взаимосвязаны, может не прямо - но косвенно или опосредованно. Но не будем распространяться далее.
Как понял - решения вопроса с ошибкой 1 у вас нет. Как и особого желания дискутировать это вопрос снова.
Хорошо. Спасибо за комментарии и потраченное время.
Я ещё покопаюсь с этим. Если будут подвижки - отпишусь.
Всем спасибо! Вы лучшие!
Алексей!
Ошибка 1 и циклы взаимосвязаны, может не прямо - но косвенно или опосредованно. Но не будем распространяться далее.
Как понял - решения вопроса с ошибкой 1 у вас нет. Как и особого желания дискутировать это вопрос снова.
Хорошо. Спасибо за комментарии и потраченное время.
Я ещё покопаюсь с этим. Если будут подвижки - отпишусь.
Всем спасибо! Вы лучшие!
Вы на ровном месте проблему делаете.
Проверяйте перед модификацией чтобы модифицируемые параметры не были равны параметрам модифицируемого ордера. Тогда и не будет ошибки 1
А цикл тут совсем не при чём. Совершенно. Цикл у вас верный - от количества ордеров-1, до нуля включительно. И он не влияет на ошибку модификации. Цикл влияет только на верность выбора очередного ордера в списке.
Да ладно Артём, мы с тобой ничего не понимаем в программировании. Вон люди уже больше года разбираются с проблемой и никак не решат...