MQL госпиталь (бывшая "Больничка"): исправляем ошибки

mobidik

-----
Сам добавил, где-то накосячил. Вопрос где? Может из докторов MQL кто подскажет.

Ошибка 131 появляется при закрытии, когда включено перекрытие. Стала появляться после добавления манименеджмента - так, что добавили - там и смотрите, а именно:
PHP:
Lot=NormalizeDouble(AccountBalance()* LotRisk * 0.0001,2);
 

OSS_5

Активный участник
Ошибка 131 появляется при закрытии, когда включено перекрытие. Стала появляться после добавления манименеджмента - так, что добавили - там и смотрите, а именно:
PHP:
Lot=NormalizeDouble(AccountBalance()* LotRisk * 0.0001,2);

mobidik
Ордера-то выставляются с умноженным лотом правильно, а вот когда идет закрытие ордеров с разными объемами лотов (например баи 0.10, а селл 0.11), вот тогда и появляется ошибка 131 неправильный объем. Голову уже сломал. Вот и обращаюсь за помощью.
 

Вложения

  • error131.png
    error131.png
    218,1 КБ · Просмотры: 24

MrGreen86

Гуру форума
mobidik
Ордера-то выставляются с умноженным лотом правильно, а вот когда идет закрытие ордеров с разными объемами лотов (например баи 0.10, а селл 0.11), вот тогда и появляется ошибка 131 неправильный объем. Голову уже сломал. Вот и обращаюсь за помощью.

если вы используете фунцию OrderCloseBy то там такой ошибки быть не может, так как этой функции передается только 2 тикета (бай и селл).
единсвтенный возможный нюанс если ваш брокер поддерживает минимальный лот 0.1, но при этом шаг изменения лота 0.01. Да бывают и такие. В таком случае брокер не может оставить вам сделку обьемом 0.01, и пишет такую ошибку.
 

OSS_5

Активный участник
если вы используете фунцию OrderCloseBy то там такой ошибки быть не может, так как этой функции передается только 2 тикета (бай и селл).
единсвтенный возможный нюанс если ваш брокер поддерживает минимальный лот 0.1, но при этом шаг изменения лота 0.01. Да бывают и такие. В таком случае брокер не может оставить вам сделку обьемом 0.01, и пишет такую ошибку.

В том то и дело, что закрываются ордера не по ordercloseby. Ордера закрываются по очереди. Создались условия для закрытия минусового ордера - прибылью прибыльных ордеров, минусовой ордер и прибыльные ордера закрываются. А раз они закрываются по очереди, какая разница какого они объёма.
 

Вложения

  • 1.png
    1.png
    199,1 КБ · Просмотры: 69

mobidik

-----
mobidik
Ордера-то выставляются с умноженным лотом правильно, а вот когда идет закрытие ордеров с разными объемами лотов (например баи 0.10, а селл 0.11), вот тогда и появляется ошибка 131 неправильный объем. Голову уже сломал. Вот и обращаюсь за помощью.

А причем тут с умноженным лотом? Я Вам показал, что у Вас не верный расчет лота в процентах от баланса. С какого умножение на 0,0001? Разве это равносильно /100(%)?
Вообще-то, как по мне, следовало было взять не от баланса, а от свободных средств - AccountFreeMargin()
Значение лота, а именно такая у Вас ошибка - не верный объем, рассчитывается в приведенной мной строке. А закрытие ордеров по перекрытию происходит в строках 320, 325, 333, 338 для расчета лота берется значение от того же расчета лота.

PS.
А с фиксированный размером лота есть данная ошибка?
 

سيرجي كيروف

Местный знаток
можно указать на ошибку-она будет однотипная раз за разом
другого конструктора ненашел(все ссылки биты)
 

mobidik

-----
можно указать на ошибку-она будет однотипная раз за разом
другого конструктора ненашел(все ссылки биты)

Постоянно есть объявление новой переменной, которая уже объявлена.
Как по мне - выбрось, т.к. ни кто не даст гарантии, что сам код будет верным и соответствовать заданному алгоритму работы - если что не так, вряд ли кто-то станет с ним разбираться, имхо.
 

mobidik

-----
mobidik
Ордера-то выставляются с умноженным лотом правильно, а вот когда идет закрытие ордеров с разными объемами лотов (например баи 0.10, а селл 0.11), вот тогда и появляется ошибка 131 неправильный объем. Голову уже сломал. Вот и обращаюсь за помощью.

А закрытие ордеров по перекрытию происходит в строках 320, 325, 333, 338 для расчета лота берется значение от того же расчета лота.

К тому же, Вы закрываете ордер с заданным тикетом с начальным лотом - это справедливо при фиксированном значение лота, а вот когда размер лота берется в проценте от баланса, его значение плавает, поэтому, там, где Вы определяете тикет ордера для закрытия следует узнать его лотность и именно с полученным значением и закрывать ордера.
 
Последнее редактирование:

OSS_5

Активный участник
А причем тут с умноженным лотом? Я Вам показал, что у Вас не верный расчет лота в процентах от баланса. С какого умножение на 0,0001? Разве это равносильно /100(%)?
Вообще-то, как по мне, следовало было взять не от баланса, а от свободных средств - AccountFreeMargin()
Значение лота, а именно такая у Вас ошибка - не верный объем, рассчитывается в приведенной мной строке. А закрытие ордеров по перекрытию происходит в строках 320, 325, 333, 338 для расчета лота берется значение от того же расчета лота.

PS.
А с фиксированный размером лота есть данная ошибка?

С фиксированным лотом ошибки нет, как только закрываются разнолотные ордера появляется ошибка 131. /100(%) уже так тоже делал, ордера выставляются с увеличенным лотом. Но ошибка происходит, как Вы правильно заметили в строках 320, 325, 333, 338. Пока ума не приложу, как сделать. Если есть какие варианты, буду признателен.

К тому же, Вы закрываете ордер с заданным тикетом с начальным лотом - это справедливо при фиксированном значение лота, а вот когда размер лота берется в проценте от баланса, его значение плавает, поэтому, там, где Вы определяете тикет ордера для закрытия следует узнать его лотность и именно с полученным значением и закрывать ордера.

О сообщение уже проскочило.
Ох mobidik быть бы еще программистом. Я не программист, от слова совсем. Конечно пытаюсь, но как определить его тикет для закрытия и его лотность с полученным значением и закрыть ордера, пока для меня темный лес. Поэтому и обратился сюда.
Не могли бы мне помочь.
 
Последнее редактирование:

mobidik

-----
С фиксированным лотом ошибки нет, как только закрываются разнолотные ордера появляется ошибка 131. /100(%) уже так тоже делал, ордера выставляются с увеличенным лотом. Но ошибка происходит, как Вы правильно заметили в строках 320, 325, 333, 338. Пока ума не приложу, как сделать. Если есть какие варианты, буду признателен.

Вариант только один - верно указать размер лота для закрытия, определить его можно там же, где и определяется тикет ордера подлежащего закрытию.
 

Mamsya

Элитный участник
mobidik,вылечи пожалуйста индикаторы :)
 

Вложения

  • 4_time_frame_trix.mq4
    8,5 КБ · Просмотры: 24
  • 4_time_frame_cci_2_levels.mq4
    9,2 КБ · Просмотры: 26

nxx

Новичок форума
Здравствуйте, уважаемые знатоки.
У меня неприятная ситуация: на почту пришло письмо от ДЦ, что с моего МТ4 на их сервер идет очень много запросов, 29000 вместо приемлемых для них 2000. Выяснилось в результате поисков, что виноват индикатор -рефрешер. У меня постоянно открыты 4 окна, на каждом TF(М1, М5, М15 и Н1) стоит этот индикатор. Чувствительность его регулируется выставлением интервала времени, через которое он срабатывает. Пользуюсь им из-за индикатора Trendalt_Alert, который, как я вычитал, на основе Fisher,а, потому сильно "залипает". Без Autorefresh никак. Все усугубляется тем, что на М1 рефрешер эффективен на настройках где-то не менее 10 сек, на больших настройках Trendalt_Alert работает рывками, сильно запаздывает.
Собственно сам вопрос: если на каждом TF рефрешер работает по своему графику,увеличивая в моем случае количество запросов на сервер ДЦ в 4 раза, нельзя ли его работу синхронизировать как-то, ну например, привязав его работу к терминальному времени и выставив регулировку на всех TF на одну величину? очень буду благодарен за помощь. Спасибо.
 

Вложения

  • AutoRefresh.ex4
    5,1 КБ · Просмотры: 22
  • AutoRefresh.mq4
    1,7 КБ · Просмотры: 25
  • Trendalt_Alert.ex4
    12,6 КБ · Просмотры: 25
  • Trendalt_Alert.mq4
    3,9 КБ · Просмотры: 32

Kasander

Местный знаток
Не отображается в подвале:
 

Вложения

  • wso & wro - mtf & alerts nmc 1.01.mq4
    7,5 КБ · Просмотры: 34
  • wso & wro - mtf & alerts nmc 1.01.ex4
    28 КБ · Просмотры: 22

cudahar

Новичок форума
Советник

Друзья , я тут колдую на советником , который удваивает лот после стопа .Но у меня лоты множатся как матрица . Подскажите как будет на языке MQ 4 функция " Запретить открывать на одной отметке два ордера в одинаковом направлении .Оставить ордер у которого лот больше .
Вот к примеру если возникают на одной отметке бай 0.4 лота 1.2000 и бай 0.2 лота 1.2000 то надо запретить открытие 0.2 лота и разрешить открытие 0.4 лота
 
Верх