我的方法。核心是引擎。 - 页 92 1...858687888990919293949596979899...184 新评论 Vasiliy Sokolov 2018.12.19 10:31 #911 Maxim Kuznetsov:用于EA、指标和脚本之间的数据交换的唯一的GlobalVariables和文件是 以上4点都是当地的 "黑科技",因为缺鱼。以上4点使用的机制都不是为交换任意数据而设计的,更不用说数据阵列了。 你会认为GlobalVariables是专门为信息传递设计的。这样说太傻了。事实上,它和其他物品的黑客是一样的。 Реter Konow 2018.12.19 12:32 #912 fxsaber: ...粗略地说,一个完整的写/读嘀嗒循环在资源中的运行速度为每秒400万次。 对资源的读/写是非常快的。但这在多大程度上适合这样的传输。 1.A线。计时器事件。收集所有在事件中被改变的参数值,并将它们翻译成一个字符串。将字符串翻译成Char,写到资源中。向B方发送消息。 2.B方。OnChartEvent()事件,收到一个消息信号,打开资源,读取它,用新的值填充参数内核,重新绘制所需的元素。 如果这个事件以定时器的频率连续执行呢? 问题是,如果有其他选择,如何最好地利用资源来做这件事。 //--------------------------------------------------------------------------------------------------------------------- EventChartCustom()选项有两个缺点。 包裹变得在事件队列中。包裹的长度不能超过127个字符。因此,一个1000个字符的信息必须被分割,然后再重新组合起来。而消息的每一部分都会在事件队列中。通过图对象的变体,需要将消息分割成64个字符的包,写成对象描述,然后再重新组合。有趣的是,这种变体是最快的,但随着字符串长度的增加,其速度也会下降。也就是说,每次调用ObjectSetString() 需要3微秒的时间。但如果一个字符串有1000个字符,我们需要把它分成64个字符,这意味着我们需要调用ObjectSetString()大约8次。8*3=24ms。然后用同样的时间来组装绳子。这就是为什么如果字符串有10 000个字符长,这个方法肯定会接近通过资源工作的方法的速度。(我说的是保存和读取资源的时间+将字符串转为uint再转回的时间)。资源变体到最后仍然没有得到检验。我今天会在测试器中进行测试,最后会清楚它是否可以普及。 fxsaber 2018.12.19 12:35 #913 Реter Konow:如果这个事件以定时器的频率连续执行呢? 问题是,如果有其他选择,如何最好地利用资源来做这件事。 关于交易、自动交易系统和策略测试的论坛 程序之间的数据交换 fxsaber, 2018.11.21 13:12 可能有很多时间可以如此详细地描述各种互动的选择。不幸的是,我并不拥有这样的资源。 这里有一篇关于这个问题的文章,其中有一个完整的互动。每座建筑都是由砖块建成的,并用于特定的任务。所有可能的砖块都显示在该主题的开头。其余的就由建造者决定了。 Реter Konow 2018.12.19 12:37 #914 fxsaber: 这篇文章没有测试两个程序通过资源的通信,其中一个在测试器中。 Dmitry Fedoseev 2018.12.19 14:07 #915 工会有什么问题?请举一个例子。 union UZ{ double d; int i[2]; }; void OnStart(){ UZ u1; UZ u2; u1.d=12345.678; ArrayCopy(u2.i,u1.i); Alert(u2.d); } fxsaber 2018.12.19 14:07 #916 Реter Konow:这篇文章没有测试两个程序通过资源的通信,其中一个在测试器中。阅读关于砖头的句子。 Реter Konow 2018.12.19 14:38 #917 fxsaber:...这篇文章是在向麻雀开炮。像许多文章一样。我宁愿自己解决这个问题,也不愿理解这篇文章。 一切都可以做得更容易和更清楚。但是,这篇文章是一个非常容易的地狱... 而且,如果你说你没有检查过测试器中的资源操作,那么这篇文章有什么用呢? fxsaber 2018.12.19 15:21 #918 Реter Konow:而且,如果你说你没有在测试器中检查过资源操作,这篇文章又有什么用呢?退出了讨论。 Реter Konow 2018.12.19 16:25 #919 这个解决方案有问题。也许我做错了什么。 简而言之。 StringToCharArray()函数只接受一个char数组。 ResourceCreate()函数只接受一个uint数组。 因此,我们需要一个中间环节,将char数组的内容(填充了转换后的字符串)改写成uint数组。 Реter Konow 2018.12.19 16:27 #920 //+------------------------------------------------------------------+ //| Tester EA.mq4 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //---------------------------------------------- ObjectCreate(0,"Resource",OBJ_BITMAP_LABEL,0,0,0); ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"::Resource"); //---------------------------------------------- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { uchar Arr[]; uint Data[]; //--------------------------- string price = (string)Bid; //--------------------------- int width = StringToCharArray(price,Arr); //--------------------------- ArrayResize(Data,width); //--------------------------- ArrayCopy(Arr,Data); //--------------------------- if(!ResourceCreate("::Resource",Data,width,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA))Print("Resource is not created!"); //--------------------------- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- } //+------------------------------------------------------------------+ 正常图表上的指标。 //+------------------------------------------------------------------+ //| Resource reader.mq4 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping EventSetMillisecondTimer(25); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- uint Data[50],width,height; //----------------------------- if(!ResourceReadImage("::Resource",Data,width,height))Print("Failed to read resource!"); else Print("Resource is readable!"); //----------------------------- } //+------------------------------------------------------------------+ 1...858687888990919293949596979899...184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
用于EA、指标和脚本之间的数据交换的唯一的GlobalVariables和文件是
以上4点都是当地的 "黑科技",因为缺鱼。以上4点使用的机制都不是为交换任意数据而设计的,更不用说数据阵列了。
你会认为GlobalVariables是专门为信息传递设计的。这样说太傻了。事实上,它和其他物品的黑客是一样的。
...粗略地说,一个完整的写/读嘀嗒循环在资源中的运行速度为每秒400万次。
对资源的读/写是非常快的。但这在多大程度上适合这样的传输。
1.A线。计时器事件。收集所有在事件中被改变的参数值,并将它们翻译成一个字符串。将字符串翻译成Char,写到资源中。向B方发送消息。
2.B方。OnChartEvent()事件,收到一个消息信号,打开资源,读取它,用新的值填充参数内核,重新绘制所需的元素。
如果这个事件以定时器的频率连续执行呢?
问题是,如果有其他选择,如何最好地利用资源来做这件事。
//---------------------------------------------------------------------------------------------------------------------
如果这个事件以定时器的频率连续执行呢?
问题是,如果有其他选择,如何最好地利用资源来做这件事。
关于交易、自动交易系统和策略测试的论坛
程序之间的数据交换
fxsaber, 2018.11.21 13:12
可能有很多时间可以如此详细地描述各种互动的选择。不幸的是,我并不拥有这样的资源。
这里有一篇关于这个问题的文章,其中有一个完整的互动。每座建筑都是由砖块建成的,并用于特定的任务。所有可能的砖块都显示在该主题的开头。其余的就由建造者决定了。
这篇文章没有测试两个程序通过资源的通信,其中一个在测试器中。
工会有什么问题?请举一个例子。
这篇文章没有测试两个程序通过资源的通信,其中一个在测试器中。
阅读关于砖头的句子。
...
这篇文章是在向麻雀开炮。像许多文章一样。我宁愿自己解决这个问题,也不愿理解这篇文章。
一切都可以做得更容易和更清楚。但是,这篇文章是一个非常容易的地狱...
而且,如果你说你没有检查过测试器中的资源操作,那么这篇文章有什么用呢?
而且,如果你说你没有在测试器中检查过资源操作,这篇文章又有什么用呢?
退出了讨论。
这个解决方案有问题。也许我做错了什么。
简而言之。
StringToCharArray()函数只接受一个char数组。
ResourceCreate()函数只接受一个uint数组。
因此,我们需要一个中间环节,将char数组的内容(填充了转换后的字符串)改写成uint数组。
正常图表上的指标。