新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 935

 
你好,我想知道是否有一个正常的脚本来下载和同步MT5的报价历史。ex5,一切都很好,扫描器工作,给出信号,一切都很好,但昨天午餐后,由于切断了,扫描器只是停止看到历史,因此根据策略寻找进入点并给出信号,我以为问题出在扫描器上,但我得到了几个版本,并停止显示所有的信号,我得到了我的朋友,我清除了终端,它是无用的,我删除了它和所有的信息,重新安装它,当我开始用脚本加载历史,我打开专家标签,看到加载历史时只有错误,我写信给经纪人支持,他们告诉我,最近MT%的工程师更新了一些东西,也许脚本的算法出了问题。 我想在这里问一下该怎么做,是否有其他的脚本来处理报价历史,我应该马上告诉大家,我试图用一个月的时间框架来下载报价,但没有用,提前感谢一下。
 
82Dmitry82:
你好,我想知道是否有一个正常的脚本来加载和同步MT5的报价历史。ex5,一切都很好,扫描器工作,给出信号,一切都很好,但昨天午餐后,由于断电,扫描器就不再看到历史记录,因此,根据策略寻找进入点并给出信号,我以为问题出在扫描器上,但我有几个版本,所有的信号都停止发出了,包括我和我的朋友,我清空了终端,没有用,把它和所有的信息都删除了,重新安装,当我开始用脚本加载历史,我打开专家标签,看到加载历史时只有错误,我写信给经纪人支持,他们回答说最近在MT%,可能已经更新了,算法在脚本中被混淆了,他发出了这样一个加载历史。我为大量的信件道歉,我只是试图详细解释情况,经纪人支持拒绝帮助,他们说这不是我们的问题,而metaquotes,你不能写信给他们,他们没有反馈,所以我决定在这里问该怎么做,是否有其他脚本的报价历史,我必须承认我尝试使用每月TF下载报价,没有用,提前感谢。

我不打算说什么,但这是唯一一家在履行我的一个订单时,历史数据出现问题的公司--它是开了又关。

我一直在寻找原因,直到我告诉客户在其他经纪公司的报价上进行测试。而那里的一切结果都是好的。

如果你曾试图在每月的时间框架内加载报价,那是没有用的。

 
 
Seric29:
伙计们帮助解决这个问题https://www.mql5.com/ru/forum/160683/page934#comment_12795598

你没有一个完整的例子,贴出可重复的代码,即一个完整的类模板和一个代码例子,在这个例子中你使用这个模板创建一个对象,到目前为止只有 "telepaths on holiday" .... 我怀疑代码根本无法编译,你的模板中有许多争议点,我可能看不到其中的逻辑。

 
Artyom Trishkin:

我不打算说什么,但这是唯一一家在履行我的一个订单时,历史数据出现问题的公司--它是开了又关。

我一直在寻找原因,直到我告诉客户用其他经纪商的报价来测试它。而那里的一切结果都是好的。

原因是禁止在这个资源上讨论经纪人,我们就不谈这个了。

这就是问题所在,他们在半年多的时间里没有出现过问题。我试图使用它,因为某些原因,我们的使用一个makdi bargraph,这似乎是问题,至少当他们想为QuickBooks订购,答案是否定的,在审查TOR后,所有的休息在内置的诱导平台,只是IMb有时在休眠和美国给工作

 
Igor Makanu:

你没有一个完整的例子,请贴出可复制的代码,即一个完整的类模板和一个代码例子,你在其中使用这个模板创建一个对象,到目前为止只有 "度假的心灵感应"....,我怀疑代码根本无法编译,你的模板中有许多值得怀疑的地方,也许我没有看到其中的逻辑。

它应该像这样工作。

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#define  templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д

//Далее пишем макрос который будет принимать массив и возвращать
//результат с помощью вызова перегружаемой функции которая будет вызываться из класса, но в моём примере вписана простая функция,
// я 3 дня посидел и выяснил что макрос может принимать массивы любой размеренности  в принципе об этом написано в справке что макрос может принимать эл. любого типа
#define  Vosmas(a,b,c,d,e) /*return*/(Fun(a,b,c,d,e))//a- массив, 
                                                    //b- номер строки если нужен
                                                    //c,d- номера измерений если нужны и массив многомерный

int Mas[2],Mas2[2][2],Mas3[2][2][2];//объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)

int OnInit()
{int Perem=0;
//макрос должен вызвать функцию из класса и сделать следующее/ в моём примере будет простая функция
 Perem=Vosmas(Mas,0,0,0,3);
 Print("Vosmas: ",Perem);//результат 3
return(INIT_SUCCEEDED);}

templ(T)class CData{
public:CData(){};~CData(){};
       //перегружаемая функция Total() с наращиваемым количеством аргументов, не знаю будет ли оно наращивать аргументы вроде записывается но когда дойдёт до расчётов увидим
       //хотелось бы с этим разобраться 
       //а также делать такую перегрузку 
       T Total(T &mas[]    ,int y1=0 ...){return(mas[y1]);}  //y2 весит в холостую  
       T Total(T &mas[][]  ,int y1=0 ...){return(mas[y1][y2]);}
       T Total(T &mas[][][],int y1=0 ...){return(mas[y1][y2][y3]);}};
       
         
templ(T) T Fun(T &a[],int b,int c,int d,int e){a[b]=e; return (a[b]);}// оставшиеся аргументы будут висеть в холостую

一般来说,我想达到这种效果,但在班级方面没有经验。代码编译后可以使用

 
Seric29:

它应该像这样工作。

不幸的是,我不理解这段代码的逻辑,我甚至无法想象为什么你要通过宏替换来声明语言关键词。

而且根据逻辑,我怀疑你是否能通过这种方式获得对多维数组 的访问,我认为你的例子只是没有编译出一个模板,因此你没有得到一个编译时错误。

我帮不上什么忙,也许别人能搞清楚你的例子

 
Igor Makanu:

不幸的是,我不明白这段代码的逻辑,我甚至无法想象为什么你要用宏替换来声明语言关键词。

而且根据逻辑,我怀疑你是否能通过这种方式获得对多维数组 的访问,我认为你的例子只是没有编译出一个模板,因此你没有得到一个编译时错误。

我帮不上什么忙,也许别人能搞清楚你的例子。

代码可以编译,但还没有完成,关键是要得到这样的结果

return(mas[y1]);

我需要从类中调用一个函数并获得这个值。

 
Seric29:

代码可以编译,但还没有完成。

再次强调:你没有得到一个编译错误 并不意味着你的模板类被包含了 - CData类的对象在哪里?- 我看到一个模板声明,变量在哪里?- 对象?

如果你 "非常需要 "解决这个问题,那就编写完全可重复的代码--完全没有.....,由你决定,而且我不明白使用宏替换的逻辑。

#define  templ(T)          template<typename T>

也许这就是 "要点",我很少使用宏,至少如果我使用一个宏,我明白它最终会做什么,在你的例子中,它对我来说是个谜。

 
Igor Makanu:

再次强调:你没有得到一个编译错误 并不意味着你的模板类被包含了--CData类的对象在哪里?- 我看到了一个模板声明,但这样一个变量在哪里?- 对象?

如果你 "非常需要 "解决这个问题,那就编写完全可重复的代码--完全没有.....,由你决定,而且我不明白使用宏替换的逻辑。

也许这就是问题的关键,我很少使用宏,至少如果我使用宏,我明白它最终会做什么,在你的例子中,它对我来说是一个谜。

宏的任务是从类中调用一个函数,并将值传递给函数,由于宏可以接受任何维度的数组,我正试图做出这样的方案。当然有很多宝石,但我需要从类中调用函数,我不知道如何调用类的简单函数(在我的例子中,方法Total没有描述)不是用Help写的,有复杂的例子可以转移。

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#define  templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д

#define  Vosmas(a,b,c,d,e)  5

int Mas[2],Mas2[2][2],Mas3[2][2][2];//объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)

int OnInit()
{int Perem=0;
Perem=Vosmas(Mas,0,0,0,0);
Print("Vosmas: ",Perem);
Perem=Vosmas(Mas2,0,0,0,0);
Print("Vosmas: ",Perem);
Perem=Vosmas(Mas3,0,0,0,0);
Print("Vosmas: ",Perem);//во всех случаях результат 5
return(INIT_SUCCEEDED);}

这里有一个例子,一个宏需要一个任意维度的数组,开发者削减了这些功能,正常地处理复杂的元素,这很糟糕。

你可以不用模板,但有模板会更好。

原因: