Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Посмотрите Форвардные декларации для классов
Функция OnTimer() в тестере стратегий, достаточно сильно тормозит выполнение, при запросе каждую секунду. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Эксперт, с двумя внешними индикаторами и при прогоне по всем тикам, выполняется 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 70418 ms (total bars in history 6270, total time 70528 ms) При комментировании функция OnTimer(), выполнение значительно ускоряется 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 22730 ms (total bars in history 6270, total time 22870 ms) Такие задержки из-за особенностей работы тестера получаются, или как-то можно ускорить выполнение?
P.S. Предварительный просмотр сообщения реализовали бы чтоль(
Функция OnTimer() в тестере стратегий, достаточно сильно тормозит выполнение, при запросе каждую секунду. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Эксперт, с двумя внешними индикаторами и при прогоне по всем тикам, выполняется 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 70418 ms (total bars in history 6270, total time 70528 ms) При комментировании функция OnTimer(), выполнение значительно ускоряется 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 22730 ms (total bars in history 6270, total time 22870 ms) Такие задержки из-за особенностей работы тестера получаются, или как-то можно ускорить выполнение?
P.S. Предварительный просмотр сообщения реализовали бы чтоль(
Что означает эта запись в тестере?
Не смешно.
Я какбэ понимаю, что ссылки в общем случае в mql5 из функций не возвращаются (кстати, почему низя?), но надо ж чего-то сделать тогда взамен, чтоб l-value индексаторы были возможны. Например, сделать конкретно для левых индексаторов синтаксическое исключение из общего правила. Или ключевое слово какое-то.
Хромота явно не красит mql5....
Хромота явно не красит mql5....
Хромота явно не красит mql5....
Так для этого надо полноценные ссылки мутить :)
ЗЫ: течееееет :)
Баг?
Код приведенный ниже генерирует что-то типа вечного цикла в компиляторе. Нажатие на Cancel (отмена компиляции)
срабатывает не сразу, а когда стабатывает, возвращает контроль над редактором.
При этом сама кнопка Cancel не исчезает, но и не остается доступной..
Кнопка Compile теряется навсегда (нужно перезагружать редактор чтобы вернуть)
Не смешно.
Я какбэ понимаю, что ссылки в общем случае в mql5 из функций не возвращаются (кстати, почему низя?), но надо ж чего-то сделать тогда взамен, чтоб l-value индексаторы были возможны. Например, сделать конкретно для левых индексаторов синтаксическое исключение из общего правила. Или ключевое слово какое-то.
Хромота явно не красит mql5....
"Выдавать" внутренние не базовые элементы класса в наружу (а в данном примере не сам атрибут, а только элемент массива !) тем более с возможностью изменить его значение - не безопасно.
К тому же это противоречит "духу" обьектного ориентированного програмирования: всю работу с данными обьекта нужно стараться выполнять внутри обьекта, его же методами..
А как насчет того чтобы просто использовать Setter для аттрибута data ?
Код только выиграет по читабельности. В конечном итоге эта "простота" с l-value индексатором сделает так что никто включая вас не будет понимать как этот код работает..
Потратите больше времени на поиск ошибок чем на написание Setter.
Пример:
Если код типа while ( (double)date[++i -1] < 10) можно заменить на что нибудь более длинное но удобоваримое, то лучше это так и сделать..
struct Test
{
double data[];
int size;
void Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}
void setDataElement (int index, double value)
{
data[index] = value;
}
private:
static int Max;
};
//+------------------------------------------------------------------+
int Test::Max=1024;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
Test t;
t.Init(16);
for(int i=0;i<t.size;i++)
{
//t[i]=i*i; // ERROR :'=' - l-value required
t.setDataElement(i, i*i);
}
}