[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 628

 
IgorM:

pour sans paramètre ? - 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, y compris la fonction start(), comme vous l'avez écrit - à chaque tick la fonction start() est appelée, vous flagchange = false ; et ensuite vous essayez de comparer ce flag avec l'état précédent, mais son état sera toujours faux

Si vous commencez tout juste à vous essayer, prenez n'importe quel conseiller expert prêt à l'emploi de Kodobase et modifiez les conditions d'entrée sur le marché en fonction des vôtres - ce sera plus rapide.


Vinin
Quel est le but de la boucle ?

Vous voulez dire que la fonction start() est exécutée à chaque tick ? Alors la boucle est vraiment inutile.

 

MarkTrade:

La fonction start() est donc exécutée à chaque tick ? Alors une boucle est vraiment inutile.

https://book.mql4.com/ru/programm/special
 

Intéressant comment les filles dansent... Se tenir ensemble et chanter...

J'ai testé et testé, ajouté/changé des fonctions/conditions/données en fonction des résultats, obtenu des résultats plus ou moins bons en termes de rentabilité et de drawdowns... sans optimisation. J'ai rechargé toute l'histoire et ça a commencé à dégringoler, non - Plum, même pas - Big Plum...

Si avant je rechargeais l'historique des cotations(j'avais un historique EURUSD préchargé avant le test, je l'ai rechargé juste au cas où - j'avais des erreurs de qualité de modélisation en 2010 pour une raison quelconque...)... Avant de recharger l'historique, le conseiller expert a résisté avec succès, enfin presque avec succès, à différents tests de va-et-vient, a négocié avec succès sur un historique de trois ans, mais après avoir rechargé les cotations, il a commencé à avoir des rabattements deux ou trois fois par mois et n'a pas fonctionné pendant plus de deux-trois mois après le début du test ... Je n'ai changé aucune condition, seulement l'historique...

Il s'avère que sur le serveur, l'histoire est réécrite ? Quant aux siècles en Union soviétique ?

Quel est l'intérêt de tout cela, alors ?

 
artmedia70:

Les filles dansent de façon intéressante... se sont levés ensemble et ont chanté...

J'ai testé et testé, ajouté/créé des fonctions/conditions/données, obtenu des résultats plus ou moins bons en termes de rentabilité et de drawdown... sans optimisation. J'ai rechargé toute l'histoire et ça a commencé à descendre, non - descendre, même pas - une grosse descente...

Si avant de recharger l'historique des cotations(avant le test j'avais tout l'historique EURUSD préchargé, juste pour être sûr je l'ai rechargé, mais pour une raison quelconque j'avais des erreurs dans la qualité de la modélisation depuis 2010)... Avant de recharger l'historique, le conseiller expert a résisté avec succès, enfin presque avec succès, à différents tests de va-et-vient, a négocié avec succès sur un historique de trois ans, mais après avoir rechargé les cotations, il a commencé à avoir des rabattements deux ou trois fois par mois et n'a pas fonctionné pendant plus de deux-trois mois après le début du test ... Je n'ai changé aucune condition, seulement l'histoire...

Il s'avère que sur le serveur l'histoire est réécrite ? Comme de tout temps en URSS ?

Et puis le but de tout ça ?

Si votre MT n'est toujours pas déconnectée du serveur, il est temps de le faire (et ne la reconnectez pas inutilement) - chaque fois que vous démarrez le testeur ou l'optimisation, la MT reçoit une propagation (etc.) du serveur. Ainsi, lorsque l'écart est de 1 pip, tout sera super bien, mais si à un autre moment il passe à 4-5 - le conseiller expert commencera probablement à perdre de l'argent. Naturellement, il est préférable d'optimiser les conditions les plus défavorables, car elles sont plus susceptibles de se produire dans les transactions réelles.

 

Voici une petite retouche.

глобальные переменные (в самом начале, под #property link )
bool flagchange = false;
bool PrevFlag = false;
bool flag = false; 

int start()
  {
   //---вход в позицию
   //int    spread=MarketInfo("EURUSD",MODE_SPREAD);
   int Slippage = 3;
   int i = 0;
   double lt = getLots() ; // минимальный лот
   RefreshRates();
   int total = OrdersTotal();   
   int ticket = -1;
      flag = GetEma();
        if (PrevFlag != flag) // проверим, сигнал ема изменился?
         {flagchange = true;      // изменился!
         PrevFlag = flag;}
        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 ==true) 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);
  }
      //////////////////////////////////////////////////////
  bool 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 (True);
      else return (False);}
   /////////////////////////////////////////////////////  
         // посчитаем разтер лота
   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);
        }

Il n'y a toujours pas d'échange :(

 
chief2000:

Si votre MT n'est toujours pas déconnecté du serveur, il est temps de le faire (et de ne plus le connecter inutilement) - chaque fois que vous exécutez un testeur ou que vous optimisez, le MT reçoit une propagation (etc.) du serveur. Ainsi, lorsque l'écart est de 1 pip, tout sera super bien, mais si à un autre moment il passe à 4-5 - le conseiller expert commencera probablement à perdre de l'argent. Naturellement, il est préférable d'optimiser les conditions les plus défavorables, car elles sont plus susceptibles de se produire dans les transactions réelles.

Tout est clair et compris depuis longtemps... Mais c'est samedi... Le spread peut-il changer aujourd'hui ? Non... C'est probablement minimal maintenant, c'est-à-dire dans les meilleures conditions... Non... Même avec n'importe quel écart, l'EA négociait bien... avant la réinitialisation de l'historique.
 
artmedia70:
Tout est clair et compris depuis longtemps... Mais c'est samedi... Le spread peut-il changer aujourd'hui ? Non... C'est probablement minimal maintenant, c'est-à-dire dans les meilleures conditions... Non... Même avec n'importe quel écart, l'EA négociait bien... avant la réinitialisation de l'historique.
Eh bien, si vous regardez la progression des échanges sur le graphique, qu'est-ce qui a changé ?
 
Techno:
Si vous regardez la progression des transactions sur le graphique, qu'est-ce qui a changé ?
Les prélèvements sur les actions ont augmenté plusieurs fois... Il s'avère qu'il y a plus de conditions aux postes ouverts. Il ouvre en fait plus de postes...
 
MarkTrade:

Voici une petite retouche.

Toujours pas d'échange :(

Il doit y avoir une erreur quelque part dans les conditions / la logique
car MetaEditor n'a pas de débogueur, alors je fais ceci :

ajouter à la fin du code

Comment( "flag= ", flag, " PrevFlag=", PrevFlag, ......) ;

retour(0) ;

}

et en mode visualisation dans le testeur à basse vitesse voir ce qui change et ce qui ne change pas

 
artmedia70:
Le tirage au sort des actions a augmenté de nombreuses fois... Il s'avère que les conditions d'ouverture des postes ont augmenté. Il ouvre en fait plus de postes...
Je ne parle pas du tableau des tests, mais du tableau des devis, en gros, quels sont les changements dans les ouvertures, les fermetures ?
Raison: