初学者的问题 MQL4 MT4 MetaTrader 4 - 页 115 1...108109110111112113114115116117118119120121122...261 新评论 John Smith 2018.02.09 08:00 #1141 伙计们,这里有一个问题--我如何将变量值放入一维数组? 不要把它送去帮助--这样的问题没有例子。 假设有一个变量a,它在某些条件下发生变化。 我想用一个数组来存储这个变量的最后三个值。这在mql4中是如何实现的? 我在写int mas[3]。 mas[]=a; 在循环中,在改变a的条件之后。 编译器给出了']',但没有任何效果,尽管从逻辑上讲应该如此。- 表达式预期,它要我在mas[]=a的括号内放入一些未知的表达式。 MQL4是否有任何函数可以在每次循环迭代时为数组填充一个变量? Ivan Ivanov 2018.02.09 08:05 #1142 Igor Makanu:我很抱歉没有找到通信的开头,但我想立即建议你避免在其中加入复杂的条件和计算--这使得代码无法阅读,结果是使搜索逻辑错误变得复杂,我会这样写你的代码。如果你明白我的意思,你可以再修改一下我给你的代码,我的意思是把它放在一个单独的条件中,如果(OrderType()==OP_BUY....)那么,发现逻辑错误就会容易得多,我认为在每个OrderSend 之后插入 => 返回 或通过开关进行选择。 switch ( OrderType() ) { OP_BUY : { if (1) { .... break; } if (2) { .... break; } } OP_SELL : { if (3) { .... break; } if (4) { .... break; } } } Igor Makanu 2018.02.09 08:20 #1143 Vladimir Tkach:试着这样做,但并不奏效。 你的自定义指标 调用中的输入参数很少--算算晨平 指标中有多少个外部变量?(extern)--这就是你在使用iCustom时应该传递的参数数量。 Ivan Ivanov 2018.02.09 08:23 #1144 John Smith:.....当a发生变化时,我在条件后的循环中写int mas[3]=a;。 但没有任何效果,尽管从逻辑上讲应该如此。学会一步一步地做所有的行动,而不是一下子做完。 例子 : int mas[3]={0}; // инициализация масива ..... // основной код if ( найдена новая величина а ) { mas[2]=mas[1]; // самая старая величина а mas[1]=mas[0]; mas[0]=a; // новая величина а } ..... // основной код Vladimir Tkach 2018.02.09 08:43 #1145 Igor Makanu:你的自定义指标 调用中的输入参数很少--算算晨平 指标中有多少个外部变量?(extern)--这就是你在使用iCustom时应该传递的参数数量。我已经把它们都试过了。 我已经用另一种方式解决了这个问题。我在专家顾问中插入了指标的价格计算代码。 novichok2018 2018.02.09 08:52 #1146 Igor Makanu:代码的逻辑是一样的,但如果你把条件分割开来,就能更快地找到逻辑错误所在,在你的案例中,如果你把它放在一个单独的条件中,就能得到优化--条件将被检查一次而不是4次。 变成一个单独的条件,我们可以得到代码优化--条件将被检查一次,而不是像你的例子中那样检查4次。 检查专家顾问日志中的输出,使用 用于记录,这样你就可以看到哪个代码片段被执行了,有哪些参数。谢谢你的答复。将条件分割到极限。检查了有评论的逻辑。结果发现,平仓是基于第一个开仓的条件。这意味着,如果我们先用条件1开了买入或卖出,然后用同样的条件但用条件2开了第二个头寸,那么这个平仓条件就会被忽略,第二个头寸也会用条件1平仓,而不考虑其他神奇数字。我应该怎么做? Igor Makanu 2018.02.09 08:53 #1147 Vladimir Tkach:我已经把它们都看完了。 我已经用不同的方式解决了这个问题。我已将价格计算的代码从指标粘贴到专家顾问。我注意到iCustom()没有被正确调用,它应该是这样的。 min=iCustom(Symbol(),0,"Morning Flat",StartHour,EndHour,TargetLevel,UpColor,DnColor,TargetUpColor,TargetDnColor,1,0); 我在调用指标 时传递了7个参数,而你调用时只有3个参数 我将保留指标调用,但我将修改指标本身--从指标代码中删除外部变量和图形对象 novichok2018。我已经用评论检查了这个逻辑。事实证明,仓位的关闭是根据第一个开放仓位的条件进行的。祝贺你!你的方向是正确的,但在调试阶段,最好在日志中打印(Print()),而不是在注释中打印(Commetn())。 给我看看代码。 novichok2018 2018.02.09 09:07 #1148 Igor Makanu:所以,我注意到你没有正确调用iCustom(),它应该是这样的。 我在调用指标 时传递了7个参数,而你用3个参数调用了它 我将保留指标调用,但我将修改指标本身--从指标代码中删除外部变量和图形对象 祝贺你!你的方法是正确的,但在调试阶段,最好在日志中输出(Print()),而不是在注释中输出(Commetn())。 显示代码。 int total=OrdersTotal(); for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(TimeCurrent()>OrderOpenTime()+100) { if(OrderType()==OP_BUY) { if(OrderMagicNumber==101) { if(MathAbs(WPR1)<5) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); } if(OrderMagicNumber==111) { if(MathAbs(WPR1)<20) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); } } if(OrderType()==OP_SELL) { if(OrderMagicNumber==222) { if(MathAbs(WPR1)>97.55) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); } if(OrderMagicNumber==201) { if(MathAbs(WPR1)>96) rez = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); } } } } continue; } 我已经删除了打印的内容。 Igor Makanu 2018.02.09 09:24 #1149 novichok2018: 我已经删除了打印的内容。我不知道你代码的所有逻辑,但在每次订单 关闭后,你肯定需要通过break退出循环;在下一个tick上,你需要再次根据你的条件检查订单--我不知道订单关闭后OrderSelect() 是如何表现的--如果订单关闭,那么选择什么,还是出现错误? 基本上,你的问题是,你想在一个循环中一次性检查和关闭所有的东西。 switch() 或制作一个关闭订单的函数(有现成的订单函数 https://www.mql5.com/ru/forum/131859/page2#434206 )。 或者在你的代码中,在订单关闭后使用断点。 Полезные функции от KimIV 2008.03.11www.mql5.com В этой теме я буду выкладывать коды своих функций на языке программирования MQL4, приводить примеры их использования и отвечать на вопросы, связанн... novichok2018 2018.02.09 09:44 #1150 Igor Makanu:我不知道你的代码的所有逻辑,但是在每次关闭订单 后,你肯定需要通过break退出循环;在下一个tick你需要再次检查你的条件--我不知道订单关闭后OrderSelect() 是如何表现的--如果订单被关闭,那么选择什么,或者会发生错误? 基本上,你的问题是,你想在一个循环中一次性检查和关闭所有的东西。 switch() 或制作一个关闭订单的函数(有现成的订单函数 https://www.mql5.com/ru/forum/107476 )。 或者在你的代码中,在订单关闭后使用断点。谢谢你。打破似乎有帮助。我们将看到接下来会发生什么。 1...108109110111112113114115116117118119120121122...261 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
伙计们,这里有一个问题--我如何将变量值放入一维数组?
不要把它送去帮助--这样的问题没有例子。
假设有一个变量a,它在某些条件下发生变化。
我想用一个数组来存储这个变量的最后三个值。这在mql4中是如何实现的?
我在写int mas[3]。
mas[]=a; 在循环中,在改变a的条件之后。
编译器给出了']',但没有任何效果,尽管从逻辑上讲应该如此。- 表达式预期,它要我在mas[]=a的括号内放入一些未知的表达式。
MQL4是否有任何函数可以在每次循环迭代时为数组填充一个变量?
我很抱歉没有找到通信的开头,但我想立即建议你避免在其中加入复杂的条件和计算--这使得代码无法阅读,结果是使搜索逻辑错误变得复杂,我会这样写你的代码。
如果你明白我的意思,你可以再修改一下我给你的代码,我的意思是把它放在一个单独的条件中,如果(OrderType()==OP_BUY....)
那么,发现逻辑错误就会容易得多,我认为
在每个OrderSend 之后插入 => 返回
或通过开关进行选择。
试着这样做,但并不奏效。
你的自定义指标 调用中的输入参数很少--算算晨平 指标中有多少个外部变量?(extern)--这就是你在使用iCustom时应该传递的参数数量。
.....
当a发生变化时,我在条件后的循环中写int mas[3]=a;。
但没有任何效果,尽管从逻辑上讲应该如此。
学会一步一步地做所有的行动,而不是一下子做完。
例子 :
你的自定义指标 调用中的输入参数很少--算算晨平 指标中有多少个外部变量?(extern)--这就是你在使用iCustom时应该传递的参数数量。
我已经把它们都试过了。
我已经用另一种方式解决了这个问题。我在专家顾问中插入了指标的价格计算代码。
代码的逻辑是一样的,但如果你把条件分割开来,就能更快地找到逻辑错误所在,在你的案例中,如果你把它放在一个单独的条件中,就能得到优化--条件将被检查一次而不是4次。
变成一个单独的条件,我们可以得到代码优化--条件将被检查一次,而不是像你的例子中那样检查4次。
检查专家顾问日志中的输出,使用
用于记录,这样你就可以看到哪个代码片段被执行了,有哪些参数。
谢谢你的答复。将条件分割到极限。检查了有评论的逻辑。结果发现,平仓是基于第一个开仓的条件。这意味着,如果我们先用条件1开了买入或卖出,然后用同样的条件但用条件2开了第二个头寸,那么这个平仓条件就会被忽略,第二个头寸也会用条件1平仓,而不考虑其他神奇数字。我应该怎么做?
我已经把它们都看完了。
我已经用不同的方式解决了这个问题。我已将价格计算的代码从指标粘贴到专家顾问。
我注意到iCustom()没有被正确调用,它应该是这样的。
我在调用指标 时传递了7个参数,而你调用时只有3个参数
我将保留指标调用,但我将修改指标本身--从指标代码中删除外部变量和图形对象
我已经用评论检查了这个逻辑。事实证明,仓位的关闭是根据第一个开放仓位的条件进行的。
祝贺你!你的方向是正确的,但在调试阶段,最好在日志中打印(Print()),而不是在注释中打印(Commetn())。
给我看看代码。
所以,我注意到你没有正确调用iCustom(),它应该是这样的。
我在调用指标 时传递了7个参数,而你用3个参数调用了它
我将保留指标调用,但我将修改指标本身--从指标代码中删除外部变量和图形对象
祝贺你!你的方法是正确的,但在调试阶段,最好在日志中输出(Print()),而不是在注释中输出(Commetn())。
显示代码。
我已经删除了打印的内容。
我已经删除了打印的内容。
我不知道你代码的所有逻辑,但在每次订单 关闭后,你肯定需要通过break退出循环;在下一个tick上,你需要再次根据你的条件检查订单--我不知道订单关闭后OrderSelect() 是如何表现的--如果订单关闭,那么选择什么,还是出现错误?
基本上,你的问题是,你想在一个循环中一次性检查和关闭所有的东西。
switch()
或制作一个关闭订单的函数(有现成的订单函数 https://www.mql5.com/ru/forum/131859/page2#434206 )。
或者在你的代码中,在订单关闭后使用断点。
我不知道你的代码的所有逻辑,但是在每次关闭订单 后,你肯定需要通过break退出循环;在下一个tick你需要再次检查你的条件--我不知道订单关闭后OrderSelect() 是如何表现的--如果订单被关闭,那么选择什么,或者会发生错误?
基本上,你的问题是,你想在一个循环中一次性检查和关闭所有的东西。
switch()
或制作一个关闭订单的函数(有现成的订单函数 https://www.mql5.com/ru/forum/107476 )。
或者在你的代码中,在订单关闭后使用断点。
谢谢你。打破似乎有帮助。我们将看到接下来会发生什么。