Каким образом они чистятся? Где можно узнать об алгоритме чистки? Где сообщение о том, что логи были подчищены?
Как работать с программой если она делает не то, что от неё ожидается? - речь в том числе и о МТ5, а не только о советнике.
В конкретном моём примере в логах видим, что тики пропускаются. Что думать в данном случае пользователю? Какие светлые чистые мысли могут возникнуть незатуманенные нецензурной бранью?
Вы до этого никогда не смотрели логи тестерного агента.
Сообщение об очистке лога Вы сами и показали.
Если Вы анализируете логи тестера, то Вы априори считаетсь квалифицированным пользователем. Мастер всегда должен смотреть за своим инструментом. Проводник виндовса всегда показывает красным цветом диск, на котором осталось мало свободного места
BTW даже если на Вашей приборной панели есть индикатор давления шин, то это ни в коем случае не отменяет визуальный осмотр автомобиля перед поездкой
При одиночном прогоне без визуализации запускаю советник, который совершает много торговых операций, забивая лог соответствующими сообщениями (сам тестер их любит выводить). После бэктеста (или сразу после нажатия на Стоп) переключаюсь на вкладку Журнал и вижу, как логи продолжают выводиться. Это первая несуразность, т.к. бэктест закончен, почему бы на показать конец логов?
Меня не интересуют логи и жму "Удалить журналы". После чего журнал чистится и... продолжает заполняться старыми записями!
Да, хорошо бы отключать вывод в журнал во время теста без визуализации. Чаще нужно просто результат конечный увидеть (профит, время теста и т.д.), которые в самом конце выводятся.
Подробности во время теста можно смотреть в режиме его визуализации. Нет никакого смысла без визуализации реактивно вываливать эту "груду".
Мне кажется я нашёл причину и временное решение этой проблемы. Сложно, для меня, объяснить как это происходит, но кажется тут буфер цвета встревает и всё портит.
Вот что я поменял в исходном коде и проблема пропала
#property indicator_separate_window#property indicator_plots3#property indicator_buffers4//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+inputbool inpUseArrows=false;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+double bufGisto[];
double bufGistoColor[];
double bufArrowUp[];
double bufArrowDn[];
//---constdoubleEMPTY=EMPTY_VALUE;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Размечаем массив цветовcolor colors[2];
colors[ 0 ]= clrLime;
colors[ 1 ] = clrRed;
//--- Устанавливаем параметры графических серий// SetPlotParametersColorHistogram(0,0,bufGisto,bufGistoColor,false,"test gisto",colors,EMPTY,2);
SetPlotParametersColorHistogram(2,2,bufGisto,bufGistoColor,false,"test gisto",colors,EMPTY,2);//--- Проверяем, нужно ли отображать объемы// if(inpUseArrows) // Если отображать нужно
// {// SetPlotParametersArrow(1,2,bufArrowUp,false,"test up",EMPTY,clrLime,233,10);// SetPlotParametersArrow(2,3,bufArrowDn,false,"test dn",EMPTY,clrRed,234,-10);
SetPlotParametersArrow(0,0,bufArrowUp,false,"test up",EMPTY,clrLime,233,10);
SetPlotParametersArrow(1,1,bufArrowDn,false,"test dn",EMPTY,clrRed,234,-10);// }//---IndicatorSetInteger(INDICATOR_DIGITS,0);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
if(inpUseArrows)
{
ArrayInitialize(bufArrowUp,EMPTY);
ArrayInitialize(bufArrowDn,EMPTY);
}
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---if(prev_calculated==0)
{
ArrayInitialize(bufGisto,EMPTY);
//---if(inpUseArrows)
{
ArrayInitialize(bufArrowUp,EMPTY);
ArrayInitialize(bufArrowDn,EMPTY);
}
//---for(int i=0; i<rates_total; i++)
{
bufGisto[i]=(open[i]-close[i])/_Point;
bufGistoColor[i]=(bufGisto[i]<0) ? 1 : 0;
//---/* if(inpUseArrows)
{
if(bufGisto[i]>20)
bufArrowDn[i]=bufGisto[i];
else if(bufGisto[i]<-20)
bufArrowUp[i]=bufGisto[i];
}
*/if(inpUseArrows)
{
if(bufGisto[i]>20)
bufArrowDn[i]=bufGisto[i];
else bufArrowDn[i] = EMPTY;
if(bufGisto[i]<-20)
bufArrowUp[i]=bufGisto[i];
else bufArrowUp[i] = EMPTY;
}
}
}
elseif(rates_total>prev_calculated)
{
bufGisto[rates_total-1]=EMPTY;
//---if(inpUseArrows)
{
bufArrowUp[ rates_total-1 ] = EMPTY;
bufArrowDn[ rates_total-1 ] = EMPTY;
}
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Параметры графического построения: цветная гист-а от 0 линии |//+------------------------------------------------------------------+void SetPlotParametersColorHistogram(constint plotIndex,// Индекс графической серииconstint bufferNum,// Номер первого буфера серииdouble& value[], // Буфер значенийdouble& clr[], // Буфер цветовconstbool asSeries, // Флаг нумерации как в таймсерииconststring label, // Имя серииconstcolor& colors[], // Цвета линииconstdouble emptyValue = EMPTY_VALUE, // Пустые значения серииconstint width = 0, // Толщина линииconstENUM_LINE_STYLE style = STYLE_SOLID, // Стиль линииconstint drawBegin = 0, // Количество баров без отрисовкиconstint shift=0// Сдвиг построения в барах
)
{
//--- Привязываем буферыSetIndexBuffer(bufferNum,value,INDICATOR_DATA);
SetIndexBuffer(bufferNum+1,clr,INDICATOR_COLOR_INDEX);
//--- Устанавливаем порядок нумерации в массивах-буферахArraySetAsSeries(value,asSeries);
ArraySetAsSeries(clr,asSeries);
//--- Устанавливаем тип графического построенияPlotIndexSetInteger(plotIndex,PLOT_DRAW_TYPE,DRAW_COLOR_HISTOGRAM);
//--- Устанавливаем имя графической серииPlotIndexSetString(plotIndex,PLOT_LABEL,label);
//--- Устанавливаем пустые значения в буферахPlotIndexSetDouble(plotIndex,PLOT_EMPTY_VALUE,emptyValue);
//--- Устанавливаем количество цветов индикатораconstint size=ArraySize(colors);
PlotIndexSetInteger(plotIndex,PLOT_COLOR_INDEXES,size);
//--- Устанавливаем цвета индикатораfor(int i=0; i<size; i++)
PlotIndexSetInteger(plotIndex,PLOT_LINE_COLOR,i,colors[i]);
//--- Устанавливаем толщину линииPlotIndexSetInteger(plotIndex,PLOT_LINE_WIDTH,width);
//--- Устанавливаем стиль линииPlotIndexSetInteger(plotIndex,PLOT_LINE_STYLE,style);
//--- Устанавливаем количество баров без отрисовки и значений в DataWindowPlotIndexSetInteger(plotIndex,PLOT_DRAW_BEGIN,drawBegin);
//--- Устанавливаем сдвиг графического построения по оси времени в барахPlotIndexSetInteger(plotIndex,PLOT_SHIFT,shift);
}
//+------------------------------------------------------------------+//| Параметры графического построения: стрелки |//+------------------------------------------------------------------+void SetPlotParametersArrow(constint plotIndex,// Индекс графической серииconstint bufferNum,// Номер первого буфера серииdouble &value[],// Буфер значенийconstbool asSeries,// Флаг нумерации как в таймсерииconststring label,// Имя серииconstdouble emptyValue=EMPTY_VALUE,// Пустые значения серииconstcolor clr=clrRed,// Цвет стрелокconstint arrowCode= 159,// Код стрелокconstint arrowShift = 0,// Сдвиг стрелок по вертикалиconstint width=0,// Толщина стрелокconstint drawBegin=0,// Количество баров без отрисовкиconstint shift=0// Сдвиг построения в барах
)
{
//--- Привязываем буферыSetIndexBuffer(bufferNum,value,INDICATOR_DATA);
//--- Устанавливаем порядок нумерации в массивах-буферахArraySetAsSeries(value,asSeries);
//--- Устанавливаем тип графического построенияPlotIndexSetInteger(plotIndex,PLOT_DRAW_TYPE,DRAW_ARROW);
//--- Устанавливаем имя графической серииPlotIndexSetString(plotIndex,PLOT_LABEL,label);
//--- Устанавливаем пустые значения в буферахPlotIndexSetDouble(plotIndex,PLOT_EMPTY_VALUE,emptyValue);
//--- Устанавливаем цвет индикатораPlotIndexSetInteger(plotIndex,PLOT_LINE_COLOR,0,clr);
//--- Устанавливаем код стрелокPlotIndexSetInteger(plotIndex,PLOT_ARROW,arrowCode);
//--- Устанавливаем смещение стрелок по вертикалиPlotIndexSetInteger(plotIndex,PLOT_ARROW_SHIFT,arrowShift);
//--- Устанавливаем толщину стрелокPlotIndexSetInteger(plotIndex,PLOT_LINE_WIDTH,width);
//--- Устанавливаем количество баров без отрисовки и значений в DataWindowPlotIndexSetInteger(plotIndex,PLOT_DRAW_BEGIN,drawBegin);
//--- Устанавливаем сдвиг графического построения по оси времени в барахPlotIndexSetInteger(plotIndex,PLOT_SHIFT,shift);
}
//+------------------------------------------------------------------+
Поставил индекс DRAW_COLOR_HISTOGRAM "в конец" с тем расчётом, чтобы INDICATOR_COLOR_INDEX был последним.
Если в буфер не надо вносить значение, то обязательно его нужно заполнить значением PLOT_EMPTY_VALUE
1. Вы до этого никогда не смотрели логи тестерного агента.
Сообщение об очистке лога Вы сами и показали.
2. Если Вы анализируете логи тестера, то Вы априори считаетсь квалифицированным пользователем. Мастер всегда должен смотреть за своим инструментом. Проводник виндовса всегда показывает красным цветом диск, на котором осталось мало свободного места
BTW даже если на Вашей приборной панели есть индикатор давления шин, то это ни в коем случае не отменяет визуальный осмотр автомобиля перед поездкой
1. Мне никогда не приходилось этого делать потому что в этом не было необходимости - в логах тестера всегда было то, что ожидалось.
2. Мало ли что показывает проводник виндовс? Мы работаем в МТ5 и он просто обязан сообщить пользователю что недостаточно памяти (или любая другая причина не позволяющая работать штатно).
Да, причина была в том, что свободного места было меньше 500мб, причем не только стали полностью без пропусков выводится логи, но и пропали тормоза при прогоне (откуда вообще возникать тормозам, если логи всё равно выводятся не зависимо от теста, непонятно). Но откуда пользователю знать, что нужно не менее 500Мб? Почему не 2Мб, 100Мб, 100500 Гб? - должны выводится сообщения агентом/тестером о проблемах мешающих нормальной работе.
И, просто необходима возможность выбора что именно выводить в лог.
Мне кажется я нашёл причину и временное решение этой проблемы. Сложно, для меня, объяснить как это происходит, но кажется тут буфер цвета встревает и всё портит.
Вот что я поменял в исходном коде и проблема пропала
Поставил индекс DRAW_COLOR_HISTOGRAM "в конец" с тем расчётом, чтобы INDICATOR_COLOR_INDEX был последним.
Если в буфер не надо вносить значение, то обязательно его нужно заполнить значением PLOT_EMPTY_VALUE
Не помогло:) Ладно, чего гадать, нужно получить ответ от СД. Все равно такие костыли не должны быть приемлемы!
Итого на FIBOGroup-MT5 Server количество тиков 15925124 и производительность тестера 2038807.3 unit/sec. На MetaQuotes-Demo количество тиков 2456073 и производительность тестера 1645058.9 unit/sec. Т.е. на втором сервере производительность тестера упала на 20%. Но тестер же не должен зависеть от торгового сервера!
Alexey Kozitsyn: Не помогло:) Ладно, чего гадать, нужно получить ответ от СД. Все равно такие костыли не должны быть приемлемы!
Странно. Я перед публикацией тыкал минут 10 и так периодически всё-ещё тыкаю переключая период графика и меняя true на false в параметре индикатора. Не вижу проблемы. Безусловно это костыли, потому и сказал я что это временное решение.
Работает без проблем. Логично конечно сначала определять буферы вывода, а уже потом буфер цвета, что сейчас и сделано.
Виталий, разберитесь сначала в сути проблемы, пожалуйста. Когда включена настройка - все работает нормально. Проблема начинается тогда, когда настройка выключена.
Каким образом они чистятся? Где можно узнать об алгоритме чистки? Где сообщение о том, что логи были подчищены?
Как работать с программой если она делает не то, что от неё ожидается? - речь в том числе и о МТ5, а не только о советнике.
В конкретном моём примере в логах видим, что тики пропускаются. Что думать в данном случае пользователю? Какие светлые чистые мысли могут возникнуть незатуманенные нецензурной бранью?
Вы до этого никогда не смотрели логи тестерного агента.
Сообщение об очистке лога Вы сами и показали.
Если Вы анализируете логи тестера, то Вы априори считаетсь квалифицированным пользователем. Мастер всегда должен смотреть за своим инструментом. Проводник виндовса всегда показывает красным цветом диск, на котором осталось мало свободного места
BTW даже если на Вашей приборной панели есть индикатор давления шин, то это ни в коем случае не отменяет визуальный осмотр автомобиля перед поездкой
При одиночном прогоне без визуализации запускаю советник, который совершает много торговых операций, забивая лог соответствующими сообщениями (сам тестер их любит выводить). После бэктеста (или сразу после нажатия на Стоп) переключаюсь на вкладку Журнал и вижу, как логи продолжают выводиться. Это первая несуразность, т.к. бэктест закончен, почему бы на показать конец логов?
Меня не интересуют логи и жму "Удалить журналы". После чего журнал чистится и... продолжает заполняться старыми записями!
Да, хорошо бы отключать вывод в журнал во время теста без визуализации. Чаще нужно просто результат конечный увидеть (профит, время теста и т.д.), которые в самом конце выводятся.
Подробности во время теста можно смотреть в режиме его визуализации. Нет никакого смысла без визуализации реактивно вываливать эту "груду".
Вот тестовый код, если интересно.
Мне кажется я нашёл причину и временное решение этой проблемы. Сложно, для меня, объяснить как это происходит, но кажется тут буфер цвета встревает и всё портит.
Вот что я поменял в исходном коде и проблема пропала
Зачем это делает тестер?
1. Вы до этого никогда не смотрели логи тестерного агента.
Сообщение об очистке лога Вы сами и показали.
2. Если Вы анализируете логи тестера, то Вы априори считаетсь квалифицированным пользователем. Мастер всегда должен смотреть за своим инструментом. Проводник виндовса всегда показывает красным цветом диск, на котором осталось мало свободного места
BTW даже если на Вашей приборной панели есть индикатор давления шин, то это ни в коем случае не отменяет визуальный осмотр автомобиля перед поездкой
1. Мне никогда не приходилось этого делать потому что в этом не было необходимости - в логах тестера всегда было то, что ожидалось.
2. Мало ли что показывает проводник виндовс? Мы работаем в МТ5 и он просто обязан сообщить пользователю что недостаточно памяти (или любая другая причина не позволяющая работать штатно).
Да, причина была в том, что свободного места было меньше 500мб, причем не только стали полностью без пропусков выводится логи, но и пропали тормоза при прогоне (откуда вообще возникать тормозам, если логи всё равно выводятся не зависимо от теста, непонятно). Но откуда пользователю знать, что нужно не менее 500Мб? Почему не 2Мб, 100Мб, 100500 Гб? - должны выводится сообщения агентом/тестером о проблемах мешающих нормальной работе.
И, просто необходима возможность выбора что именно выводить в лог.
Мне кажется я нашёл причину и временное решение этой проблемы. Сложно, для меня, объяснить как это происходит, но кажется тут буфер цвета встревает и всё портит.
Вот что я поменял в исходном коде и проблема пропала
Производительность тестера сильно зависит от торгового сервера.
Настройки тестера:
Неттинг USD, включен только Core1.
Советник
Результат на FIBOGroup-MT5 Server
Результат на MetaQuotes-Demo
Итого на FIBOGroup-MT5 Server количество тиков 15925124 и производительность тестера 2038807.3 unit/sec. На MetaQuotes-Demo количество тиков 2456073 и производительность тестера 1645058.9 unit/sec. Т.е. на втором сервере производительность тестера упала на 20%. Но тестер же не должен зависеть от торгового сервера!
Воспроизводится без проблем.
Не помогло:) Ладно, чего гадать, нужно получить ответ от СД. Все равно такие костыли не должны быть приемлемы!
Странно. Я перед публикацией тыкал минут 10 и так периодически всё-ещё тыкаю переключая период графика и меняя true на false в параметре индикатора. Не вижу проблемы. Безусловно это костыли, потому и сказал я что это временное решение.
Не помогло:) Ладно, чего гадать, нужно получить ответ от СД. Все равно такие костыли не должны быть приемлемы!
Работает без проблем. Логично конечно сначала определять буферы вывода, а уже потом буфер цвета, что сейчас и сделано.
Работает без проблем. Логично конечно сначала определять буферы вывода, а уже потом буфер цвета, что сейчас и сделано.