[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 426

 
ikatsko >>:

Здравствуйте! Как бы организовать в тестере стратегий оптимизацию (или тестирование) на промежутке времени, определенном не датами, а количеством последних баров? Попытка установки в советнике ограничителя времени работы, который определяется заданным количеством баров и основывается на TimeCurrent(), ничего не дала.


Хотя:

datetime TimeCurrent( )

Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года.

Замечание: при тестировании последнее известное время сервера моделируется


Получается, что время, на котором работает оптимизатор, задается только в окне тестера фразой "Использовать дату:". Может кто знает какую-нибудь хитрость?

Você pretende definir a hora do dia de negociação?

Se assim for

//begin
extern string     Торгуемый_диапазон  =  "В часах";
extern int        начало=8;
extern int        окончание=20;


//B start

if(Hour()>= начало&&Hour()< окончание)//если час больше или = 8, а так же если час меньше 20, торгуем
{
//условия
}
 
costy_ >>:

Вы имеете ввиду задавать время торгов внутри дня?

Если так то


Gostaria de otimizar os parâmetros de uma EA em prazos curtos em um pequeno período de tempo próximo à hora atual. O Testador de Estratégia, por outro lado, permite definir a data na qual o processo de otimização começa e termina. Quando o TF é de 15 minutos (por exemplo), então em um dia (e este é o mínimo que permite que o testador se ajuste) haverá 96 barras. E eu acho que é muito. Eu gostaria que esta TF fosse otimizada nas últimas 2 horas, ou seja, em 8 barras, por exemplo.


Eu inseri tal fragmento na EA:

história interna externa=100; //História em bares, na qual trabalha o Expert Advisor
StartDateTime=TimeCurrent()-História*Periodo()*60;
if(TimeCurrent()<StartDateTime) // A hora de início não chegou
{
Alerta("A hora de início não chegou. A EA não funcionou",": ",Symb,", ",Period());
retorno; // Saída início()

}

Eu esperava que a EA no testador de estratégia não funcionasse antes do StartDateTime. Mas não!

 
ikatsko >>:

Я хотел бы оптимизировать параметры советника на коротких таймфреймах на малом промежутке времени поближе к текущему времени. Тестер же стратегий позволяет установить дату на которой начинается и на которой заканчивается процесс оптимизации. Когда же ТФ равен 15 минутам (например), то в сутках (а это минимум который позволяет установить тестер) будет 96 баров. А это по моему много. Хотелось бы для этого ТФ пооптимизировать на последних 2-х часах т.е. на 8-ми например барах.

//begin
extern string     Торгуемый_диапазон  =  "В часах";
extern int        начало=22;
extern int        окончание=0;


//B start

if(Hour()>= начало&&Hour()< окончание)//на интервале  меж 22:00 - 00:00
{
//условия
}

em Hora( )
Retorna a hora atual (0,1,2,...23) da última hora conhecida do servidor no início do programa (este valor não muda durante a execução do programa).

Nota: ao testar, o último tempo conhecido do servidor é simulado.


O testador suporta M1 TF, não amarre-o às barras, amarre-o ao tempo, talvez você precise disso também.

 
costy_ >>:

int Hour( )
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).

Замечание: при тестировании последнее известное время сервера моделируется.


Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.

A frase: ao testar, o último tempo conhecido do servidor é simulado e no TimeCurrent( ) no entanto, não funciona. Sua variante é boa, mas temos que verificar se ela funciona? Em segundo lugar, ao mudar a TF é necessário mudar um pedaço de código ou reconhecer em que TF ele funciona, para perceber adequadamente os números "início" e "fim". Em terceiro lugar, acho que é muito mais conveniente colocar o número do baro para trás - não há necessidade de calcular o "início" manualmente. Na MQL lidamos com barras! E a última coisa: qual é a desvantagem deste código? (Exceto que não funciona no testador de estratégia. E essa é a minha pergunta)

 
costy_ >>:

int Hour( )
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).

Замечание: при тестировании последнее известное время сервера моделируется.


Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.

