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

 

На некоторых инструментах не определяется способ вычисления величины залоговых средств по инструменту. Сервер MQ. Например, можно увидеть на инструментах в разделе GBOT. Почему?

Вот этот код можно протестировать:

//+------------------------------------------------------------------+
//| СКРИПТ                                                           |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(GetStringTradeCalcMode(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_CALC_MODE)));
   //---
   if(GetLastError()>0)
     Print("GetLastError(): ",GetLastError());
  }
//+------------------------------------------------------------------+
//| Возвращает строку о способе вычисления                           |
//| величины залоговых средств по инструменту                        |
//+------------------------------------------------------------------+
string GetStringTradeCalcMode(long mode)
  {
   string str="?";
//---
   switch((int)mode)
     {
      case SYMBOL_CALC_MODE_FOREX       :
         str="Forex mode";                 break;
      case SYMBOL_CALC_MODE_FUTURES     :
         str="Futures mode";               break;
      case SYMBOL_CALC_MODE_CFD         :
         str="CFD mode";                   break;
      case SYMBOL_CALC_MODE_CFDINDEX    :
         str="CFD index mode";             break;
      case SYMBOL_CALC_MODE_CFDLEVERAGE :
         str="CFD Leverage mode";          break;
     }
//---
   return(str);
  }
[Удален]  

Вопрос к MQ. Гарантируется ли сортировка сделок/ордеров в порядке их исторического возникновения после выполнения HistorySelect?

Или же для гарантии хронологического порядка требуется:

1. Помещение всех сделок/ордеров, выбранных функцией HistorySelect, во временный массив, включая номер ордера/сделки и дату регистрации. Достаточно ли только номера?

2. Соответствующая сортировка массива.

3. Последующая обработка в порядке исторической хронологии.

 

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

Подскажите, пожалуйста, имеется ли в MQL5 возможность вернуть ссылку на переменную?

То есть, что-то вроде этого:

class Array{

int data[];

Array(int n){

        ArrayResize(data,n);

        ArrayInitialize(data,0); 

} 

int& operator[](const int index){

        return data[index];

} 

} ;
В данном случае компилятор сообщает, что ссылка не может быть использована.
 
voix_kas:

Вопрос к MQ. Гарантируется ли сортировка сделок/ордеров в порядке их исторического возникновения после выполнения HistorySelect?

Или же для гарантии хронологического порядка требуется:

1. Помещение всех сделок/ордеров, выбранных функцией HistorySelect, во временный массив, включая номер ордера/сделки и дату регистрации. Достаточно ли только номера?

2. Соответствующая сортировка массива.

3. Последующая обработка в порядке исторической хронологии.

Никакая сортировка сделок/ордеров не гарантируется.

Делайте всё по указанным Вами пунктам

[Удален]  
stringo:

Никакая сортировка сделок/ордеров не гарантируется.

Делайте всё по указанным Вами пунктам

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

На какую (одну) переменную правильнее (достовернее) опираться, при сортировке истории сделок в порядке их исторической хронологии: DEAL_TIME/DEAL_TIME_MSC или тикет?

Пока я склоняюсь к сортировке по тикету, т.к. предполагаю, что номер тикета - автоинкремент в БД на сервере. И нет возможности нарушить эту последовательность, например, если брокер пожелает внести изменения в историю, добавив новую сделку со значением тикета, меньшим, чем последняя сделка на сервере (даже не на счёте). Т.е. новая сделка может быть датирована (вручную) хоть прошлым годом, однако тикет будет сформирован со значением автоинкремента от последней сделки на сервере.

Подскажите, пожалуйста, верны ли мои предположения? Можно ли использовать тикет сделки в качестве самой достоверной опорной точки для построения истиной исторической хронологии ведения/регистрации сделок?

 

voix_kas:

Можно ли использовать тикет сделки в качестве самой достоверной опорной точки для построения истиной исторической хронологии ведения/регистрации сделок?

нет.
[Удален]  
sergeev:
нет.

Можете раскрыть свой ответ? Причины, альтернативы, Ваш личный опыт/мнение.

 

П.С.

По-прежнему, очень бы хотелось услышать развёрнутый ответ разработчика (MQ).

 
voix_kas:

Можете раскрыть свой ответ? Причины, альтернативы, Ваш личный опыт/мнение.

а вам разве непонятно, что если хотите хронологию - то вам нужно время?

при чем тут тикет, время которого может меняться.

 

не очень понятен механизм тестера : вроде программирую на с++ без каких-либо проблем,но глюки с "песочницей" в mql5 просто надоели.при разрешённом вызове dll в терминале тестер их не загружает!

2013.05.01 15:38:09 2013.01.01 00:00:00   Cannot load 'D:\MetaTrader 5\Tester\Agent-127.0.0.1-3001\MQL5\Libraries\NeuroSolutionsAdapter.dll'

почему?

терминал на D:\

подсовывал в  \MQL5\Libraries\ тестера,и в \MQL5\Libraries\ терминала. 

в чём дело?

 
dem1305:

не очень понятен механизм тестера : вроде программирую на с++ без каких-либо проблем,но глюки с "песочницей" в mql5 просто надоели.при разрешённом вызове dll в терминале тестер их не загружает!

2013.05.01 15:38:09 2013.01.01 00:00:00   Cannot load 'D:\MetaTrader 5\Tester\Agent-127.0.0.1-3001\MQL5\Libraries\NeuroSolutionsAdapter.dll'

почему?

терминал на D:\

подсовывал в  \MQL5\Libraries\ тестера,и в \MQL5\Libraries\ терминала. 

в чём дело?

Дело в том, что агент работает в своей песочнице и штатный каталог библиотек \MQL5\Libraries ему недоступен.

По представленной строке явно это видно - поиск DLL идет внутри собственного каталога агента. Чтобы в тестере вести работу с DLL, надо эти DLL расположить в публично доступных системных каталогах или добавить "путь терминала\MQL5\Libraries" в переменную окружения %PATH%.

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