Ошибки, баги, вопросы - страница 1747
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Волшебная строка
virtual int f( const ABCDEFGHIJK ) const { return ABCDEFGHIJK; }
Последовательность действий (строгая)
Результат:
Настройки здесь: https://www.mql5.com/ru/forum/1111/page1127#comment_795376
Да, не Вам одному помощь нужна здесь. Я вот несколько недель пытаюсь тики закатать нормально в свечу. Так что... тики еще сыроваты. Заявка в СД #1598238
Тики нормально закатываются в свечу.
Серьезно? И объемы совпадают? И Вы контроль делали? И даже логи можете показать?
Контроль делал - смотреть кодобазу. На несовпадение объемов свечей и вычисленных - плевать, т.к. там идет речь о граничном тике, который может попасть либо в один бар, либо в другой. И это не принципиально. Индикатор торгового оборота также выкладывал на форуме. Так что никаких проблем.
В Вашем случае, если очень сильно занудствовать, можно придираться к механизму создания баров, но не к CopyTicks.
Ошибка при компиляции
protected:
void f( int ) {} //(*)
};
class B : public A {
public:
void f( uint ) {}
};
void OnStart()
{
B b;
b.f( 1 ); //'A::f' - cannot call protected member function
}
А если убрать строку (*), то все нормально. А чем B::f(uint) не устроила?. Если рассмотреть ситуацию с другой стороны
public:
void f( int ) {} //(**)
};
class B : public A {
public:
void f( uint ) {}
};
то проявляются фундаментальные недостатки MQL алгоритма поиска подходящей функции. Во 2-ом примере пока нет строки (**) - будет вызываться B::f(uint). Как только появится строка (**), то будет вызываться A::f(int). А значит изменения в базовом классе влияют на конечный результат - в то время как в С++ всегда будет вызываться B::f(uint) независимо от изменений в базовом классе, что гарантирует стабильность конечного результата.
В MQL получается, что разработчик класса A придумал всего лишь новую public\protected\private функцию, а из-за этого у пользователя класса B перестал компилироваться код и/или что более критично - изменился конечный результат
Волшебная строка
virtual int f( const ABCDEFGHIJK ) const { return ABCDEFGHIJK; }
Последовательность действий (строгая)
Результат:
Настройки здесь: https://www.mql5.com/ru/forum/1111/page1127#comment_795376
Ошибка при компиляции
protected:
void f( int ) {} //(*)
};
class B : public A {
public:
void f( uint ) {}
};
void OnStart()
{
B b;
b.f( 1 ); //'A::f' - cannot call protected member function
}
А если убрать строку (*), то все нормально. А чем B::f(uint) не устроила?. Если рассмотреть ситуацию с другой стороны
public:
void f( int ) {} //(**)
};
class B : public A {
public:
void f( uint ) {}
};
то проявляются фундаментальные недостатки MQL алгоритма поиска подходящей функции. Во 2-ом примере пока нет строки (**) - будет вызываться B::f(uint). Как только появится строка (**), то будет вызываться A::f(int). А значит изменения в базовом классе влияют на конечный результат - в то время как в С++ всегда будет вызываться B::f(uint) независимо от изменений в базовом классе, что гарантирует стабильность конечного результата.
В MQL получается, что разработчик класса A придумал всего лишь новую public\protected\private функцию, а из-за этого у пользователя класса B перестал компилироваться код и/или что более критично - изменился конечный результат
Просто константа "1" в вызове b.f( 1 ) интерпретируется как int. Сделайте явное приведение, и всё заработает:
b.f( (uint)1 );
В Вашем случае, если очень сильно занудствовать, можно придираться к механизму создания баров, но не к CopyTicks.
Не согласен с Вами, т.к. ошибки по логам, продемонстрированным мной в ветке про тестирование CopyTicks(), говорят об обратном