[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 60

 

to artmedia70:

Ну так ордер, когда приходит очередь этого условия, уже закрыт.

 

to demlin:

Ну я вижу, что из "Торговля" он исчезает.

 
demlin:

Всем привет!

Индикатор рисует линию, которая на следующий день отрывается от баров и повисает в воздухе в стороне. При перезагрузке индикатора опять отрисовывает нормально. Что это может быть?


Индикатор кривой. Надо переделывать
 
Vinin:

Индикатор кривой. Надо переделывать
я это понял, а в чем проблема может быть то?
 
Solree:

to demlin:

Ну я вижу, что из "Торговля" он исчезает.

Может быть тогда организовать перебор ордеров из истории? При нахождении нужного ордера считаете время закрытия
 

to delmin:

Чтобы как раз и не делать такое, я использую тикет. Вообще логику то переписать можно (хотя бы записать в bool возвращенное значение OrderClose() и потом проверить его). Просто интересно, почему же для закрытого ордера оно не возвращает нужное значение, та и забивать программу лишними действиями пока не хочется. Надеюсь на вашу помощь :)

 
Solree:

to delmin:

Чтобы как раз и не делать такое, я использую тикет. Вообще логику то переписать можно (хотя бы записать в bool возвращенное значение OrderClose() и потом проверить его). Просто интересно, почему же для закрытого ордера оно не возвращает нужное значение, та и забивать программу лишними действиями пока не хочется. Надеюсь на вашу помощь :)

Я вам уже ответил - сразу после выбора ордера по тикету нужно проверять его время закрытия. Только у закрытых ордеров оно больше ноля. У вас же проверка на время закрытия идёт уже после блока закрытия других ордеров и вы, соответственно, проверяете время закрытия других ордеров. А вообще - сколько кода показали - на столько исчерпывающие ответы и получаете.
 
demlin:
я это понял, а в чем проблема может быть то?

Код смотреть надо, а иначе только телепаты помогут
 
    if (tempWho == 0 && pos != -1)
    {
        if (OrderSelect(pos, SELECT_BY_TICKET))
        {
            if (OrderType() == OP_BUY)
            {
                if (who != 1)
                {
                    while(!OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), 0))
                        Sleep(3000);
                    
                    pos = -1;
                }
            }
            else if (OrderType() == OP_SELL)
            {
                if (who != 2)
                {
                    while(!OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), 0))
                        Sleep(3000);
                    
                    pos = -1;
                }
            }
            
            Alert(OrderCloseTime());
            
            if (OrderCloseTime() != 0)
            {
                if (OrderProfit() < 0)
                {
                    if (tempCount != 0)
                    {
                        tempLot += lot;
                        tempCount--;
                    }
                    else
                    {
                        tempLot = lot;
                        tempCount = countLot;
                    }
                }
                else
                {
                    tempLot = lot;
                    tempCount = countLot;
                }
            }
        }
    }

Вот код того блока, где закрывается и делается вся фигня по проверке времени закрытия.

Разве не все равно, когда вызывать функцию? Главное же иметь выбранный закрытый ордер. Или нет?..

З.Ы Уже переделал на более выгодный в плане производительности вариант. Но все равно интересно, что же я делаю не так с OrderCloseTime().

 
Solree:

Вот код того блока, где закрывается и делается вся фигня по проверке времени закрытия.

Разве не все равно, когда вызывать функцию? Главное же иметь выбранный закрытый ордер. Или нет?..

З.Ы Уже переделал на более выгодный в плане производительности вариант. Но все равно интересно, что же я делаю не так с OrderCloseTime().

Вы лучше напишите чего хотите добиться.