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

 
Interesting:

Я так правильно понял, что значения возвращаемые ACCOUNT_TRADE_ALLOWED генерируются на стороне сервера?

Я имею введу что никакие действия со стороны трейдера (в терминале) не могут изменить это значение...

PS

А вот нежелание ACCOUNT_TRADE_EXPERT меняться для меня по истине странно...

На что тогда влияют кнопка "Авто-торговля" в меню терминала и галочка "Разрешить авто-торговлю"?

PPS

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


Кто покопался в ACCOUNT_TRADE_ALLOWED и ACCOUNT_TRADE_EXPERT, а главное зачем?


Разработчикам - Или я уже с ума сходить начал или в терминале "барабашки" объявились... :)

Причм не в последнем релизе, а еще как минимум в 294 (кто их тока туда пустил?)... :(


Маленький эксперимент

Берем термина 294 релиза бросаем на график эксперта, который контролирует изменение значения возвращаемого AccountInfoInteger(ACCOUNT_TRADE_ALLOWED).

При этом запрещаем авто-торговлю в параметрах эксперта и в терминале (кнопка "авто-торговля").

В результате в логе эксперта в видим следующее

Тут мы видим лог действий эксперта (при инициализации) и проверку значения ACCOUNT_TRADE_ALLOWED в таймере.

Нас интересует все выделенное цветом (до этого производилась загрузка списков символов в специализированный класс).

1. Синим цветом выделен первый результат возвращаемый таймером (он как и ожидалось false);

2. Красным цветом выделено следующий результат который вернул таймер, он вдруг оказался true (меня сильно интересует какой БАРАБАШКА позволил торговать);

3. Зеленым отмечена реакция моего класса (событие OnEventTimer) на произошедшие изменения.

Тут класс "понимает" что авто-торговля разрешена и радостно об этом сообщает (не разделяю его оптимизма);

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

//Reading information on current parameters of the trade account
RealTradeAllowed = TradeAllowed(); //TradeAllowed
RealTradeExpert  = TradeExpert();  //TradeExpert
//Checking the status change of the use possibility automatic trade
  if(varTradeAllowed!=RealTradeAllowed)
  //Processing the event TradeAllowed
  {
  OnTradeAllowed(RealTradeAllowed);
  //We write current status of the RealTradeAllowed in variable
  varTradeAllowed = RealTradeAllowed;
  }

4. Далее таймер постоянно возвращает true, чтобы не происходило с терминалом.

PS

С AccountInfoInteger(ACCOUNT_TRADE_EXPERT) ситуация еще запутанней. Таймер в не зависимости от настроек терминала и эксперта возвращает ture.

А нам это надо?

 
AM2:

 Меня тоже интересует подобный вопрос. Что делать если недостаточно средств на счете для открытия позиции?

1. Запретить советнику торговать.

2. Запретить открывать позиции.

3. Удалить эксперт с графика.

Пункт 3 с помощью ExpertRemove можно решить. 2-й пункт у меня так решается:

1. Насколько я понимаю запрет советнику торговать устанавливается не ПРОГРАММНО, а при помощи кнопки "Авто-торговля" и галочки "Разрешить авто-торговлю", с последующем контролем ACCOUNT_TRADE_ALLOWED и ACCOUNT_TRADE_EXPERT.

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

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

2. Контроль возможности открыть (закрыть) позицию должен вестись с учетом текущего состояния: коннекта, возможности авто-торговли и других условий (например, контроль возможности осуществления определенные операции по данному символу).

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

К примеру такую:

//Function IsTradePermit
bool IsTradePermit(bool TardeAllowed,bool Connect,double FreeMargin)
{
//----------------------------------------------------------------------------//
//Work variables
bool Result;
//----------------------------------------------------------------------------//

//Тут мы проверяем разрешена или нет торговля

//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

3. Эксперт стоит удалять с графика только в крайних случаях (когда его работа не может осуществляться или когда он больше не нужен)

Это вообще очень крайняя и редкая ситуация. Ее следует использовать к примеру если какие-то файлы необходимые для работы эксперта не найдены или если произошла ошибка которую эксперт не сможет самостоятельно обработать.

PS

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

 
Interesting:

Кто покопался в ACCOUNT_TRADE_ALLOWED и ACCOUNT_TRADE_EXPERT, а главное зачем?


Разработчикам - Или я уже с ума сходить начал или в терминале "барабашки" объявились... :)

Причм не в последнем релизе, а еще как минимум в 294 (кто их тока туда пустил?)... :(


Маленький эксперимент

Берем термина 294 релиза бросаем на график эксперта, который контролирует изменение значения возвращаемого AccountInfoInteger(ACCOUNT_TRADE_ALLOWED).

При этом запрещаем авто-торговлю в параметрах эксперта и в терминале (кнопка "авто-торговля").

В результате в логе эксперта в видим следующее

Тут мы видим лог действий эксперта (при инициализации) и проверку значения ACCOUNT_TRADE_ALLOWED в таймере.

Нас интересует все выделенное цветом (до этого производилась загрузка списков символов в специализированный класс).

1. Синим цветом выделен первый результат возвращаемый таймером (он как и ожидалось false);

2. Красным цветом выделено следующий результат который вернул таймер, он вдруг оказался true (меня сильно интересует какой БАРАБАШКА позволил торговать);

3. Зеленым отмечена реакция моего класса (событие OnEventTimer) на произошедшие изменения.

Тут класс "понимает" что авто-торговля разрешена и радостно об этом сообщает (не разделяю его оптимизма);

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

4. Далее таймер постоянно возвращает true, чтобы не происходило с терминалом.

PS

С AccountInfoInteger(ACCOUNT_TRADE_EXPERT) ситуация еще запутанней. Таймер в не зависимости от настроек терминала и эксперта возвращает ture.

А нам это надо?

Что-то странное у Вас получается, ACCOUNT_TRADE_ALLOWED и ACCOUNT_TRADE_EXPERT - это разрешение на торговлю в ДЦ.

Кнопачка "Автоторговля" - TerminalInfoInteger(TERMINAL_TRADE_ALLOWED).

есть ещё MQL5InfoInteger(MQL5_TRADE_ALLOWED) - разрешение/запрет торговли эксперту/скрипту

 
Swan:

Что-то странное у Вас получается, ACCOUNT_TRADE_ALLOWED и ACCOUNT_TRADE_EXPERT - это разрешение на торговлю в ДЦ.

Кнопачка "Автоторговля" - TerminalInfoInteger(TERMINAL_TRADE_ALLOWED).

есть ещё MQL5InfoInteger(MQL5_TRADE_ALLOWED) - разрешение/запрет торговли эксперту/скрипту

Про MQL5InfoInteger(MQL5_TRADE_ALLOWED) я знаю, она работает нормально и нормально отслеживаться в эксперте,MQL5_DLLS_ALLOWED также нормально обрабатывается.

Таким образом как я понимаю:

TERMINAL_DLLS_ALLOWED и TERMINAL_TRADE_ALLOWED - разрешения на уровне терминала;

MQL5_DLLS_ALLOWED и MQL5_TRADE_ALLOWED - разрешения на уровне эксперта;

ACCOUNT_TRADE_ALLOWED и ACCOUNT_TRADE_EXPERT - разрешения на уровне сервера.

Тогда будем считать, что это сервер изменяет false на true (хотя не очень понятно почему два раза выдается сообщение об этом).

 
Swan, спасибо за подсказку. Все исправил. Вроде работает нормально все...
 

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

Документация по MQL5: Файловые операции / FileDelete
Документация по MQL5: Файловые операции / FileDelete
  • www.mql5.com
Файловые операции / FileDelete - Документация по MQL5
 
RomanIgorevi4:

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

Ранее этой даты на сервере существует только дневная история (нет минутной), поэтому все таймфреймы отображаются, как дневные.
 

I have found that there is an issue with HistoryDealsTotal() while using the optimization algorithms of the tester.

During a normal backtest everything's fine, but in an optimization session, during the initialization phase of the EA, HistoryDealsTotal() returns the number of deals from the previous run of the EA. Later on, during the trading phase, HistoryDealsTotal() starts at 0 again.

I ran into this issue through the following code snippet:

    // constructor
    void MyClass() {
        _dealCnt = HistoryDealsTotal();  // this is causing trouble!
        _orderCnt = OrdersTotal();
        _positionCnt = PositionsTotal();
        _historyOrderCnt = HistoryOrdersTotal();
        ...
    }

The way around this, is to initialize with 0 instead, but still I would be pleased with an official reply to this issue, because to me it looks like some internal variables are reset too late.

Thanks in advance!

Documentation on MQL5: Trade Functions / HistoryDealsTotal
Documentation on MQL5: Trade Functions / HistoryDealsTotal
  • www.mql5.com
Trade Functions / HistoryDealsTotal - Documentation on MQL5
 

Здравствуйте, ответьте на вопрос:

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

-read failed [12002]

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

 

подскажите, пожалуйста, почему данная конструкция всегда возращает 0

MqlDateTime dt; Print(dt.min);

 и как мне узнать сколько минут сейчяс? например:

MqlDateTime dt; if(dt.min)>33 ...
Причина обращения: