新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 893 1...886887888889890891892893894895896897898899900...1953 新评论 Artyom Trishkin 2019.06.19 10:02 #8921 Seric29: 有一个这样的问题。因此,有一个循环 第1个断点 不是位于循环的第一个小括号内,而是位于嵌套在小括号内的小括号内。 第2个断点 嵌套在小括号内,甚至更深。正如我所理解的,在这种情况下,break 根本不起作用,说实话,我不明白它是否起作用,但程序挂起了,并进行了不必要的反复。为了退出一个有很多条件的循环,我给循环添加了一个退出标志。也许在我看来,它不起作用,谁在这个问题上思考? 如果代码的样式正常,你马上就能看到你把它变成了一个垃圾。 for(...........) { if(.........) { //что-то делаем } else if(.........) { break } else { break; } } 完全一样。 for(...........) { if(.........) { //что-то делаем } else break; } jaffer wilson 2019.06.19 10:04 #8922 无法更新蜡烛图和添加刻度线。以下是指标的代码。 long id_; const SYMBOL SYMB ( _Symbol + "Tick_exp2" ); int OnInit () { if (SYMB.IsExist ()) { SYMB.CloneProperties (); int rates_total = candles; MqlRates Rates [], Replace []; int total_candles = 0 ; for ( int i = CopyRates ( _Symbol , PERIOD_M1 , 0 , rates_total, Rates) - 1 ; i> = 0 &&! IsStopped (); i--) { MqlTick Ticks [], ReplaceTicks []; int vv = CopyTicksRange ( _Symbol , Ticks, COPY_TICKS_ALL , ulong (Rates [i] .time) * 1000 , ulong (Rates [i] .time + 61 ) * 1000 ); total_candles + = vv; ArrayResize (Replace, vv- 1 ); ArrayResize (ReplaceTicks, vv- 1 ); for ( int ii = 0 ; ii <vv- 1 &&! IsStopped (); ii ++) { ReplaceTicks [ii] .bid = Ticks [ii] .bid; ReplaceTicks [ii] .ask = Ticks [ii] .ask; ReplaceTicks [ii] .flags = TICK_FLAG_BID ; ReplaceTicks [ii] .last = Ticks [ii + 1 ] .bid; ReplaceTicks [ii] .time = Ticks [ii] .time; ReplaceTicks [ii] .time_msc = Ticks [ii] .time_msc; ReplaceTicks [ii] .volume = Ticks [ii] .volume; ReplaceTicks [ii] .volume_real = Ticks [ii] .volume_real; Replace [ii] .time = Ticks [ii] .time; Replace [ii] .open = Ticks [ii] .bid; Replace [ii] .close = Ticks [ii + 1 ] .bid; if (Ticks [ii] .bid> Ticks [ii + 1 ] .bid) {Replace [ii] .high = Ticks [ii] .bid; Replace [ii] .low = Ticks [ii + 1 ] .bid;} else {Replace [ii] .high = Ticks [ii + 1 ]. bid; Replace [ii] .low = Ticks [ii] .bid;} Replace [ii] .tick_volume = long (Ticks [ii] .volume); Replace [ii] .real_volume = long (Ticks [ii] .volume_real); Replace [ii] .spread = int ( fabs (Ticks [ii] .bid-Ticks [ii + 1 ] .bid) * 100000 ); } CustomTicksAdd (SYMB.Name, ReplaceTicks); CustomRatesUpdate (SYMB.Name, Replace); } if (SYMB.On ()) { id_ = ChartOpen (SYMB.Name, PERIOD_CURRENT ); ChartSetInteger (id_, CHART_AUTOSCROLL , 1 ); ChartSetInteger (id_, CHART_MODE , 2 ); ChartSetInteger (id_, CHART_COLOR_CHART_LINE , clrYellow ); ChartSetInteger (id_, CHART_SHIFT , 0 , ChartGetInteger ( ChartID (), CHART_SHIFT )); } Print("Всего свечей обновлено :=> ",total_candles); } return ( INIT_SUCCEEDED ); } 然后,该指标被应用于检查投注。 int OnInit () { return ( INIT_SUCCEEDED ); } Int OnCalculate ( const int rates_total, const int prev_calculated, const datetime & time [], const double & open [], const double & high [], const double & low [], const double & close [], const long & tick_volume [], const long & volume [], const int & spread []) { if (newbar.IsNewBar ( "EURUSD" , PERIOD_M1 )) { Print("Цены доступны от индикатора :=> ", rates_total); } return (rates_total); } 退出。如果蜡烛图是完全更新的,为什么rate_total只显示50%的蜡烛图?请告诉我。 附加的文件: Symbol.mqh 7 kb TradeAlgorithms.mqh 179 kb Seric29 2019.06.19 10:50 #8923 Artyom Trishkin: 在正常的代码风格下,马上就能看出这是胡说八道。 所以在我的情况下,它可能无法正常工作,真的可能无法退出循环,或者无论如何它都会退出条件所在的主体中最接近的循环? Artyom Trishkin 2019.06.19 11:02 #8924 Seric29: 所以在我的情况下,它可能无法正常工作,可能不会真正退出循环,或者无论如何都会退出最接近的循环,其主体包含条件? 我没有看到循环条件--你那里有一个破折号。 for(...........) Seric29 2019.06.19 12:13 #8925 Artyom Trishkin: 我没有看到循环条件--你那里有一条虚线。 这不是关于循环条件的问题,而是关于在if里面可能有更多的if,而其中一个if要产生退出,所以问题是,条件的深度是否影响循环是否会离开? for(...........) { if(........) {if(.....)break; else if(.....) { if(....)break;}}else break; } Igor Makanu 2019.06.19 13:24 #8926 Seric29: 所以问题是:条件的深度是否影响循环是否会离开? 否则,break将打破最接近的循环体,即当前执行的循环体,你使用if()多少次并不重要,iF()的数量和深度也不重要。 好吧,这句话的一部分,如果你想通过不同的条件来打破一个循环体,有时使用while()和一个循环中断标志会更容易,就像这样。 int i=Bars-1; bool calc = true; while(i>=0 && calc) { if(...) calc = false; else { .... if(...) calc = false; } i--; } Seric29 2019.06.19 17:46 #8927 Igor Makanu: 不受影响,break将打破最接近的循环体,即目前正在执行的循环体,你使用if()的次数并不重要,iF()的数量和它们的深度都不重要。 好吧,这句话的一部分,如果你想通过不同的条件来打破一个循环体,有时使用while()和一个循环中断标志会更容易,像这样。 我知道我在说什么了。嗯,是的,它可能很复杂,有时真的最好使用一个旗子。我只是在做实验,我看到它挂了,我以为它可能无休止地循环,谢谢你的回答。 Konstantin Nikitin 2019.06.19 21:07 #8928 Seric29: 有一个这样的问题。因此,有一个循环 第1个断点 不是位于循环的第一个小括号内,而是位于嵌套在小括号内的小括号内。 第2个断点 嵌套在小括号内,甚至更深。正如我所理解的,在这种情况下,break 根本不起作用,说实话,我不明白它是否起作用,但程序挂起了,并进行了不必要的反复。为了退出一个有很多条件的循环,我给循环添加了一个退出标志。也许在我看来,它不起作用,谁在这个问题上想过? for(...........) { if(.........) { /* что-то делаем */ } else { // Непонятно зачем? Если при любом варианте выходим из цикла if(.........) break; else break; } } 我将这样做 for(...........) { if(/* не соответствует условие */) break; /* что-то делаем */ } 虽然也许我没有完全理解你的想法。 Seric29 2019.06.19 22:57 #8929 Konstantin Nikitin: 我将这样做 虽然,也许我不太明白你的想法的意义。最主要的是不要被迷惑。有些情况下,你在一个循环内打开另一个循环,需要同时退出两个循环,但是mql4没有提供这个,只能通过一个标志,C++有goto操作符,我想知道它是如何工作的。 Artyom Trishkin 2019.06.19 23:24 #8930 Seric29: 最主要的是不要被迷惑。有些情况下,你在一个循环内打开另一个循环,需要同时退出两个循环,但是mql4没有提供这个,只能通过一个标志,C++有goto操作符,我想知道它是如何工作的。 你在一个函数中做所有的循环,如果你需要退出任何一个嵌套的--甚至是第三百个--返回。 1...886887888889890891892893894895896897898899900...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
有一个这样的问题。因此,有一个循环
第1个断点 不是位于循环的第一个小括号内,而是位于嵌套在小括号内的小括号内。 第2个断点 嵌套在小括号内,甚至更深。正如我所理解的,在这种情况下,break 根本不起作用,说实话,我不明白它是否起作用,但程序挂起了,并进行了不必要的反复。为了退出一个有很多条件的循环,我给循环添加了一个退出标志。也许在我看来,它不起作用,谁在这个问题上思考?
如果代码的样式正常,你马上就能看到你把它变成了一个垃圾。
完全一样。
无法更新蜡烛图和添加刻度线。
以下是指标的代码。
然后,该指标被应用于检查投注。
退出。
如果蜡烛图是完全更新的,为什么rate_total只显示50%的蜡烛图?
请告诉我。
在正常的代码风格下,马上就能看出这是胡说八道。
所以在我的情况下,它可能无法正常工作,真的可能无法退出循环,或者无论如何它都会退出条件所在的主体中最接近的循环?
所以在我的情况下,它可能无法正常工作,可能不会真正退出循环,或者无论如何都会退出最接近的循环,其主体包含条件?
我没有看到循环条件--你那里有一个破折号。
for(...........)
我没有看到循环条件--你那里有一条虚线。
这不是关于循环条件的问题,而是关于在if里面可能有更多的if,而其中一个if要产生退出,所以问题是,条件的深度是否影响循环是否会离开?
所以问题是:条件的深度是否影响循环是否会离开?
否则,break将打破最接近的循环体,即当前执行的循环体,你使用if()多少次并不重要,iF()的数量和深度也不重要。
好吧,这句话的一部分,如果你想通过不同的条件来打破一个循环体,有时使用while()和一个循环中断标志会更容易,就像这样。
不受影响,break将打破最接近的循环体,即目前正在执行的循环体,你使用if()的次数并不重要,iF()的数量和它们的深度都不重要。
好吧,这句话的一部分,如果你想通过不同的条件来打破一个循环体,有时使用while()和一个循环中断标志会更容易,像这样。
我知道我在说什么了。嗯,是的,它可能很复杂,有时真的最好使用一个旗子。我只是在做实验,我看到它挂了,我以为它可能无休止地循环,谢谢你的回答。
有一个这样的问题。因此,有一个循环
第1个断点 不是位于循环的第一个小括号内,而是位于嵌套在小括号内的小括号内。 第2个断点 嵌套在小括号内,甚至更深。正如我所理解的,在这种情况下,break 根本不起作用,说实话,我不明白它是否起作用,但程序挂起了,并进行了不必要的反复。为了退出一个有很多条件的循环,我给循环添加了一个退出标志。也许在我看来,它不起作用,谁在这个问题上想过?
虽然也许我没有完全理解你的想法。
我将这样做
虽然,也许我不太明白你的想法的意义。
最主要的是不要被迷惑。有些情况下,你在一个循环内打开另一个循环,需要同时退出两个循环,但是mql4没有提供这个,只能通过一个标志,C++有goto操作符,我想知道它是如何工作的。
最主要的是不要被迷惑。有些情况下,你在一个循环内打开另一个循环,需要同时退出两个循环,但是mql4没有提供这个,只能通过一个标志,C++有goto操作符,我想知道它是如何工作的。
你在一个函数中做所有的循环,如果你需要退出任何一个嵌套的--甚至是第三百个--返回。