Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite - страница 28

 
Sergey Dzyublik:

Заменил пример, чтобы понятно было где именно проявляется ошибка

#define MACRO(A,B)  A##B
class MACRO(A,B C) {} x;

В MQL это равносильно

class ABC {} x; //нормально

а в C++

class AB C {} x; //Ошибка
 

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

Моя ошибка. Попутал реальные объёмы сделок (double) и тиковые объёмы (long). Всё отлично работает. Вот правильный код

//+------------------------------------------------------------------+
//|                                               Get Volumes EA.mq5 |
//|                              Copyright © 2020, Vladimir Karputov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, Vladimir Karputov"
#property version   "1.000"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print("Start ",__FUNCTION__);

   long symbol_volume=SymbolInfoInteger(Symbol(),SYMBOL_VOLUME);
   double symbol_volume_real=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_REAL);
   long tick_volume_array[],real_volume_array[];


   MqlTick m_tick;
   if(!SymbolInfoTick(Symbol(),m_tick) || CopyTickVolume(Symbol(),Period(),0,1,tick_volume_array)!=1 ||
      CopyRealVolume(Symbol(),Period(),0,1,real_volume_array)!=1)
      return(0);

   Print(TimeToString(m_tick.time,TIME_DATE|TIME_MINUTES),",",
         " m_tick.bid ",DoubleToString(m_tick.bid,Digits()),
         " m_tick.ask ",DoubleToString(m_tick.ask,Digits()),
         " m_tick.volume ",IntegerToString(m_tick.volume),
         " m_tick.volume_real ",DoubleToString(m_tick.volume_real,0),
         " SYMBOL_VOLUME ",IntegerToString(symbol_volume),
         " SYMBOL_VOLUME_REAL ",DoubleToString(symbol_volume_real,0),
         " tick_volume_array[0] ",IntegerToString(tick_volume_array[0]),
         " real_volume_array[0] ",IntegerToString(real_volume_array[0]));

   Print("End ",__FUNCTION__);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   long symbol_volume=SymbolInfoInteger(Symbol(),SYMBOL_VOLUME);
   double symbol_volume_real=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_REAL);
   long tick_volume_array[],real_volume_array[];


   MqlTick m_tick;
   if(!SymbolInfoTick(Symbol(),m_tick) || CopyTickVolume(Symbol(),Period(),0,1,tick_volume_array)!=1 ||
      CopyRealVolume(Symbol(),Period(),0,1,real_volume_array)!=1)
      return;

   Print(TimeToString(m_tick.time,TIME_DATE|TIME_MINUTES),",",
         " m_tick.bid ",DoubleToString(m_tick.bid,Digits()),
         " m_tick.ask ",DoubleToString(m_tick.ask,Digits()),
         " m_tick.volume ",IntegerToString(m_tick.volume),
         " m_tick.volume_real ",DoubleToString(m_tick.volume_real,0),
         " SYMBOL_VOLUME ",IntegerToString(symbol_volume),
         " SYMBOL_VOLUME_REAL ",DoubleToString(symbol_volume_real,0),
         " tick_volume_array[0] ",IntegerToString(tick_volume_array[0]),
         " real_volume_array[0] ",IntegerToString(real_volume_array[0]));
  }
//+------------------------------------------------------------------+


Результата на фьючерсах (биржевой символ, транслирует и объёмы сделок и тиковые объёмы)

(FUTCLJUN20,D1)  2020.04.23 04:34, m_tick.bid 14.99 m_tick.ask 15.00 m_tick.volume 1 m_tick.volume_real 1 SYMBOL_VOLUME 1 SYMBOL_VOLUME_REAL 1 tick_volume_array[0] 40279 real_volume_array[0] 66089
(FUTCLJUN20,D1)  2020.04.23 04:34, m_tick.bid 15.00 m_tick.ask 15.01 m_tick.volume 2 m_tick.volume_real 2 SYMBOL_VOLUME 2 SYMBOL_VOLUME_REAL 2 tick_volume_array[0] 40282 real_volume_array[0] 66093
(FUTCLJUN20,D1)  2020.04.23 04:34, m_tick.bid 14.99 m_tick.ask 15.00 m_tick.volume 2 m_tick.volume_real 2 SYMBOL_VOLUME 2 SYMBOL_VOLUME_REAL 2 tick_volume_array[0] 40283 real_volume_array[0] 66095
(FUTCLJUN20,D1)  2020.04.23 04:34, m_tick.bid 14.99 m_tick.ask 15.01 m_tick.volume 1 m_tick.volume_real 1 SYMBOL_VOLUME 1 SYMBOL_VOLUME_REAL 1 tick_volume_array[0] 40285 real_volume_array[0] 66097


Результат на форексном символе (объёмы сделок не транслирует, транслирует только тиковые объёмы))

(AUDUSD,H1)      2020.04.23 07:36, m_tick.bid 0.63061 m_tick.ask 0.63069 m_tick.volume 0 m_tick.volume_real 0 SYMBOL_VOLUME 0 SYMBOL_VOLUME_REAL 0 tick_volume_array[0] 764 real_volume_array[0] 0
(AUDUSD,H1)      2020.04.23 07:36, m_tick.bid 0.63061 m_tick.ask 0.63070 m_tick.volume 0 m_tick.volume_real 0 SYMBOL_VOLUME 0 SYMBOL_VOLUME_REAL 0 tick_volume_array[0] 764 real_volume_array[0] 0
(AUDUSD,H1)      2020.04.23 07:36, m_tick.bid 0.63063 m_tick.ask 0.63070 m_tick.volume 0 m_tick.volume_real 0 SYMBOL_VOLUME 0 SYMBOL_VOLUME_REAL 0 tick_volume_arr
Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite
Новая версия платформы MetaTrader 5 build 2360: Расширение интеграции с SQLite
  • 2020.04.20
  • www.mql5.com
В пятницу 6 марта 2020 года будет выпущена обновленная версия платформы MetaTrader 5...
Файлы:
 

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

Проходит до двух секунд с этого момента, когда вижу на чарте обновленные цены и бар, дошедшие до лимитника. Чем может быть вызван такой лаг?

Это проблема только GUI? Через MQL не мониторил.
 
fxsaber:

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

Проходит до двух секунд с этого момента, когда вижу на чарте обновленные цены и бар, дошедшие до лимитника. Чем может быть вызван такой лаг?

Это проблема только GUI? Через MQL не мониторил.

Это всегда было: так сказать уровень "Ахтунг" - примерно за 10 пунктов до срабатывания отложенного ордера или SL или TP цена меняет цвет. Вот только где настраиваться этот уровень (или не могу найти или не помню).

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Vladimir Karputov:

Это всегда было: так сказать уровень "Ахтунг" - примерно за 10 пунктов до срабатывания отложенного ордера или SL или TP цена меняет цвет. Вот только где настраиваться этот уровень (или не могу найти или не помню).

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

 
fxsaber:

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

Нужно уточнить: это форекс-символ или биржевой? И тогда сразу: где были цены Bid, Ask, Last?

 
Vladimir Karputov:

Нужно уточнить: это форекс-символ или биржевой? И тогда сразу: где были цены Bid, Ask, Last?

Форекс. Цены на чарте не доходят до лимитных ордеров в течение 1-2 секунд, когда они уже исполняются.

 
2361, во вкладке История->Позиции внизу таблицы Баланс не совпадает с реальным. Причина - не учитываются комиссия и свопы по текущим открытым позициям.
 
fxsaber:
2361, во вкладке История->Позиции внизу таблицы Баланс не совпадает с реальным. Причина - не учитываются комиссия и свопы по текущим открытым позициям.

Комиссии и свопы учитываются в прибыль которая отображается внизу слева.

 
Alexey Viktorov:

Комиссии и свопы учитываются в прибыль которая отображается внизу слева.

Только для закрытых позиций.

На демо, где есть комиссия, откройте две позиции, затем только одну закройте. Сравните числа.