[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 627

 
chief2000:

J'ai remplacé "return(0)" par "return", mais cela n'a pas résolu le "problème" - après l'optimisation, vous voyez toujours les mêmes résultats 0-zéro. Existe-t-il une solution pour ne pas sortir des zéros pendant l'optimisation ?

Merci !


Je ne sais pas si vous le faites ou non, mais je vous le dis au cas où, cochez la case "Ignorer les résultats inutiles".

Les résultats négatifs (par solde) seront éliminés, je ne suis pas sûr pour les zéros, mais faites un essai.

 
Je me demande comment obtenir un nombre "aléatoire" dans, disons, 15 +/- 7 à chaque nouveau tic, de sorte qu'il soit généré aléatoirement dans les limites données ...
 

Comme ça :

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

:)

 
ToLik_SRGV:

Comme ça :

:)

Merci ! !! ;)
 
ToLik_SRGV:

Je ne sais pas si vous le savez ou non, mais au cas où, cochez la case "Ignorer les résultats inutiles".

Les résultats négatifs (par solde) seront filtrés, je ne suis pas sûr pour les résultats nuls, mais vous devriez essayer.

Le fait est que je veux voir les résultats nuls - dans les premières étapes de l'optimisation, je dois souvent sélectionner les meilleurs parmi les résultats nuls (et dans les étapes ultérieures, il est utile de les examiner et de les comparer). Les zéros sont gênants parce que ces résultats n'ont aucun sens et qu'ils sont trop nombreux - la taille des fichiers stockés s'accroît et gêne la visualisation des résultats. Merci quand même !

 
granit77:

Si vous voulez parler des variables externes MA_Fast_Period et MA_Slow_Period, il existe une solution. Si les variables sont calculées dans le conseiller expert, alors il n'y a rien à faire.

Il est tard, ma tête ne fonctionne plus... mais cela semble être une très bonne idée ! Merci !

 
artmedia70:
Je me demande comment obtenir un nombre "aléatoire" dans, disons, 15 +/- 7 à chaque nouveau tick, de sorte qu'il soit généré aléatoirement dans les limites données ...
http://prolang.ru/index.php/cpp/cpptheory/3-clang-random.html

Pour obtenir des nombres réels aléatoires avec une distribution uniforme dans l'intervalle [a,b], utilisez la formule suivante

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

Pour mql, dans la description de la fonction MathRand(), il est écrit : La fonction renvoie un entier pseudo-aléatoire dans la plage de 0 à 32767.

i.e. pour mql RAND_MAX = 32767

 

J'ai commencé à apprendre mq4, et j'ai immédiatement rencontré des moments obscurs.

J'ai essayé de m'y mettre, pour ainsi dire. J'ai écrit un simple Expert Advisor sur Ma. Mais il ne veut pas faire de commerce même sur l'histoire. Il n'y a pas d'erreur.

Pouvez-vous me dire où j'ai merdé ?

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() ; // lot minimum
RefreshRates() ;
int total = OrdersTotal() ;
int ticket = -1 ;
for (; ;)
{
int flag= GetEma() ;
if (flagchange != flag)

l'instruction for sans le paramètre ? - le point ? les boucles éternelles ne sont pas écrites de cette façon, et la deuxième est qu'il y a des variables globales pour l'EA - pas pour le terminal, elles sont décrites au tout début du code avant toutes les fonctions et la fonction start() aussi, comme vous l'avez écrit - à chaque tick vous appelez la fonction start(), flagchange = false ; et ensuite vous essayez de comparer ce drapeau avec l'état précédent, mais son état sera toujours faux

Si vous commencez à essayer vos forces - prenez n'importe quel conseiller expert prêt à l'emploi de Kodobase et changez les conditions d'entrée sur le marché pour les vôtres - ce sera plus rapide.


 
MarkTrade:

J'ai commencé à apprendre mq4, et j'ai immédiatement rencontré des moments obscurs.

J'ai essayé de m'y mettre, pour ainsi dire. J'ai écrit un simple Expert Advisor sur Ma. Mais il ne veut pas faire de commerce même sur l'histoire. Il n'y a pas d'erreur.

Pouvez-vous me dire où j'ai merdé ?


Quel est le but du bouclage de l'EA ?

for (;;) {


}