Как отключить Лог-файл при тестировании и оптимизации ? - страница 5

 
Присылайте на stringo AT metaquotes DOT ru
Пожалуйста, опишите условия тестирования.

Попробую погонять на разных билдах
 
Присылайте на stringo AT metaquotes DOT ru
Пожалуйста, опишите условия тестирования.

Попробую погонять на разных билдах

Выслал.
Условия тестирования такие :
Если одна линия индикатора пересекла другую - входим.
Выходим, если одна линия индикатора пересекла вторую.
Индикатор простой - строится и подключается к графику быстро, сделан по аналогии с индикатором Ишимоку.

Линии беруться с одного и того же индикатора, но с разных таймфреймов (вернее только с двух : H4 & D1)
Тормоза зафиксированы при получении данных индикаторов, когда первая линия берется с 4-часового таймфрейма, а вторая с Дневки.

Тестировать на H4 по ценам открытия.
 
Результаты иследований такие :

Если нужна одна копия одного индикатора для теста - тест проходит мгновенно.
Если нужно 2 копии одного индикатора - тест проходит мгновенно.
Если нужно больше копий одного индикатора - то грузяться только 2 и тест тормозит СТРАШНО !

Одним словом, если копий больше 2 - тормоза страшные. С одной и двумя копиями Метатрейдер работает на ура. При большем количестве - он тормозит страшно. Код у мен простой.

Вот мое заключение. И просьба побыстрее устранить проблему.
 
Знаете - меня уже потянуло переписать все под Омегу и там тестить :(
Не могу я ждать по 53 часа на тестировании.
Быстрее наверное будет, тестить в Омеге - а потом переписывать конкретный вариант для реала на МТ4.
 
1CAdmin, Вы так и не прислали для анализа исходный код своего эксперта. Ни изначальный, ни урезанный.
В соседней ветке Вы сами предложили его прислать, я так и не дождался.

То что Вы пишете про 2 или 4 копии индикатора - это беллетристика, не подкреплённая фактами. Давайте коды с Вашими комментариями (типа "если эту строчку закомментировать, то всё летает"). А иначе, это всё пустой звук. К сожалению.
 
Я заменил свой индикатор на стандартный MACD и начал замерять скорость вашей процедурой локального системного времени (я только поменял systemtime = StrToTime(nYear+"."+nMonth+"."+nDay+" "+nHour+":"+nMin+":"+nSec);) :

int start()
{
datetime Begin,Finish;

Begin = SystemTime();
//if( TimeCurrent() - LastTradeTime < 10 ) return (0); //задержка на 30 секунд если была перация

if ( Enter() == 1 ) return(0); //только открытия позиций
//if ( Edit() == 1 ) return(0); //только сопровождение позиций
if ( Exit()== 1 ) return(0); //только закрытия и удаления ордеров

Finish = SystemTime();
if (Finish - Begin > 5) Лог(НомерСоветника,"Задержка ; "+(Finish - Begin)+" ; Дата ; "+TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES),1);
return(0);
}

Так вот задержек советника практически нет - там 5 строк с временем выполнения больше 5 сек.
Тоесть получается, что сама функция start() вызывается долго - и чем больше история - тем больше время торможения.

А исходник индикатора я вам выслал еще вчера.
 
Индикатор я получил и посмотрел. Но после этого речь уже шла об эксперте! Не хотите - не надо.

Я погонял Вашего эксперта в отладочной версии клиентского терминала и вот что обнаружил. Ваш индикатор часто пересчитывается с нуля. По той самой причине, что бывают такие бары, на котором он не вызывается. То есть, два-три бара пропустили без расчёта (а фактически экономного пересчёта последнего бара), получите полный пересчёт.

Поэтому совет. Вызывайте индикатор каждый бар, независимо от условий. Лучше всего поставить вызов индикатора в начале функции start. По примеру MACD Sample:
   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);


А уже дальше, по ходу дела, оперируйте уже заполненными переменными

 
А где мне взять отладочную версию терминала ?
Мой индикатор фрагментарный - для некоторых баров значения индикатора равны Empty_Value.
Кроме того индикатор я не вызываю на 0 баре - НИКОГДА. Я беру на текущем баре значения индикатора на 1 и 2 барах.
Объясните подробнее, что значит "два-три бара пропустили без расчёта, получите полный пересчёт".
В советнике часто бывает ситуация, когда если есть ордера, то индикатор не вызывается и бар пропускается дальше.
Сейчас у меня заканчивается тестирование, где я засекаю все время потраченное внутри функции "start".
Мне кажеться, что мы ищем не там.
 
Есть только 2 варианта торможения : либо индикатор часто пересчитывается, либо долгое обращение к истории и соответственно долгий вызов функции start()
 
Отладочную версию терминала нигде не взять.

Что непонятного про пропуск 2-3 баров? Вы сами же и пишете: "В советнике часто бывает ситуация, когда если есть ордера, то индикатор не вызывается и бар пропускается дальше".

Вот я Вам и советую сделать так же, как и в MACD Sample - заранее заполните переменные рассчитанными значениями индикатора. А уже потом проверяйте условия. Вы удивитесь, насколько быстрее пройдёт тестирование.