Merci pour votre code. Cela m'a fait gagner du temps. J'ai essayé d'utiliser les tableaux de MQL et ils étaient confus. J'étais alors très déprimé de devoir à nouveau écrire des structures de base qui étaient censées exister MAIS j'ai trouvé votre code qui m'a fait gagner du temps dans mes recherches sur les tableaux et sur la façon de les faire croître dynamiquement. AWESOME merci.
J'espère pouvoir vous rendre la pareille ! Le code ci-dessous fonctionne pour tous les types de données. Il fonctionnera également avec les objets, mais la méthode Contains (recherche) risque de ne pas fonctionner. Je ne l'ai testé que pour les types (double, int, bool). Les chaînes de caractères peuvent également poser problème et le code doit être étendu.
Vous pouvez alors le déclarer pour tous les types dont vous avez besoin, comme suit :
J'espère que cela aidera quelqu'un
Ne tenez pas compte de ma suggestion d'utiliser le tableau dynamique pour n'importe quel type de données. Il existe déjà un CArrayList générique déclaré, veuillez l'utiliser. J'ai rencontré un problème d'utilisation d'objets qui a été résolu dans ce fil de discussion : https://www.mql5.com/en/forum/358432
Il semble qu'il y ait une erreur dans la fonction arrayResize(), dans l'exemple le contenu du tableau est 1, 1, 3 en indexation normale et non 1, 2, 3. Voir cet exemple :
//+------------------------------------------------------------------+//|faux.mq5 |//|Copyright 2024, MetaQuotes Ltd. |//| https ://www.mql5.com//+------------------------------------------------------------------+#property copyright"Copyright 2024, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"#property indicator_chart_window//+------------------------------------------------------------------+//| Fonction d'initialisation de l'indicateur personnalisé//+------------------------------------------------------------------+intOnInit()
{
//--- cartographie des tampons d'indicateurs//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Fonction d'itération de l'indicateur personnalisée|//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---double ar[]; // TableauArrayResize(ar,2); // Préparer le tableau
ar[0]=1; // Définir les valeurs
ar[1]=2;
ArraySetAsSeries(ar,true); // Modifier l'ordre d'indexationArrayResize(ar,3); // Augmenter la taille du tableau
ar[0]=3; // Fixer la valeur du nouvel élément du tableauAlert(ar[0]," ",ar[1]," ",ar[2]); // Imprimer les valeurs du tableauArraySetAsSeries(ar,false);
Alert("Normal indexing: ", ar[0]," ",ar[1]," ",ar[2]); // Imprimer les valeurs du tableau//--- valeur de retour de prev_calculated pour l'appel suivantreturn(rates_total);
}
//+------------------------------------------------------------------+
En ajoutant la fonction arraySetAsSeries() il semble être affecté par la fonction arrayresieze, voir cet exemple :
//+------------------------------------------------------------------+//|errorindex.mq5 |//|Copyright 2024, MetaQuotes Ltd. |//| https ://www.mql5.com//+------------------------------------------------------------------+#property copyright"Copyright 2024, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"#property indicator_chart_window//+------------------------------------------------------------------+//| Fonction d'initialisation de l'indicateur personnalisé//+------------------------------------------------------------------+intOnInit()
{
//--- cartographie des tampons d'indicateurs//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Fonction d'itération de l'indicateur personnalisée|//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---double ar[]; // TableauArrayResize(ar,2); // Préparer le tableau
ar[0]=9; // Définir les valeurs
ar[1]=8;
ArrayResize(ar,6); // Augmenter la taille du tableauAlert("Normal resize: ", ar[0]," ",ar[1]," ",ar[2]," ", ar[3], " ", ar[4], " ", ar[5]);
ArraySetAsSeries(ar,true); // Modifier l'ordre d'indexationArrayResize(ar,4); // Augmenter la taille du tableauArraySetAsSeries(ar, false);
Alert("See the random element added: ", ar[0]," ",ar[1]," ",ar[2]," ", ar[3]);
ArraySetAsSeries(ar,true); // Modifier l'ordre d'indexation 0
ar[0]=8; // Fixer la valeur du nouvel élément du tableauAlert("Modify the first as serlies: ", ar[0]," ",ar[1]," ",ar[2]," ", ar[3]); // Imprimer les valeurs du tableau//--- valeur de retour de prev_calculated pour l'appel suivantreturn(rates_total);
}
//+------------------------------------------------------------------+
Etapes :
1. ar = {} 2. ar = {9, 8}
3. ar = {9, 8, 0, 8, 0, 0}
4. Définir comme série true :
ar = {0, 0, 8, 0, 8, 9}
5. Redimensionner à 4
ar = {0, 0, 8, 0}
6. Définir comme série false :
ar = {0, 8, 0, 0}
7. Définir comme série true :
ar = {0, 0, 8, 0}
8. Modifier le premier élément a[0]
ar = {8, 0, 8, 0}
Je ne sais pas quel tableau redimensionner (3 -5) prend les valeurs et les copie dans les nouvelles positions, 6 en avant prend des valeurs aléatoires, je pense. Je préfère resize() d'abord et ensuite setasseries() comme ceci :
//+------------------------------------------------------------------+//|indexingarraytest.mq5 |//|Copyright 2024, MetaQuotes Ltd. |//| https ://www.mql5.com//+------------------------------------------------------------------+#property copyright"Copyright 2024, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"#property indicator_chart_window//+------------------------------------------------------------------+//| Fonction d'initialisation de l'indicateur personnalisé//+------------------------------------------------------------------+intOnInit()
{
//--- cartographie des tampons d'indicateurs//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Fonction d'itération de l'indicateur personnalisée|//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---double ar[]; // TableauArrayResize(ar,2); // Préparer le tableau
ar[0]=1; // Définir les valeurs
ar[1]=2;
ArrayResize(ar,3); // Augmenter la taille du tableauAlert("Redimension to 3 normal: ", ar[0], " ", ar[1], " ", ar[2]);
ArraySetAsSeries(ar,true); // Modifier l'ordre d'indexationAlert("Redimension to 3 series: ", ar[0], " ", ar[1], " ", ar[2]);
ar[0]=8; // Fixer la valeur du nouvel élément du tableauAlert("Change the first element: ", ar[0]," ",ar[1]," ",ar[2]); // Imprimer les valeurs du tableauArraySetAsSeries(ar, false);
Alert("Normal renew: ", ar[0]," ",ar[1]," ",ar[2]); // Imprimer les valeurs du tableau//--- valeur de retour de prev_calculated pour l'appel suivantreturn(rates_total);
}
//+------------------------------------------------------------------+
Ok, essayons la version anglaise de MQL.
Merci pour votre code. Cela m'a fait gagner du temps. J'ai essayé d'utiliser les tableaux de MQL et ils étaient confus. J'étais alors très déprimé de devoir à nouveau écrire des structures de base qui étaient censées exister MAIS j'ai trouvé votre code qui m'a fait gagner du temps dans mes recherches sur les tableaux et sur la façon de les faire croître dynamiquement. AWESOME merci.
J'espère pouvoir vous rendre la pareille ! Le code ci-dessous fonctionne pour tous les types de données. Il fonctionnera également avec les objets, mais la méthode Contains (recherche) risque de ne pas fonctionner. Je ne l'ai testé que pour les types (double, int, bool). Les chaînes de caractères peuvent également poser problème et le code doit être étendu.
Vous pouvez alors le déclarer pour tous les types dont vous avez besoin, comme suit :
J'espère que cela aidera quelqu'un
Ne tenez pas compte de ma suggestion d'utiliser le tableau dynamique pour n'importe quel type de données. Il existe déjà un CArrayList générique déclaré, veuillez l'utiliser. J'ai rencontré un problème d'utilisation d'objets qui a été résolu dans ce fil de discussion : https://www.mql5.com/en/forum/358432
Il semble qu'il y ait une erreur dans la fonction arrayResize(), dans l'exemple le contenu du tableau est 1, 1, 3 en indexation normale et non 1, 2, 3. Voir cet exemple :
En ajoutant la fonction arraySetAsSeries() il semble être affecté par la fonction arrayresieze, voir cet exemple :Etapes :
1. ar = {}
2. ar = {9, 8}
3. ar = {9, 8, 0, 8, 0, 0}
4. Définir comme série true :
ar = {0, 0, 8, 0, 8, 9}
5. Redimensionner à 4
ar = {0, 0, 8, 0}
6. Définir comme série false :
ar = {0, 8, 0, 0}
7. Définir comme série true :
ar = {0, 0, 8, 0}
8. Modifier le premier élément a[0]
ar = {8, 0, 8, 0}
Je ne sais pas quel tableau redimensionner (3 -5) prend les valeurs et les copie dans les nouvelles positions, 6 en avant prend des valeurs aléatoires, je pense. Je préfère resize() d'abord et ensuite setasseries() comme ceci :