Пользовательские символы. Ошибки, баги, вопросы, предложения. - страница 2

 
fxsaber:
Кастомные символы на реале являются только информационными, не торговыми. Торговать по ним можно только в Тестере.

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

 
Aidas Geguzis:

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

Вам и fxsaber: спасибо, и ведь ни слова об этом в документации. Предполагается, как всегда, что инфу надо черпать на форуме и сарафанном радио. Я-то думал, реализовали что-то вроде парного или n-инструментного трейдинга средствами терминала и еще думал, как они там кратность лота разруливают. Теперь ясно, для меня фишка наверное бесполезная.

 

Баг 05.

Баг CustomTicksAdd

template <typename T>
T MyPrint( const T Value, const string Str, const bool DebugFlag = false ) { Print(Str + " = " + (string)Value); return(Value); }
#define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + (string)__LINE__ + ": " + #A)                    // Макрос для удобного и наглядного вывода значений

void OnStart()
{
  const string Name = "TEMP9";                                                                      // Имя кастомного символа
  const string SymbOrig = "EURUSD";                                                                 // Имя оригинального символа

  MqlTick Ticks[];
  const int Size = _P(CopyTicksRange(SymbOrig, Ticks, COPY_TICKS_ALL, (long)D'2019.01.01' * 1000)); // Считали EURUSD-тики за 2019 год.
    
  if ((Size > 0) && _P(CustomSymbolCreate(Name, NULL, SymbOrig)) && _P(SymbolSelect(Name, true)))   // Создали символ на основе EURUSD.
  {            
    _P(CustomTicksAdd(Name, Ticks));                                                                // Поместили в него историю EURUSD через CustomTicksAdd
  
    MqlTick AddTicks[1];
    AddTicks[0] = Ticks[Size - 1];                                                                  // Взяли последний тик
       
    AddTicks[0].time += 3600;                                                                       // И к его времени добавили час
    AddTicks[0].time_msc = (long)AddTicks[0].time * 1000;                                           
    
    _P(CustomTicksDelete(Name, (ulong)D'2019.02.01 00:00' * 1000, LONG_MAX));                       // Удалили все тики, оставив только данные за январь 2019.
    _P(CopyTicksRange(Name, Ticks));                                                                // Посмотрели, сколько тиков осталось.
    
    _P(CustomTicksAdd(Name, AddTicks));                                                             // Пробросили один тик.
    
    _P(CopyTicksRange(Name, Ticks));                                                                // Увидели, что добавился не один тик, а 129.
    _P(CustomTicksDelete(Name, (ulong)D'2019.02.01 00:00' * 1000, LONG_MAX));                       // Делаем повторное удаление - да, 129!

    _P(SymbolSelect(Name, false));                                                                  // Удалили символ из Обзора рынка.
    _P(CustomSymbolDelete(Name));                                                                   // Удалили символ.         
  }
}


Результат

void OnStart(), Line = 11: CopyTicksRange(SymbOrig,Ticks,COPY_TICKS_ALL,(long)D'2019.01.01'*1000) = 3316638
void OnStart(), Line = 13: CustomSymbolCreate(Name,NULL,SymbOrig) = true
void OnStart(), Line = 13: SymbolSelect(Name,true) = true
void OnStart(), Line = 15: CustomTicksAdd(Name,Ticks) = 3316638
void OnStart(), Line = 23: CustomTicksDelete(Name,(ulong)D'2019.02.01 00:00'*1000,LONG_MAX) = 1158959
void OnStart(), Line = 24: CopyTicksRange(Name,Ticks) = 2157552
void OnStart(), Line = 26: CustomTicksAdd(Name,AddTicks) = 1
void OnStart(), Line = 28: CopyTicksRange(Name,Ticks) = 2157681
void OnStart(), Line = 29: CustomTicksDelete(Name,(ulong)D'2019.02.01 00:00'*1000,LONG_MAX) = 129
void OnStart(), Line = 31: SymbolSelect(Name,false) = true
void OnStart(), Line = 32: CustomSymbolDelete(Name) = true


Идет добавка бОльшего количества тиков, чем указано.

 

Что-то синтетики сильно жрут память и замедляют запуск терминала. Я вчера сделал два синтетика, открыл с ними по чарту на каждый. Сегодня терминал запускался три минуты(!!), потребление ОЗУ по Диспетчеру задач было 1.88 Гб. Удалил эти чарты, скрыл синтетики, запуск 20 сек., как раньше, ОЗУ 490 Мб. Билд 2006, Макс.баров в окне - Unlimited

На первом синтетике была формула из Хелпа:

1

На втором простая формула:

0.5 * (ask(EURUSD) + ask(USDCAD))

Запуск платформы - Для продвинутых пользователей - MetaTrader 5
Запуск платформы - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Alexey Volchanskiy:

Что-то синтетики сильно жрут память и замедляют запуск терминала. Я вчера сделал два синтетика, открыл с ними по чарту на каждый. Сегодня терминал запускался три минуты(!!), потребление ОЗУ по Диспетчеру задач было 1.88 Гб. Удалил эти чарты, скрыл синтетики, запуск 20 сек., как раньше, ОЗУ 490 Мб. Билд 2006, Макс.баров в окне - Unlimited

На первом синтетике была формула из Хелпа:

На втором простая формула:

0.5 * (ask(EURUSD) + ask(USDCAD))

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

Про использование HDD для запуска терминала с синтетиками я и не говорю.

Когда поставил быстрый диск (Samsung 970 Pro) все проблемы с запуском терминала и синтетиками закончились.

Оперативной памяти при старте терминала при этом используется около 12 Gb. Процессор i7-6700K.

 
fxsaber:

Баг 05.

Баг CustomTicksAdd

Идет добавка бОльшего количества тиков, чем указано.

2007 - стало еще хуже. CustomTicksAdd вместо одного добавляет 63969 тиков.

void OnStart(), Line = 24: CopyTicksRange(Name,Ticks) = 2157552
void OnStart(), Line = 26: CustomTicksAdd(Name,AddTicks) = 1
void OnStart(), Line = 28: CopyTicksRange(Name,Ticks) = 2221521
void OnStart(), Line = 29: CustomTicksDelete(Name,(ulong)D'2019.02.01 00:00'*1000,LONG_MAX) = 63969


ЗЫ 2007 - все баги актуальны.

 
fxsaber:

Баг 02.

визуального эффекта даже ChartRedraw не дает.

Только если мышкой поскроллить чарт, он приходит в норму. Могли бы поправить визуализацию по ChartRedraw?

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

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

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

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

fxsaber, 2019.02.22 12:40

Правильно ли, что после RatesUpdate в OnCalculate сбрасыватеся всегда в ноль prev_calculated?

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

 

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

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

fxsaber, 2019.02.22 12:14

Большая просьба, если нет символа, но есть его tkc-файлы, удалять их.

Столкнулся с ситуаций, что нештатно вылетел Терминал.

Захожу и вижу, что моего символа нет. Просто создаю одноименный символ и оказывает, что он с историей из tkc. Это выглядит ошибкой.