zero devide

 
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.
Функция использовалась во многих советниках и как бы заведомо рабочая, в чем дело то?(
 
Pecmop:


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


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

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());
           }
 
Pecmop:
фунуция используется при переборе ордеров, по магику, т.е. ордер там заведомо есть.


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


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

 
Убедили, благодарю)
 
Вы были абсолютно правы, спасибо)
 
Почему нельзя 0/0?
 
eevviill:
Почему нельзя 0/0?

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

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

 
Scriptong:

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

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

Дык.Ну так и на 0 умножить это чтото надо умножить на ничего.
 
eevviill:
Дык.Ну так и на 0 умножить это чтото надо умножить на ничего.

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

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