MetaTrader 4 Build 529 beta publié avec un nouveau compilateur - page 27

 
Barbarian:

Vous n'avez probablement pas lu mon message ci-dessus, dans lequel je décrivais ce qui est en train d'être écrit pour les personnes utilisant les versions bêta de MT4. Dans nix`, tous travaillent dans leurs propres sandboxes complètement, seul l'utilisateur root met les programmes communs et distribue les droits pour leur utilisation par les autres utilisateurs. L'idéologie y est complètement différente, même si elle semble similaire à celle de Microsoft. Au fait, cela ne me dérange pas que la version bêta écrive les paramètres de l'utilisateur dans X:\Users\xxx\AppData\Roaming\MetaQuotes\Terminal\, ce qui me dérange c'est ce qui suit :

1. Il crée un sous-répertoire X:\Users\xxx\AppData\Roaming\MetaQuotes\Terminal\B5589D10299052C8D921603EBD1F9752\ qui jusqu'à ce que vous y arriviez vous ne connaîtrez pas son nom, de plus il change son nom à chaque mise à jour.

2. Ce chemin est utilisé non seulement pour écrire les paramètres de l'utilisateur, mais aussi pour les fichiers exécutables - indicateurs, Expert Advisors, scripts, etc., en général, toutes les choses pour lesquelles vous ne laisserez pas un étranger accéder à votre PC, même sous un autre nom d'utilisateur. Bien que cela puisse, bien sûr, être évité plus tard, mais à quel prix.

Je crains surtout le premier point, car en utilisant la lecture / écriture de fichiers, le code pour utiliser ces opérations deviendra plus compliqué.


Je l'ai lu. Je suis tout à fait d'accord avec vous. Ce que j'ai écrit - ce ne serait pas une mauvaise idée de configurer le chemin dans le terminal. Il est parfois utile de partager des paramètres, des fichiers, des EA... Parfois non.
 
Antonsan:

J'écris en espagnol. Et je traduis avec Google.

La traduction en anglais est tout aussi mauvaise que la traduction russe.

Cet indicateur est préparé pour l'EA et ne dessine que quelques barres.
En changeant de période, j'ai observé que parfois l'indicateur est souvent répété à l'écran.
Parfois, il semble fonctionner plusieurs fois et tracer la ligne correctement, d'autres fois, il semble qu'il s'agisse de copies identiques disposées dans l'histoire.

Il y avait trois copies identiques dans l'historique, mais pour réduire la capture d'écran, on n'en a vu que deux.

Cela se produit lorsque le terminal télécharge l'historique d'un autre TF.

Vous devez effacer tout le tampon après l'initialisation de l'indicateur. Ou dessiner toutes les barres.

 
ALXIMIKS:


J'ai décrit mon idée (balancer le graphique, en mettant le présent dans le passé et en inventant le futur), si ce n'est pas très clair, alors hélas.........

Je serais heureux si vous pouviez suggérer une autre façon de dessiner ce qui est nécessaire sur les barres moins avec des valeurs adéquates sur les barres plus.

Ce qu'il faut mettre où n'est pas important. Ce qui est important, c'est ce qui doit être dessiné comme résultat.

Si vous avez besoin d'une tranche du passé et du futur, il vous faut un tampon et SetIndexShift pour le nombre nécessaire de barres dans le futur (il est emprunté au passé).

Si seul le futur est nécessaire - encore un tampon, SetIndexShift( bars ), et remplissez seulement les valeurs "bars".

Et si vous avez besoin du passé complètement (critique, même les barres les plus à gauche doivent être remplies) et d'une partie du futur, alors 2 buffers, chacun pour son propre cas.

En général, je ne vois pas le problème.

 

Le bogue selon lequel les paramètres externes déclarés en tant que chaîne perdaient leurs valeurs est maintenant corrigé. Merci

Le problème suivant concerne les appels iCustom(). Si l'indicateur appelé contient des paramètres de type chaîne, l'erreur suivante se produit :


Code pour "_master" :

#property indicator_chart_window
#property indicator_buffers 1

extern string TestString = "whatever value that we want initially set";

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start ()
{
   firstBuffer[0] = iCustom(NULL,0,"_slave","",0,0);
   Comment(firstBuffer[0]);
   return(0);
}

Code pour "_slave" :

#property indicator_chart_window
#property indicator_buffers 1

extern string TestString = "whatever value that we want initially set";

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start()
{
   firstBuffer[0] = 1;
   return(0);
}

Une erreur différente se produit lorsque le paramètre n'est pas un type de chaîne de caractères.

Lorsqu'il est déclaré comme entier, l'instance "_slave" est rechargée encore et encore (comme dans le cas où le type de paramètre est incorrect).

Code pour "_master integer" (utilisation d'un paramètre de type integer dans l'appel iCustom() :

#property indicator_chart_window
#property indicator_buffers 1

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start ()
{
   firstBuffer[0] = iCustom(NULL,0,"_slave integer",(int)0,0,0);
   Comment(firstBuffer[0]);
   return(0);
}

Et le code pour "_slave integer" :

#property indicator_chart_window
#property indicator_buffers 1

extern int dummy = 0;

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start()
{
   firstBuffer[0] = 1;
   return(0);
}

Lorsque le paramètre de l'indicateur appelé est déclaré comme double, cela fonctionne bien.

 

Je pense qu'il doit y avoir un problème avec le terminal, qui n'efface pas correctement la mémoire de données, ou tout autre problème que vous ne connaissez pas.

Si ces situations peuvent arriver à un expert, il recevra sûrement des données erronées.

Il s'agit plutôt d'un programme de dessin pour les arbres de Noël.

 
mladen:

Lorsque le paramètre de l'indicateur appelé est déclaré comme double, cela fonctionne bien.


Nous allons le vérifier dès que possible. Merci.
 
Antonsan:

J'écris en espagnol. Et je traduis avec Google.

La traduction en anglais est tout aussi mauvaise que la traduction russe.

Cet indicateur est préparé pour l'EA et ne dessine que quelques barres.
En changeant de période, j'ai observé que parfois l'indicateur est souvent répété à l'écran.
Parfois, il semble fonctionner plusieurs fois et tracer la ligne correctement, d'autres fois, il semble qu'il s'agisse de copies identiques disposées dans l'histoire.

Il y avait trois copies identiques dans l'historique, mais pour réduire la capture d'écran, on n'en a vu que deux.

Hola ! Escriba en el español ! Se lo traduciré al ruso ! Suerte !
 
Antonsan:

Je pense qu'il doit y avoir un problème avec le terminal, qui n'efface pas correctement la mémoire de données, ou tout autre problème que vous ne connaissez pas.

Si ces situations peuvent arriver à un expert, il recevra sûrement des données erronées.

Il s'agit plutôt d'un programme de dessin pour les arbres de Noël.

Le terminal ne doit pas vider vos tampons. Il suffit de les initialiser une fois après le lancement de l'indicateur.
 
stringo:

Corrigé

Corrigé également les points 1 et 2

Point 3, on travaille sur le débogueur.

Pour les points 4, 5, il faut savoir comment se reproduire. Pas à pas. Ce n'est pas reproductible à la volée.

Merci pour les commentaires. Code envoyé à Servicedesk, #880536.
 

Erreur de documentation :

datetime iVolume

devrait être

double iVolume


Raison: