新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 26

 
trader781:

一旦你清理了你的代码,它对你来说将更有可读性,更不用说需要了解你的逻辑的其他人了。这就是所有的虫子都会被看到的地方。

好了,这样好些了吗?
现在,删除不必要的成对的大括号,并将其余部分正常地安排在块中,你会看到你在逻辑上的缺陷。
 
Artyom Trishkin:
现在去掉多余的成对的大括号,将其余部分正常地排列成块,你会发现你的逻辑有缺陷。
多出来的是什么?
 
trader781:
哪些是多余的?
你的代码中有很多不必要的括号--使用造型工具,你会立即看到不必要的空配对大括号。
 
Artyom Trishkin:
你的代码中有很多不必要的大括号--用样式器处理 代码,你会立即看到多余的空对大括号。
已完成
附加的文件:
 
trader781:
已完成
我稍后再看--至少需要四个小时......
 
trader781:
1.count++; // 从程序开始算起的刻度

更好的方法是:如果(count<=20)count++; - 如果你只需要到21岁,为什么还要继续计算?

2.
   if(count>20) //  если количество тиков больше начинаем работу ... и дальше код эксперта
     {
      if(Bars<801 || (IsTradeAllowed()==false)) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
         Print("Нет достаточного количества баров или торговля на текущем инструменте запрещена");
      return;
     }

这里是假山。这将只检查条数并在count>20时打印,其余的代码将在count<=20时工作

3.

if(OrderSymbol()==Symbol() && OrderType()<2)
            continue;

如果你只需要考虑市场的(这也是你对进一步代码的期望),你根本不需要继续

4.

         if(y==true && (OrderType()==0)) //+-----покупка
           {
            dummy=(OrderClose(OrderTicket(),OrderLots(),Bid,0,White));

              {
               if((dummy==true) && ((OrderSelect(i,SELECT_BY_POS,MODE_TRADES))==false))

                  PlaySound("music");
               Sleep(20000);
               PlaySound("music");
               Sleep(20000);
               PlaySound("music");
               Sleep(20000);
               dummy=false;
               ExpertRemove();
              }
           }

它关闭了一个订单,并消除了自己?如果有更多的人呢?而我们有整整一分钟的时间来睡觉。

我没有看上面的代码,还没有地方可以测试。

 

1 好的,我会修正它

2 这是不对的,以下区块在count<20 时不应该工作

3 好的,我会改正的

4 是的,这是一分钟,但只有在当前符号没有更多市场订单的情况下才应启动它。我试图通过订单选择 的负面结果来实现它,这就是为什么我们应该在某个地方设置返回,但在void OnTick()中的返回看起来并不那么好。同样,如果我们有大量的所有符号的订单,OrdersTotal()会给出错误的结果。

 
trader781:

2是不行的,当count<20 时,以下的块不应该工作

然后我们需要在区块后添加else return

4 是的,是一分钟,但只有在当前符号没有更多的市场订单时,才应启动它。我曾试图通过订单选择 的负面结果来实现它,这就是为什么我们应该在某个地方设置返回,而在void OnTick()中的返回看起来并不是很好。同样,如果我们在所有符号上有很多订单,OrdersTotal()会给出错误的结果。

为什么我们需要三种声音?

好吧,我们可以分两个阶段做所有事情:在第一个循环中,你关闭订单,在下一个循环中,你重新计算所有市场订单,检查是否还有剩余的订单,如果没有,就播放扇形音乐。

但我仍然不明白,在订单结束后,音乐有什么诀窍。好吧,你可以向日记本打印,或向邮件发送信息,或向你的智能手机发送通知,但为什么你要把EA变成一个音乐盒?
 
Vitalie Postolache:

然后你应该在else return 块之后添加一个return

为什么我们需要三倍的声音?

但你可以分两步完成所有工作:在第一个循环中,你关闭订单,在下一个循环中,你重新计算所有市场订单,检查是否有未关闭的订单,如果没有,就播放大合唱。

我仍然不明白,当订单被关闭时,音乐的诀窍是什么。好吧,我们可以把它打印到杂志上,把信息发送到邮件上或通知到智能手机上,但为什么我们要把我们的EA变成一个音乐盒呢?

你如何分离这些周期?

我如何将声音绑定到最后关闭的订单? 因为如果没有订单,专家顾问就不会触发声音。

最后一件事:我对现在的音乐很满意

 
trader781:

我如何分离周期?

如何将声音与最后关闭的声音绑定? 因为如果没有订单,专家顾问将无法工作。

最后,音乐变体暂时很适合我。

你说的 "分开 "是什么意思?我们不需要分离任何东西。 我们只需要两个循环(它们几乎是一样的),但一个有OrderClose(),另一个有订单的计数器。顺序选择 标准是一样的。如果计数器为=0,所有的订单都已经结束,我们可以播放音乐。

我还注意到,该条件

         if(Uslovie1==true) //Bid+ma6
           {
            if((Bid>=ma1-X*Point && Bid<ma1) || (Bid<=ma1+X*Point && Bid>ma1))
              {
                 {y=true;}
              }
           }

它似乎与某个顺序无关,那么它在循环中是为了什么?

我会在闭合循环之前检查它。