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

 

У кого проблемы или вопросы по учету переходов в партнёрской программе - пишите, протестирую:

    1. Планшет (Windows 8.1)
    2. ПК (Windows 8.1)
    3. Смартфон (Android)
 

 У меня проблема с функцией StringConcatenate() в MQL4. В строке появляется блок нулей. Это видно при выводе итоговой строки в файл.

void OnStart()
  {
//---
  string sample = "0123456789ABCDEF";
  string s = "";
  for(int i=0;i<260;i++)
  {
   s = StringConcatenate(s, sample);
   Print(StringBufferLen(s), " ", StringLen(s), " ", s);
  } 
  Print(s);
  }

  Вот то, что пишет терминал

 

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3872 3872 ???????????????

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3856 3856 ???????????????

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3840 3840 ???????????????

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3824 3824 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3808 3808 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123

2014.06.05 12:28:25.378 String_concat_test EURUSD,Daily: 3792 3792 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123

 
Нули - это значит нулевые байты в несколько килобайт
 
Luckhuman:

 У меня проблема с функцией StringConcatenate() в MQL4. В строке появляется блок нулей. Это видно при выводе итоговой строки в файл.

Спасибо за сообщение, исправлено. Исправление войдёт в ближайший билд.
 
Объясните плиз, почему во вкладе "Торговля" текущие цены (это колонка Цена справа от SL/TP - не путать с ценой открытия слева от SL/TP!) для рыночных позиций и отложенных ордеров показываются разные для одного и того же инструмента, одного и того же типа (например, бай)? По идее текущая цена по символу должна быть одна и та же, по крайней мере для нескольких открытых ордеров она меняется синхронно (совпадает).
 
marketeer:
Объясните плиз, почему во вкладе "Торговля" текущие цены (это колонка Цена справа от SL/TP - не путать с ценой открытия слева от SL/TP!) для рыночных позиций и отложенных ордеров показываются разные для одного и того же инструмента, одного и того же типа (например, бай)? По идее текущая цена по символу должна быть одна и та же, по крайней мере для нескольких открытых ордеров она меняется синхронно (совпадает).

Потому что есть цена Bid  и есть цена Ask:

bid_ask

На рисунке есть открытая позиция (sell) и есть два отложенных ордера (sell limit и buy limit). Для открытой позиции (sell) указывается текущая цена Ask.  Для sell limit указывается текущая цена Bid. Для buy limit указываться текущая цена  Ask.

 
У меня нет вкладки "Календарь". Terminal MetaTrader 5 x64 build 946 started (MetaQuotes Software Corp.). Демо-счет на сервере MetaQuotes-Demo. Кроме этого в терминале есть еще несколько реальных счетов

Причем нет только на ноутбуке. На планшете и на ПК вкладка "Календарь" есть. 


 
При старте МТ4 в индикаторе не проходит init(), потому что MarketInfo(xxx, MODE_TICKVALUE) возвращает ноль (для всех символов). Понятно, что стоимость тика привязана к валюте счета, но терминал отображает окна еще до логина. Тогда получается что ни один скрипт, завязанный на стоимость, не будет нормально работать? Это фича или баг?
 
Как узнать, помещен ли индикатор на график сам по себе или вызывается из другого индикатора через iCustom?
 
marketeer:
При старте МТ4 в индикаторе не проходит init(), потому что MarketInfo(xxx, MODE_TICKVALUE) возвращает ноль (для всех символов). Понятно, что стоимость тика привязана к валюте счета, но терминал отображает окна еще до логина. Тогда получается что ни один скрипт, завязанный на стоимость, не будет нормально работать? Это фича или баг?

MetaTrader 4. Version: 4.00 Build 654.

Попробуйте вместо xxx использовать текущий символ Symbol() и вместо init() используйте OnInit():

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
//--- превращение динамических массивов в индикаторные буферы
   SetIndexBuffer(0,ExtMapBufferEMA,INDICATOR_DATA);
//--- MarketInfo
   Print("Symbol=",Symbol());
   Print("Минимальная дневная цена=",MarketInfo(Symbol(),MODE_LOW));
   Print("Максимальная дневная цена=",MarketInfo(Symbol(),MODE_HIGH));
   Print("Время поступления последней котировки=",(MarketInfo(Symbol(),MODE_TIME)));
   Print("Последняя поступившая цена предложения=",MarketInfo(Symbol(),MODE_BID));
   Print("Последняя поступившая цена продажи=",MarketInfo(Symbol(),MODE_ASK));
   Print("Размер пункта в валюте котировки=",MarketInfo(Symbol(),MODE_POINT));
   Print("Количество цифр после запятой в цене инструмента=",MarketInfo(Symbol(),MODE_DIGITS));
   Print("Спрэд в пунктах=",MarketInfo(Symbol(),MODE_SPREAD));
   Print("Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах=",MarketInfo(Symbol(),MODE_STOPLEVEL));
   Print("Размер контракта в базовой валюте инструмента=",MarketInfo(Symbol(),MODE_LOTSIZE));
   Print("Размер минимального изменения цены инструмента в валюте депозита=",MarketInfo(Symbol(),MODE_TICKVALUE));
   Print("Минимальный шаг изменения цены инструмента в пунктах=",MarketInfo(Symbol(),MODE_TICKSIZE));
   Print("Размер свопа для ордеров на покупку=",MarketInfo(Symbol(),MODE_SWAPLONG));
   Print("Размер свопа для ордеров на продажу=",MarketInfo(Symbol(),MODE_SWAPSHORT));
   Print("Календарная дата начала торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_STARTING));
   Print("Календарная дата окончания торгов (фьючерсы)=",MarketInfo(Symbol(),MODE_EXPIRATION));
   Print("Разрешение торгов по указанному инструменту=",MarketInfo(Symbol(),MODE_TRADEALLOWED));
   Print("Минимальный размер лота=",MarketInfo(Symbol(),MODE_MINLOT));
   Print("Шаг изменения размера лота=",MarketInfo(Symbol(),MODE_LOTSTEP));
   Print("Максимальный размер лота=",MarketInfo(Symbol(),MODE_MAXLOT));
   Print("Метод вычисления свопов=",MarketInfo(Symbol(),MODE_SWAPTYPE));
   Print("Способ расчета прибыли=",MarketInfo(Symbol(),MODE_PROFITCALCMODE));
   Print("Способ расчета залоговых средств=",MarketInfo(Symbol(),MODE_MARGINCALCMODE));
   Print("Начальные залоговые требования для 1 лота=",MarketInfo(Symbol(),MODE_MARGININIT));
   Print("Размер залоговых средств для поддержки открытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINMAINTENANCE));
   Print("Маржа, взимаемая с перекрытых ордеров в расчете на 1 лот=",MarketInfo(Symbol(),MODE_MARGINHEDGED));
   Print("Размер свободных средств, необходимых для открытия 1 лота на покупку=",MarketInfo(Symbol(),MODE_MARGINREQUIRED));
   Print("Уровень заморозки ордеров в пунктах=",MarketInfo(Symbol(),MODE_FREEZELEVEL));
//---
   return(INIT_SUCCEEDED);
  }
Причина обращения: