[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 428

 
keekkenen >>:

боюсь эта конструкция if(Time[0]>iTime(0,1440,60)) всегда будет возвращать истину, т.к. это iTime(0,1440,60) значение будет на 60 баров левее, чем Time[0]..

что показывает тест ?




Постановка задачи: имеется советник, есть желание его оптимизировать на последних, например, 40-ка барах (60 см. ветку)в тестере стратегий.

if(Time[0]>iTime(0,1440,60))

если время(моделируемое) стало больше времени открытия 60-го бара на дневке тогда выполнить функцию что не так?!

 
верно, тогда вам заранее нужно определить время с которого советник должен начать тестирование..
так как вы знаете когда он должен его завершить, то делаете следующее

допустим тестирование заканчивается 2010.02.10 0:00


делаем скрипт из кода ниже

#property show_inputs
// время окончания тестировани						
extern string 		endTestTime 		= "2010.02.10 0:00";
// название пары
extern string		symbolTest			= "";
// период на котором ищем нужное время по номеру testBarCount бара относительно времени endTestTime
extern int 			periodTest		   = 0;
// количество баров в прошлое относительно времени endTestTime
extern int 			testBarCount 		= 60;

int init(){
	if (symbolTest == "") symbolTest = Symbol();
	// искомое время
	Print(TimeToStr(iTime(symbolTest,periodTest,	iBarShift(symbolTest,periodTest,StrToTime(endTestTime)) + testBarCount)));
}
 

этот скрипт позволяет найти время с которого нужно протестировать советник..

в советнике задаем пару переменных

extern string startTime = "";
extern string endTime = "";

int StartTime = StrToTime(startTime), EndTime = StrToTime(endTime);

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
 

этот скрипт позволяет найти время с которого нужно протестировать советник..

в советнике задаем пару переменных

extern string startTime = "";
extern string endTime = "";

int StartTime = StrToTime(startTime), EndTime = StrToTime(endTime);

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
в startTime заносим время полученное скриптом, а в endTime время заносимое в переменную endTestTime скрипта..
 
costy_ >>:

Постановка задачи: имеется советник, есть желание его оптимизировать на последних, например, 40-ка барах (60 см. ветку)в тестере стратегий.

if(Time[0]>iTime(0,1440,60))

если время(моделируемое) стало больше времени открытия 60-го бара на дневке тогда выполнить функцию что не так?!

так 60-й бар тоже модулируется относительно модулируемого 0-го бара

 

Постановка задачи: имеется советник, есть желание его оптимизировать на последних, например, 40-ка барах в тестере стратегий относительно текущего времени. Эти сорок баров могут быть на часовом, 4-х часовом, дневном или другом ТФ. Работает тестер стратегий: промежуток времени на котором он работае указывается на панели тестера. Этот способ задания времени работы не выполняет поставленной выше задачи - тест на 40-ка барах. Значит надо внести изменения в советника так, чтобы выполняя код не тестер определял время тестирования (его возможности не устраивают), а сам код.

Ваше предложение работать не будет, так как для тестера время, которое было N баров назад является текущим.


Т.К.

Для текущего времени тестер будет расчитывать время открытия указанного бара (назад) начиная от текущего. Т.е. опять не решит проблему. Надо же N баров назад от сегодняшнего(сиюсекундного) бара, а не от текущего времени тестера


Правильно ли я понял.

 
keekkenen >>:
допустим тестирование заканчивается 2010.02.10 0:00


делаем скрипт из кода ниже

Скрипт хорош, НО!! Он выдаст значение времени, которое в последствии надо "забить" в панели тестера. Это не очень... Но на малых ТФ и малом количестве баро он покажет такое время, которое невозможно будет "забить" в тестере, так как в тестере указывается дата и только. А тестирование проводится с 00:00 начальной даты до 00:00 конечной даты. А время, тем более в минутах, указать невозможно!!!!

 

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


ничего страшного что нельзя в тестере забить точное время, ставьте начало текущего дня или дня до времени старта - это уже издержки..


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

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
 

Посмотрите на рисунок инд. начал отрисовку только со смещением в 60 баров на днях. Ниже часть кода. Вы хоть пробовали что то из того что рекомендовали? Пробуйте и у Вас все будет.

int start()  {
double stoch1,stoch2;
   int pos = Bars-IndicatorCounted() ;  
//----

if(Time[0]>iTime(0,1440,60)) 
   for(int b=0; b<=pos;b++)
   {    
 
keekkenen >>:

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

Я так понял, что советник будет обращаться в скрипт за данными, бары назад надо задавать в скрипте.

И! Я прошу прощения могли бы вы выложить полный код скрипта? К моему позору за полтора года работы с MQL ниразу не писал скрипты