Выбрать тикет 2-х позиций

 

Требуется закрыть позиции селл из серии 1 или 2 (сигнал для закрытия есть и функция закрытия есть)
Как выбрать тикет этих позиций для закрытия если сетка строится не по порядку?
Нужен тикет двух позиций селл ближайших к цене открытия бай.

 

Отсортировать ордера по тикетам или ценам.

 
Taras Slobodyanik:

Отсортировать ордера по тикетам или ценам.

Тикет не могу выдернуть
Мне нужен тикет селловских ордеров ближайших к цене бай ордера
И закрытия я делаю по их тикету

 

Сделать массив структур: тикет, направление, цена.
И в нём смотреть бай и ордера вокруг него.

...или же создавать два массива Тикет_Бай иТикет_Селл.

 
Taras Slobodyanik:

Сделать массив структур: тикет, направление, цена.
И в нём смотреть бай и ордера вокруг него.

...или же создавать два массива Тикет_Бай иТикет_Селл.

Даже не соображу как это реализовать.

Вот ордер бай я могу выцепить любой из серии и знать его цену открытия, а рядом стоящие селл не знаю как извлечь их тикеты.

 
Natalya Dzerzhinskaya:

Требуется закрыть позиции селл из серии 1 или 2 (сигнал для закрытия есть и функция закрытия есть)
Как выбрать тикет этих позиций для закрытия если сетка строится не по порядку?
Нужен тикет двух позиций селл ближайших к цене открытия бай.

Выбирать все байки подряд

Далее по дельте плюс/минус 1/2 к шагу сетки найти ближние селлки к выбранному баю и закрыть

Будет цикл в цикле

У Вас закроются все селлки в итоге
 
Renat Akhtyamov:
У Вас закроются все селлки в итоге

Надо закрыть только 2 селл за бай ордером (там-сям)

 
Natalya Dzerzhinskaya:

Надо закрыть только 2 селл за бай ордером (там-сям)

Если закрыть селлки 1-ой серии, то одна из них принадлежит 2-ой серии.

Соответственно, если нет условия по закрытию ровно 2-х селоок, то закроется одна оставшаяся селлка во 2-ой серии

У Вас 3 селлки, т.е. закроются все.

Ужесточайте условия закрытия на свой вкус.

Но определение близлежащих к баю селлок одно и то же: (+/-)Step*1.5

 
Natalya Dzerzhinskaya:

Надо закрыть только 2 селл за бай ордером (там-сям)

Вот набросал процедуру поиска тикетов ордеров

// buyPrice - цена, выше которой нужно найти тикеты двух ближайших Sell ордеров
void GetTicketsSell( double buyPrice, int& firstSellTicket, int& secondSellTicket )
{
   // массив для сортировки тикетов ордеров Sell в порядке возрастания цен открытия
   // в первом столбце - цена, во втором - тикет ордера
   double SortSell[ 30, 2];
   int i, n_Sell;
   bool result;
   
   // заполнение массива тикетов ордеров на продажу
   n_Sell = 0;
   for ( i = 0; i < OrdersTotal(); i ++ )
   {
      if ( OrderSelect( i, SELECT_BY_POS) )
         if ( OrderSymbol() == Symbol() && OrderType() == OP_SELL )
         {
            SortSell[ n_Sell, 0 ] = OrderOpenPrice();
            SortSell[ n_Sell, 1 ] = OrderTicket();
            n_Sell ++;
         }
   }
   
   // сортируем тикеты ордеров Sell в порядке возрастания цен открытия
   ArraySort( SortSell, n_Sell ) ;
   
   // поиск ближайших ордеров на продажу выше цены buyPrice
   result = false;
   for ( i = 0; i < n_Sell; i ++ )
   {
      if ( buyPrice < SortSell[ i, 0 ] )
      {
         result = true;
         break; // выходим, если нашли ближайший
      }
   }
   
   // обрабатываем результат поиска
   if ( result ) // найден, по крайней мере, один ордер
   {
      firstSellTicket = (int) SortSell[ i, 1 ];
      // второй ордер существует, если i < n_Sell - 1
      if ( i < n_Sell - 1 ) secondSellTicket = (int) SortSell[ i + 1, 1 ];
      else secondSellTicket = -1;
   }
   else // выше цены нет ордеров на продажу
   {
      firstSellTicket  = -1;
      secondSellTicket = -1;
   }
}
 
Mislaid:

Вот набросал процедуру поиска тикетов ордеров

Почему void GetTicketsSell?

Как мне узнать № ближайших тикетов?

Мне известна только цена открытия ордера бай

 
Mislaid:

Вот набросал процедуру поиска тикетов ордеров

А почему так жестко массив задан?

double SortSell[ 30, 2];

ArrayResize можно применить в первом цикле

Причина обращения: