Подскажите о зацикленности экспертов

 

1. Зацикленный эксперт не тестируется в тестере? это так и должно???

2.  Зацикленный эксперт не может влиять на работу такого же эксперта только на другом валютном инструменте,

к примеру один и то же эксперт установлен на два или более валютных инструментов одновременно, если эксперт зациклен то влиять эксперт работающий на одной паре

не как не будет на такой же эксперт работающий параллельно  на другой паре? Это верно?

 

1. Да. Но можно расциклить для тестирования.

2. От зацикленности или не зацикленности это не зависит. 

 
Kostiantyn Kuzmin:

1. Зацикленный эксперт не тестируется в тестере? это так и должно???

2.  Зацикленный эксперт не может влиять на работу такого же эксперта только на другом валютном инструменте,

к примеру один и то же эксперт установлен на два или более валютных инструментов одновременно, если эксперт зациклен то влиять эксперт работающий на одной паре

не как не будет на такой же эксперт работающий параллельно  на другой паре? Это верно?

Сейчас не имеет смысл делать зацикленные эксперты. Гораздо удобнее использовать событие OnTimer. Правда в тестере МТ4 это событие не работает. Сейчас проверил на всякий случай - по прежнему не работает. Я выкручиваюсь в тестере так:

MqlDateTime     TimeCurrStruct;

// Возвращает true, если работает под тестером
bool IsRunOnTester()
{
    if(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_VISUAL_MODE) || MQLInfoInteger(MQL_OPTIMIZATION))
        return true;
    return false;    
}

void OnTick()
{
    if(IsRunOnTester())
    {
        static datetime dt1 = 0, dt2 = 0;
        static bool tfirst = true;
        if(tfirst)
        {
            tfirst = false;
            dt1 = dt2 = TimeCurrent();
            return;
        }
    
        dt2 = TimeCurrent();
        for(datetime TimeTesterCurrent = dt1+1; TimeTesterCurrent <= dt2; TimeTesterCurrent++)
        {
            TimeToStruct(TimeTesterCurrent, TimeCurrStruct);
            OnTimer();
        }    
        dt1 = dt2;
    }
}

void OnTimer()
{
    if(!IsRunOnTester())
    {
        TimeToStruct(TimeCurrent(), TimeCurrStruct);
        SmartDsp.ReceiveTick(TimeCurrStruct);  // обработка пришедшего тика, мне важно знать текущее время, на реале копируем в структуру TimeCurrent()  
    }
    else
    {
        SmartDsp.ReceiveTick(TimeCurrStruct);  // обработка сэмултрованного под тестером тика, в тестере используем сэмулированное время  
    }
}
 
Alexey Volchanskiy:

Сейчас не имеет смысл делать зацикленные эксперты. Гораздо удобнее использовать событие OnTimer. Правда в тестере МТ4 это событие не работает. Сейчас проверил на всякий случай - по прежнему не работает. Я выкручиваюсь в тестере так:

Какой смысл эмулировать одинаковые тики с разным временем в тестере? Чисто процессор покрутить? )
 
Andrey Khatimlianskii:
Какой смысл эмулировать одинаковые тики с разным временем в тестере? Чисто процессор покрутить? )

Методы DSP требуют дискретизации сигнала с заданной частотой. В моем случае это 1 Гц. Например, когда вы слушаете CD, данные с него поступают с частотой дискретизации 44100 Гц, все цифровые фильтры внутри CD-плейра настроены именно на эту частоту. И даже когда нет звука, встроеный процессор молотит тишину с этой частотой.

Вы предлагаете экономить на процессоре? Мне его не жалко ))

 
Alexey Volchanskiy:

Методы DSP требуют дискретизации сигнала с заданной частотой. В моем случае это 1 Гц. Например, когда вы слушаете CD, данные с него поступают с частотой дискретизации 44100 Гц, все цифровые фильтры внутри CD-плейра настроены именно на эту частоту. И даже когда нет звука, встроеный процессор молотит тишину с этой частотой.

Вы предлагаете экономить на процессоре? Мне его не жалко ))

Убийственный подход. Любое изменение параметров системы и вы в *опе попали в неимоверно долгое тестирование, неприемлемо долгое.

Системы стоит создавать с учётом их модернизации. 

 
Kostiantyn Kuzmin:

1. Зацикленный эксперт не тестируется в тестере? это так и должно???

2.  Зацикленный эксперт не может влиять на работу такого же эксперта только на другом валютном инструменте,

к примеру один и то же эксперт установлен на два или более валютных инструментов одновременно, если эксперт зациклен то влиять эксперт работающий на одной паре

не как не будет на такой же эксперт работающий параллельно  на другой паре? Это верно?

1. В пятёрке тестируется. Надо только в цикле добавить хотя бы Sleep(1)

2. Может влиять через глобальные переменные клиентского терминала, если другой зацикленный эксперт будет их читать.

 
Alexey Volchanskiy:

Методы DSP требуют дискретизации сигнала с заданной частотой. В моем случае это 1 Гц. Например, когда вы слушаете CD, данные с него поступают с частотой дискретизации 44100 Гц, все цифровые фильтры внутри CD-плейра настроены именно на эту частоту. И даже когда нет звука, встроеный процессор молотит тишину с этой частотой.

Вы предлагаете экономить на процессоре? Мне его не жалко ))

Нет, я предлагаю ценить свое время.

А для анализа не нужно вызывать функцию много раз, достаточно в анализируемый ряд вставлять недостающие данные. Все равно до следующего тика цена не изменится.

 
Nikolay Demko:

Убийственный подход. Любое изменение параметров системы и вы в *опе попали в неимоверно долгое тестирование, неприемлемо долгое.

Системы стоит создавать с учётом их модернизации. 

Ничего не понял, какой-то набор общих фраз.
 
Andrey Khatimlianskii:

Нет, я предлагаю ценить свое время.

А для анализа не нужно вызывать функцию много раз, достаточно в анализируемый ряд вставлять недостающие данные. Все равно до следующего тика цена не изменится.

Почему я не ценю свое время?? Не понял

Нет ни малейшего желания серьезно менять алгоритм для тестера. Я тестером пользуюсь редко, только чтобы убедится, что скальпер работает и нет ошибок. Для тестирования тиковых скальперов тестер бесполезен.

 
Alexey Volchanskiy:
Ничего не понял, какой-то набор общих фраз.

Хорошь спец, и ещё учить кого то собрался, элементарного планирования не понимаешь.

Написал ты эксперта, он нормально работает (хоть и слишком часто вызывается, но логика простая проц хавает).

Чуть усложнил логику при последующей доработке и проц уже тупит, переписуй всё с нуля.

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

 

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