Questions des débutants MQL5 MT5 MetaTrader 5 - page 1026

 
Vladimir Karputov:

Le point ne change pas - vous essayez de supprimer un ordre en attente avec un ticket "0" sur chaque tick.

Et qui dit que vous avez un ordre en attente avec un tick "0" sur chaque tick ? Avez-vous vérifié le nombre d'ordres en attente ? Et comment savez-vous que .... ?

Avec quel tic-tac est "0" ? ?? OrderGetTicket(0) ne signifie pas qu'un ordre avec le ticket 0 est sélectionné, mais renvoie un ordre avec ticket à partir de la liste des ordres en attente sous l'index 0.

 
ascerdfg:


Vous devez probablement être plus précis dans votre tâche.

Par exemple : s'il y a un ordre en attente dont la magie est "1" - alors supprimez-le.

Dans ce cas, la mise en œuvre sera la suivante :

#include <Trade\Trade.mqh>

CTrade trader;
int OnInit()
  {

   trader.SetExpertMagicNumber(1);

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//---
  
  }
void OnTick()
  {
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(OrderGetTicket(i)>0)     // selects the pending order by index for further access to its properties
         if(OrderGetInteger(ORDER_MAGIC)==1)
            trader.OrderDelete(OrderGetTicket(i));
  }

Boucle à travers tous les ordres en attente

Si un ordre en attente a été sélectionné avec succès (la valeur retournée est le ticket supérieur à zéro)

Si la valeur magique de l'ordre en attente sélectionné est "1".

Supprimez-la.

 
Alexey Viktorov:

Avec quel ticket "0" ? OrderGetTicket(0) ne signifie pas qu'un ordre avec le ticket 0 est sélectionné, mais renvoie un ticket d'un ordre de la liste des ordres en attente sous l'index 0.

Oui, c'est vrai.

 

Pouvez-vous me dire combien de RAM est nécessaire pour faire fonctionner le testeur pour 30 caractères de 2004 à aujourd'hui ?

Le testeur dit qu'il n'y en a pas assez, mais il ne dit pas quelle quantité est nécessaire.

 
Igor Zakharov:

Pouvez-vous me dire combien de RAM est nécessaire pour faire fonctionner le testeur pour 30 caractères de 2004 à aujourd'hui ?

Le testeur dit qu'il n'y en a pas assez, mais il ne dit pas combien.

Exécuter deux personnages, cinq personnages ...

 
Vladimir Karputov:

Exécuter deux personnages, cinq personnages ...

Ce n'est pas vraiment la question : quelle quantité de mémoire dois-je acheter pour qu'un tel test soit possible ?

voici le résultat pour un symbole (à partir du journal en mode prix d'ouverture)

264  Mb memory used including 6 Mb of history data, 64  Mb of tick data

en voici deux :

271 Mb memory used including 12 Mb of history data, 64 Mb of tick data

3 :

1038  Mb memory used including 12 Mb of history data, 832 Mb of tick data

Et en voici 4 :

1450 Mb memory used including 18 Mb of history data, 1216  Mb of tick data

C'est devenuexponentiel:) Je ne peux pas retracer la logique, car les tics sont à peu près les mêmes :

EURUSD,H1: 21470549 ticks, 94233 bars generated. 63097850 total ticks for all symbols
EURUSD: generate 21470549 ticks in 0:00:05.375, passed to tester 21470549 ticks
USDCAD: generate 20302871 ticks in 0:00:05.062, passed to tester 20302871 ticks
USDJPY: generate 21324430 ticks in 0:00:05.641, passed to tester 21324430 ticks
1450 Mb memory used including 18 Mb of history data, 1216 Mb of tick data

J'ai vu de nombreux rapports de 20 caractères ou plus, je ne crois pas que quelqu'un utilise des téraoctets de RAM. Il y a peut-être un secret ?

 

Est-il possible de définir le nombre de tampons graphiques dans l'indicateur ?

Et la deuxième question, y a-t-il une possibilité de réinitialisation forcée de l'indicateur utilisé par le Conseiller Expert afin d'économiser de la RAM ?

 
Aleksey Vyazmikin:

Est-il possible de définir le nombre de tampons graphiques dans l'indicateur ?

Et la deuxième question, y a-t-il une possibilité de réinitialisation forcée de l'indicateur utilisé par le Conseiller Expert afin d'économiser de la RAM ?

Il est possible de diminuer le nombre d'indicator_plots indiqué dans #property indicator_plots, je l'ai fait. Mais il n'est guère possible de l'augmenter. Mais cette diminution n'entraînera pas de gain de mémoire. Après tout, il reste des tampons. Ils sont simplement transférés de INDICATOR_DATA à INDICATOR_CALCULATIONS et rien de plus.

 
Alexey Viktorov:

La déclaration dans #property indicator_plots peut être réduite, je l'ai fait. Mais il est peu probable qu'il soit possible de l'augmenter. Mais cette réduction ne permettra pas de sauver la RAM. Les tampons restent, après tout. Ils sont simplement transférés de INDICATOR_DATA à INDICATOR_CALCULATIONS et rien de plus.

Je vous remercie de votre réponse. Une modification cosmétique du nombre de tampons n'est pas pertinente, malheureusement.

 

Je veux obtenir les poignées de l'indicateur MACD à partir de trois horizons temporels dans le bloc OnInit(). Sur le graphique, cela fonctionne, mais dans le testeur, cela ne fonctionne pas, et le terminal se bloque ! Je veux donc obtenir les données qui n'existent pas ? Pouvez-vous me conseiller sur la manière de traiter ce problème ?


//+------------------------------------------------------------------+
//|                                                        Test.mq5  |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//--- Количество периодов торгуемых символов
#define  NUMBER_OF_PERIODS 3

ENUM_TIMEFRAMES Periods[NUMBER_OF_PERIODS]={PERIOD_M1,PERIOD_M2,PERIOD_M3};
int handles[NUMBER_OF_PERIODS];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArrayInitialize(handles,INVALID_HANDLE);
      for(int p=0; p<NUMBER_OF_PERIODS; p++)
        {
         if(handles[p]==INVALID_HANDLE)
           {
            handles[p]=iCustom(NULL,Periods[p],"Examples\\MACD");
            Print(handles[p]);
            if(handles[p]==INVALID_HANDLE)  Print("Не удалось получить хэндл индикатора для символа !");
           }
        }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
Raison: