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

 
fxsaber:

Много раз об этом писали. Не правят почему-то.

Видел ранее, что писали о том, что стрелки не всегда сразу же после сделки могут отобразиться. Такую заявку тоже открывал. Но чтобы в списке на вкладке История были такие пропуски, не видел ещё сообщений.

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

 
Anatoli Kazharski:

Видел ранее, что писали о том, что стрелки не всегда сразу же после сделки могут отобразиться. Такую заявку тоже открывал. Но чтобы в списке на вкладке История были такие пропуски, не видел ещё сообщений.

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

 
fxsaber:

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

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

Не заметил, чтобы переключение вкладок, как-то изменяло содержание списка истории:


 
Anatoli Kazharski:

Не заметил, чтобы переключение вкладок, как-то изменяло содержание списка истории:

Правой кнопкой и менять Сделки/Ордера.

 
Anatoli Kazharski:

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

Не заметил, чтобы переключение вкладок, как-то изменяло содержание списка истории:


Ест такое. Спасаюсь бегунком скорости и паузой.  
 
fxsaber:

Правой кнопкой и менять Сделки/Ордера.

Да, такие действия восстанавливают список истории сделок:


 
Комментарии, не относящиеся к этой теме, были перенесены в "Вопросы от начинающих MQL4 MT4 MetaTrader 4".
 
На счете все реальные символы имеют вид "EURUSD.hello". После создания кастомного "EURUSD" не возникнет ли проблем при копировании со стороны сервиса Сигналов?
 

Просьба добавить следующие значения

ENUM_DEAL_REASON

Идентификатор

Описание

DEAL_REASON_LIMIT

Сделка проведена в результате срабатывания лимитного ордера

DEAL_REASON_MARKET

Сделка проведена в результате срабатывания маркет-ордера

DEAL_REASON_STOP

Сделка проведена в результате срабатывания стоп-ордера


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

Т.е. чтобы узнать тип ордера, который вызвал сделку, не всегда поможет обращение в Истории ордеров. Дабы не городить огород с поиском ордеров среди "мертвых и живых", предлагаю просто добавить еще флаги исполнения - после уже существующих, дабы сохранить совместимость с ENUM_ORDER_REASON и ENUM_POSITION_REASON. При этом желательно добавить такие же флаги в ENUM_POSITION_REASON, чтобы была совместимость

POSITION_REASON_LIMIT  == DEAL_REASON_LIMIT
POSITION_REASON_MARKET == DEAL_REASON_MARKET
POSITION_REASON_STOP   == DEAL_REASON_STOP
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Сделка является отражением факта совершения торговой операции на основании ордера, содержащего торговый приказ. Каждая сделка описывается свойствами, позволяющими получить информацию о ней. Для чтения значений свойств используются функции вида Идентификатор позиции, в открытии, изменении или закрытии которой участвовала эта сделка. Каждая...
 

В соседней ветке https://www.mql5.com/ru/forum/216697/page3 поднялся вопрос про OrderCalcMargin


Тест: проверим 2 различных варианта расчета залога с подстановкой различных цен открытия.

#define TOSTRING(A) #A+" = "+(string)(A)
void OnStart()
  {
   double margin_1=999,price_1;

   Print(TOSTRING(price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=10.0));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=1.0));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
  }

// Альтернатива OrderCalcMargin
bool MyOrderCalcMargin(const ENUM_ORDER_TYPE action,const string symbol,const double volume,const double price,double &margin)
  {
   double MarginInit,MarginMain;

   const bool Res=SymbolInfoMarginRate(symbol,action,MarginInit,MarginMain);

   margin=Res ? MarginInit*price*volume*SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE)/
          (SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE)*AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;

   return(Res);
  }

Вот ЛОГ

LF      0       04:28:05.464    test (AUDJPY,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK) = 88.712
KP      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.712 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
CR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.712 margin_1= 26.19399834 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
ED      0       04:28:05.464    test (AUDJPY,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID) = 88.7
PR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.7 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
KS      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.7 margin_1= 26.1904551 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
EP      0       04:28:05.464    test (AUDJPY,H1)        price_1=10.0 = 10.0
HK      0       04:28:05.464    test (AUDJPY,H1)        price_1= 10.0 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
HH      0       04:28:05.464    test (AUDJPY,H1)        price_1= 10.0 margin_1= 2.95270069 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
KN      0       04:28:05.464    test (AUDJPY,H1)        price_1=1.0 = 1.0
FS      0       04:28:05.464    test (AUDJPY,H1)        price_1= 1.0 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
PR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 1.0 margin_1= 0.29527007 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true

Функция OrderCalcMargin не учитывает при расчетах маржи цену открытия

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

Если котируемая валюта USD (валюта счета тоже USD), то расчетная маржа меняется в зависимости от цены открытия.

Лог для GBPUSD

KK      0       05:25:15.763    test (GBPUSD,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK) = 1.32354
CR      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32354 margin_1= 44.12 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
DD      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32354 margin_1= 44.118 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
GD      0       05:25:15.763    test (GBPUSD,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID) = 1.32341
LS      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32341 margin_1= 44.11 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
NQ      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32341 margin_1= 44.11366667 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
DG      0       05:25:15.763    test (GBPUSD,H1)        price_1=10.0 = 10.0
LM      0       05:25:15.763    test (GBPUSD,H1)        price_1= 10.0 margin_1= 333.33 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
NO      0       05:25:15.763    test (GBPUSD,H1)        price_1= 10.0 margin_1= 333.33333333 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
HM      0       05:25:15.763    test (GBPUSD,H1)        price_1=1.0 = 1.0
ED      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.0 margin_1= 33.33 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
OD      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.0 margin_1= 33.33333333 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true

Это Баг или так и должно быть?

OrderCalcMargin и проблема с ним связанная.
OrderCalcMargin и проблема с ним связанная.
  • 2017.10.04
  • www.mql5.com
Один советник работает на счёте MetaQuotes-Demo на семи валютных парах и на трёх парах реальном счёте робо. Итого 10 экземпляров советника запущено...
Причина обращения: