Бета-версия платформы MetaTrader 5 build 1995: Экономический календарь, MQL5-программы в виде сервисов и API для языка R - страница 10

 

Это нормально, что компилятор ничего про вторую переменную не говорит?

void f( int &[], int &[]) {}

void OnStart()
{
  const int i[] = {0};
  const int j[] = {0};
  
  f(i, j); // 'i' - constant variable cannot be passed as reference
}
 
Slava:

Подтвердился баг с пробросом тиков?

 
fxsaber:

Подтвердился баг с пробросом тиков?

Да.

Потому что индикатор на этом же символе. Но конкретную причину пока не скажу, надо в отладчике смотреть.

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

 
Slava:

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

Хотел именно через индикатор.

 
fxsaber:

Хотел именно через индикатор.

На другом символе
 
Slava:
На другом символе

Вы даже не представляете, какие извращенные бывают индикаторы на MT5. Кастомный символ в качестве таймера для iCustom-индикатора - еще цветочки.

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

 

Не понятно для чего вводилась функция StringSetLength.
Функция успешно выполняется только при указании длины, которая не больше текущей.
Сейчас работает аналогично к: StringSetCharacter(str, new_len, 0x00);


#define PRINT(x) Print(#x, ":", string(x))

void OnStart(){       
   string str;
   int len = 10; 
   PRINT(StringInit(str, len, 0x22));
   PRINT(StringBufferLen(str));
   PRINT(StringLen(str));
   
   PRINT(StringSetLength(str, 10));
   PRINT(StringSetLength(str, 9));
   PRINT(StringLen(str));
   
   PRINT(StringSetLength(str, 8));   
   PRINT(StringSetLength(str, 10));
   
   PRINT(StringLen(str));
}

Результат:

2019.02.19 18:37:57.120 Test123 (EURUSD,H1)     StringInit(str,len,0x22):true
2019.02.19 18:37:57.120 Test123 (EURUSD,H1)     StringBufferLen(str):260
2019.02.19 18:37:57.120 Test123 (EURUSD,H1)     StringLen(str):10
2019.02.19 18:37:57.120 Test123 (EURUSD,H1)     StringSetLength(str,10):true
2019.02.19 18:37:57.120 Test123 (EURUSD,H1)     StringSetLength(str,9):true
2019.02.19 18:37:57.120 Test123 (EURUSD,H1)     StringLen(str):9
2019.02.19 18:37:57.120 Test123 (EURUSD,H1)     StringSetLength(str,8):true
2019.02.19 18:37:57.120 Test123 (EURUSD,H1)     StringSetLength(str,10):false
2019.02.19 18:37:57.120 Test123 (EURUSD,H1)     StringLen(str):8
 
Проброшенный тик не формирует бары.
// Скрипт создает символ TEMP и пробрасывает на него один тик.

void OnStart()
{
  const string Name = "TEMP";
  
  if (CustomSymbolCreate(Name, NULL, _Symbol) && SymbolSelect(Name, true))
  {
    MqlTick Ticks[1];
    
    if (SymbolInfoTick(_Symbol, Ticks[0]))
      CustomTicksAdd(Name, Ticks);
    
    ChartRedraw(ChartOpen(Name, _Period));
  }
}

Это же баг?

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Бета-версия платформы MetaTrader 5 build 1995: Экономический календарь, MQL5-программы в виде сервисов и API для языка R

MetaQuotes Software Corp., 2019.02.15 12:39

Terminal: Теперь при удалении пользовательского инструмента удаляются файлы с его тиковой и баровой историей. Это позволяет избежать накапливания неиспользуемых данных на жестком диске.

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

Нахимичили Вы что-то с кастомными. Есть возможность закрыть эту тему?

 
Почему такое происходит?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2019.02.19 22:28

Вот видите, что позиция открылась и закрылась по одной и той же цене. Но их цены не равны при сравнении без нормализации!

Касается обеих платформ. Выборочно проверял цены баров и тиков - не нашел расхождений (100% гарантию не дам). А с ценами сделок открытия/закрытия - запросто!

Причина обращения: