Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 765

 
Alexey Kozitsyn:

Событие движения мыши точно не генерируется. С остальными, думаю, так же.

А в советнике?
 
Artyom Trishkin:
А в советнике?

Та же фигня...

 
Alexey Viktorov:

Ответ был дан до того как...

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

Пример кода я писать не буду. Нормальному программисту нужна только подсказка. Вот примерный алгоритм:

  1. Определяем примерное количество баров на расстоянии которых происходит пересечение канала. Пусть будет 15.
  2. Копируем оба буфера индикатора.
  3. Копируем значения баров используя CopyRates()
  4. В цикле начинаем сравнивать значение верхней границы канала и high баров одновременно со сравниванием low баров с нижней границей канала. В случае нахождения одного из пересечений индекс бара запоминаем в переменной и продолжаем искать второе пересечение. Выходим из цикла тогда, когда обе переменные индексов баров пересечения имеют значения.

Таким образом за одно копирование и один цикл можно при необходимости найти два пересечения. Даже нет необходимости в ArraySetAsSeries() поскольку при нахождении пересечения можно и, на мой взгляд, лучше запоминать не номер бара, а его время. Хотя зная время бара нет никакого труда определить его номер.

Внимание вопрос: Что будет быстрей работать, цикл с копированием буфера индикатора по 1 значению и копирование high бара по 1 и сравнивание этих значений, или одноразовое копирование определённого количества и сравнивание значений двух массивов между собой?

 

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

И, с чего Вы взяли, что я программист?

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


 
Vladimir Karputov:

Вот только вчера написал:

Задача:

на каждом тике получить "InpCountCopy" элементов open, high, low, close и time.

Реализация:

  1. цикл от "0" до "InpCountCopy-1" - в цикле получаем за один раз один open, high, low, close и time.
  2. за один раз получаем в структуру MqlRates "InpCountCopy" элементов и затем уже цикл по структуре.

Возможности:

можно выбирать как проверять: в OnTick или в OnTimer (1 секунда).

 

Спасибо, попробую осмыслить код.
 

Подскажите, почему этот код находить тикет, который ещё не в истории

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


 
Vitaly Muzichenko:

Подскажите, почему этот код находить тикет, который ещё не в истории


А искать закрытую сделку (OUT) пробовали? Ордер же был - его и видно.

 
Vitaly Muzichenko:

Подскажите, почему этот код находить тикет, который ещё не в истории


Все правильно :

Вы ищите Ордер , а Ордер на открытие Позиции = 63425010 уже сделал свое , и он в Истории.

И по моему Тикет Ордера и Тикет Позиции одинаковые , что Вас привело в заблуждение.

Если хотите анализировать Позиции, используйте PositionSelect(), а задем анализируйте ее свойства.

 

Что нужно:

Отослали ордер, в ответ получили тикет позиции, далее на графике рисуется объект с именем "тикета позиции"(замена не оговаривается). Если открыть несколько позиций, соответственно на графике несколько объектов с названиями тикетов, и если потом одну из них закрыть, то удаляются все объекты, а нужно удалить только объект с закрытым тикетом с истории. Функция удаления работает по OnTrade

 
Vitaly Muzichenko:

Что нужно:

Отослали ордер, в ответ получили тикет позиции, далее на графике рисуется объект с именем "тикета позиции"(замена не оговаривается). Если открыть несколько позиций, соответственно на графике несколько объектов с названиями тикетов, и если потом одну из них закрыть, то удаляются все объекты, а нужно удалить только объект с закрытым тикетом с истории. Функция удаления работает по OnTrade


Так что Вам нужно, тикет ордера или тикет позиции?

 
prostotrader:

Так что Вам нужно, тикет ордера или тикет позиции?

нужно удалять объекты с тикетом, которые уже в истории, но не трогать те, что ещё в рынке

Дублирую:

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


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