[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 627

 
chief2000:

Заменил "return(0)" на "return", но "проблему" это не решило - после оптимизации по прежнему видны все те же 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() ; // минимальный лот
RefreshRates();
int total = OrdersTotal();
int ticket = -1;
for (;;)
{
int flag= GetEma();
if (flagchange != flag)

оператор for  без параметра? - смысл? вечные циклы пишутся не так, и второе есть переменные глобальные для советника - не для терминала, они описываются в самом начале кода до всех функций и функции start() в том числе, как у Вас написано - при каждом тике вызовется функция start()  Вы  flagchange = false; а потом пытаетесь этот флаг сравнить с прошлым состоянием, но его состояние всегда будет false

если только начинаете пробовать свои силы - возьмите любой готовый советник из кодобазы и измените в нем условия для входа в рынок на свои - будет быстрее 


 
MarkTrade:

Начал познавать mq4, и сразу нарвался на непонятные моменты.

Проба пера, так сказать. Написал простенького советника на ма. И вот он не хочет торговать даже на истории. При этом никаких ошибок не выдает.

Подскажите где я накосячил?


А с какой целью советник зациклен?

for (;;) {


}
Причина обращения: