初学者的问题 MQL5 MT5 MetaTrader 5 - 页 577 1...570571572573574575576577578579580581582583584...1503 新评论 Andrey Koldorkin 2016.05.11 20:45 #5761 Artyom Trishkin: 好吧,我会把所有的东西组成一个函数,并在我需要的时候调用它--甚至在每一个tick(如果它是合理和必要的),或在一个新的蜡烛 开盘时--例如,每小时一次,如果我们在H1工作。有了这个功能,当然就很方便了。我已经弄清了代码。现在很清楚了。我将思考,如何把它带到我想要的那些目的,并理解,何时和在什么阶段采取必要的数据。 mila.com 2016.05.12 06:32 #5762 Koldun Zloy:如果它是彻头彻尾的 "鲁莽的高度",它就会被禁止。WinAPI极大地扩展了MQL的能力。而且即使没有Dll,你也可以做一些愚蠢的事情。这里是一个字符串传递到剪贴板的例子。 做得好,而且还有评论。 谢谢你。 下面是另一个问题。 是否有可能在给定的坐标上模拟鼠标点击? Alexey Volchanskiy 2016.05.12 08:44 #5763 mila.com: 很好,而且还带有评论。 谢谢你。 还有一个问题。 有没有可能在给定的坐标上对鼠标点击进行模拟? 如果你不需要从MQL做,看看AutoIT,你可以在那里做任何事情。该产品是免费的,你只需要一个DLL来与MQL互动。 Koldun Zloy 2016.05.12 16:06 #5764 mila.com: 很好,而且还带有评论。 谢谢你。 还有一个问题。 有没有可能在给定的坐标上对鼠标点击进行模拟?是的,我们可以。#define MK_LBUTTON 0x0001 #define WM_LBUTTONDOWN 0x0201 #define WM_LBUTTONUP 0x0202 struct POINT { int x; int y; }; #import "User32.dll" uint WindowFromPoint( int x, int y ); uint PostMessageW( uint hWnd, uint Msg, uint wParam, uint lParam ); int ScreenToClient( uint hWnd, POINT& lpPoint ); #import int x = 1000; // Экранные координаты int y = 350; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { uint hwnd = WindowFromPoint( x, y ); // Получаем дескриптор окна в нужном месте if( hwnd ){ POINT point; point.x = x; point.y = y; ScreenToClient( hwnd, point ); // Преобразуем экранные координаты в координаты рабочей области окна uint lParam = (point.y * 65536) + (point.x & 0xFFFF); // Упаковываем координаты в 32-разрядное целое PostMessageW( hwnd, WM_LBUTTONDOWN, MK_LBUTTON, lParam ); // Посылаем сообщения от "мыши" PostMessageW( hwnd, WM_LBUTTONUP, MK_LBUTTON, lParam ); } } Andrey Koldorkin 2016.05.12 16:09 #5765 Artyom Trishkin: 好吧,我将把所有的东西组成一个函数,并在我需要的时候调用它--在每一个tick(如果需要和合理)或在一个新的蜡烛 开盘时--例如,如果我们用H1工作,每小时一次。Artem,我的理解是正确的,如果我们有一个循环:for(int i=0; i<copy_bars; i++) 并且有一个循环for(int j=0; j<copy_bars; j++) 其中if(j==i) 继续; ,这将意味着计算是平行的,如果我们有大约5个蜡烛图,那么比较将继续进行。1与1--丢弃。1个带2,1个带3,1个带4,1个带5。然后一个周期将在哪里开始。2与1,2与3,2与4,2与5。等等。 会是这样的吗? Artyom Trishkin 2016.05.12 16:44 #5766 Andrey Koldorkin:Artem,我的理解是正确的,如果我们有一个循环:for(int i=0; i<copy_bars; i++) 并且有一个循环for(int j=0; j<copy_bars; j++) 其中if(j==i) 继续; ,这将意味着计数是平行的,如果我们有大约5个烛台,那么比较将继续。1与1--丢弃。1个带2,1个带3,1个带4,1个带5。然后一个周期将在哪里开始。2与1,2与3,2与4,2与5。等等。 会不会是一样的呢? 是的。 Andrey Koldorkin 2016.05.12 17:17 #5767 Artyom Trishkin: 是的。另一个问题:如果我们不需要比较当前的蜡烛,那么我们不需要从1而不是0开始计数吗?或者我们应该理解,这里的0是蜡烛1,1是蜡烛2,等等。 Artyom Trishkin 2016.05.12 17:50 #5768 Andrey Koldorkin:另一个问题:如果我们不需要比较当前的蜡烛,那么我们不需要从1而不是0开始计数吗?还是我们应该理解为这里的0是蜡烛1,1是蜡烛2,等等?这里零是数组的开始。而在数组中,我们写出从第一个到......的烛台,不是 "到",而是我们需要的数字。int copied=CopyRates(Symbol(),PERIOD_CURRENT,1,copy_bars,array);1是要复制的蜡烛图的数量,copy_bars是要复制的蜡烛图的数量。因此,array[]包含了索引为0的单元格中所需要的蜡烛图--1或1+copy_bars-1。 根据array[]的索引方向(ArraySetAsSeries()设置了索引方向,可以使用ArrayGetAsSeries()、ArrayIsSeries()检查)。 Andrey Koldorkin 2016.05.12 18:48 #5769 Artyom Trishkin:这里零是数组的开始。在数组中,我们将烛台从第一个写到...,不是 "到",而是我们需要的烛台数量。1是要复制的蜡烛图的数量,copy_bars是要复制的蜡烛图的数量。因此,array[]包含了索引为0的单元格中所需要的蜡烛--1或1+copy_bars-1。 根据array[]的索引方向(ArraySetAsSeries()设置了索引方向,可以用ArrayGetAsSeries()、ArrayIsSeries()检查)。这种编程。越是进入树林....我首先只是检查了它通过Alert显示的内容。似乎反之亦然,也就是说,最接近当前蜡烛的蜡烛数量最多。 然后我通过检查。bool series=ArrayIsSeries(dataCandle)。警报(系列)。而脚本显示为 "false"。根据我的逻辑,如果false在错误的一端,那么true就会在正确的一端。 我开了处方。ArraySetAsSeries (dataCandle, true); //改变方向bool series=ArrayIsSeries(dataCandle); //再次检查Alert (series); //在屏幕上写出结果。但之后我仍然得到 "假"。我的问题是什么? Artyom Trishkin 2016.05.12 18:54 #5770 Andrey Koldorkin:哦,这个编程。越是进入树林....我第一次检查只是通过Alert它发出的东西。结果是相反的,也就是说,最接近当前蜡烛的蜡烛有最大的数字。 然后我通过检查。bool series=ArrayIsSeries(dataCandle)。警报(系列)。而脚本显示为 "false"。根据我的逻辑,如果false在错误的一端,那么true就会在正确的一端。 我开了处方。ArraySetAsSeries (dataCandle, true); //改变方向bool series=ArrayIsSeries(dataCandle); //再次检查Alert (series); //在屏幕上写出结果。但之后我仍然得到 "假"。我的问题是什么?dataCandles是一个结构。我们写下历史上的蜡烛的数组--array[]。因此,我们需要把它作为一个时间序列,使其索引与图表上的蜡烛图索引相吻合。也就是说,数组[]的零格将对应于离当前日期最近的蜡烛图。即:1.将蜡烛图复制到数组array[]中,2.使其成为一个时间序列,然后将其中的数值读入结构中。你可以不使用array[]--直接从图表中写入数据到结构中,但我建议这样做是为了与Five兼容--它只允许在指标中使用high[i]、low[i]和其他数据直接复制,但在脚本或专家顾问中,我们必须首先将必要的历史区间复制到阵列中,我就是这样做的。 1...570571572573574575576577578579580581582583584...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
好吧,我会把所有的东西组成一个函数,并在我需要的时候调用它--甚至在每一个tick(如果它是合理和必要的),或在一个新的蜡烛 开盘时--例如,每小时一次,如果我们在H1工作。
有了这个功能,当然就很方便了。我已经弄清了代码。现在很清楚了。我将思考,如何把它带到我想要的那些目的,并理解,何时和在什么阶段采取必要的数据。
如果它是彻头彻尾的 "鲁莽的高度",它就会被禁止。
WinAPI极大地扩展了MQL的能力。而且即使没有Dll,你也可以做一些愚蠢的事情。
这里是一个字符串传递到剪贴板的例子。
做得好,而且还有评论。
谢谢你。
下面是另一个问题。
是否有可能在给定的坐标上模拟鼠标点击?
很好,而且还带有评论。
谢谢你。
还有一个问题。
有没有可能在给定的坐标上对鼠标点击进行模拟?
很好,而且还带有评论。
谢谢你。
还有一个问题。
有没有可能在给定的坐标上对鼠标点击进行模拟?
是的,我们可以。
好吧,我将把所有的东西组成一个函数,并在我需要的时候调用它--在每一个tick(如果需要和合理)或在一个新的蜡烛 开盘时--例如,如果我们用H1工作,每小时一次。
Artem,我的理解是正确的,如果我们有一个循环:for(int i=0; i<copy_bars; i++) 并且有一个循环for(int j=0; j<copy_bars; j++) 其中if(j==i) 继续; ,
这将意味着计算是平行的,如果我们有大约5个蜡烛图,那么比较将继续进行。
1与1--丢弃。
1个带2,1个带3,1个带4,1个带5。
然后一个周期将在哪里开始。
2与1,2与3,2与4,2与5。
等等。
会是这样的吗?
Artem,我的理解是正确的,如果我们有一个循环:for(int i=0; i<copy_bars; i++) 并且有一个循环for(int j=0; j<copy_bars; j++) 其中if(j==i) 继续; ,
这将意味着计数是平行的,如果我们有大约5个烛台,那么比较将继续。
1与1--丢弃。
1个带2,1个带3,1个带4,1个带5。
然后一个周期将在哪里开始。
2与1,2与3,2与4,2与5。
等等。
会不会是一样的呢?
是的。
另一个问题:如果我们不需要比较当前的蜡烛,那么我们不需要从1而不是0开始计数吗?
或者我们应该理解,这里的0是蜡烛1,1是蜡烛2,等等。
另一个问题:如果我们不需要比较当前的蜡烛,那么我们不需要从1而不是0开始计数吗?
还是我们应该理解为这里的0是蜡烛1,1是蜡烛2,等等?
这里零是数组的开始。而在数组中,我们写出从第一个到......的烛台,不是 "到",而是我们需要的数字。
1是要复制的蜡烛图的数量,copy_bars是要复制的蜡烛图的数量。
因此,array[]包含了索引为0的单元格中所需要的蜡烛图--1或1+copy_bars-1。 根据array[]的索引方向(ArraySetAsSeries()设置了索引方向,可以使用ArrayGetAsSeries()、ArrayIsSeries()检查)。
这里零是数组的开始。在数组中,我们将烛台从第一个写到...,不是 "到",而是我们需要的烛台数量。
1是要复制的蜡烛图的数量,copy_bars是要复制的蜡烛图的数量。
因此,array[]包含了索引为0的单元格中所需要的蜡烛--1或1+copy_bars-1。 根据array[]的索引方向(ArraySetAsSeries()设置了索引方向,可以用ArrayGetAsSeries()、ArrayIsSeries()检查)。
这种编程。越是进入树林....
我首先只是检查了它通过Alert显示的内容。似乎反之亦然,也就是说,最接近当前蜡烛的蜡烛数量最多。
然后我通过检查。
bool series=ArrayIsSeries(dataCandle)。
警报(系列)。
而脚本显示为 "false"。
根据我的逻辑,如果false在错误的一端,那么true就会在正确的一端。
我开了处方。
ArraySetAsSeries (dataCandle, true); //改变方向
bool series=ArrayIsSeries(dataCandle); //再次检查
Alert (series); //在屏幕上写出结果。
但之后我仍然得到 "假"。
我的问题是什么?
哦,这个编程。越是进入树林....
我第一次检查只是通过Alert它发出的东西。结果是相反的,也就是说,最接近当前蜡烛的蜡烛有最大的数字。
然后我通过检查。
bool series=ArrayIsSeries(dataCandle)。
警报(系列)。
而脚本显示为 "false"。
根据我的逻辑,如果false在错误的一端,那么true就会在正确的一端。
我开了处方。
ArraySetAsSeries (dataCandle, true); //改变方向
bool series=ArrayIsSeries(dataCandle); //再次检查
Alert (series); //在屏幕上写出结果。
但之后我仍然得到 "假"。
我的问题是什么?
dataCandles是一个结构。我们写下历史上的蜡烛的数组--array[]。因此,我们需要把它作为一个时间序列,使其索引与图表上的蜡烛图索引相吻合。也就是说,数组[]的零格将对应于离当前日期最近的蜡烛图。
即:1.将蜡烛图复制到数组array[]中,2.使其成为一个时间序列,然后将其中的数值读入结构中。
你可以不使用array[]--直接从图表中写入数据到结构中,但我建议这样做是为了与Five兼容--它只允许在指标中使用high[i]、low[i]和其他数据直接复制,但在脚本或专家顾问中,我们必须首先将必要的历史区间复制到阵列中,我就是这样做的。