extern int History=100; //История в барах, на которой работает советник
StartDateTime=TimeCurrent()- History*Period()*60;//...=datetime - int*int*int (допустим 1265996665 - 100 * 15 * 60 это не есть интересующее время)

Alert("TimeCurrent()    "+TimeCurrent()+" < StartDateTime    "+ StartDateTime);//...проверим соотношение datetime 

if(TimeCurrent()< StartDateTime) // Время старта не наступило...
{
Alert("Время старта не наступило. Эксперт не работает.",": ", Symb,", ",Period());
return; // Выход из start()

} 
 
costy_ >>:

Mais ou menos como:

data é data e hora, um inteiro não assinado contendo o número de segundos decorridos desde 0 horas em 1 de janeiro de 1970.

и

Os dados dos tipos cor e data/hora são representados como números inteiros. Os tipos inteiros, juntamente com os tipos de ponto flutuante, são chamados de tipos aritméticos (numéricos).

Caso contrário, como sair dela.

Obrigado pela dica sobre o formato numérico, no entanto. Há uma direção de busca. Se ainda houver uma solução pronta, será grato

 

Na verdade, é melhor usar o Time[0] em vez do TimeCurrent() no testador, me pareceu que o TimeCurrent() funcionava no testador antes...

e agora o TimeCurrent() no testador (ou não no testador) muito provavelmente dará o tempo quando chegar a última citação...


neste caso, vai dar certo

extern int History=100; // History in bars, em que o Expert Advisor trabalha
StartDateTime=Time[History];
if(Time[0] < StartDateTime) // A hora de início não chegou
{
Alert("A hora de início não chegou. EA não funciona",": ",Symb,", ",Period());
retorno; // Saída início()
}

 
ikatsko >>:

Вроде как:

datetime - дата и время, беззнаковое целое число, содержащее количество секунд, прошедших с 0 часов 1 января 1970 года.

и

Данные типов color и datetime представляются в виде целых чисел. Целые типы вместе с типами с плавающей точкой называются арифметическими (числовыми) типами.

А если нет, то как выйти из этого положения.

Хотя, спасибо за подсказку на счет формата чисел. Есть направление поиска. Если всеже есть готовое решение буду благодарен

Bem, no comentário anterior, o erro foi exibido através do alerta.

A ajuda diz "Nota: ao testar, o último tempo conhecido do servidor é simulado", mas se não forem simuladas todas as perguntas para o editor de ajuda.

Você verificou, encontrou o erro...

Somente você conhece a solução, pois não conhecemos a direção da lógica.

Não entendo apenas porque há tanto texto

StartDateTime=TimeCurrent()-História*Periodo()*60;

quando tudo pode ser feito muito mais facilmente?

 
costy_ >>:

Готовое решение знаете только Вы, так как дальнейшее направление логики нам не известно.

Concordo plenamente com sua solução na resposta anterior: trata-se de uma incompatibilidade de formato de dados! O pedido de uma solução pronta se resume a resolver a questão da conversão de formato. Mas obviamente a MQL4 não tem tais opções. Por exemplo, hoje é o 43º dia do ano, ou seja, o 43º bar no período diário desde o início do ano. Suponha que eu queira otimizar meu Expert Advisor em 60 barras. Isso significa que o testador deve começar a trabalhar com 365-(60-43)=348º dia (barra) do ano anterior. Isto é, devemos tomar TimeDayOfYear(TimeCurrent()) (é uma int!) e compará-lo com 348. Obviamente, temos que levar em conta também o valor do ano (ano passado). Em resumo, acho que consegui. Só temos que implementá-lo. Será muito mais difícil em TFs pequenos, quando se tiver que testar um grande número de barras, que (por exemplo, 5 minutos) irão além da hora anterior, ou talvez no dia anterior.

 

Todo seu problema está na declaração do problema, deixe claro para os outros... Sinceramente, não entendi a que horas você precisa testar de...

Se você precisa começar com uma barra de 60 barras, comece com 60 barras.

int startTime = iTime(NULL,PERÍODO_D1, N); // N - número da barra a partir do momento atual no cronograma diário