Вопрос по мультивалютному советнику - страница 12

 

Добрый день. Функция  MiniMaxOrderPrice(Symbol(), -1, OP_BUYSTOP, 1 )  

корректно выдает тикер ордера, кот. в текущий момент находится дальше других ордеров от текущей цены.

Мне нужно удалить этот "дальний" ордер БАЙСТОП, если число выставленных ордеров превысит заданное значение .

Я делаю вот так:

//--------Удаление лишних ордеров--------------

if ( NumberOfOrders(NULL,OP_BUYSTOP,-1)>Количество_ордеров_  ){
//если число ордеров больше заданного

 for (int v=0; v<OrdersTotal(); v++)                                   {       
  if (OrderSelect(v,SELECT_BY_TICKET, MODE_TRADES))                    {
// перебираем по тикету
           
   if (OrderSymbol()==Symbol())                                        {                  
    if (OrderType() == OP_BUYSTOP)     {выбираем байстопы 


if (OrderTicket()== MiniMaxOrderPrice(Symbol(), -1,OP_BUYSTOP,1) )
//если тикет равен тикету самого дальнего ордера, - удаляем его

{     OrderDelete(OrderTicket(),Yellow);     return(0);    }
             }}}}} 


Но к сож. удаляется (если удаляется) вовсе не самый дальний ордер.

Хотя в комменте и визуально на графике я вижу, что функция 

MiniMaxOrderPrice(Symbol(), -1,OP_BUYSTOP,1)
возвращает тикет именно самого дальнего.

Но удаляется, почему то ближний. А потом, после нескольких удалений и вовсе начинаются ошибки удаления ордеров 4108 (неправильный тикет/неизвестный тикет.)

Видимо в код вкралась ошибка в 2-3 последних строках.... !

Пож. подскажите, где тут может быть ошибка ... ??


 
rid писал(а) >>

Добрый день. Функция MiniMaxOrderPrice(Symbol(), -1, OP_BUYSTOP, 1 )

корректно выдает тикер ордера, кот. в текущий момент находится дальше других ордеров от текущей цены.

Мне нужно удалить этот "дальний" ордер БАЙСТОП, если число выставленных ордеров превысит заданное значение .

Я делаю вот так:


Но к сож. удаляется (если удаляется) вовсе не самый дальний ордер.

Хотя в комменте и визуально на графике я вижу, что функция

возвращает тикет именно самого дальнего.

Но удаляется, почему то ближний. А потом, после нескольких удалений и вовсе начинаются ошибки удаления ордеров 4108 (неправильный тикет/неизвестный тикет.)

Видимо в код вкралась ошибка в 2-3 последних строках.... !

Пож. подскажите, где тут может быть ошибка ... ??

int DeleteTicket=MiniMaxOrderPrice(Symbol(), -1,OP_BUYSTOP,1);
OrderSelect(DeleteTicket,SELECT_BY_TICKET);
OrderDelete(OrderTicket(),Yellow);  
Можно примерно так сделать, хотя не уверен что это лучший вариант
 
Благодарю. Буду пробовать.
 

М-да...

Похоже сортировка по тикету в данной ситуации дело мутное и не совсем корректное.

Путается программа в тикетах! Задерживается с выходом. Удаляет ордера невпопад...

Попробую выставлять ордера с разными магиками. И потом сортировать по магику со всеми вытекающими..

 

Если не жалко, то могу весь код посмотреть, проверить. vinin@mail.ru

 

Ок! Благодарю. Сейчас уберу в коде сопли, причешу и пришлю. 

 

Подскажите пожалуйста такое дело. Если я открою кучу графиков и на каждый график закину советник, каждый из них будет работать или только тот что в активнов окне графика???

 

Да, - скорее всего так и будет. Будут работать все эксперты, во всех окнах.

 Кроме того, посмотрите в парамеры эксперта. 

Там должОн быть предусмотрен параметр  Magic ИЛИ ЧТО НИБ. ПОХОЖЕЕ.

Т.е. это тот параметр, по которому эксперт отличает "чужие" ордера и позиции от своих !

Вот как сказал поэт ! -

  Коль человек  мне верен -- он мой брат,
  Неверный брат -- мой враг, будь проклят он стократ.
  Лекарство иногда опасней, чем отрава,
  Болезни иногда излечивает яд. (О.Х.)

Иначе говоря, На ордера, выставленные другим экспертом, с другим магиком, каждый конкретный эксперт не обращает внимания.  А выставляет и "подхватывает для модификации" или закрывает только свои,  с конкретно им же заданным магиком!

Вот так...
 

 

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

другим советником?

 

Вопрос сформулирован туманно, но я его понял. 

Ответ: - Да! - разумеется, будет открывать! Ибо  сказано:

Кто в чаше жизни капелькой блеснет?
Ты или я? Блеснет и пропадет.
А виночерпий жизни, - миллионы
Лучистых брызг и пролил, и прольет.(0.Х.)

//-------------------------------------------------------------

Независимо от того есть ли в терминале открытые  позиции по данному инструменту. Открытые вручную или другим экспертом.

Но если магик этих открытых позиций не совпадает с магиком конкретного рассматриваемого советника, то этот советник откроет свою позицию, со своим магиком! Невзирая на наличие других (с иным магиком) позиций по данному инструменту.


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