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

Naglaya74

Новичок форума
Он далек от Форекса, но хочет понять, что он сделал не так. И, возможно, в дальнейшем пригодится (есть пара идей). Если бы кто-то довел до ума эту сову, была бы очень благодарна.
 

xzes12

Новичок форума
Всем привет, можно вылечить от запаздывания... в здоровом состоянии ему это не свойственно....
 

Вложения

  • Um_nik.ex4
    10,6 КБ · Просмотры: 49

AlexeyVik

Программист mql4 mql5
Он далек от Форекса, но хочет понять, что он сделал не так. И, возможно, в дальнейшем пригодится (есть пара идей). Если бы кто-то довел до ума эту сову, была бы очень благодарна.
Вообще-то там логика ужасная. Зачем выводить эти переменные во внешние
Код:
extern int ticket;
extern int total;
extern int CurTime;
Зачем дважды вводить время начала и завершения работы?
Код:
extern int BeginHour = 6;
extern int BeginMinute = 30;
extern int EndHour = 22;
extern string BeginTime = "6:30:00";
extern string EndTime = "22:05:00";
Достаточно двух последних.
Я-бы посоветовал сделать так:
Код:
  if(Time[0] == StringToTime(BeginTime) && Time[0] <= StringToTime(EndTime))
   {
    // Здесь работаем открытие ордеров
   }
В данном случае день не важен. Он автоматом прицепится сегодняшний.
Дальше пусть сам спрашивает, не надо стесняться.
 

Naglaya74

Новичок форума
Что бы не частило на каждом баре по несколько раз - как только на текущем баре открыли позицию - запомнили время бара и запрещаем любые действия до появления нового бара. Но, поверь, из-за перерисовки нужно делать дополнительные проверки. Вы понаблюдайте за ним на ТФ М1, когда и как он переходит через "0" - в реале возможна кучка ордеров подряд вне зависимости от рабочего ТФ...
Вроде как подправил. Спасибо! Указал открывание ордера именно на первом тике. Успела только на одном ордере проверить - не частил, открылся только один. С понедельника протестим основательней.
 

rendi38

Новичок форума
Помогите разобраться с этим советником, советник простой но меня интересует почему он не хочет умножать лоты доливочных ордеров на дробную переменную, например 1.4, только целые, 2 или 3. Спасибо.
 

Вложения

  • MeshAverager1.mq4
    5,7 КБ · Просмотры: 26

AlexeyVik

Программист mql4 mql5
Помогите разобраться с этим советником, советник простой но меня интересует почему он не хочет умножать лоты доливочных ордеров на дробную переменную, например 1.4, только целые, 2 или 3. Спасибо.
Что значит не хочет умножать? Может умножает, но не открывает ордер из-за неправильного размера лота?
 

Naglaya74

Новичок форума
Вообще-то там логика ужасная. Зачем выводить эти переменные во внешние
Код:
extern int ticket;
extern int total;
extern int CurTime;
Зачем дважды вводить время начала и завершения работы?
Код:
extern int BeginHour = 6;
extern int BeginMinute = 30;
extern int EndHour = 22;
extern string BeginTime = "6:30:00";
extern string EndTime = "22:05:00";
Достаточно двух последних.
Я-бы посоветовал сделать так:
Код:
  if(Time[0] == StringToTime(BeginTime) && Time[0] <= StringToTime(EndTime))
   {
    // Здесь работаем открытие ордеров
   }
В данном случае день не важен. Он автоматом прицепится сегодняшний.
Дальше пусть сам спрашивает, не надо стесняться.
Насколько сын понял, по Вашему коду открывается только один ордер во время начала работы советника. На всякий случай попробовали - за вечер не открылось ни одного ордера, хотя сигналы были (наблюдала на минутках). Но все равно спасибо, из вашего кода он что-то для себя понял и переделал, в понедельник проверим.
Если за выходные не получится исправить остальное, сам обратится. Спасибо.
А по поводу корявости кода - работает с ним в первый раз и это еще не подчищенный черновой вариант.
 

AlexeyVik

Программист mql4 mql5
Насколько сын понял, по Вашему коду открывается только один ордер во время начала работы советника. На всякий случай попробовали - за вечер не открылось ни одного ордера, хотя сигналы были (наблюдала на минутках). Но все равно спасибо, из вашего кода он что-то для себя понял и переделал, в понедельник проверим.
Если за выходные не получится исправить остальное, сам обратится. Спасибо.
А по поводу корявости кода - работает с ним в первый раз и это еще не подчищенный черновой вариант.
Я не говорил о корявости, я говорил о логике. Именно логику и правим сообща. Там в мою подсказку закралась ошибка. Я её только сейчас увидел. Надо вместо == поставить >=
Код:
if(Time[0] [COLOR=Red][B]>=[/B][/COLOR] StringToTime(BeginTime) && Time[0] <= StringToTime(EndTime)) 
   {
     // Здесь работаем открытие ордеров
   }
 

Mamsya

Элитный участник
Посмотрите плиз индикаторы...не отображаются, я в коде ни бум-бум :)
 

Вложения

  • TDI smoothed 2 alerts.mq4
    20,4 КБ · Просмотры: 24
  • rsima_bands nmc 6 lines.mq4
    16,2 КБ · Просмотры: 26

rendi38

Новичок форума
Что значит не хочет умножать? Может умножает, но не открывает ордер из-за неправильного размера лота?

Если коэффициент умножения установить 2, то все последующие открытые ордера соответственно увеличивают объем лота, а если множитель будет например 1.5, лот 0.01, то все далее открытые ордера будут 0.01 не увеличивая лота.
 

AlexeyVik

Программист mql4 mql5
Если коэффициент умножения установить 2, то все последующие открытые ордера соответственно увеличивают объем лота, а если множитель будет например 1.5, лот 0.01, то все далее открытые ордера будут 0.01 не увеличивая лота.
Ну, так на бумажке карандашиком посчитай сколько получится если умножить 0.01 на 1.5 и округлить до 2х знаков в меньшую сторону. Поставь лот 0.1 и проверь.
 

rendi38

Новичок форума
Ну, так на бумажке карандашиком посчитай сколько получится если умножить 0.01 на 1.5 и округлить до 2х знаков в меньшую сторону. Поставь лот 0.1 и проверь.

Проверил, если округлить, то получится 0.01, 0.02, 0.03 и тд., а у этого советник все время 0.01.
 

fs256

Местный знаток
Ну, так на бумажке карандашиком посчитай сколько получится если умножить 0.01 на 1.5 и округлить до 2х знаков в меньшую сторону. Поставь лот 0.1 и проверь.

"...в меньшую сторону...", - это по чьим правилам?
 

mobidik

-----
Помогите разобраться с этим советником, советник простой но меня интересует почему он не хочет умножать лоты доливочных ордеров на дробную переменную, например 1.4, только целые, 2 или 3. Спасибо.

Забирай:
 

Вложения

  • MeshAverager1.1.mq4
    5,7 КБ · Просмотры: 58

vlad_123

Местный знаток
"...в меньшую сторону...", - это по чьим правилам?

o_o
смех-смехом, но здесь действительно не все так просто...
я вот всегда считал, что если старшая отбрасываемая цифра <=5, то младшая оставляемая цифирь не меняется, а если отбрасываемая >5, то оставляемая увеличивается на 1.
взял, загуглил - а в теме нет однозначной позиции.
есть озвученный мной вариант, предлагают также (когда оставляемая - 5) увеличивать/не увеличивать в зависимости от четности/нечетности отбрасываемой цифры оО
так что - да, адептам современного образования тяжело...
 
Верх