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

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

Вложения

Он далек от Форекса, но хочет понять, что он сделал не так. И, возможно, в дальнейшем пригодится (есть пара идей). Если бы кто-то довел до ума эту сову, была бы очень благодарна.
Вообще-то там логика ужасная. Зачем выводить эти переменные во внешние
Код:
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))
   {
    // Здесь работаем открытие ордеров
   }
В данном случае день не важен. Он автоматом прицепится сегодняшний.
Дальше пусть сам спрашивает, не надо стесняться.
 
Что бы не частило на каждом баре по несколько раз - как только на текущем баре открыли позицию - запомнили время бара и запрещаем любые действия до появления нового бара. Но, поверь, из-за перерисовки нужно делать дополнительные проверки. Вы понаблюдайте за ним на ТФ М1, когда и как он переходит через "0" - в реале возможна кучка ордеров подряд вне зависимости от рабочего ТФ...
Вроде как подправил. Спасибо! Указал открывание ордера именно на первом тике. Успела только на одном ордере проверить - не частил, открылся только один. С понедельника протестим основательней.
 
Помогите разобраться с этим советником, советник простой но меня интересует почему он не хочет умножать лоты доливочных ордеров на дробную переменную, например 1.4, только целые, 2 или 3. Спасибо.
 

Вложения

Помогите разобраться с этим советником, советник простой но меня интересует почему он не хочет умножать лоты доливочных ордеров на дробную переменную, например 1.4, только целые, 2 или 3. Спасибо.
Что значит не хочет умножать? Может умножает, но не открывает ордер из-за неправильного размера лота?
 
Вообще-то там логика ужасная. Зачем выводить эти переменные во внешние
Код:
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))
   {
    // Здесь работаем открытие ордеров
   }
В данном случае день не важен. Он автоматом прицепится сегодняшний.
Дальше пусть сам спрашивает, не надо стесняться.
Насколько сын понял, по Вашему коду открывается только один ордер во время начала работы советника. На всякий случай попробовали - за вечер не открылось ни одного ордера, хотя сигналы были (наблюдала на минутках). Но все равно спасибо, из вашего кода он что-то для себя понял и переделал, в понедельник проверим.
Если за выходные не получится исправить остальное, сам обратится. Спасибо.
А по поводу корявости кода - работает с ним в первый раз и это еще не подчищенный черновой вариант.
 
Насколько сын понял, по Вашему коду открывается только один ордер во время начала работы советника. На всякий случай попробовали - за вечер не открылось ни одного ордера, хотя сигналы были (наблюдала на минутках). Но все равно спасибо, из вашего кода он что-то для себя понял и переделал, в понедельник проверим.
Если за выходные не получится исправить остальное, сам обратится. Спасибо.
А по поводу корявости кода - работает с ним в первый раз и это еще не подчищенный черновой вариант.
Я не говорил о корявости, я говорил о логике. Именно логику и правим сообща. Там в мою подсказку закралась ошибка. Я её только сейчас увидел. Надо вместо == поставить >=
Код:
if(Time[0] [COLOR=Red][B]>=[/B][/COLOR] StringToTime(BeginTime) && Time[0] <= StringToTime(EndTime)) 
   {
     // Здесь работаем открытие ордеров
   }
 
Что значит не хочет умножать? Может умножает, но не открывает ордер из-за неправильного размера лота?

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

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

Вложения

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

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

Забирай:
 

Вложения

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

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

Посмотрели (821) Посмотреть

Отслеживают (882) Посмотреть

Назад
Верх