任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 661

 
berezhnuy:

下午好,请您告诉我如何解决这个问题?

我在猫头鹰中使用。

猫头鹰在每次勾选时都会运行,否则基本条件将无法满足。我对iMAOnArray只用了20条,但在测试器上猫头鹰需要很长时间来思考。我在启动块中设置并调用它。

如何优化该工具的使用,以便在每次勾选时检查主要条件,并使测试者的速度不致减慢。因为我在4小时图上测试一只猫头鹰一年的时间只需要2小时。我不敢想象要做多少优化,))))


没有代码就没有人可以帮助你
 

这基本上是所有的代码。

//------- Внешние параметры советника -----------------------------------------+
extern string _P_Expert = "---------- Параметры советника";
extern int      Magic      = 777;                 // Магический номер позиций
extern double   SL=10;                            // Размер лося
extern double   TP=10000;                           // Размер профита 
extern string     ____= "Параметры блока MoneyManagement";
extern bool      MoneyManagement=false;
extern double    Lots          = 0.01;  
extern int       MarginPercent=3;
//------- Параметры трала -----------------------------------------------------+
extern string     ______= "Параметры блока TrallingStop";
extern bool      TralSimple=true;
//------- Характкристики баров ------------------------------------------------+

//------- Подключение внешних модулей -----------------------------------------+
#include <stdlib.mqh>
#include <stderror.mqh>

int start()
{

   total=OrdersTotal();
   Comment( LotsCounting() );
//+=================================================================================+
  // Проверка средств
   if(AccountFreeMargin()<(1000*Lots)){
      Print("We have no money. Free Margin = ", AccountFreeMargin());   
      return(0);  
   }
//===========================  Открытие позиций  ===================================+ 
//==========================================================================================+
//=============================   Center_array      ========================================+
      double Center_array[50];
      int    h,limit=ArraySize(Center_array);
      ArraySetAsSeries(Center_array,true);
      for(h=0; h<limit; h++)
         Center_array[h]=iRSI(NULL,0,14,0,h);
      double MA_1 =iMAOnArray(Center_array,0,14,0,MODE_SMA,1);
      double rs_1 = iRSI(NULL,0,14,0,1);
      
      if (Last_Max1!=Max1){
      if (Close[1]>Close[2] && rs_1<MA_1){
               lots=LotsCounting();
               OrderSend(Symbol(),OP_BUYSTOP,lots,(Max1),0,SL_buy,TP_buy, "Покупаем ",Magic,Expiration,Blue);
               Last_Max1=Max1;
               PlaySound("ok.wav");
               {
               Print ("При открытии произошла ошибка ", GetLastError());
               return;
               }
            }
         }
       }

//==========================================================================================+
      if (delet) DeleteOppositeOrders("",-1,Magic);
//==========================================================================================+
//=======================================TrallingStop=======================================+
      for ( int v = OrdersTotal() - 1; v >= 0; v -- ){       
         if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)){           
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){ 
               //+=================================================================================+
               ///+================================Обычный трал ====================================+
               if (TralSimple){
                  //+=================================================================================+
                  if(OrderType() == OP_BUY){
                     if((Bid-OrderOpenPrice()) > (Point*TrailingStop)){
                        if(OrderStopLoss() < Bid-Point*TrailingStop || (OrderStopLoss()==0)){
                           OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);  
                        }
                     }
                  }
               }                                   
            }  // Symbol()  
         } // select
      } //total 
        //============================== Конец блока закрытия ==============================+
 return(0);
}
//==========================================================================================+

如果删除Center_errey,测试时间不到1分钟。如果这个条件仍然包含在代码中,测试将运行2小时

 
berezhnuy:

这基本上是所有的代码。

如果删除Center_errey,测试时间不到1分钟。如果这个条件仍然包含在代码中,测试将运行2小时


你不是想做一个指标吗?
 

有一个变量A,它可以取值为0,1,2。

这些比较会是同等的吗?

如果(A=0 || A=1){do},如果(A !=2){do}。

 
evillive:

有一个变量A,它可以取值为0,1,2。

这些比较会是同等的吗?

如果(A=0 || A=1){do},如果(A !=2){do}。

如果变量是枚举类型的,表达式是相同的。
 
evillive:

有一个变量A,可以取值0,1,2。

这些比较会是同等的吗?

如果(A=0 || A=1){do},如果(A !=2){do}。

不,因为 "A=0 "和 "A=1 "都不是一个比较。

但比较的结果是 "A == 0 "和 "A == 1"。

 
simpleton:

不,因为 "A=0 "和 "A=1 "都不是一个比较。

但 "A == 0 "和 "A == 1 "是比较。

+1!:)
 
berezhnuy:

这基本上是所有的代码。

如果删除Center_errey,测试时间不到1分钟。如果在代码中包含这个条件,测试需要大约2小时。

根据条款,重新计算和检查并不是在每一个刻度 上都有意义,而只是在一个新的柱状物出现时才有意义。

这就是为什么应用一个相应的函数是有意义的,比如这个函数。

bool NevBar(){
   static int PrevTime=0;
   if (PrevTime==Time[0]) return(false);
   PrevTime=Time[0];
   return(true);}

并在Center_errey出现时才运行它。

你也可以扔掉各种各样的 "垃圾"。但它不会从本质上影响速度。

你的代码中还有一个严重的错误--如果没有保证金,你就取消整个代码。拖网的情况如何?虽然...也许是因为它只是代码的一部分,正如我从评论中所理解的那样。

 
simpleton:

不,因为 "A=0 "和 "A=1 "都不是一个比较。

但 "A == 0 "和 "A == 1 "是比较。


信用 ))))


只是我没有用MQL写,但从形式上看,这就是麻烦所在(。

 
evillive:

分数 ))))


只是我没有用MQL写,但从形式上看,这就是问题所在(。

技术上不是,因为可能有NULL