Erreurs, bugs, questions - page 3137

 
lapundra1 #:
Bonjour !
Lorsque l'on teste l'EA sur l'historique pour tous les instruments sélectionnés, le testeur ne donne des résultats que pour les paires de devises, mais pour la crypto il donne "oninit returns non-zero code 1". Qu'est-ce que je peux faire ? Qui l'avait ?

Mettez en commentaire la ligne 123 et l'erreur disparaîtra. Je vous le dis en tant que télépathe :) - parce qu'il n'y a pas de code, donc seulement de la télépathie, pas d'autre moyen :)

 

Salutations.

Une erreur se produit lors de l'exécution de MT5 dans le terminal :

2022.01.03 15:33:30.108 Virtual Hosting n'a pas réussi à obtenir la liste des hôtes virtuels [1001] (tls - create certificate chain engine failed)

2022.01.03 15:34:30.945 Signal '56334871' : échec de l'obtention de la liste des signaux


Et ensuite, en essayant de se connecter à un référentiel dans MetaEditor :

2022.01.03 15:34:39.668 La demande de liste de projets de Storage a échoué avec l'erreur 1001

2022.01.03 15:34:46.561 Storage L'activation de MQL5 Storage a échoué [1001].


Dans le même temps, la connexion à un autre ordinateur fonctionnait bien, et toutes les modifications étaient envoyées au stockage.

Aucun problème de réseau n'a été détecté sur l'ordinateur, tout a bien fonctionné. Aucune activité "risquée" n'a été effectuée sur l'ordinateur ces derniers mois non plus, et tout fonctionne bien. La construction est de 3140.

Dans quelle direction dois-je creuser ?


 

Je ne veux même pas me pencher sur les mystères de la Cour de Madrid et Dieu m'interdit de me demander pourquoi les poignées d'indicateurs commencent à indexer à partir de 10 et non de 0 ou 1. Cela ne me dérange pas, je peux vivre avec.

Pourquoi dois-je demander, s'il y a deux sortes de poignées indépendantes du même indicateur et que je supprime la seconde, non seulement la seconde MA, mais aussi la première disparaît ? C'est-à-dire qu'en enlevant une des poignées, on tue aussi l'autre. Voici le codeiMA hautement simplifié et doublé de l'aide :

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

#property indicator_label1  "iMA1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "iMA2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

double iMABuffer1[], iMABuffer2[];
int    handle1, handle2;
int    bars_calculated=0;

int OnInit()
  {
   SetIndexBuffer(0,iMABuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,iMABuffer2,INDICATOR_DATA);

   PlotIndexSetInteger(0,PLOT_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_SHIFT,0);

   handle1=iMA(_Symbol,PERIOD_CURRENT,10,0,MODE_SMA,PRICE_CLOSE);
   handle2=iMA(_Symbol,PERIOD_CURRENT,20,0,MODE_SMA,PRICE_CLOSE);

   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int values_to_copy;

   int calculated=BarsCalculated(handle1);
   if(calculated<=0) return(0);

   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
      if(calculated>rates_total) values_to_copy=rates_total;
      else                       values_to_copy=calculated;
   else
      values_to_copy=(rates_total-prev_calculated)+1;

   if(!FillArrayFromBuffer(iMABuffer1,0,handle1,values_to_copy)) return(0);
   if(!FillArrayFromBuffer(iMABuffer2,0,handle2,values_to_copy)) return(0);

   //if(handle2!=INVALID_HANDLE)
   //   Print(IndicatorRelease(handle2));

   bars_calculated=calculated;

   return(rates_total);
  }

bool FillArrayFromBuffer(double &values[],
                         int shift,
                         int ind_handle,
                         int amount
                         )
  {
   if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
      return(false);

   return(true);
  }

void OnDeinit(const int reason)
  {
   if(handle1!=INVALID_HANDLE)
      IndicatorRelease(handle1);
   if(handle2!=INVALID_HANDLE)
      IndicatorRelease(handle2);
  }

Si vous décommentez les deux lignes, le résultat est que rien n'est rendu. Attendu : la première MA (rouge) reste.

...Et tout ce que je voulais faire était de nettoyer la mémoire.

 
x572intraday #:

Je ne vais même pas entrer dans les "Secrets de Madrid" et Dieu m'interdit de me demander pourquoi les poignées indicatrices commencent à indexer à partir de 10 et non à partir de 0 ou de 1. Je ne me soucie pas de cela, je peux vivre avec.

Pourquoi dois-je demander, s'il y a deux sortes de poignées indépendantes du même indicateur et que je supprime la seconde, non seulement la seconde MA, mais aussi la première disparaît ? C'est-à-dire qu'en enlevant une des poignées, on tue aussi l'autre. Voici le codeiMA hautement simplifié et doublé de l'aide :

Si vous décommentez les deux lignes, le résultat est que rien n'est rendu. Attendu : la première MA (rouge) reste.

...Et tout ce que je voulais faire était de nettoyer la mémoire.

Au moins :

if(handle2!=INVALID_HANDLE && !FillArrayFromBuffer(iMABuffer2,0,handle2,values_to_copy)) return(0);
 
JRandomTrader #:

Au minimum :

Avez-vous vérifié ? Ça n'a pas marché pour moi. Et il suffit d'en supprimer un (en libérant de la mémoire) et de laisser visuellement l'autre. Et de votre logique découle : si le second handle existe et que le second buffer n'a pas été rempli, alors exit, et il n'arrive même pas à ma ligne avec IndicatorRelease(handle2) (si j'ai inséré le code au bon endroit).

 
   int dim=5;
   int Arr1[5];// OK
   int Arr2[dim];// '[' - invalid index value

Soit j'ai complètement merdé, soit, si ce n'est pas un bug, c'est un coup de pouce.

 
x572intraday #:

Soit j'ai complètement merdé, soit si ce n'est pas un bug, mettez-moi dans l'Aide.

La taille d'un tableau statique est une constante, pas un int.

 
Valeriy Yastremskiy #:

La dimensionnalité d'un tableau statique est une constante, et non un int.

Il est possible de définir un vecteur de cette manière, mais ils ne sont que doubles.

int n = 5;
vector v(n);
v[0] = 1.2;
 
Aleksey Nikolayev #:

Vous pouvez définir un vecteur de cette façon, mais ils ne font que barboter.

Ok. Je ferais mieux de le redimensionner alors.

 
Valeriy Yastremskiy #:

La dimensionnalité d'un tableau statique est une constante, pas un int.

Désolé, j'ai répondu sans vérifier.

Je joins la question, constant static int, ushort, l'effet est le même, bien que dans l'aide :

Variables

L'index du tableau ne peut être qu'un nombre entier.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Bugs, bugs, questions

x572intraday, 2022.01.08 20:44

   int dim=5;
   int Arr1[5];// OK
   int Arr2[dim];// '[' - invalid index value

Soit je suis complètement foutu, soit si ce n'est pas un bug, c'est un coup de poignard dans l'Aide.


Raison: