MQL для тебя

MQL для чайников, программирование на MQL4, MQL5

Вопрос №2

Посмотрите мой код:
for(int i=0;i<OrdersTotal();i++)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    OrderClose(...);
Почему при его выполнении закрываются не все ордера, а через один?

Дело в том, что при закрытии ордера Форекс в Metatrader 4 или удалении отложенного ордера Buy Stop или Sell Stop - позиция оставшихся смещается. 

Представим, что у нас есть 3 ордера Forex. Их позиции изначально: 0, 1, 2. При закрытии ордера в позиции 0 следующие ордера будут иметь позиции 0,1. Цикл же этого не учитывает и при следующем проходе будет попытка закрыть ордер в позиции 1. Поэтому более правильным вариантом на MQL будет следующий:
for(int i=OrdersTotal() −1;i>=0;i--)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    OrderClose(...);

Вопрос №1

Я нашел ошибку: при делении 1 на 2 вместо 0.5 получается 0. Как исправить?

Это не ошибка, а особенность языка MQL.

Дело в том что при делении целого числа на целое в языке MQL4 возвращается целое число. Это конечно не привычно, но необходимо запомнить. Если вы хотите получить вещественное число, то числитель или знаменатель так же должен быть вещественным числом.

Например: 1 / 2=0, 1.0 / 2=0.5, 1 / 2.0=0.5 или 1.0 / 2.0=0.5