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

 
Stanislav Korotky #:

Кстати говоря, нет такого тика 2023.01.03 07:56:00. Как видно на картинке, все тики в этом баре 2023.01.03 07:56:11 (с копейками).

Такое и с реальными символами даже с ДЦ MQ бывает. Тестер выдает искуственно созданные тики, которых нет в истории.

Stanislav Korotky #:

Еще интереснее. Заменил SymbolInfoTick на вызов CopyTicks(,,0,1). Получил тик предыдущего бара

И такое. Встречал закрытие сделки по цене и времени ДО ее открытия.

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

 
Forester #:

Описывал все это с инструкцией для воспроизведения в ветке по последнему билду.

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

Мягко выражаясь, у них просто приоритеты другие. К сожалению, повлиять на это вИдение нам не дано.

 

Вот иллюстрация разницы символов, созданных на основе EURUSD автоматом через CustomSymbolCreate(,, EURUSD) и вручную.

"ConfigSymbols" : [
{
"Symbol" : "EURUSD_auto",
"Path" : "Custom\\Forex\\Forex\\EURUSD_auto",
...
"TickValue" : "0.00000000",
"TickSize" : "0.00000000",
...
}

"ConfigSymbols" : [
{
"Symbol" : "EURUSD_manual",
"Path" : "Custom\\Forex\\Forex\\EURUSD_manual",
...
"TickValue" : "1.00000000",
"TickSize" : "0.00001000",
...
}

Придется докручивать одиночными вызовами "клонирования" свойств. Может быть поможет.
 
Stanislav Korotky #:

Придется докручивать одиночными вызовами "клонирования" свойств. Может быть поможет.

Возможно, для клонирования важна последовательность задания свойств.

    CLONE(SYMBOL_POINT) &&
    CLONE(SYMBOL_SESSION_PRICE_LIMIT_MAX) &&
    CLONE(SYMBOL_SESSION_PRICE_LIMIT_MIN) &&
    CLONE(SYMBOL_SESSION_PRICE_SETTLEMENT) &&
    CLONE(SYMBOL_SWAP_LONG) &&
    CLONE(SYMBOL_SWAP_SHORT) &&
    CLONE(SYMBOL_TRADE_ACCRUED_INTEREST) &&
    CLONE(SYMBOL_TRADE_CONTRACT_SIZE) &&
    CLONE(SYMBOL_TRADE_FACE_VALUE) &&
    CLONE(SYMBOL_TRADE_LIQUIDITY_RATE) &&
    CLONE(SYMBOL_TRADE_TICK_SIZE) &&
    CLONE(SYMBOL_TRADE_TICK_VALUE) &&
    CLONE(SYMBOL_VOLUME_LIMIT) &&
    CLONE(SYMBOL_VOLUME_MAX) &&
    CLONE(SYMBOL_VOLUME_MIN) &&
    CLONE(SYMBOL_VOLUME_STEP) &&

    CLONE(SYMBOL_BACKGROUND_COLOR) &&
    CLONE(SYMBOL_CHART_MODE) &&
    CLONE(SYMBOL_DIGITS) &&
 
fxsaber #:

Возможно, для клонирования важна последовательность задания свойств.

Это точно так, без "возможно". Но когда мы вызываем CustomSymbolCreate(,, basis), мы вправе ожидать, что все свойства будут перенесены из basis корректно, и не потребуется плясок с бубном с отдельными свойствами. Но это не работает.

 
Stanislav Korotky #:

Это точно так, без "возможно". Но когда мы вызываем CustomSymbolCreate(,, basis), мы вправе ожидать, что все свойства будут перенесены из basis корректно, и не потребуется плясок с бубном с отдельными свойствами. Но это не работает.

На тему плясок. Вот такая последовательность в моем рабочем коде.

      Symb.SetProperty(SYMBOL_TRADE_TICK_VALUE, 1);
      Symb.SetProperty(SYMBOL_TRADE_TICK_SIZE, Symb.GetProperty(SYMBOL_POINT));
      
    // https://www.mql5.com/ru/forum/170952/page140#comment_12489183
      Symb.SetProperty(SYMBOL_VOLUME_STEP, 0.01);
      Symb.SetProperty(SYMBOL_VOLUME_MAX, 1e4);
      Symb.SetProperty(SYMBOL_VOLUME_MIN, 0.01);

      Symb.SetProperty(SYMBOL_TRADE_CONTRACT_SIZE, MathPow(10, Symb.GetProperty(SYMBOL_DIGITS)));
      Symb.SetProperty(SYMBOL_TRADE_STOPS_LEVEL, 0);
      Symb.SetProperty(SYMBOL_TRADE_MODE, SYMBOL_TRADE_MODE_FULL);

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

 

Порядок изменения спецификации пользовательского символа (не полный).

Перенесу сюда, чтоб потом не искать  https://www.mql5.com/ru/forum/463981/page2#comment_52726390

 

Всем доброго времени!

К сожалению, поздно заметил эту тему, поэтому сдесь продублирую. (как удалить тему непойму...) https://www.mql5.com/ru/forum/464137

Столкнулся с тем, что на кастомном инструменте, время оптимизации МНОГОКРАТНО превышает время оптимизации для "стандартного" инструмента...

Имеется простейший код, собственно только для оценки базового времени оптимизации\тетсирования...

void OnTick()
{
 CopyBuffer(MACD,0,0,2,_macd);
 CopyBuffer(MACD,1,0,2,s_macd);
 Comment(_macd[0],"     ",s_macd[0]);
}

Запускал оптимизацию (12 месяцев, М15, каждый тик, 384 прохода, оптимизация медленная).

Время на "стандартном" инструменте (GBPUSD) - 1ч20мин.

Время на кастомном - 32ч27мин.

Кастомный инструмент создавал путем импорта минутных баров. Во время оптимизации заметил, что "лампочка" HDD - интенсивно моргает...

Возможно каждый раз происходит пересчет минутных баров в М15? и результат не сохраняется в кэше? (на каждом следующем походе происходит повторная генерация М15 ?)

ОС: Линукс Минт (на базу Убунту)

Можно ли как-то поправить эту ситуацию?

ЗЫ не смотрите на относительно большое время по "стандартному" инструменту, экспериментальный компьютер очень слабый CORE DUO 3ГГц.

Создание и тестирование пользовательских символов в MetaTrader 5
Создание и тестирование пользовательских символов в MetaTrader 5
  • www.mql5.com
Возможность создавать собственные символы открывает новые горизонты в разработке торговых систем и анализе любых финансовых рынков. Теперь трейдеры могут строить графики и тестировать торговые стратегии на неограниченном количестве финансовых инструментов.
 
Delta.800 #:

ОС: Линукс Минт (на базу Убунту)

Используете неродную для MT5 операционку. Поэтому желательно воспроизвести проблему на Windows.
 
fxsaber #:

Используете неродную для MT5 операционку. Поэтому желательно воспроизвести проблему на Windows.

ок, я постараюсь... (с виндой проблемы., нет ее у меня, но япоищу)

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