MetaTrader 4 Build 186 - страница 5

 
Не только.
чесно, не помню - что ещё значит?

Сначала положит первый запрос на ордер в трейдовый поток, потом второй. Если повезет, конечно. Что поток с ними будет делать - тайна. Паузы не будет, это точно.
да, и если поток будет свободен

При всем уважении, это не решение. Это огород.
есть идеи лучше?) Кроме "сменить брокера и терминал"? =)
 
Обнаружил багу, OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES) говорит что находит уже закрытый ордер, ошибка повторяется постоянно:

//------------------------------------------------------------------------
// close order
//------------------------------------------------------------------------
bool CloseOrder(int OrderHandle)
  {
    color clr;
   
    Print("Trying to close order ", OrderHandle); 
    
    // wait for trade context
    if (!WaitForTradeContext()) return(false);
    
    if (!OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES)) 
      {
        Print("Can not locate order info");
        return(false);
      }
      
    if (OrderType() == OP_BUY) clr = Yellow; else clr = Red;    
    if (OrderClose(OrderHandle, OrderLots(), OrderClosePrice(), 5, clr))
      {
        Print("Successful");
        return(true);
      }
    else
      {
        Print("Failed: ", ErrorDescription(GetLastError()));
        return(false);
      }
  }
 
Не только.
чесно, не помню - что ещё значит?

Сначала положит первый запрос на ордер в трейдовый поток, потом второй. Если повезет, конечно. Что поток с ними будет делать - тайна. Паузы не будет, это точно.
да, и если поток будет свободен

Сам спросил, сам тут же и ответил. :) Функция также показывает, свободен поток в данный момент времени или нет.
Race condition again though (sigh). Поток может оказаться занятым между селекторной и трейдовой фунцией. Мутекс (который все почему-то называют семафором) мог бы помочь. Только его невозможно реализовать в текущей имплементации без другого рейс кондишна. Да и не царское (=юзерское) это дело.
Все эти проблемы давным давно преодолены в миллионе реализаций реал тайм процессов. Юниксовые сокеты и файл дескрипторы, например.
При всем уважении, это не решение. Это огород.
есть идеи лучше?) Кроме "сменить брокера и терминал"? =)

Конечно. :)
Бывало и хуже. Вот, взять любой UI, например.
Каждый юзер желает знать, почему между нажатием его любимого ctrl-alt-del и перезагрузкой компьютера проходит так много времени (особенно если этот юзер управляет миг31 (не симулятором) ). :)
В конце концов, даже виндовз способен возпроизводить потоковое видео в реальном времени. А уж пару торговых операций увязать с сервером...
Тем более, с собственным торговым потоком. :)

Если серьезно, идей, стопроцентно гарантирующих корректное выполнение торговых операций в ситуации, когда сам торговый движок не способен это сделать, быть не может. Все подобные идеи, по идее (прошу прощения за тавтологию ;)), должны сразу же быть реализованы на нижнем уровне прозрачно для пользователя.
 
Обнаружил багу, OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES) говорит что находит уже закрытый ордер, ошибка повторяется постоянно:
интересно, а что возвращает OrderClosePrice() после OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES)??? =)
Как можно закрывать позицию по цене 0.0000?

А багу не ты первый обнаружил =) Ордер не успевает переместиться в MODE_HISTORY.
 
Функция также показывает, свободен поток в данный момент времени или нет.
не правда :)
Если бы показывала, не было бы 20-ти страничных обсуждений "как избавиться от ошибок". И у меня проверка была практически с самого начала - до фени.
Хотя как тогда объяснить то, что у mike-а работало без ошибок? Правда, у него всего 3 эксперта, у меня обычно штук 8 висело..
 
Нифига себе не успевает, он у меня уже минут 10 как был закрыт а все равно находился. OrderClosePrice как раз возвращает нужную цену :) я долго не мог понять почему у меня не работает закрытие как в примере по ask и bid - постоянно говорит что invalid price и тогда я заменил на OrderClosePrice - и все заработало. Этот ClosePrice похоже та цена что показывается в метатрейдере в отрытых позициях, т.е. текущий бид или аск. Но точно не 0. А кажись я понял почему bid/ask не работал - я тестировал из скрипта и похоже bid и ask возможно были не установлены...
 
OrderClosePrice как раз возвращает нужную цену :)
ещё одна недокументированная возможность ?)

А по поводу ордера, я лопухнулся (как и ты =) - если выбираешь SELECT_BY_TICKET, он последний параметр не смотрит ;) выбирает из всех ордеров.
 
А как же тогда узнать закрыт ли ордер по тикету или нет? Перебирать что-ли все позиции?
 
А как же тогда узнать закрыт ли ордер по тикету или нет? Перебирать что-ли все позиции?
я проверяю именно по OrderCloseTime() =) И что интерсно, работает =)))
А ещё можно перебирать SELECT_BY_POS - MODE_TRADES, и если есть - значит не закрыт
 
Вопрос по новому билду:
Раньше, например в билд 183, после работы тестера в режиме оптимизации, результаты этой работы, весь получившийся файл, из папки Optimization Rezults можно было скопировать просто функцией Copy. Теперь эта функция копирует только одну строку из этого файла, и чтобы скопировать файл нужно выделит все строки. Это так задумано специально или получилось случайно? По моему удобнее было когда копировался весь файл, т.к. в копировании одной строки смысла не вижу.