Выпущен MetaTrader 4 Client Terminal build 600 с обновленным языком MQL4 и Маркетом приложений - страница 95

 
artmedia70:

Я бы поостерёгся на вашем месте делать такие категоричные утверждения.

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

Искать нужно конкретно последний по времени, а не по его расположению где-то там... Хоть это и дольше, но зато надёжно. Нет зависимости от порядка сортировки, который в любой момент может поменяться.

Нужно быть немного дальновиднее, и предусматривать всякие возможные в будущем каки/бяки...


Так можно ходить с зонтиком 365 дней в году :)

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

 
GSB:

Так можно ходить с зонтиком 365 дней в году :)

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



Вы если торговали реальными деньгами на советнике, то должны знать что полезно еще и валенки при этом надевать:) Расположение в истории должно быть прогнозируемым и железо-бетонным а не зависеть от визуального отображения где-то в терминале. Априори - по времени. Если делать то через OrderSelectBySomething(), чтобы было предельно ясно.
 
AlexeyVik:

Ну так сказано было что пользуется этим в блокноте...

Или хочешь сказать что редактор МЕ хуже блокнота?



Ты не совсем понял. Я открываю файл в режиме read only исключительно для поиска. Блокнот или другой редактор. Проще всего через Total Commander по F3.

F3 - открыл. Ctrl-F - нашел. Esc - закрыл.

Т.е. 3 преимущества - быстрое открытие файла, открытие второй копии и режим защиты от изменений контента.

 
Pyro:

Вы если торговали реальными деньгами на советнике, то должны знать что полезно еще и валенки при этом надевать:) Расположение в истории должно быть прогнозируемым и железо-бетонным а не зависеть от визуального отображения где-то в терминале. Априори - по времени. Если делать то через OrderSelectBySomething(), чтобы было предельно ясно.

Торгую. Последнюю фразу не понял, это что шутка?

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

Код что я привел, совершенно точно даст последний ордер в истории по символу. Дальше зависит от целей что хотите получить. Не факт например, что это самый последний по времени открытия, если позиция была открыта по лимит ордеру.

 
GSB:

OrdersTotal()-1 это последний ордер помещенный в историю, у него самое позднее временя открытия, от сортировки не зависит.

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

Ну я тоже так полагал, и это обычно работало. Но в пятницу поставил тестировать новую программу на живом счете, и обнаружил ошибку. Тогда я перевернул for(int i=0;i<OrdersTotal();i++) на for(int i=OrdersTotal()-1;i>=0;i--). Ошибка ушла, но совсем скоро появилась опять. Тогда я вернул обратно на for(int i=0;i<OrdersTotal();i++) и ошибка снова исчезла ... Но стала совершенно непонятна логика нумерации.

Конечно, первый и последний ордер можно определить заходя с любой стороны. Но мне нужен предпоследний! Видимо придется запихивать все в массивы и сортировать ...

Наверное было бы неплохо, если бы разработчики сразу давали всю информацию по ордерам в отсортированном массиве.

 
GSB:

Торгую. Последнюю фразу не понял, это что шутка?

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

Код что я привел, совершенно точно даст последний ордер в истории по символу. Дальше зависит от целей что хотите получить. Не факт например, что это самый последний по времени открытия, если позиция была открыта по лимит ордеру.



Вы просто не помните время, когда работа советника зависела от состояния вкладки "история сделок" в терминале. Вот было веселье. Для полноценного поиска по истории, во вкладки "история сделок" должно было стоять "показывать все сделки". Норм? ;)


UPD: Ну ок, если речь про OrdersTotal() поясните мне, сейчас что, нумерация идет не как раньше (поздний ордер сверху) ?

 
Pyro:

Вы просто не помните время, когда работа советника зависела от состояния вкладки "история сделок" в терминале. Вот было веселье. Для полноценного поиска по истории, во вкладки "история сделок" должно было стоять "показывать все сделки". Норм? ;)

мне думалось, что такая ситуация и сейчас, разве что-то изменилось ?
 
Pyro:

Вы просто не помните время, когда работа советника зависела от состояния вкладки "история сделок" в терминале. Вот было веселье. Для полноценного поиска по истории, во вкладки "история сделок" должно было стоять "показывать все сделки". Норм? ;)


UPD: Ну ок, если речь про OrdersTotal() поясните мне, сейчас что, нумерация идет не как раньше (поздний ордер сверху) ?


Мне кажется я подробно расписал как располагаться ордера - в порядке возрастания тикетов, самый последний ордер самый верхний в истории. OrdersTotal()-1 это последний ордер попавший в историю (либо отмененный лимитник, либо закрытая позиция). Если читать только позиции (OrderType()>1) то это будет последняя закрытая позиция попавшая в историю. Приоритет всегда времени открытия ордера, стал он потом позицией или нет. Посмотрите простейшим скриптом последнии 10-20 ордеров или позиций убрав или оставив условие OrderType()>1 и все внимательно проанализируйте.

int start()
  {
//----
   int oct, oot, ticket, cnt;
   int oht=OrdersHistoryTotal();
   string smbl;
      for (int i = oht-1; i >0 ; i--) {
         if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) 
         {
               if(OrderSymbol() != Symbol()) continue;  // закомментируйте для всех инструментов
               if(OrderType()>1) continue;              // закомментируйте чтобы увидеть и позиции и отмененные отложенные ордера
               oot = OrderOpenTime();
               oct = OrderCloseTime();
               smbl= OrderSymbol();
               ticket=OrderTicket();
               cnt++;
               Print(cnt,". ",smbl," #",ticket," open time ",TimeToStr(oot,TIME_DATE|TIME_SECONDS)," close time ",TimeToStr(oct,TIME_DATE|TIME_SECONDS));
               
               if(cnt>15) break;
         }
      }
   return(0);
  }

Можете сортировать историю как вам нравится, хоть по профиту, а на выходе получите всегда один результат.

Для начала закомментируйте фильтр по символу, и получите полный список последних 15 закрытых позиций, посмотрите на тикеты... потом на время открытия, и проанализируйте.

 
GSB:

Мне кажется я подробно расписал как располагаться ордера - в порядке возрастания тикетов, самый последний ордер самый верхний в истории. OrdersTotal()-1 это последний ордер попавший в историю (либо отмененный лимитник, либо закрытая позиция). Если читать только позиции (OrderType()>1) то это будет последняя закрытая позиция попавшая в историю. Приоритет всегда времени открытия ордера, стал он потом позицией или нет. Посмотрите простейшим скриптом последнии 10-20 ордеров или позиций убрав или оставив условие OrderType()>1 и все внимательно проанализируйте.

Можете сортировать историю как вам нравится, хоть по профиту, а на выходе получите всегда один результат.

Для начала закомментируйте фильтр по символу, и получите полный список последних 15 закрытых позиций, посмотрите на тикеты... потом на время открытия, и проанализируйте.

Вы не понимаете о чём вам толкуют? РАНЬШЕ сортировка была зависима от сортировки в терминале. Приходилось искать последний ордер точно и однозначно по времени. Вы уверены, что через неделю опять что-либо не поменяется? Я - нет. Поэтому мой советник, и советники моих заказчиков, даже если что-либо опять поменяется в порядке сортировки ордеров, как работали, так и продолжат - даже не заметят. А ваш - сольёт в худшем случае, в лучшем - станет работать не с тем ордером, с каким ожидаете вы, так как он уже НЕ будет последним в списке как вы предполагаете.

В этом вся разница. Я предлагаю железный, но медленный способ поиска именно последнего ордера однозначно по времени, вы же предлагаете опираться на сортировку, которая возможно может и поменяться. Это то же самое по надёжности, что и считывать комментарии ордеров и строить на этом логику. Нет никаких гарантий, что ДЦ туда не впишет собственную информацию... и ... приехали.

 
keekkenen:

нечего к словам придираться.. это не добавляет достоинств МЕ

Я не придираюсь. Я считаю программистам не свойственна такая не точность в выражениях.
Причина обращения: