[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 428

 
keekkenen >>:

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

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




Declaração de problema: Tenho um EA e quero otimizá-lo nas últimas 40 barras (ver linha) no testador de estratégia, por exemplo.

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

Se o tempo (simulado) se tornou maior do que o tempo de abertura do 60º bar no bar diário, então execute a função o que está errado?!

 
certo, então você precisa definir com antecedência o momento em que a EA deve iniciar os testes
já que você sabe quando deve terminar, então faça o seguinte

digamos que os testes terminam em 2010.02.10 0:00


fazer um roteiro a partir do código abaixo

#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)));
}
 

este roteiro permite que você encontre o tempo a partir do qual deseja testar a EA...

definir um par de variáveis no EA

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

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

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

este roteiro permite que você encontre o tempo a partir do qual deseja testar a EA...

definir um par de variáveis no EA

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

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

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
No startTime registramos o tempo obtido pelo roteiro, e no endTime registramos o tempo inserido na variável endTestTime do roteiro...
 
costy_ >>:

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

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

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

portanto, a barra 60 também é modulada em relação à barra 0 modulada

 

Declaração de tarefa: Tenho um EA e quero otimizá-lo nas últimas 40 barras no testador de estratégia, por exemplo, em relação à hora atual. Estes quarenta bares podem ser de hora em hora, 4 horas, diariamente ou em outro horário. O testador de estratégia funciona: O intervalo de tempo em que funciona é mostrado no painel do testador. Esta forma de definir o tempo de operação não atende à tarefa acima - testar para 40 barras. Isso significa que precisamos mudar o Expert Advisor para que não seja o testador que define o tempo de teste (suas capacidades não são satisfeitas), mas o próprio código.

Sua sugestão não vai funcionar, pois para o testador, o tempo que era N barras atrás é o tempo atual.


T.K.

Para a hora atual, o testador calculará o tempo de abertura da barra especificada (para trás) a partir da hora atual. Isto é, novamente não resolverá o problema. Deve ser N barras de volta da barra (momentânea) de hoje , não do tempo atual do testador


Fiz bem.

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


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

O roteiro é bom, MAS!! Ele dará um valor de tempo que deve ser "pontuado" posteriormente no painel de teste. Isto não é bom.... Mas no pequeno TF e pequena quantidade de baro ele mostrará tal tempo, que não pode ser "pontuado" no testador, porque no testador a data e somente a data é dada. Os testes são realizados de 00:00 da data de início até 00:00 da data final. É impossível especificar o tempo, especialmente em minutos!!!!

 

A razão simples é que o testador vive em seu próprio tempo, enquanto nós e as citações reais vivemos em um tempo diferente e esses espaços de tempo se sobrepõem apenas em nossa imaginação...


não faz mal que você não possa definir a hora exata no testador, coloque o início do dia atual ou dia antes da hora de início - já é um custo...


Este pedaço de código cortará o tempo extra antes da hora de início da otimização necessária (o que definimos nos parâmetros) e após o tempo final da otimização...

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

Veja a figura ind. começou a desenhar apenas com um offset de 60 barras no outro dia. Abaixo está parte do código. Você já tentou alguma das recomendadas? Experimente e você vai conseguir.

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

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

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

Meu entendimento é que a EA irá para o roteiro para obter dados, as barras de volta devem ser colocadas no roteiro.

И! Desculpe, você poderia por favor postar o código completo do roteiro? Para minha vergonha, eu nunca escrevi um roteiro em meu ano e meio de MQL.