Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
Собственно, для советника работающего по onTick, в режиме "Только цены открытия" при тестировании все вычисления индикаторов и вызов функции OnTick() в экспертах происходит только один раз на бар.
потому что вы берете каждый раз новое время тика, и оно конечно не равно предыдущему.
在上一个函数中,你取的是条形图的开始时间。所以在这里也要取条形图的时间,而不是刻度时间。
向不懂的人解释一下,代码中的哪个参数要改成哪个。
如何描述条形时间,而不是刻度时间?
向不明白的人解释一下,代码中的哪个参数要改成哪个。
如何描述条形时间,而不是刻度时间?
向不明白的人解释一下,代码中的哪个参数要改成哪个。
如何描述一个条形的时间,而不是一个刻度?
这里有一个关于"新酒吧 "事件处理程序 的流行描述
一般来说,在提出问题之前,不要懒得去看文章和代码库。
Вот тут все популярно описано Обработчик события "новый бар"
一般来说,在提出问题之前,不要懒得去看文章和代码库。
在mql4中,你可以在五行中找出该酒吧是否是新的。而现在已经写了一大堆文件,不知道该把它们放在哪里,在程序里面写什么......
总之,如果有专家,那就给我一个代码的例子,这样我就不会吃亏了,我可以自己送任何人去图书馆,无论是电子的还是真实的。
我并不怀疑,但我问这个问题只是为了检查一下--有没有人在mql4和mql5中创建了一个相同的EA,并比较了测试结果?如果代码经过适当的转换,它应该是完美相似的,不是吗?还是我错了?
如果测试是在那里平行进行的,而在mql5中,逻辑被放在onTick中,那么它将是类似的。
唯一的区别可能是在价差上。在5,历史包含了传播。在4版本中,测试器的扩散等于终端中当前的扩散。
如果测试 "每一个刻度",看起来会更小,因为各版本的刻度生成算法是不同的。
在mql4中,你可以在五行中找出该酒吧是否是新的。而现在已经写了一大堆文件,不知道该把它们放在哪里,在程序里面写什么......
总之,如果有专家,那就给我一个代码的例子,这样我就不会吃亏了,我可以自己送任何人去图书馆,无论是电子的还是真实的。
这里,声明lastbar 变量为静态或全局变量,iTime 数组为全局变量。
页面上有一个例子,其中有isNewBar函数
https://www.mql5.com/ru/forum/2804/38752#comment_38752
1.我并没有要求在mql4和mql5上测试相同策略的结果。
我习惯在一个新的条形图上进场,如果条件符合进场要求,则平仓,如果指标显示相反的信号,则在一个新的条形图上再次进场。
在mql4上,我用这个程序在一个新条上输入。
void Fun_New_Bar() // Ф-ия обнаружения ..
{ // ...新酒吧
static datetime New_Time=0; // 当前酒吧的时间。
New_Bar=false; //没有新条形图
if(New_Time!=Time[0]) // 比较时间
{
New_Time=Time[0]; // 现在的时间是
New_Bar=true; // 新条被捕获。
}
}
这就是使用我的策略在mql4上测试机器人的结果。
谢谢你送来确定新栏的程序。他们正在工作。我做了一个脚本,在新的条形图上写出Alert,并在M1上测试,所以我没有等太久。
但同样的策略在mql5专家顾问中使用这两个程序,得到的结果完全不同(也是一样的)。
我没有白白地撕扯我的衬衫和跺脚。我想重复这些结果,但它们并不一致。
下面是mql4中的onStart函数大约是这样的
int start()
{
GetIns()。
Fun_New_Bar()。
如果(New_Bar==false)返回(0)。
如果(Total()>0)
{
CloseSellEnd()。
CloseBuyEnd()。
}
如果(Total()<1)
{
OpenBuy()。
OpenSell()。
}
return(0);
}
在mlq5中也是如此。
空白的OnTick()
{
GetIns()。
如果(NewBar())
{
如果(Total()>0)TryToClose()。
如果(Total()<1)
{
OpenBuy(Lots,10, "EUR/USD (Buy)",102406)。
OpenSell(Lots,10, "EUR/USD (Sell)",102406)。
}
}
}
GetIns处理指标参数,Total()-给出mql4所需魔力的头寸数量或mql5所需的符号。
帮助。
我想我已经找到了差异的原因。你不会相信的。MT4和MT5有不同的报价历史。似乎略有不同,而且该策略的测试结果有很大差异!!!!
这里有一个不同终端上的情节。
你仔细看看,是有区别的。一个小的?而策略的测试结果有什么不同,也很小吗?
我将与开发商联系!好一个测试版!!!。