Скачать MetaTrader 5

zero devide

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересуют возможности MQL5? Загляни в документацию!
Denis Gaynetdinov
232
Denis Gaynetdinov 2015.06.04 10:35 
void ModifyOrdersSell(int mn = 0)
{
    double avg = 0;
    int count  = 0;
    for (int i = OrdersTotal()-1; i>=0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if (OrderMagicNumber() == mn && OrderSymbol() == Symbol() && OrderType() == OP_SELL)
            {
                avg += OrderOpenPrice();
                count++;
            }
        }
    }
    avg = NormalizeDouble(avg/count, Digits);
   
    for (i = OrdersTotal()-1; i>=0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if (OrderMagicNumber() == mn && OrderSymbol() == Symbol() && OrderType() == OP_SELL)
            {
                TP = NormalizeDouble(avg + TakeProfit*Point, Digits);
                bool mod = OrderModify(OrderTicket(), OrderOpenPrice(), 0, NormalizeDouble(avg - TakeProfit*Point, Digits), 0, Yellow);
            }
        }
    }
   
}


Выделенная строка выдает zero devide.
Функция использовалась во многих советниках и как бы заведомо рабочая, в чем дело то?(
Vitalie Postolache
12128
Vitalie Postolache 2015.06.04 10:43  
Pecmop:


Выделенная строка выдает zero devide.
Функция использовалась во многих советниках и как бы заведомо рабочая, в чем дело то?(
Всё как написано. Ордеров нет, count=0, деление на 0. Что не так-то? Заведомо нерабочая, лучше сказать.
Ihor Herasko
9042
Ihor Herasko 2015.06.04 10:44  
Pecmop:


Выделенная строка выдает zero devide.
Функция использовалась во многих советниках и как бы заведомо рабочая, в чем дело то?(
Как же она рабочая, если не сделана проверка деления на ноль перед выполнением операции деления? Эта ошибка будет появляться всегда, когда нет рабочих ордеров.
Denis Gaynetdinov
232
Denis Gaynetdinov 2015.06.04 10:53  
фунуция используется при переборе ордеров, по магику, т.е. ордер там заведомо есть.

for (int i=OrdersTotal()-1; i>=0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
           if (условие открытия)
           {
               ticket = OrderSend(Symbol(),OP_BUY,Lot(),Ask,Slippage,0,0,NULL,OrderMagicNumber(),0,Blue);
               ModifyOrdersBuy(OrderMagicNumber());
           }
Vitalie Postolache
12128
Vitalie Postolache 2015.06.04 10:58  
Pecmop:
фунуция используется при переборе ордеров, по магику, т.е. ордер там заведомо есть.


Вас кто-то жестоко ввёл в заблуждение. Позиция может и не открыться.


Если модификация ордера производится сразу же после открытия, да ещё тикет известен, то и модифицируйте по тикету, самый надёжный способ.

Denis Gaynetdinov
232
Denis Gaynetdinov 2015.06.04 10:59  
Убедили, благодарю)
Denis Gaynetdinov
232
Denis Gaynetdinov 2015.06.04 11:02  
Вы были абсолютно правы, спасибо)
Vasyl Nosal
18544
Vasyl Nosal 2015.06.10 12:19  
Почему нельзя 0/0?
Ihor Herasko
9042
Ihor Herasko 2015.06.10 12:24  
eevviill:
Почему нельзя 0/0?

Математики так решили ) Хотя потом сами же стали говорить, что при делении любого числа на ноль будет бесконечность. Дескать, идеального нуля не существует. А программисты за ними уже записали, переделывать потом не захотели. Вот и мучаемся... ))))

Ну а конкретно с 0/0. Объясните физический смысл этой операции. Ведь нужно "ничего" разделить на "ничего" частей.

Vasyl Nosal
18544
Vasyl Nosal 2015.06.10 13:39  
Scriptong:

Математики так решили ) Хотя потом сами же стали говорить, что при делении любого числа на ноль будет бесконечность. Дескать, идеального нуля не существует. А программисты за ними уже записали, переделывать потом не захотели. Вот и мучаемся... ))))

Ну а конкретно с 0/0. Объясните физический смысл этой операции. Ведь нужно "ничего" разделить на "ничего" частей.

Дык.Ну так и на 0 умножить это чтото надо умножить на ничего.
Ihor Herasko
9042
Ihor Herasko 2015.06.10 17:14  
eevviill:
Дык.Ну так и на 0 умножить это чтото надо умножить на ничего.

Так тут ведь есть физический смысл: есть "что-то", но мы его ни разу не берем )))

При 0 * 0: ничего нет, да и не берем мы его. А вот делить на "ничего" частей это действительно нонсенс. 

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий