Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1782

 
Artyom Trishkin #:

Les gars, peu importe comment vous voulez procéder, si vous ne vous souvenez pas de la valeur de l'index de la boucle lors du dernier contrôle, alors vous avez une boucle qui parcourt tout l'historique disponible. Et plus il y en a, plus la boucle est longue.

pas sûr.

J'ai 2 autres EAs avec une conception similaire de vérification de la rentabilité et les deux passent l'historique complet dans le testeur en 15-20 min.

 
законопослушный гражданин #:

Je ne suis pas sûr.

J'ai 2 autres EAs avec le même design de contrôle de lot et ils passent tous les deux l'histoire entière dans le testeur en 15-20 minutes.

Eh bien, c'est à vous de voir. Je ne vais pas discuter.

 
MakarFX #:

modifier l'ordre d'annulation

de même

 
законопослушный гражданин #:

Oui, n'importe quelle paire.

J'utilise M15 pour l'AUD/USD.

J'ai eu le même problème avec votre indicateur (ci-joint)

J'ai découvert par méthode d'élimination que cette chose ralentit le processus :

Mettre en cache les résultats (dans les variables). Et le cache doit être mis à jour si la liste des commandes a changé. Et si rien n'a changé, il suffit de retourner les valeurs du cache.

 
Artyom Trishkin #:

Les gars, peu importe comment vous voulez procéder, si vous ne vous souvenez pas de la valeur de l'index de la boucle lors du dernier contrôle, alors vous avez une boucle qui parcourt tout l'historique disponible. Et plus il y en a, plus la boucle est longue.

Vous devez toujours penser qu'il y aura une panne de courant, etc.

Un EA de l'historique devrait être configuré et fonctionner à tout moment.

 
Volodymyr Zubov #:

Il faut toujours penser aux coupures de courant et autres...

Le conseiller de l'histoire devrait être configuré et fonctionner à tout moment.

Il y a un VPS pour garder les lumières allumées.

 
Oui, vous n'avez pas besoin d'une variable locale pour trouver la commande
 

Je comprends en gros pourquoi il y a des problèmes.

Maintenant, je veux faire ce qui suit :

nettoyer void OnTick

void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
   if(CountOrders()==0)
   {
  
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
   }
}

le signal pour que ce soit comme ça :

bool bSignalBuy()
  {
   if (openPrice > Open[1] && openPrice < Close[1]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
   
  return(true);
   
  return(false);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на продажу |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
  {
   if(openPrice< Open[1] && openPrice > Close[1])

   return(true);

   return(false);
  }

openPrice essaie de l'exprimer de cette façon, mais il émet une erreur :

perte éventuelle de données due à la conversion de type

Est-ce que j'utilise la fonction void correctement ?

  void openPrice()
  {
  int OP=0;
  
  if (GetLotSize()>LotControl) OP = dMA + Deviation * _Point;
  else OP = dMA;
  }
 

Faire en sorte qu'une ligne suive le curseur de la souris après avoir appuyé sur un bouton par l'intermédiaire des fonctions dessiner et supprimer.

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
  {    
    if(ObjectGetInteger(0,"button_bs",OBJPROP_STATE)){
      int      x     =(int)lparam;
      int      y     =(int)dparam;
      datetime dt    =0;
      double   price =0;
      int      window=0;
     
      if(id == CHARTEVENT_MOUSE_MOVE){
        if(ChartXYToTimePrice(0,x,y,window,dt,price)){
            ObjectDelete(0,"H Line");
            ObjectCreate(0,"H Line",OBJ_HLINE,window,dt,price);
            ChartRedraw(0);
        }
      }
    }
    else{
      ObjectDelete(0,"H Line");
    }
  }

Peut-être y a-t-il un autre moyen ? Le refroidisseur du processeur commence à être bruyant :)

 
Volodymyr Zubov #:

Il faut toujours penser aux coupures de courant et autres...

Un conseiller de l'histoire devrait être configuré et travailler à tout moment.

Il devrait. Alors, comment le fait de se souvenir de l'index de la boucle l'empêchera de passer par l'histoire après un redémarrage ?
Raison: