Как написать код, что бы перед установкой отложенного ордера была проверка?

 

Подскажите, как написать код, что бы перед установкой отложенного ордера была проверка, а не стоит ли там уже такой ордер с такой же ценой ну, например по ене 107.23. Если стоит по этой цене 107.23 то ничего не делаем если нет, то ставим.

Обычно перебирают все ордера так

for ( int z =OrdersTotal - 1; z >= 0; z -- )

Далаее сравнимают меджик номбер

Далее символ ….

А как сюда вставить OrderOpenPrice не доходит…

 

Можно попробовать функцию

Функция PriceOpenLastPos().
Эта функция возвращает цену открытия последней открытой позиций. Отбор учитываемых позиций задаётся внешними параметрами:

sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену открытия последней открытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
rid:

Можно попробовать функцию

Функция PriceOpenLastPos().
Эта функция возвращает цену открытия последней открытой позиций. Отбор учитываемых позиций задаётся внешними параметрами:

sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

Ок! Спасибо попробую что-нибудь из этого выудить … 
Но судя по названию эта функция «Возвращает цену открытия последней открытой позиций»!
А у меня 5 отложенных ордера какие-то удаляются, а какие-то остаются и мне нужно
знать, свободна ли цена
107.23 для установки отложника или там уже стоит… Если свободна то ставим если нет то не ставим…

PS – Цена 107.23 взята для примера а так цена движется, только расстояние до уровня установки отложенного ордера константа, ну как обычно…

 

А что просто написать, например так, нельзя? -

if(OrderSelect ......       {
... ... ...                     {
if ( ! OrderOpenPrice( ) == 107.23 ) { 

... ...
 
rid писал (а):
Можно попробовать функцию
Функция PriceOpenLastPos().

Лучше возьмите функцию ExistPosByPrice()

 
rid:

А что просто написать, например так, нельзя? -

Нет нельзя, потому что цена движется, а у меня дистанция установки отложника 
только константа, а не цена установки отложника не константа! Т.е. если цена сейчас
107.23 то отложник ставиться на 30 пунктов от цены тогда это ровно
107.23 + 0.30 = 107.23 установлен отложенный ордер но в процессе работы
советника этот отложник или остается или удаляется так как цена или
подходит тогда он открывается или уходит тогда он удаляется… так вот
если он был удален а цена вернулась нужно проверить стоит  он там или
нет(может не на столько далеко цена уходила и не был удален) что бы не
поставить 2-й отложник с такой же ценой такого же типа.
 
KimIV:

Лучше возьмите функцию ExistPosByPrice()

Это мне предлагал и rid 10.06.2008 20:49

Ок! Попробую ...


	          
 

Full-Zero писал (а): Нет нельзя, потому что цена движется, а у меня дистанция установки отложника
только константа, а не цена установки отложника не константа! Т.е. если цена сейчас

107.23 то отложник ставиться на 30 пунктов от цены тогда это ровно
107.23 + 0.30 = 107.23 установлен отложенный ордер

"кто ясно мыслит, - тот ясно излагает!" (с)

Вообще не понял ничего! Вам бы в госдуме с трибуны выступать... Ну ладно... Попробуйте там с магиками "побаловаться". - для разных типов/видов ордеров (лимитные-стоповые-с рынка-длинные-короткие) предусмотрите разные магики. И потом выбирайте функциями И.КИМА и сравнивайте наличие/отсутствие.

 
rid:

"кто ясно мыслит, - тот ясно излагает!" (с)

Вообще не понял ничего! Вам бы в госдуме с трибуны выступать... Ну ладно... Попробуйте там с магиками "побаловаться". - для разных типов/видов ордеров (лимитные-стоповые-с рынка-длинные-короткие) предусмотрите разные магики. И потом выбирайте функциями И.КИМА и сравнивайте наличие/отсутствие.

Прикольно!!! Самому смешно!!!