[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 426

 
ikatsko >>:

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


Хотя:

datetime TimeCurrent( )

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

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


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

你的意思是设置一天的交易时间吗?

如果是这样

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


//B start

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

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

Если так то


我想在接近当前时间的一小段时间内,在短的时间框架上优化EA的参数。另一方面,策略测试器允许你设置优化过程开始和结束的日期。当TF是15分钟(例如),那么在一天中(这是允许测试器设置的最小值)将有96条。而且我认为这是一个很大的问题。我想让这个TF在过去2个小时内得到优化,比如说在8个柱子上。


我已经在EA中插入了这样一个片段。

Extern int History=100; //以条为单位的历史,专家顾问在其中工作。
StartDateTime=TimeCurrent()-History*Period()*60。
如果(TimeCurrent()<StartDateTime) // 开始时间还没有到来
{
Alert("开始时间还没有到来。EA没有工作。",": ",Symb,",",Period())。
return; // 退出start()

}

我预计在StartDateTime之前,策略测试器中的EA将不会工作。但是没有!

 
ikatsko >>:

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

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


//B start

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

intHour( )
返回程序开始时最后已知的服务器时间的当前小时(0,1,2,...23)(该值在程序执行过程中不改变)。

注意:测试时,模拟的是最后一个已知的服务器时间。


测试仪支持M1 TF,不要把它和酒吧绑在一起,把它和时间绑在一起,也许你也需要这样

 
costy_ >>:

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

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


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

这句话:在测试时,模拟最后已知的服务器时间是存在的,在TimeCurrent( )中,然而它并不起作用。你的变体很好,但我们必须检查它是否有效?其次,当改变TF时,有必要改变一段代码或必须认识到它在哪个TF中工作,以充分感知数字 "开始 "和 "结束"。第三,我认为向后设置巴罗号要方便得多--没有必要手动计算 "开始"。在MQL中,我们处理的是酒吧最后一点:这个代码的缺点是什么?(除了它在策略测试器中不起作用。而这就是我的问题)

 
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_ >>:

有点像。

datetime是日期和时间,是一个无符号整数,包含从1970年1月1日0时起经过的秒数。

и

颜色和 日期时间 类型的数据 被表示为整数。整数类型与浮点类型一起被称为算术(数字)类型。

如果没有,如何摆脱它。

不过,谢谢你对数字格式的提示。有一个搜索的方向。如果仍有现成的解决方案,将不胜感激。

 

实际上,在测试器中使用Time[0]而不是TimeCurrent() 更好,在我看来,以前TimeCurrent()在测试器中是有效的...

而现在测试器中的TimeCurrent()(或不在测试器中)很可能会输出最后一次报价的时间......


在这种情况下,它将工作

Extern int History=100; // 以条为单位的历史,专家顾问在此基础上工作
StartDateTime=Time[History];
if(Time[0] < StartDateTime) // 开始时间未到
{
Alert("Start time has not come.EA不工作。",": ",Symb,",",Period());
return; // Exit start()
}

 
ikatsko >>:

Вроде как:

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

и

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

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

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

那么,在之前的评论中,错误是通过警报显示的。

帮助中说:"注意:在测试时,最后已知的服务器时间是模拟的。"但如果不是模拟的,所有的问题都要交给帮助编辑。

你检查了,你发现了错误...

只有你知道解决方案,因为我们不知道逻辑的进一步方向。

我不明白为什么有这么多的文字

StartDateTime=TimeCurrent()-History*Period()*60。

当一切都可以做得更容易的时候?

 
costy_ >>:

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

我完全同意你在前一个答案中的解决方案:这是一个数据格式不兼容的问题!对现成的解决方案的要求归结为解决格式转换的问题。但显然MQL4没有这样的选项。例如,今天是一年中的第43天,即从年初开始的日线时间框架中的第43条。假设我想在60条上优化我的专家顾问。这意味着测试者应该从上一年的第365-(60-43)=348天(条)开始工作。也就是说,我们应该采取TimeDayOfYear(TimeCurrent())的方式。(它是一个int!)并与348进行比较。很明显,我们也必须考虑到今年(去年)的价值。总而言之,我认为我已经得到了它。我们只是要实施它。在小的TF上,当一个人必须测试大量的条形图,(例如,5分钟)将超过前一个小时,或者可能是前一天,这将是更加困难的。

 

你的整个问题都在问题陈述中,要让别人明白......说实话,我不明白你需要从什么时间开始测试......

如果你需要从60条开始,就从60条开始。

int startTime = iTime(NULL,PERIOD_D1, N); // N - 日线时间框架上从当前时刻开始的条数。

原因: