[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 169

 

splxgf:

DhP

你如何 "减轻 "这个周期?需要很长的时间来计算。
 if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i)) if(LOWprice> bid) CountH++ else CountL++;

或者更好的是,像这样。

 if(iHigh(NULL,60,i)>LOWprice) if(LOWprice>iLow(NULL,60,i)) if(LOWprice> bid) CountH++ else CountL++;

还有一个想法是形成一个High和Low值的数组。也许这能让事情变得更快一些?

 
abolk:


订单的选择https://docs.mql4.com/ru/trading/OrderSelect- 循环或按票选择

然后,Order*()函数查找相关的顺序参数

对不起,我的问题太直白了,但是。

如果我们在OrderSelect函数中 使用MODE_HISTORY作为选择的数据源,即在已关闭和已删除的订单中选择订单,那么我们如何找到最后关闭的订单的编号?这些订单在程序中是如何编号的?是从最后一个到第一个还是反过来?

 
Xaoss1990:

当然,很抱歉,对于这些愚蠢的问题,但是。

如果在OrderSelect函数中 使用MODE_HISTORY作为数据源,即在已关闭和已删除的订单中选择订单,我如何找到最后关闭的订单的编号?这些订单在程序中是如何编号的?是从最后一个到第一个还是反过来?


网上有很多这样的问题

http://forum.alpari.ru/showthread.php?t=27708

 
Xaoss1990:

对不起,我的问题很愚蠢,但是。

如果在OrderSelect函数中 使用MODE_HISTORY作为选择的数据源,即在已关闭和已删除的订单中选择订单,我如何找到最后关闭的订单的编号?这些订单在程序中是如何编号的?是从最后一个到第一个还是反过来?


找到最后一个关闭的订单的函数与找到具有最大关闭时间的订单的函数类似
 
LazarevDenis:


很多问题已经在网上被问过了

http://forum.alpari.ru/showthread.php?t=27708

О!找到了,谢谢。

OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY)。

这就对了,不是吗!?

 
DhP:

如何 "缓解 "这个循环?它需要很长的时间来计算。

咒语。

   INS = True;
   
   for (int i=1; i<=6000; i++)
   {
      if (INS)
      {
         if (LOWprice > iHigh(NULL,60,i))
         {
            INS = False;
            UPP = True;
            LOW = False;
            continue;
         }
         if (LOWprice < iLow (NULL,60,i))
         {
            INS = False;
            UPP = False;
            LOW = True;
            continue;
         }
      }
      else
      {
         if (UPP)
            if (LOWprice > iHigh(NULL,60,i))
               continue;
            else
            if (LOWprice < iLow (NULL,60,i))
            {
               // INS = "False"
               UPP = False;
               LOW = True;
               continue;
            }
         if (LOW)
            if (LOWprice < iLow (NULL,60,i))
               continue;
            else
            if (LOWprice > iHigh(NULL,60,i))
            {
               // INS = "False"
               UPP = True;
               LOW = False;
               continue;
            }
         
         INS = True;
      }
      
      if (LOWprice > Bid)
         CountH++;
      else
         CountL++;
   }

其逻辑是,价格在历史条形图之外的情况比在历史条形图之内的情况更多。

INS = 内部。

我在一份传单上检查了代码的准确性。我没有检查代码的速度。但我相信布尔变量会带来很好的优势。

 
MaxZ:

咒语。

其逻辑是,价格在历史条形图之外的情况比在历史条形图之内的情况更多。

INS = "内部"。

P.S.: 我在一张纸上检查了代码的正确性。我没有检查代码的速度。但我相信布尔变量会带来很好的优势。


是的。

你一定很扭曲,把三行清晰的代码变成难以理解的代码。

如果你有拆分iLow、iHigh支票的 想法,你可以马上拆分。

          if(LOWprice> bid)if(iHigh(NULL,60,i)>LOWprice)if( LOWprice>iLow(NULL,60,i))CountH++;  
          if(LOWprice<=bid)if(iHigh(NULL,60,i)>LOWprice)if( LOWprice>iLow(NULL,60,i))CountL++;
而且不要乱动任何东西
 
      int HourPrices[20000];     
      for(int i=1; i<=6000; i++)
	 for (double cPrice=iLow(NULL,60,i);cprice<=iHigh(NULL,60,i);cPrice+=Point)
	  HourPrices[cPrice/Point]+=1;

从这样一个阵列中找到阻力水平是没有问题的。同时添加新条,删除旧条。而从它那里获取信息是两个循环,一个条件或ArrayMaximum将一次性给出所需的值。

 
abolk:


对。

你必须变得如此扭曲,把三行清晰的代码变成难以理解的代码。

如果你有把iLow、iHigh检查分开的想法,你可以马上把它分开。

并且不要乱用任何东西

一个与我上面建议的类似的变体(分离的如果)。

而你甚至没有尝试去理解我的想法(虽然我简单地描述了逻辑)...当价格很高时,我们会做一张支票而不是两张。价格低时的情况也是如此。而当价格在历史条形图内时(这相当罕见--这就是逻辑和想法!),我们会做两次检查(没有其他方法)。

检查的是酒吧外面的价格,而不是里面的价格。早些时候,他们是在大海捞针,而我,如果我没有看到另一根针,也不会去找它......在需要的时候,针会自己显示出来!:)))

 
MaxZ:

我在上面提出的一个类似的变体(分开的如果)。

而你甚至没有尝试去理解我的想法(虽然我简单地描述了逻辑)...当价格很高时,我们不做两张支票,而是做一张。价格低时的情况也是如此。而当价格在历史条形图内时(这相当罕见--这就是逻辑和想法!),我们会做两次检查(没有其他方法)。

         if (LOWprice > iHigh(NULL,60,i)) continue;
        if (UPPprice < iLow (NULL,60,i)) continue;
你的版本可以简化为这两行加入到作者的版本中,只要对条件进行一些修改,原则上应该是相当快的。