[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 627

 
chief2000:

用 "return "替换了 "return(0)",但这并没有解决 "问题"--优化后你仍然看到同样的0-0结果。有什么办法在优化过程中不输出零吗?

谢谢!


我不知道你是否知道,我告诉你,以防万一,请勾选 "忽略无用的结果 "复选框。

减去的结果(通过平衡)将被消除,不确定零的情况,但可以试一试。

 
我想知道如何在每个新的刻度上获得一个 "随机 "数字,例如15+/-7,以便在给定的限度内随机产生......。
 

像这样。

int random(){
   MathSrand(TimeLocal());
   while(true){
      int x = MathRand();
      if(x >= 8 && x <= 22)return(x);
   }
}

:)

 
ToLik_SRGV:

像这样。

:)

谢谢你!!!。;)
 
ToLik_SRGV:

我不知道你是否知道这一点,但为了以防万一,请勾选 "跳过无用的结果 "选项。

负面的结果(通过平衡)将被过滤掉,我不确定无效的结果,但你应该试试。

问题是,我想看到空结果--在优化的早期阶段,我经常要在空结果中选择最好的结果(在后期阶段,翻看和比较这些结果很有用)。零会碍事,因为这些非常的结果没有任何意义,而且有太多的零--存储文件的大小变大,视觉上妨碍了查看结果。总之,谢谢你!

 
granit77:

如果你是指外部变量MA_Fast_Period和MA_Slow_Period,有一个解决方案。 如果变量是在专家顾问中计算的,那么就没有什么可做的。

很晚了,我的脑袋已经不听使唤了......但这听起来是一个非常好的主意谢谢你!

 
artmedia70:
我想知道如何在每个新的刻度上获得一个 "随机 "的数字,比如说15+/-7,以便在给定的限度内随机产生......。
http://prolang.ru/index.php/cpp/cpptheory/3-clang-random.html

要获得在区间[a,b]内均匀分布的随机实数,请使用公式

x = rand()*(b-a)/RAND_MAX + a;

对于mql,在MathRand()函数的描述中写道:该函数返回一个范围在0到32767的伪随机整数。

即对于mql来说RAND_MAX = 32767

 

我开始学习mq4,并立即遇到了一些晦涩难懂的时刻。

可以这么说,我试了一下我的手。我写了一个 关于马云的简单专家顾问。但它甚至不愿意在历史上进行交易。它没有显示任何错误。

你能告诉我我在哪里搞砸了吗?

int start()
  {
   //---проверим возможность входа в позицию
   bool flagchange = false;
   int Slippage = 3;
   int i = 0;
   double lt = getLots() ; // минимальный лот
   RefreshRates();
   int total = OrdersTotal();   
   int ticket = -1;
   for (;;)
      {
      int flag= GetEma();
       if (flagchange != flag) // проверим, сигнал ема изменился? если да, то можно открыть или закрыть поз.
       flagchange = true;      // изменился!
       else flagchange = false;
        if (flagchange == True)
        {       
           int Total=OrdersTotal(); //проверим есть открытые позиции?
           if(Total>0)
  {
     for(i=Total-1; i>=0; i--) 
     {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) // если а то закрываем
        {
           if(OrderType()==OP_BUY || OrderType()==OP_SELL) // Только Buy и Sell
           {
              if(OrderType()==OP_BUY) 
              bool Result=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);
              else
              Result=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);
              if(Result!=true) 
              { 
              Print("LastError = ",GetLastError()); 
              }
           }
        }
        else // если открытых нет, то окрываем.
         if (flag ==1) OrderSend(Symbol(),OP_BUY,lt,Ask,Slippage,Bid - sl * Point,0,"Buy",888,0,Blue);
         else OrderSend(Symbol(),OP_SELL,lt,Bid,Slippage,Ask + sl * Point,0,"Seel",888,0,Red);
        {
        }
     }
  }                                             
      }
 }      
//----
   return(0);
  }
      //////////////////////////////////////////////////////
  int GetEma() {
  //----Получим значение EMA1
      int ma1= iMA(Symbol(),PERIOD_H1,ema1,0,1,6,0);
  //----Получим значение EMA2   
      int ma2= iMA("",PERIOD_H1,ema2,0,1,6,0); 
      if (ma1>ma2) return (1);
      else return (0);}
   /////////////////////////////////////////////////////  
         // посчитаем разтер лота
   double getLots() 
        {
                double minlot = MarketInfo(Symbol(), MODE_MINLOT);
                 int round = MathAbs(MathLog(minlot) / MathLog(10.0)) + 0.5;
                 double lot = minlot;
//---- select lot size
                 lot = NormalizeDouble(AccountFreeMargin() * Risk / 1000.0, round);
                 if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) 
                        {
                                lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), round);
                        }
                 if(lot < minlot) lot = minlot;
                 double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
                 if(lot > maxlot) lot = maxlot;
//---- return lot size
   return(lot);
        } 
 


bool flagchange = false;
int Slippage = 3; int i = 0; double lt = getLots() ; // minimum lot RefreshRates(); int total = OrdersTotal(); int ticket = -1;





for (;;)
{ int flag= GetEma() ;

if (flagchange != flag)

没有参数的for语句?- 永恒循环不是这样写的,第二是EA有全局变量--不是终端,它们在所有函数和start()函数之前的代码的最开始就被描述了,就像你写的那样--在你每次调用start()函数时, flagchange = false; 然后你试图将这个标志与之前的状态进行比较,但其状态将永远是false。

如果你刚刚开始尝试你的力量--从Kodobase中抽取任何现成的专家顾问,并将进入市场 的条件改为你自己的--这样会更快。


 
MarkTrade:

我开始学习mq4,并立即遇到了一些晦涩难懂的时刻。

可以这么说,我试了一下我的手。我写了一个关于马云的简单专家顾问。但它甚至不愿意在历史上进行交易。它没有显示任何错误。

你能告诉我我在哪里搞砸了吗?


EA循环的目的是什么?

for (;;) {


}
原因: