Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 144

 
Ihor Herasko:

Да, конечно же. Функция ведь написана универсально. Если на каждом тике обращаться к ней, то получаем, что цикл проходит по всей истории счета. А история счета может быть достаточно глубокой (встречал случаи, когда ордеров было более 100 000). Чтобы ускорить выполнение, не нужно каждый раз запускать цикл по всей истории. Это достаточно сделать только один раз в самом начале и запомнить индекс последнего обработанного ордера. В следующий раз потребуется пройтись циклом только по ордерам, которые имеют индекс, больший, чем сохраненный индекс. После этого вновь запомнить индекс последнего ордера и т. д.

Спасибо за подробное объяснение. Теперь знаю в какую сторону смотреть так сказать. Но мои знания на этом заканчиваются к сожалению( и вряд ли я смогу допилить код самостоятельно( Кстати на демо счете 5 советников отработали хорошо ну в том плане, что не было повторно открытых сделок за текущую дату и задержки при открытии всех 5 позиций по 5 советникам вообще не было, правда теперь понятно почему, потому, что история счета пустая)
 
Vitaly Muzichenko:

Виноват плавающий спред.

Тоже так подумал сначала, но это верно и для пар с фиксированным спредом (типа DAX30), так и для сеток, состоящих из ордеров в одну сторону (в том числе - одного ордера) - для такого случая спред непричём (одна цена определяет прибыль - либо только Бид, либо только Аск).

Виталий, я из Вашего ответа понял, что очевидной ошибки в формулах нет? 

 
Igor Zakharov:

Тоже так подумал сначала, но это верно и для пар с фиксированным спредом (типа DAX30), так и для сеток, состоящих из ордеров в одну сторону (в том числе - одного ордера) - для такого случая спред непричём (одна цена определяет прибыль - либо только Бид, либо только Аск).

Виталий, я из Вашего ответа понял, что очевидной ошибки в формулах нет? 

Вот формула с рабочего:

 double poi=SymbolInfoDouble(mSymbol,SYMBOL_POINT);
 int dig=(int)SymbolInfoInteger(mSymbol,SYMBOL_DIGITS);
 double TickValue=SymbolInfoDouble(mSymbol,SYMBOL_TRADE_TICK_VALUE);

 double BuyAwerage=0,SellAwerage=0;
  if(_GetP.Buy._Lots>0)  BuyAwerage= NormalizeDouble(bid-(_GetP.Buy._AllProfit/( TickValue*_GetP.Buy._Lots ))*poi,dig);
  if(_GetP.Sell._Lots>0) SellAwerage=NormalizeDouble(ask+(_GetP.Sell._AllProfit/(TickValue*_GetP.Sell._Lots))*poi,dig);
 
Vitaly Muzichenko:

Вот формула с рабочего:

То есть полный аналог. Моя формула даже чуть более универсальна - в общем случае размер тика может быть не равен одному пункту (часто встречается на индексах).

Спасибо.

 

Здравствуйте.

Может быть у кого-то тоже встречался следующий глюк в МТ4.

Тестирую торговую систему из нескольких роботов для одного демо счета.

Но периодически 1-2 раза за сутки возникает ситуация что робот устанавливает ордер бай-стоп или сел-стоп который не срабатывает. Он выделяется желтым цветом и при попытке его удалить в окне появляется надпись про инвалидные параметры.

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

Если же удалить все остальные ордера (благо счет демо) и выключить на время работу терминала, то этот ордер активируется как надо и со времене закрывается или по команде программы или вручную.

Подскажите может быть это связано с тем что счёт демонстрационный, или причина втом. что используются несколько роботов прикрепленных к разным окнам.

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

Но возникает вот такой затык с зависанием ордера или даже двух.

Может кто-то сталкивался с такой проблемой или может предположить причину некорректной работы, а также способ её устранения.

Заранее спасибо.

 

на картинке - зеленый, которого нет в настройках терминала.

где я могу посмотреть цвета, которые задаются цифрами?

спсб

 
Pavel Ipatov:

Но периодически 1-2 раза за сутки возникает ситуация что робот устанавливает ордер бай-стоп или сел-стоп который не срабатывает. Он выделяется желтым цветом и при попытке его удалить в окне появляется надпись про инвалидные параметры.

Бывало такое, и не раз. В моём случае, виноват был всегда брокер, а не робот - если связаться со службой поддержки, они его принудительно удаляют. Если речь идёт о демке - я бы открыл новую у другого брокера.

 
Artsem:

на картинке - зеленый, которого нет в настройках терминала.

где я могу посмотреть цвета, которые задаются цифрами?

спсб

эээ... в фотошопе

 
Artsem:

на картинке - зеленый, которого нет в настройках терминала.

где я могу посмотреть цвета, которые задаются цифрами?

спсб

  1. Нажать на стрелку выпадающего списка.
  2. Выбрать Custom.
  3. Появится такое вот окно.

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

 
Ihor Herasko:

  1. Нажать на стрелку выпадающего списка.
  2. Выбрать Custom.
  3. Появится такое вот окно.

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

да, я не заметил кнопку custom.

не могу заменить цвет на "циферный" в Вашей панели.


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