Ничего не делал. Запустил, как есть. В приведенных логах все данные для воспроизведения. Ваш результат должен по профиту полностью совпасть с моим. И по производительности не сильно отличаться.
Серьезно? Когда вы заявите что нашли ошибку или проблему в моей статье за которую мне заплатили деньги, я обязательно это проверю. А пока давайте без "давайте". Потому что от вас сейчас это выглядит как откровенное заступничество
На временном промежутке из статьи, на EURUSD,M30 и USDJPY,M30
MACD Sample One value at a time.mq5:
final balance 100180.01 USD
EURUSD,M30: 26390728 ticks, 12510 bars generated. Environment synchronized in0:00:00.125. Test passed in0:00:41.016 (including ticks preprocessing 0:00:02.328).
EURUSD,M30: total time from login to stop testing 0:00:41.141 (including 0:00:00.125for history data synchronization)
756 Mb memory used including 1.88 Mb of history data, 512 Mb of tick data
final balance 99523.31 USD
USDJPY,M30: 29801706 ticks, 11837 bars generated. Environment synchronized in0:00:00.032. Test passed in0:01:00.937 (including ticks preprocessing 0:00:02.735).
USDJPY,M30: total time from login to stop testing 0:01:00.969 (including 0:00:00.032for history data synchronization)
819 Mb memory used including 1.88 Mb of history data, 576 Mb of tick data
MACD Sample 4 to 5 MQL4 style.mq5:
final balance 100192.51 USD
EURUSD,M30: 26390728 ticks, 12510 bars generated. Environment synchronized in0:00:00.140. Test passed in0:01:37.969 (including ticks preprocessing 0:00:02.329).
EURUSD,M30: total time from login to stop testing 0:01:38.109 (including 0:00:00.140for history data synchronization)
755 Mb memory used including 1.88 Mb of history data, 512 Mb of tick data
final balance 99550.10 USD
USDJPY,M30: 29801706 ticks, 11837 bars generated. Environment synchronized in0:00:00.031. Test passed in0:01:51.328 (including ticks preprocessing 0:00:02.500).
USDJPY,M30: total time from login to stop testing 0:01:51.359 (including 0:00:00.031for history data synchronization)
819 Mb memory used including 1.88 Mb of history data, 576 Mb of tick data
Время тестов отличается в два раза. И это ни как не 8 или 1 секунда.
Если сравнить балансы - то да, различия есть небольшое в цифрах, но на графике это не заметно.
На самом деле здесь видится описание этой темы немного в иной плоскости:
Уже написаны тысячи индикаторов, доступ к которым осуществляется через iCustom c выделением соответствующих буферов/хендлов и проч. проч. Это медленная и ресурсоемкая история;
Индикатор может быть реализован в виде чистой функции внутри эксперта - нужное значение в этом случае будет рассчитываться гораздо быстрей и требовать меньше памяти.
Идея в том, что бы написать некий интерфейс, который позволял бы унифицировано обращаться к любым пользовательским индикаторам, но если индикатор реализован в виде отдельной чистой функции, то обращение происходит не к хендлу а к этой функции. В итоге получаем хорошее ускорение и при этом не теряем доступ к любому произвольному индикатору. Это интересная тема, я бы даже взялся за нее.
Попробуйте, интересно посмотреть - стоит ли овчинка выделки. Хотелось бы подхода такого типа - выдираем из индикатора OnCalculate, слегка модифицируем под новым именем, добавляем в код индикатора и теперь можем дергать эту функцию как бибилиотечную, передавая в неё параметры из советника. Так?
Rashid Umarov: ...Хотелось бы подхода такого типа - выдираем из индикатора OnCalculate, слегка модифицируем под новым именем, добавляем в код индикатора и теперь можем дергать эту функцию как бибилиотечную, передавая в неё параметры из советника. Так?
Нужно подумать над реализацией. Сейчас сложно сказать как это может быть.
Rashid Umarov: Попробуйте, интересно посмотреть - стоит ли овчинка выделки. Хотелось бы подхода такого типа - выдираем из индикатора OnCalculate, слегка модифицируем под новым именем, добавляем в код индикатора и теперь можем дергать эту функцию как бибилиотечную, передавая в неё параметры из советника. Так?
Делал так для iRSIOnArray(), которой нет в mql5. В индикаторе работает. Для вызова из советника нужно делать всё же не так в лоб.
//+------------------------------------------------------------------+//| Relative Strength Index on array |//+------------------------------------------------------------------+template<typename T>
int RSIOnArray(constint rates_total,
constint prev_calculated,
constint begin,
constint period,
const T &price[],
double &buffer_pos[],
double &buffer_neg[],
double &buffer_rsi[])
{
int i;
T diff;
//--- check for rates countif(period<1 || rates_total-begin<period) return(0);
//--- save as_series flagsbool as_series_price=ArrayGetAsSeries(price);
bool as_series_rsi=ArrayGetAsSeries(buffer_rsi);
if(as_series_price)
ArraySetAsSeries(price,false);
if(as_series_rsi)
{
ArraySetAsSeries(buffer_rsi,false);
ArraySetAsSeries(buffer_pos,false);
ArraySetAsSeries(buffer_neg,false);
}
//--- preliminary calculationsint pos=prev_calculated-1;
if(pos<=period)
{
//--- first RSIPeriod values of the indicator are not calculated
buffer_rsi[0]=0.0;
buffer_pos[0]=0.0;
buffer_neg[0]=0.0;
T SumP=0.0;
T SumN=0.0;
for(i=1; i<=period; i++)
{
buffer_rsi[i]=0.0;
buffer_pos[i]=0.0;
buffer_neg[i]=0.0;
diff=price[i]-price[i-1];
SumP+=(diff>0 ? diff : 0);
SumN+=(diff<0 ?-diff : 0);
}
//--- calculate first visible value
buffer_pos[period]=double(SumP/period);
buffer_neg[period]=double(SumN/period);
buffer_rsi[period]=100.0-(100.0/(1.0+buffer_pos[period]/(buffer_neg[period]>0 ? buffer_neg[period] : DBL_MIN)));
//--- prepare the position value for main calculation
pos=period+1;
}
//--- the main loop of calculationsfor(i=pos;i<rates_total && !IsStopped();i++)
{
diff=price[i]-price[i-1];
buffer_pos[i]=(buffer_pos[i-1]*(period-1)+(diff>0.0 ? diff : 0.0))/period;
buffer_neg[i]=(buffer_neg[i-1]*(period-1)+(diff<0.0 ?-diff : 0.0))/period;
buffer_rsi[i]=100.0-100.0/(1+buffer_pos[i]/(buffer_neg[i]>0 ? buffer_neg[i] : DBL_MIN));
}
//--- restore as_series flagsif(as_series_price) ArraySetAsSeries(price,true);
if(as_series_rsi)
{
ArraySetAsSeries(buffer_rsi,true);
ArraySetAsSeries(buffer_pos,true);
ArraySetAsSeries(buffer_neg,true);
}
//---return(rates_total);
}
//+------------------------------------------------------------------+
Сделал MACD SaMple из поставки на ваших настройках. А откуда EURO в балансе, не в этом ли дело?
Не в этом дело. EUR отсюда
И время тестирования все таки значительно превышает ваше.
2018.01.2613:34:10.520 Core 1 authorized (agent build 1755)
2018.01.2613:34:10.522 Tester EURUSD,M1 (MetaQuotes-Demo): testing of Experts\Examples\MACD\MACD Sample.ex5 from2017.09.0100:00 to 2018.01.2600:002018.01.2613:34:16.792 Core 1 EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
2018.01.2613:34:16.792 Core 1 EURUSD,M1: testing of Experts\Examples\MACD\MACD Sample.ex5 from2017.09.0100:00 to 2018.01.2600:00 started with inputs:
2018.01.2613:34:16.792 Core 1 InpLots=0.12018.01.2613:34:16.792 Core 1 InpTakeProfit=502018.01.2613:34:16.792 Core 1 InpTrailingStop=302018.01.2613:34:16.792 Core 1 InpMACDOpenLevel=32018.01.2613:34:16.792 Core 1 InpMACDCloseLevel=22018.01.2613:34:16.792 Core 1 InpMATrendPeriod=262018.01.2613:25:46.482 Core 1 final balance 10168.90 USD2018.01.2613:25:46.482 Core 1 EURUSD,M1: 9753093 ticks, 147480 bars generated. Environment synchronized in0:00:02.610.
Test passed in0:00:19.062 (including ticks preprocessing 0:00:02.078).
2018.01.2613:25:46.482 Core 1 EURUSD,M1: total time fromlogin to stop testing 0:00:21.672 (including 0:00:02.610for history data synchronization)
2018.01.2613:25:46.482 Core 1600 Mb memory used including 44 Mb of history data, 256 Mb of tick data
Вот мой лог с Вашими настройками
EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
EURUSD,M1: testing of Experts\Examples\MACD\MACD Sample.ex5 from2017.09.0100:00 to 2018.01.2600:00 started with inputs:
InpLots=0.10
InpTakeProfit=50
InpTrailingStop=30
InpMACDOpenLevel=3
InpMACDCloseLevel=2
InpMATrendPeriod=26
final balance 10000168.90 USD
EURUSD,M1: 9753093 ticks, 147480 bars generated. Environment synchronized in0:00:00.031. Test passed in0:00:06.302.
EURUSD,M1: total time from login to stop testing 0:00:06.333 (including 0:00:00.031for history data synchronization)
571 Mb memory used including 44 Mb of history data, 256 Mb of tick data
Почему у меня в 3.5 раза быстрее выполняется (кеширование убрано перекомпиляцией перед бэктестом) - не знаю. Конфигурация
Давайте выяснять причины! Думаю, это очень важно. У меня нет HDD (только SSD). Возможно, в этом дело. Но тогда это ОЧЕНЬ плохо для MT5. Комп очень древний - пять лет точно есть. Поэтому странно.
Почему у меня в 3.5 раза быстрее выполняется (кеширование убрано перекомпиляцией перед бэктестом) - не знаю. Конфигурация
Давайте выяснять причины! Думаю, это очень важно. У меня нет HDD (только SSD). Возможно, в этом дело. Но тогда это ОЧЕНЬ плохо для MT5. Комп очень древний - пять лет точно есть. Поэтому странно.
Посмотрел во всех постах - количество тиков совпадает
2018.01.2613:25:46.482 Core 1 final balance 10168.90 USD2018.01.2613:25:46.482 Core 1 EURUSD,M1: 9753093ticks, 147480 bars generated. Environment synchronized in0:00:02.610.
Test passed in0:00:19.062 (including ticks preprocessing 0:00:02.078).
2018.01.2613:25:46.482 Core 1 EURUSD,M1: total time fromlogin to stop testing 0:00:21.672 (including 0:00:02.610for history data synchronization)
2018.01.2613:25:46.482 Core 1600 Mb memory used including 44 Mb of history data, 256 Mb of tick data
PS Все таки прогнал стандартный MACD Sample на USDJPY M30 2017.02.01-2018.01.18 "Все тики" (как в статье) MetaQuotes-Demo.
Как можно уложиться в 8 секунд? Тем более в 1 секунду?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Обсуждение статьи "LifeHack для трейдера: готовим фастфуд из индикаторов"
fxsaber, 2018.01.26 11:06
Ничего не делал. Запустил, как есть. В приведенных логах все данные для воспроизведения. Ваш результат должен по профиту полностью совпасть с моим. И по производительности не сильно отличаться.
Сделал MACD SaMple из поставки на ваших настройках. А откуда EURO в балансе, не в этом ли дело?
И время тестирования все таки значительно превышает ваше.
На временном промежутке из статьи, на EURUSD,M30 и USDJPY,M30
Время тестов отличается в два раза. И это ни как не 8 или 1 секунда.
Если сравнить балансы - то да, различия есть небольшое в цифрах, но на графике это не заметно.
На самом деле здесь видится описание этой темы немного в иной плоскости:
Идея в том, что бы написать некий интерфейс, который позволял бы унифицировано обращаться к любым пользовательским индикаторам, но если индикатор реализован в виде отдельной чистой функции, то обращение происходит не к хендлу а к этой функции. В итоге получаем хорошее ускорение и при этом не теряем доступ к любому произвольному индикатору. Это интересная тема, я бы даже взялся за нее.
...Хотелось бы подхода такого типа - выдираем из индикатора OnCalculate, слегка модифицируем под новым именем, добавляем в код индикатора и теперь можем дергать эту функцию как бибилиотечную, передавая в неё параметры из советника. Так?
Попробуйте, интересно посмотреть - стоит ли овчинка выделки. Хотелось бы подхода такого типа - выдираем из индикатора OnCalculate, слегка модифицируем под новым именем, добавляем в код индикатора и теперь можем дергать эту функцию как бибилиотечную, передавая в неё параметры из советника. Так?
Делал так для iRSIOnArray(), которой нет в mql5. В индикаторе работает. Для вызова из советника нужно делать всё же не так в лоб.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Обсуждение статьи "LifeHack для трейдера: готовим фастфуд из индикаторов"
Rashid Umarov, 2018.01.26 11:30
Сделал MACD SaMple из поставки на ваших настройках. А откуда EURO в балансе, не в этом ли дело?
Не в этом дело. EUR отсюда
И время тестирования все таки значительно превышает ваше.
Вот мой лог с Вашими настройками
Почему у меня в 3.5 раза быстрее выполняется (кеширование убрано перекомпиляцией перед бэктестом) - не знаю. Конфигурация
Давайте выяснять причины! Думаю, это очень важно. У меня нет HDD (только SSD). Возможно, в этом дело. Но тогда это ОЧЕНЬ плохо для MT5. Комп очень древний - пять лет точно есть. Поэтому странно.
Время тестов отличается в два раза. И это ни как не 8 или 1 секунда.
Покажите строки конфигурации из лога запуска Терминала.
Почему у меня в 3.5 раза быстрее выполняется (кеширование убрано перекомпиляцией перед бэктестом) - не знаю. Конфигурация
Давайте выяснять причины! Думаю, это очень важно. У меня нет HDD (только SSD). Возможно, в этом дело. Но тогда это ОЧЕНЬ плохо для MT5. Комп очень древний - пять лет точно есть. Поэтому странно.
Вот мой комп, никакого SSD
Посмотрел во всех постах - количество тиков совпадает