任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 640 1...633634635636637638639640641642643644645646647...1178 新评论 tuviran 2014.06.24 13:51 #6391 同志们好!MT5有这样奇妙和非常有用的工具 "脉冲艾略特波"和 "纠正艾略特波"。问题是:我可以将这些工具从MT5整合到MT4吗? 我在MT4上交易,转到MT5上进行分析不是很方便。或者:有什么其他方法可以解决这个问题? [删除] 2014.06.24 14:42 #6392 下午好,该语言有这样一个市场参数:MarketInfo(Symbol(),MODE_TICKVALUE)。你能概括地描述一下这个数值是如何计算的吗? Boris 2014.06.24 22:13 #6393 mql_writer: 下午好,该语言有这样一个市场参数:MarketInfo(Symbol(),MODE_TICKVALUE)。你能大致描述一下这个数值是如何计算的吗? 这是在1.00手时存款货币的最小价格变化(1点)的价值!计算非常简单:1.00(手)/1.36030(欧元的当前报价)=0.7351欧元。 Vitalie Postolache 2014.06.24 22:19 #6394 borilunad: 这是在1.00手时存款货币的最小价格变化(1点)的价值!计算非常简单:1.00(手)/1.36030(欧元的当前报价)=0.7351欧元。除了通过marketinfo的请求以某种方式返回所有货币对的10,除了日元对))))。 你从哪里得到这个公式的? Boris 2014.06.24 22:37 #6395 evillive: 除了通过marketinfo查询,除了日元对,所有货币对都以某种方式返回10 )))) 你从哪里得到这个公式的? 我自己做所有的公式,现在我把它从我的图表中拿出来。而这个是来自Doki。mode_tickvalue。16符号价格 在存款货币中的最小变化 大小计算结果不共享。 Vitalie Postolache 2014.06.24 22:57 #6396 borilunad: 我自己做了所有的公式,现在已经从我的图表中获得了这些公式。而这是来自码头的。MODE_TICKVALUE16存款货币的最小工具价格变化的大小计算结果不共享。 虽然对于1欧元的手来说,1个点真的要花10美元,所以它是可以的。而且计算结果不应该只与那些羞于展示的人分享。是的,在这种情况下,公式应该是正确的 -MODE_TICKVALUE = MODE_LOTSIZE * MODE_TICKSIZE - 对于欧元, 十字星和日元的公式有点不同。 [删除] 2014.06.24 22:57 #6397 Top2n: 说实话,我还没有想出如何应用它。还有一毫米的距离,在快完成的时候停下来是很可惜的。任务,如果对象时间(第二参数+3600秒>当前)||(第一参数时间-第二参数时间)<3600秒,则不将价格写入数组。)为什么要模拟一个错误?错误是它的信号,由于与系统限制/故障有关的某些原因,算法未能执行并获得具有某些(自然是有限的,但-)保证的结果。FillAndPrint()函数只是雄辩地显示了错误情况的含义和不含义。当一个错误发生时,它甚至不尝试打印结果。如果没有错误,结果就可以信任。这就是 "出错/不出错 "的逻辑应该如何建立。但这里我们需要修改算法:我们还需要应用一个额外的过滤器。所以必须这样做。/******************************************************************************/ bool AddValueIfFiltered(double &array[], const string name) { #define MIN_SECS_BETWEEN_PRICE1_AND_PRICE2 3600 #define MAX_SECS_AFTER_PRICE2 3600 const datetime dt1 = (datetime)ObjectGet(name, OBJPROP_TIME1); const datetime dt2 = (datetime)ObjectGet(name, OBJPROP_TIME2); const datetime dt = TimeCurrent(); Print("name = ", name, ", dt = ", dt, ", dt1 = ", dt1, ", dt2 = ", dt2); if (dt <= dt2 + MAX_SECS_AFTER_PRICE2 && dt1 + MIN_SECS_BETWEEN_PRICE1_AND_PRICE2 <= dt2) { // Фильтруем, прежде чем попытаться добавить if (!AddValue(array, ObjectGetValueByShift(name, 1))) { // Пытаемся добавить return false; // Ошибка, значение не добавлено } } return true; // Нет ошибки, значение, если удовлетворило условию фильтра, добавлено к массиву } /******************************************************************************/ bool AddValueIfFound(double &array[], const string name) { const int type = ObjectType(name); if (type == OBJ_TREND) { switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switch case Goldenrod: case Gainsboro: case White: if (!AddValueIfFiltered(array, name)) { // Пропускаем через фильтр return false; } } } return true; // Нет ошибки, значение, если найдено, добавлено к массиву }首先,我们通过对象类型和参数进行 "过滤",从所有可用的对象中只选择我们需要的对象,然后我们再应用一个额外的过滤器。这大致是一个人的做法。这就是一个人要做的事,对吗?对于这些小的子任务,我们需要一个单独的函数。数字不应该出现在表达式中,除非在非常特殊的情况下,例如,如果有必要进行翻倍,而这种翻倍是在算法的本质上。那么数字2就可以直接在表达式中使用。而在其他这种非常罕见的情况下。在其他情况下,应使用助记符。首先,它们极大地提高了人们对某一地点发生的事情的理解,因此有助于减少犯错的概率。其次,数值本身设置在一个地方,必要时很容易改变,与在算法中反复使用数字的情况相比,不使用助记符就要在算法的几个地方纠正数字,就不可能出错。运行的结果。02:08:46 Script 2 EURUSDm,H1: loaded successfully 02:08:46 2 EURUSDm,H1: initialized 02:08:46 2 EURUSDm,H1: Sell: 02:08:46 2 EURUSDm,H1: name = downtrendline1, dt = 2014.06.24 22:09:02, dt1 = 2014.06.24 10:00:00, dt2 = 2014.06.24 17:00:00 02:08:46 2 EURUSDm,H1: Найдено объектов: 0 02:08:46 2 EURUSDm,H1: Buy: 02:08:46 2 EURUSDm,H1: name = uptrendline0, dt = 2014.06.24 22:09:02, dt1 = 2014.06.23 09:00:00, dt2 = 2014.06.24 16:00:00 02:08:46 2 EURUSDm,H1: Найдено объектов: 0 02:08:46 2 EURUSDm,H1: uninit reason 0 02:08:46 Script 2 EURUSDm,H1: removed没有发现任何一个物体。将两个助记符的值增加10倍,达到36000(10小时),然后再运行。02:09:03 Script 2 EURUSDm,H1: loaded successfully 02:09:03 2 EURUSDm,H1: initialized 02:09:03 2 EURUSDm,H1: Sell: 02:09:03 2 EURUSDm,H1: name = downtrendline1, dt = 2014.06.24 22:09:14, dt1 = 2014.06.24 10:00:00, dt2 = 2014.06.24 17:00:00 02:09:03 2 EURUSDm,H1: Найдено объектов: 0 02:09:03 2 EURUSDm,H1: Buy: 02:09:03 2 EURUSDm,H1: name = uptrendline0, dt = 2014.06.24 22:09:14, dt1 = 2014.06.23 09:00:00, dt2 = 2014.06.24 16:00:00 02:09:03 2 EURUSDm,H1: Найдено объектов: 1 02:09:03 2 EURUSDm,H1: Price[0] = 1.35869 02:09:03 2 EURUSDm,H1: uninit reason 0 02:09:03 Script 2 EURUSDm,H1: removed一个趋势已经 "通过 "了过滤。我们现在将第一个助记符的值恢复到3600,并运行它。02:09:12 Script 2 EURUSDm,H1: loaded successfully 02:09:12 2 EURUSDm,H1: initialized 02:09:12 2 EURUSDm,H1: Sell: 02:09:12 2 EURUSDm,H1: name = downtrendline1, dt = 2014.06.24 22:09:26, dt1 = 2014.06.24 10:00:00, dt2 = 2014.06.24 17:00:00 02:09:12 2 EURUSDm,H1: Найдено объектов: 1 02:09:12 2 EURUSDm,H1: Price[0] = 1.36152 02:09:12 2 EURUSDm,H1: Buy: 02:09:12 2 EURUSDm,H1: name = uptrendline0, dt = 2014.06.24 22:09:26, dt1 = 2014.06.23 09:00:00, dt2 = 2014.06.24 16:00:00 02:09:12 2 EURUSDm,H1: Найдено объектов: 1 02:09:12 2 EURUSDm,H1: Price[0] = 1.35869 02:09:12 2 EURUSDm,H1: uninit reason 0 02:09:12 Script 2 EURUSDm,H1: removed我们可以看到,现在两条趋势线都已经 "通过 "过滤。顺便说一下,我建议以这种方式调试程序的所有分支(部分),而不仅仅是一个分支。为了帮助你在某种程度上将其正式化,我将尝试以这种方式解释。一个方案显然像一个计划。计划中的每个主要项目都可以分解为较小的子计划项目。小的变成更小的。最小的子计划的点被直接执行。每个计划、子计划,甚至最小的子计划的点都对应着方案中的功能。最小的子计划中的项目对应于只调用系统函数的 "结束 "函数,甚至根本不调用这些函数,例如,AddValue()或DiffInSecs()就是上面讨论的例子。上面的子计划项目对应于调用实现下面子计划项目的函数。在上面讨论的中,这些是MassTrendNumber(), AddValueIfFound(), AddValueIfFiltered()。"低级 "函数不应调用 "高级 "函数,而 "高级 "函数基本上不应向下跳几级,即只应调用基本上在下面一级的函数。这一规则对 "低级 "比对 "高级 "要严格得多。试着把你的程序组织成由这种树状结构连接的(短)函数,在谁调用谁的意义上建立你的程序。这个程序有一棵退化的树:一个分支会 "分支 "好几次。而且它的 "分支 "不是两个小分支,而是一个。但可以看到 "高级 "函数持续调用 "低级 "函数这一点。在这次修改中,我在这个结构中又插入了一个层次,即另一个 "非分支分支"--AddValueIfFiltered()。 KRAB 2014.06.24 23:05 #6398 对不起,我没有直接看到这个主题。https://www.mql5.com/ru/forum/152102 我有 一个问题 Vitalie Postolache 2014.06.24 23:38 #6399 borilunad: 一切都是正确的!对于4位数的报价,它总是1,而对于5位数的报价,它现在是10,因为有10倍的点(而且更浅)。而最小刻度线的值应该从当前价格计算出来我现在有4位数,在Ewardollar上,1手1个点要10美元,一直都是这样。对于十字架,费用将从8到16,公式在那里有点复杂。例如,对于欧元英镑,marketinfo已经返回16.984,英镑-美元汇率=1.6984,也就是说,1个点的欧元英镑价值1英镑,乘以英镑-美元的点值,总是10.0(100000*0.0001=10.0或100000*0.00010=10.0--随你喜欢)。只有当你的账户是美元时,所有这些计算才是正确的。在这种情况下,对于xUSD(EURUSD,GBPUSD等),tickvalue = lot*point = 100000*0.0001 = 10.0对于USDx (USDCHF, USDJPY等) tickvalue = lot*point/Bid = 100000*0.01/101.93 = 9.8107对于xUSD/yUSD (EURGBP) tickvalue = Bid(yUSD)*lot*point = 1.6980*100000*0.0001 = 16.98对于交叉盘xUSD/USDy (EURJPY) tickvalue = lot*point/Bid(USDy) = 100000*0.01/101.91=9.8126 Any rookie question, so 为别人的叔叔工作。下一步是什么? 讨论 Boris 2014.06.24 23:46 #6400 evillive: 我现在有4位数,在Ewardollar上,1手1个点要10美元,一直都是这样。对于十字架,费用将从8到16,公式在那里有点复杂。例如,对于欧元英镑,marketinfo返回了16.984,evodollar的汇率=1.3604,英镑-美元的汇率=1.6984,也就是说,欧元英镑的1点值1英镑,乘以英镑-美元的点值,总是10.0(100000*0.0001=10.0或100000*0.00010=10.0--随人喜欢)。 我的是简单而实用的!而在有4位数报价的时候,我还没有写程序,所以我无法判断。:)晚安! 1...633634635636637638639640641642643644645646647...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
同志们好!
MT5有这样奇妙和非常有用的工具 "脉冲艾略特波"和 "纠正艾略特波"。
问题是:我可以将这些工具从MT5整合到MT4吗?
我在MT4上交易,转到MT5上进行分析不是很方便。
或者:有什么其他方法可以解决这个问题?
下午好,该语言有这样一个市场参数:MarketInfo(Symbol(),MODE_TICKVALUE)。你能大致描述一下这个数值是如何计算的吗?
这是在1.00手时存款货币的最小价格变化(1点)的价值!计算非常简单:1.00(手)/1.36030(欧元的当前报价)=0.7351欧元。
这是在1.00手时存款货币的最小价格变化(1点)的价值!计算非常简单:1.00(手)/1.36030(欧元的当前报价)=0.7351欧元。
除了通过marketinfo的请求以某种方式返回所有货币对的10,除了日元对))))。
你从哪里得到这个公式的?
除了通过marketinfo查询,除了日元对,所有货币对都以某种方式返回10 ))))
你从哪里得到这个公式的?
我自己做所有的公式,现在我把它从我的图表中拿出来。
而这个是来自Doki。
mode_tickvalue。
16
符号价格 在存款货币中的最小变化 大小
计算结果不共享。
我自己做了所有的公式,现在已经从我的图表中获得了这些公式。
而这是来自码头的。
MODE_TICKVALUE
16
存款货币的最小工具价格变化的大小
计算结果不共享。
虽然对于1欧元的手来说,1个点真的要花10美元,所以它是可以的。
而且计算结果不应该只与那些羞于展示的人分享。
是的,在这种情况下,公式应该是正确的 -MODE_TICKVALUE = MODE_LOTSIZE * MODE_TICKSIZE - 对于欧元, 十字星和日元的公式有点不同。
说实话,我还没有想出如何应用它。还有一毫米的距离,在快完成的时候停下来是很可惜的。
任务,如果对象时间(第二参数+3600秒>当前)||(第一参数时间-第二参数时间)<3600秒,则不将价格写入数组。)
为什么要模拟一个错误?
错误是它的信号,由于与系统限制/故障有关的某些原因,算法未能执行并获得具有某些(自然是有限的,但-)保证的结果。FillAndPrint()函数只是雄辩地显示了错误情况的含义和不含义。当一个错误发生时,它甚至不尝试打印结果。如果没有错误,结果就可以信任。这就是 "出错/不出错 "的逻辑应该如何建立。
但这里我们需要修改算法:我们还需要应用一个额外的过滤器。
所以必须这样做。
首先,我们通过对象类型和参数进行 "过滤",从所有可用的对象中只选择我们需要的对象,然后我们再应用一个额外的过滤器。这大致是一个人的做法。这就是一个人要做的事,对吗?
对于这些小的子任务,我们需要一个单独的函数。
数字不应该出现在表达式中,除非在非常特殊的情况下,例如,如果有必要进行翻倍,而这种翻倍是在算法的本质上。那么数字2就可以直接在表达式中使用。而在其他这种非常罕见的情况下。
在其他情况下,应使用助记符。首先,它们极大地提高了人们对某一地点发生的事情的理解,因此有助于减少犯错的概率。其次,数值本身设置在一个地方,必要时很容易改变,与在算法中反复使用数字的情况相比,不使用助记符就要在算法的几个地方纠正数字,就不可能出错。
运行的结果。
没有发现任何一个物体。将两个助记符的值增加10倍,达到36000(10小时),然后再运行。
一个趋势已经 "通过 "了过滤。我们现在将第一个助记符的值恢复到3600,并运行它。
我们可以看到,现在两条趋势线都已经 "通过 "过滤。顺便说一下,我建议以这种方式调试程序的所有分支(部分),而不仅仅是一个分支。
为了帮助你在某种程度上将其正式化,我将尝试以这种方式解释。一个方案显然像一个计划。
计划中的每个主要项目都可以分解为较小的子计划项目。小的变成更小的。最小的子计划的点被直接执行。
每个计划、子计划,甚至最小的子计划的点都对应着方案中的功能。最小的子计划中的项目对应于只调用系统函数的 "结束 "函数,甚至根本不调用这些函数,例如,AddValue()或DiffInSecs()就是上面讨论的例子。上面的子计划项目对应于调用实现下面子计划项目的函数。在上面讨论的中,这些是MassTrendNumber(), AddValueIfFound(), AddValueIfFiltered()。"低级 "函数不应调用 "高级 "函数,而 "高级 "函数基本上不应向下跳几级,即只应调用基本上在下面一级的函数。这一规则对 "低级 "比对 "高级 "要严格得多。
试着把你的程序组织成由这种树状结构连接的(短)函数,在谁调用谁的意义上建立你的程序。
这个程序有一棵退化的树:一个分支会 "分支 "好几次。而且它的 "分支 "不是两个小分支,而是一个。但可以看到 "高级 "函数持续调用 "低级 "函数这一点。在这次修改中,我在这个结构中又插入了一个层次,即另一个 "非分支分支"--AddValueIfFiltered()。
https://www.mql5.com/ru/forum/152102 我有 一个问题
一切都是正确的!对于4位数的报价,它总是1,而对于5位数的报价,它现在是10,因为有10倍的点(而且更浅)。而最小刻度线的值应该从当前价格计算出来
我现在有4位数,在Ewardollar上,1手1个点要10美元,一直都是这样。对于十字架,费用将从8到16,公式在那里有点复杂。
例如,对于欧元英镑,marketinfo已经返回16.984,英镑-美元汇率=1.6984,也就是说,1个点的欧元英镑价值1英镑,乘以英镑-美元的点值,总是10.0(100000*0.0001=10.0或100000*0.00010=10.0--随你喜欢)。
只有当你的账户是美元时,所有这些计算才是正确的。
在这种情况下,对于xUSD(EURUSD,GBPUSD等),tickvalue = lot*point = 100000*0.0001 = 10.0
对于USDx (USDCHF, USDJPY等) tickvalue = lot*point/Bid = 100000*0.01/101.93 = 9.8107
对于xUSD/yUSD (EURGBP) tickvalue = Bid(yUSD)*lot*point = 1.6980*100000*0.0001 = 16.98
对于交叉盘xUSD/USDy (EURJPY) tickvalue = lot*point/Bid(USDy) = 100000*0.01/101.91=9.8126
我现在有4位数,在Ewardollar上,1手1个点要10美元,一直都是这样。对于十字架,费用将从8到16,公式在那里有点复杂。
例如,对于欧元英镑,marketinfo返回了16.984,evodollar的汇率=1.3604,英镑-美元的汇率=1.6984,也就是说,欧元英镑的1点值1英镑,乘以英镑-美元的点值,总是10.0(100000*0.0001=10.0或100000*0.00010=10.0--随人喜欢)。
我的是简单而实用的!而在有4位数报价的时候,我还没有写程序,所以我无法判断。:)
晚安!