Ошибки, баги, вопросы - страница 409

 
T-G:

Подскажите пожалуйста как на mql5 будет следующий код не пойму

в частотности как получить текущий час?
Держите
//+------------------------------------------------------------------+
//|                                                       пример.mq5 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property version   "1.00"

input int HourOpen=4;

MqlDateTime str;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   TimeToStruct(TimeCurrent(),str);

   if(str.hour==HourOpen)
     {
      // действие
     }
  }
//+------------------------------------------------------------------+
 
sergey1294:
Держите
У TimeCurrent() имеется перегрузка, так что можно время брать напрямую (минуя TimeToStruct()), хотя ваш вариант тоже верен.
 

stringo:

Т.е. серьёзные проблемы вызывает реализация вот такого варианта?:

void OnTrade(
             const string symbol,//символ, от которого (по которому) пришло торговое событие
             const uchar type,   //тип торгового события (изменения в ордерах, позициях или сделках)
             const ulong ticket  //тикет ордера или сделки, либо идентификатор позиции (в зависимости от второго параметра)
             );

Именно так. Дело в том, что торговля и очередь сообщений никак не синхронизированны. По одному и тому же тикету может прийти куча сообщений.

Кроме того, когда Вы получаете первое сообщение из этой кучи, Вы ничего не знаете о наличии следующих сообщений по этому же тикету. Вы кинулись обрабатывать модификацию тикета, а тикета-то уже нет, он уже в истории закрытых  позиций. Что делать? Неизвестно.

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

Был пару дней без связи.

Может быть, конечно, имеются разные варианты использования возможных параметров из функции OnTrade(), но я нацелен вот на такой вариант:

1. Ордеры. Получив очередное сообщение "из кучи", по тикету ордера узнаю, находится ли ордер в списке открытых ордеров (OrderSelect), или в списке исторических ордеров (HistoryOrderSelect). Т.е. получаю самую актуальную информацию о текущем нахождении конкретного ордера относительно списков ордеров.

2. Позиции. Получив  очередное сообщение "из кучи", по имени символа узнаю, каково состояние позиции по этому символу (PositionSelect). Т.е. также получаю самую актуальную информацию о текущем состоянии позиции.

Далее - работа с свойствами  конкретного инструмента, по необходимости.

Тем самым стараюсь избежать излишнего применения циклических проверок. 

 
Urain и sergey1294 спасибо за оперативный ответ, теперь понятно
 
AlexSTAL:
Что пишет то? Какие симптомы?

Ничего непишет!  пробую открыть демо счёт ( пробовал на разных ДЦ)

 

выдаёт

 

а дальше не может создать счёт 

 
papaklass:
Большинству трейдеров нужно знать сработал стоп-лосс или тэйк-профит и на каком инструменте. Остальные торговые события - экзотика, имеющая малое отношение к торговле. ИМХО. Поэтому, если бы в функции OnTrade() сообщался символ, то сравнивая, например, значения баланса текущего с предыдущим, можно было бы определить что сработало sl или tp.  Сделайте хотя бы символ.
Согласен. Как минимум символ нужен, а там сами разберемся что это было.
foxes:

Ничего непишет!  пробую открыть демо счёт ( пробовал на разных ДЦ)

 выдаёт

 а дальше не может создать счёт 

Когда скачивали терминал и где? Желателен скрин следующего окна, поскольку этот не информативен.
 

Разработчикам

Постоянный снос информации от торговом счете на Win 2003 SP2 (в терминальном режиме) это баг или так все и было задумано для повышения безопасности?

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

 
papaklass:
Большинству трейдеров нужно знать сработал стоп-лосс или тэйк-профит и на каком инструменте. Остальные торговые события - экзотика, имеющая малое отношение к торговле. ИМХО. Поэтому, если бы в функции OnTrade() сообщался символ, то сравнивая, например, значения баланса текущего с предыдущим, можно было бы определить что сработало sl или tp.  Сделайте хотя бы символ.
В "защиту тикета" :) Я вот предпочитаю работать с отложенными ордерами и отслеживать их судьбу от рождения и до пенсии. Какая же это "экзотика, имеющая малое отношение к торговле"? Напротив, точечное отслеживание судьбы ордеров по их тикетам - требование времени. - Для того, чтобы не выставить повторный отложеннный ордер или не проспать срабатывание уже установленного. При наличии параметров, о которых писал выше, блок точечного слежения за ордерами можно будет перенести в функцию OnTrade().
 
papaklass:
Большинству трейдеров нужно знать сработал стоп-лосс или тэйк-профит и на каком инструменте. Остальные торговые события - экзотика, имеющая малое отношение к торговле. ИМХО. Поэтому, если бы в функции OnTrade() сообщался символ, то сравнивая, например, значения баланса текущего с предыдущим, можно было бы определить что сработало sl или tp.  Сделайте хотя бы символ.
Ещё раз повторяю. Вопрос не закрыт. Пока отложен до поиска приемлемого решения. Ну и более важные задачи ещё не решены.
 
Yedelkin:
В "защиту тикета" :) Я вот предпочитаю работать с отложенными ордерами и отслеживать их судьбу от рождения и до пенсии. Какая же это "экзотика, имеющая малое отношение к торговле"? Напротив, точечное отслеживание судьбы ордеров по их тикетам - требование времени. - Для того, чтобы не выставить повторный отложеннный ордер или не проспать срабатывание уже установленного. При наличии параметров, о которых писал выше, блок точечного слежения за ордерами можно будет перенести в функцию OnTrade().
Возможно, если давать информацию, сколько торговых событий ещё есть в очереди, то многое упростится.
Причина обращения: