错误、漏洞、问题 - 页 2101 1...209420952096209720982099210021012102210321042105210621072108...3184 新评论 Alexey Viktorov 2018.01.09 19:16 #21001 damirqa:你好,我从https://www.mql5.com/ru/articles/100,开始学习MQL5。我启动了代码,得到了错误4756。 我翻阅了文档,也没有好转。我想我应该从简单的东西开始(警报/打印......)。其中一个最重要的功能是OrderSend。我开始在论坛/文档中搜索如何使用OrderSend。我发现这篇文章https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions,并 找到了开设买入头寸的代码。我得到了错误4756和检索码10030。我理解10030--它是OrderSend属性,但我没有理解这个属性应该如何使用(我看了别人的代码),它主要用于什么。然后我打开https://www.mql5.com/ru/docs/trading/ordersend, 复制了代码,运行它,工作正常。 但我仍然不明白为什么会出现错误4756,以及如何摆脱它,还有10030。看了一下之间的代码和这个。在我看来它们几乎是一样的,我没有看到这些错误出现在哪里(4756和10030)。请指证和解释 结构中的一个字段没有被填入。而且这还 不够,但也不是这样的错误。即时执行在即时执行模式(以流价交易的模式)下开仓的交易指令。9个字是必须的。行动标志量价格俚语tp偏差类型Type_filling你还可以指定魔法和评论字段。市场执行在市场执行模式下建立头寸的交易指令。需要指定5个字段。行动标志量类型Type_filling你还可以指定魔法和评论字段。 Konstantin 2018.01.11 11:53 #21002 1736年有什么更新,里面有什么内容,我在哪里可以看到? Vladimir Pastushak 2018.01.12 08:21 #21003 我建议给一个机会,以编程方式确定在图表上绘制哪个指标缓冲区。假设一个交易员开始自己的指标,我们不知道有多少缓冲区是用来计算的,有多少是用来在图表上 绘制指标 的。通过以下方式解决自定义指标intChartIndicatorGet( longchart_id,// 图表标识符intsub_window// 子窗口的编号const string indicator_shortname // 短的指标名称);我们还可以请求画图缓冲区的数组intChartIndicatorGet( longchart_id,// 图表标识符intsub_window//窗口编号const string indicator_shortname // 短的指标名称int & IndicatorVisualBuffer[] // 绘图缓冲区编号...)。这将扩大与安装在图表上的未知指标一起工作的可能性... Alexey Viktorov 2018.01.12 08:32 #21004 Vladimir Pastushak:我建议给一个机会,以编程方式确定在图表上绘制哪个指标缓冲区。假设一个交易员开始他的指标,我们不知道有多少缓冲区是用来计算的,有多少是用来在图表上 绘制指标 的。通过以下方式向指标寻址intChartIndicatorGet( longchart_id,// 图表IDintsub_window// 子窗口的编号const string indicator_shortname // 短的指标名称);我们也可以要求绘图缓冲区阵列intChartIndicatorGet( longchart_id,// 图表标识符intsub_window//窗口编号const string indicator_shortname // 短的指标名称int & IndicatorVisualBuffer[] // 绘图缓冲区编号...)。这将增加与安装在图表中的未知指标合作的可能性...它的回报是什么? int ChartIndicatorGet( long chart_id, // идентификатор графика int sub_window // номер подокна const string indicator_shortname // короткое имя индикатора );添加它又有什么用呢?你想添加一个输入参数,并接收相同的指标句柄作为响应...如果你不介意的话,需要什么目的呢?我不是在讽刺。毕竟,在我看来,如果有人提出建议,你就应该为建议的必要性提供令人信服的论据。 Vladimir Pastushak 2018.01.12 08:37 #21005 Alexey Viktorov:它的回报是什么 添加它有什么好处?你建议添加一个输入参数,并得到相同的指标手柄作为回应...如果这并不困难,那么这种必要性是出于什么目的出现的呢?这个问题是没有讽刺意味的。毕竟,在我看来,如果提供了某种东西,就有必要给出令人信服的论据,说明提供这种东西的必要性。用户把任何指标。专家顾问会自动找到它并使用缓冲数据来接收信号。现在我们必须使用iCustom,如果我们能写出参数列表,这里的问题是缓冲区....。可以通过复制来计算缓冲区的数量,但要了解哪一个是不可能的。 Alexey Viktorov 2018.01.12 08:50 #21006 Vladimir Pastushak: 用户放置任何指标。专家顾问会自动找到它,并使用缓冲数据来获得信号。现在我们必须使用iCustom,如果我们能写出参数列表,这里有缓冲区的问题....。用Copy程序计算缓冲区的数量是可能的,但不可能了解哪一个缓冲区在画图 ...为什么不可能呢?缓冲区INDICATOR_CALCULATIONS可以通过iCustom()取出来吗?这是一个有趣的问题,但不是在这个主题中讨论它。我个人怀疑它是否能在某种程度上改善或简化程序员的工作。这些指标太不同了,其应用条件也太不同了。然后,我们将不得不要求能够确定图形绘制的类型 和其他一些事情,我们的内部要求会像滚雪球一样越滚越大。 Vladimir Pastushak 2018.01.12 09:41 #21007 Alexey Viktorov:为什么不可能呢?是否可以通过iCustom()到达INDICATOR_CALCULATIONS 缓冲区?这个问题很有意思,但不是在这个主题下讨论。我个人怀疑它是否能以某种方式改善或促进程序员的工作。有太多不同的指标和太多不同的应用条件。然后,我们将不得不要求能够确定图形绘制的类型,然后是其他一些东西,要求会像雪球一样越滚越大。理论上,默认写在指标中的东西,我不是说程序员的代码,应该是可以从外部 ...缓冲区的数量、绘图类型、颜色和其他标准 ... Alexey Viktorov 2018.01.15 11:08 #21008 这是我遇到的问题。我决定使用ChartID除以1000或10000的余数作为魔法,这其实并不重要。但由于某些原因,在不同的ChartID()下,除法的剩余部分突然变得一样了。问题:为什么?检查脚本/********************Script program start function*******************/ void OnStart() { long chartID = ChartID(), d = 100000; Print("ChartID - ", ChartID()); Print("fmod(ChartID(), ", d, ") = ", fmod(ChartID(), d)); }/*******************************************************************/ 结果2018.01.15 13:01:45.881 Script 00 EURUSD,M15: removed 2018.01.15 13:01:45.881 00 EURUSD,M15: uninit reason 0 2018.01.15 13:01:45.881 00 EURUSD,M15: fmod(ChartID(), 100000) = 74912 2018.01.15 13:01:45.881 00 EURUSD,M15: ChartID - 131472503841474907 2018.01.15 13:01:45.881 00 EURUSD,M15: initialized 2018.01.15 13:01:45.871 Script Test\00 EURUSD,M15: loaded successfully 2018.01.15 13:01:40.361 Script 00 EURUSD,H1: removed 2018.01.15 13:01:40.361 00 EURUSD,H1: uninit reason 0 2018.01.15 13:01:40.361 00 EURUSD,H1: fmod(ChartID(), 100000) = 74912 2018.01.15 13:01:40.361 00 EURUSD,H1: ChartID - 131472503841474908 2018.01.15 13:01:40.361 00 EURUSD,H1: initialized 2018.01.15 13:01:40.351 Script Test\00 EURUSD,H1: loaded successfully 我预计会分别看到74907和74908,因为其余的划分应该是一样的。我也在等待这个问题的答案。 关于交易、自动交易系统和策略测试的论坛 虫子,虫子,问题 Alexey Viktorov, 2018.01.09 14:21 在MT5测试器中,"输入字段 "对象OBJ_EDIT不允许编辑其中的值。这是它的设计方式还是一个错误?在终端和MT4测试器中,它是可编辑的,但在MT5测试器中,它不想编辑,创建对象 时以编程方式输入的值完全消失了。 fxsaber 2018.01.15 11:53 #21009 Alexey Viktorov:但由于某些原因,不同的ChartID()突然产生了相同的除法残差。问题:为什么?因为输入fmod是双倍的。Double不能存储大量的整数。例如,这是你的案子。Print(DoubleToString((double)131472503841474907, 0)); // 131472503841474912 做到这一点。long fmod( const long Value, const long Value2 ) { return(Value % Value2); }以float为例,你可以很快理解double的特殊性。#define PRINT(A) Print(#A + " = " + (string)(A)) void OnStart() { for (int i = 0; i < INT_MAX; i++) if ((int)(float)i != i) { PRINT(i); PRINT((float)i); PRINT((double)i); break; } }结果i = 16777217 (float)i = 16777216.0 (double)i = 16777217.0SZY Double不会丢失整个内部范围的信息,而长时间则不然。 Alexey Viktorov 2018.01.15 12:11 #21010 fxsaber:因为输入的fmod是双倍的。Double不能存储大量的整数。例如,你的案子。做到这一点。当然,我现在会检查这个样本,但我也有一个这样的检查代码/********************Script program start function*******************/ void OnStart() { long chartID = ChartID(), d=100000; Print("ChartID - ", ChartID()); Print("fmod(ChartID(), ", d, ") = ", fmod(ChartID(), d)); printf("LONG_MAX = %I64d",LONG_MAX); printf("DBL_MAX = %.16e",DBL_MAX); Print("DBL_MAX-LONG_MAX = ", DBL_MAX-LONG_MAX); }/*******************************************************************/ 结果是2018.01.15 14:07:20.440 Script 00 EURUSD,M15: removed 2018.01.15 14:07:20.440 00 EURUSD,M15: uninit reason 0 2018.01.15 14:07:20.440 00 EURUSD,M15: DBL_MAX-LONG_MAX = 17976931348623157081452742373170435679807 0567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 2018.01.15 14:07:20.440 00 EURUSD,M15: DBL_MAX = 1.7976931348623157 e+308 2018.01.15 14:07:20.440 00 EURUSD,M15: LONG_MAX = 9223372036854775807 2018.01.15 14:07:20.440 00 EURUSD,M15: fmod(ChartID(), 100000) = 74912 2018.01.15 14:07:20.440 00 EURUSD,M15: ChartID - 131472503841474907 2018.01.15 14:07:20.440 00 EURUSD,M15: initialized 2018.01.15 14:07:20.430 Script Test\00 EURUSD,M15: loaded successfully 它表示不应该有值截断。但在这里,我检查了这个变体,并略微改变了建议的内容/********************Script program start function*******************/ void OnStart() { long chartID = ChartID(), d=100000; Print("ChartID - ", ChartID()); Print("fmod(ChartID(), ", d, ") = ", (long)fmod(ChartID(), d)); Print("ChartID() % ", d, " = ", ChartID() % d); }/*******************************************************************/ 并得到了预期的变体。2018.01.15 14:17:51.301 Script 00 EURUSD,M15: removed 2018.01.15 14:17:51.301 00 EURUSD,M15: uninit reason 0 2018.01.15 14:17:51.301 00 EURUSD,M15: ChartID() % 100000 = 74907 2018.01.15 14:17:51.301 00 EURUSD,M15: fmod(ChartID(), 100000) = 74912 2018.01.15 14:17:51.301 00 EURUSD,M15: ChartID - 131472503841474907 2018.01.15 14:17:51.301 00 EURUSD,M15: initialized 2018.01.15 14:17:51.291 Script Test\00 EURUSD,M15: loaded successfully 另一个问题出现了。 如果MathMod以及fmod 在 两个数字相除后 返回实数余数。而根据文件规定的百分比余下的分钟数=时间%60。 为什么会有区别? 1...209420952096209720982099210021012102210321042105210621072108...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好,我从https://www.mql5.com/ru/articles/100,开始学习MQL5。我启动了代码,得到了错误4756。 我翻阅了文档,也没有好转。我想我应该从简单的东西开始(警报/打印......)。其中一个最重要的功能是OrderSend。我开始在论坛/文档中搜索如何使用OrderSend。我发现这篇文章https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions,并 找到了开设买入头寸的代码。我得到了错误4756和检索码10030。我理解10030--它是OrderSend属性,但我没有理解这个属性应该如何使用(我看了别人的代码),它主要用于什么。然后我打开https://www.mql5.com/ru/docs/trading/ordersend, 复制了代码,运行它,工作正常。
但我仍然不明白为什么会出现错误4756,以及如何摆脱它,还有10030。
看了一下之间的代码
和这个。
在我看来它们几乎是一样的,我没有看到这些错误出现在哪里(4756和10030)。请指证和解释
即时执行
在即时执行模式(以流价交易的模式)下开仓的交易指令。9个字是必须的。
你还可以指定魔法和评论字段。
市场执行
在市场执行模式下建立头寸的交易指令。需要指定5个字段。
你还可以指定魔法和评论字段。
1736年有什么更新,里面有什么内容,我在哪里可以看到?
我建议给一个机会,以编程方式确定在图表上绘制哪个指标缓冲区。
假设一个交易员开始自己的指标,我们不知道有多少缓冲区是用来计算的,有多少是用来在图表上 绘制指标 的。
通过以下方式解决自定义指标
intChartIndicatorGet(
longchart_id,// 图表标识符
intsub_window// 子窗口的编号
const string indicator_shortname // 短的指标名称
);
我们还可以请求画图缓冲区的数组
intChartIndicatorGet(
longchart_id,// 图表标识符
intsub_window//窗口编号
const string indicator_shortname // 短的指标名称
int & IndicatorVisualBuffer[] // 绘图缓冲区编号...)。
这将扩大与安装在图表上的未知指标一起工作的可能性...
我建议给一个机会,以编程方式确定在图表上绘制哪个指标缓冲区。
假设一个交易员开始他的指标,我们不知道有多少缓冲区是用来计算的,有多少是用来在图表上 绘制指标 的。
通过以下方式向指标寻址
intChartIndicatorGet(
longchart_id,// 图表ID
intsub_window// 子窗口的编号
const string indicator_shortname // 短的指标名称
);
我们也可以要求绘图缓冲区阵列
intChartIndicatorGet(
longchart_id,// 图表标识符
intsub_window//窗口编号
const string indicator_shortname // 短的指标名称
int & IndicatorVisualBuffer[] // 绘图缓冲区编号...)。
这将增加与安装在图表中的未知指标合作的可能性...
它的回报是什么?
添加它又有什么用呢?你想添加一个输入参数,并接收相同的指标句柄作为响应...
如果你不介意的话,需要什么目的呢?我不是在讽刺。毕竟,在我看来,如果有人提出建议,你就应该为建议的必要性提供令人信服的论据。
它的回报是什么
添加它有什么好处?你建议添加一个输入参数,并得到相同的指标手柄作为回应...
如果这并不困难,那么这种必要性是出于什么目的出现的呢?这个问题是没有讽刺意味的。毕竟,在我看来,如果提供了某种东西,就有必要给出令人信服的论据,说明提供这种东西的必要性。
用户把任何指标。
专家顾问会自动找到它并使用缓冲数据来接收信号。
现在我们必须使用iCustom,如果我们能写出参数列表,这里的问题是缓冲区....。
可以通过复制来计算缓冲区的数量,但要了解哪一个是不可能的。
用户放置任何指标。
专家顾问会自动找到它,并使用缓冲数据来获得信号。
现在我们必须使用iCustom,如果我们能写出参数列表,这里有缓冲区的问题....。
用Copy程序计算缓冲区的数量是可能的,但不可能了解哪一个缓冲区在画图 ...
为什么不可能呢?缓冲区INDICATOR_CALCULATIONS可以通过iCustom()取出来吗?
这是一个有趣的问题,但不是在这个主题中讨论它。我个人怀疑它是否能在某种程度上改善或简化程序员的工作。这些指标太不同了,其应用条件也太不同了。然后,我们将不得不要求能够确定图形绘制的类型 和其他一些事情,我们的内部要求会像滚雪球一样越滚越大。
为什么不可能呢?是否可以通过iCustom()到达INDICATOR_CALCULATIONS 缓冲区?
这个问题很有意思,但不是在这个主题下讨论。我个人怀疑它是否能以某种方式改善或促进程序员的工作。有太多不同的指标和太多不同的应用条件。然后,我们将不得不要求能够确定图形绘制的类型,然后是其他一些东西,要求会像雪球一样越滚越大。
理论上,默认写在指标中的东西,我不是说程序员的代码,应该是可以从外部 ...缓冲区的数量、绘图类型、颜色和其他标准 ...
这是我遇到的问题。
我决定使用ChartID除以1000或10000的余数作为魔法,这其实并不重要。
但由于某些原因,在不同的ChartID()下,除法的剩余部分突然变得一样了。问题:为什么?
检查脚本
结果
我预计会分别看到74907和74908,因为其余的划分应该是一样的。
我也在等待这个问题的答案。
关于交易、自动交易系统和策略测试的论坛
虫子,虫子,问题
Alexey Viktorov, 2018.01.09 14:21
在MT5测试器中,"输入字段 "对象OBJ_EDIT不允许编辑其中的值。这是它的设计方式还是一个错误?
在终端和MT4测试器中,它是可编辑的,但在MT5测试器中,它不想编辑,创建对象 时以编程方式输入的值完全消失了。
但由于某些原因,不同的ChartID()突然产生了相同的除法残差。问题:为什么?
因为输入fmod是双倍的。Double不能存储大量的整数。例如,这是你的案子。
做到这一点。
以float为例,你可以很快理解double的特殊性。
结果
SZY Double不会丢失整个内部范围的信息,而长时间则不然。
因为输入的fmod是双倍的。Double不能存储大量的整数。例如,你的案子。
做到这一点。
当然,我现在会检查这个样本,但我也有一个这样的检查代码
结果是
它表示不应该有值截断。
但在这里,我检查了这个变体,并略微改变了建议的内容
并得到了预期的变体。
另一个问题出现了。
如果MathMod以及fmod 在 两个数字相除后 返回实数余数。而根据文件规定的百分比
余下的分钟数=时间%60。
为什么会有区别?