初学者的问题 MQL4 MT4 MetaTrader 4 - 页 202 1...195196197198199200201202203204205206207208209...261 新评论 Vladimir Simakov 2020.05.11 08:58 #2011 Yurij Kozhevnikov: 如果我对替代原则理解正确的话,情况似乎是这样的。 大括号后有额外的分号。而且也不清楚还指的是什么。 遗憾的是,显然没有简单的方法来自动进行宏观扩展,看看会发生什么。除非我可以自己编造剧本。 谢谢你!宏中的while后面没有分号是有原因的。 宏是一件好事,但在他们的情况下,善与恶之间的界限甚至比女人还要细)))。你必须非常、非常小心地对待他们。是的,在我的例子中,不是';',而恰恰是else,它开始指的是if,这在宏中,在你去掉;之后。 我非常善于使用宏,所以对于像你这样的情况,我已经放弃了使用宏,大约有1.5年了,这是最佳状态。 inline bool CheckRead(){ ... } if (!CheckRead()) return; Yurij Kozhevnikov 2020.05.11 09:11 #2012 除了我在这里找不到任何关于内联的信息。 而且我不懂C++。 Viktor Timofeev 2020.05.12 16:13 #2013 下午好!请帮助 有一个相当简单的代码来打开和修改一个订单。订单发送(OrderSend)、订单选择(OrderSelect)和订单修改(OrderModify)这三个函数 被放入一个循环中,两次尝试之间有一个小的延迟。为了尽量减少通信错误,等等。 以下奇怪的事情发生了:订单正常打开,随后成功修改StopLoss和成功修改TakeProfit。但当我设置TP时,StopLoss是无效的。我无法理解其中的原因。 这里是代码的这一部分。 send = 5; //设置订单的最大尝试次数 tick=0。 sendschet=0; //尝试计数器 while(!tick && sendschet<=send) { tick=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Bid,150,0.0,0.0,komm,MagNum,0,Yellow)。 sendschet++; Sleep(1000); //延迟1秒后再进行下一次尝试 } select = 5; //选择一个订单的最大尝试次数 slschet=0; //选择订单的尝试计数器 while(!OrderSelect(tick,SELECT_BY_TICKET) && slschet<=select) { slschet++; Sleep(500); //延迟0.5秒后再进行下一次尝试 } 如果(slschet<select) //尝试的次数少于最大值,这意味着订单被成功选择。 { 修改 = 5; //修改订单的最大尝试次数。 mdschet=0。 while(!OrderModify(tick,OrderOpenPrice(),NormalizeDouble(SL,Digits), OrderTakeProfit(),0,Yellow) && mdschet<=modify) { mdschet++; Sleep(500); //延迟0.5秒后再进行下一次尝试。 } *这里一切都很好--SL已经设定好了 mdschet=0; //在改变TP之前重置计数器。 while(!OrderModify(tick,OrderOpenPrice(),OrderStopLoss(), NormalizeDouble(TP,Digits),0,Yellow) && mdschet<=modify) { mdschet++; 睡眠(500)。 } } *其中TP是正常设置的,但SL已经等于0.0。因此,事实证明OrderStopLoss()等于0.0。 不过,订单的选择并没有改变。 如果我们在设置SL和TP之间再添加一次OrderSelect,一切似乎都能正常进行。但这与逻辑相悖。 提前感谢您在此问题上的帮助。 Questions from Beginners MQL4 手动交易自动化的三个方面。 第 1 部分: MetaEditor:模板作为支点 Oleg_Ko 2020.05.12 21:38 #2014 下午好! 请帮助我处理改变动态数组 的大小问题。 比方说,我正在设置一个数组。 int DB[][8]; 然后在循环中的第一个子程序中,可能会有几次(对此没有疑问 -- 到目前为止,它是按预期工作的)。 ushort i = 0; ArrayResize(DB,i+1); 在下一个子程序中,我将在循环的第一个维度中添加元素。我不知道提前了多少。我知道这比你事先声明尺寸要慢。但我认为每年最多增加500人不会有什么影响。 问题是,我如何在这个子程序中找出数组的现有大小?要把它作为一个基础尺寸,并在其上添加一个新的值。 取ArraySize()并除以8?还是有什么其他功能更适合我? 提前感谢! Artyom Trishkin 2020.05.13 04:37 #2015 Oleg_Ko: 下午好! 请帮助我处理改变动态数组 的大小问题。 比方说,我正在设置一个数组。 然后在循环中的第一个子程序中,可能会有几次(对此没有疑问 -- 到目前为止,它是按预期工作的)。 在下一个子程序中,我将在循环的第一个维度中添加元素。我不知道提前了多少。我知道这比你事先声明尺寸要慢。但我认为每年最多增加500人不会有什么影响。 问题是,我如何在这个子程序中找出数组的现有大小?要把它作为一个基础尺寸,并在其上添加一个新的值。 取ArraySize()并除以8?还是有什么其他功能更适合我? 提前感谢! ArrayRange() Документация по MQL5: Операции с массивами / ArrayRange www.mql5.com Операции с массивами / ArrayRange - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Oleg_Ko 2020.05.13 12:43 #2016 Artyom Trishkin: ArrayRange() Artem,谢谢你。 radywek 2020.05.14 02:36 #2017 下午好。 很久没有在MT4上交易了,决定再次尝试。以前用过这个脚本(附后),但现在不能运行了,请看看是哪里出了问题。 附加的文件: RiskAdvisor.mq4 12 kb Nauris Zukas 2020.05.15 09:39 #2018 Nauris Zukas: 你好! 有什么方法可以立即知道CopyHigh在任何时间段内数组的元素数量 吗? 我自己回答,也许有人会通过搜索引擎遇到这个问题。 SeriesInfoInteger(symbol_name,timeframe,SERIES_BARS_COUNT); Artyom Trishkin 2020.05.15 16:07 #2019 Nauris Zukas:我自己回答,也许有人会通过搜索引擎遇到这个问题。 还有Bars(),iBars()。 Nauris Zukas 2020.05.16 07:09 #2020 Artyom Trishkin: 还有Bars(), iBars()。 使用Bars(),你不能找出任何时间段 内的数组元素的 数量,而只能找出当前图形中的数量。 1...195196197198199200201202203204205206207208209...261 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果我对替代原则理解正确的话,情况似乎是这样的。
大括号后有额外的分号。而且也不清楚还指的是什么。
遗憾的是,显然没有简单的方法来自动进行宏观扩展,看看会发生什么。除非我可以自己编造剧本。
谢谢你!宏中的while后面没有分号是有原因的。
宏是一件好事,但在他们的情况下,善与恶之间的界限甚至比女人还要细)))。你必须非常、非常小心地对待他们。是的,在我的例子中,不是';',而恰恰是else,它开始指的是if,这在宏中,在你去掉;之后。
我非常善于使用宏,所以对于像你这样的情况,我已经放弃了使用宏,大约有1.5年了,这是最佳状态。
除了我在这里找不到任何关于内联的信息。
而且我不懂C++。
下午好!请帮助
有一个相当简单的代码来打开和修改一个订单。订单发送(OrderSend)、订单选择(OrderSelect)和订单修改(OrderModify)这三个函数 被放入一个循环中,两次尝试之间有一个小的延迟。为了尽量减少通信错误,等等。
以下奇怪的事情发生了:订单正常打开,随后成功修改StopLoss和成功修改TakeProfit。但当我设置TP时,StopLoss是无效的。我无法理解其中的原因。
这里是代码的这一部分。
send = 5; //设置订单的最大尝试次数
tick=0。
sendschet=0; //尝试计数器
while(!tick && sendschet<=send)
{
tick=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Bid,150,0.0,0.0,komm,MagNum,0,Yellow)。
sendschet++;
Sleep(1000); //延迟1秒后再进行下一次尝试
}
select = 5; //选择一个订单的最大尝试次数
slschet=0; //选择订单的尝试计数器
while(!OrderSelect(tick,SELECT_BY_TICKET) && slschet<=select)
{
slschet++;
Sleep(500); //延迟0.5秒后再进行下一次尝试
}
如果(slschet<select) //尝试的次数少于最大值,这意味着订单被成功选择。
{
修改 = 5; //修改订单的最大尝试次数。
mdschet=0。
while(!OrderModify(tick,OrderOpenPrice(),NormalizeDouble(SL,Digits), OrderTakeProfit(),0,Yellow)
&& mdschet<=modify)
{
mdschet++;
Sleep(500); //延迟0.5秒后再进行下一次尝试。
}
*这里一切都很好--SL已经设定好了
mdschet=0; //在改变TP之前重置计数器。
while(!OrderModify(tick,OrderOpenPrice(),OrderStopLoss(), NormalizeDouble(TP,Digits),0,Yellow)
&& mdschet<=modify)
{
mdschet++;
睡眠(500)。
}
}
*其中TP是正常设置的,但SL已经等于0.0。因此,事实证明OrderStopLoss()等于0.0。
不过,订单的选择并没有改变。
如果我们在设置SL和TP之间再添加一次OrderSelect,一切似乎都能正常进行。但这与逻辑相悖。
提前感谢您在此问题上的帮助。
下午好!
请帮助我处理改变动态数组 的大小问题。
比方说,我正在设置一个数组。
然后在循环中的第一个子程序中,可能会有几次(对此没有疑问 -- 到目前为止,它是按预期工作的)。
在下一个子程序中,我将在循环的第一个维度中添加元素。我不知道提前了多少。我知道这比你事先声明尺寸要慢。但我认为每年最多增加500人不会有什么影响。
问题是,我如何在这个子程序中找出数组的现有大小?要把它作为一个基础尺寸,并在其上添加一个新的值。
取ArraySize()并除以8?还是有什么其他功能更适合我?
提前感谢!
下午好!
请帮助我处理改变动态数组 的大小问题。
比方说,我正在设置一个数组。
然后在循环中的第一个子程序中,可能会有几次(对此没有疑问 -- 到目前为止,它是按预期工作的)。
在下一个子程序中,我将在循环的第一个维度中添加元素。我不知道提前了多少。我知道这比你事先声明尺寸要慢。但我认为每年最多增加500人不会有什么影响。
问题是,我如何在这个子程序中找出数组的现有大小?要把它作为一个基础尺寸,并在其上添加一个新的值。
取ArraySize()并除以8?还是有什么其他功能更适合我?
提前感谢!
ArrayRange()
ArrayRange()
下午好。
很久没有在MT4上交易了,决定再次尝试。以前用过这个脚本(附后),但现在不能运行了,请看看是哪里出了问题。
你好!
有什么方法可以立即知道CopyHigh在任何时间段内数组的元素数量 吗?
我自己回答,也许有人会通过搜索引擎遇到这个问题。
我自己回答,也许有人会通过搜索引擎遇到这个问题。
还有Bars(), iBars()。
使用Bars(),你不能找出任何时间段 内的数组元素的 数量,而只能找出当前图形中的数量。