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

 

Je ne fais que dupliquer la question ici, personne ne répond dans les indicateurs...

J'ai commencé à étudier MQL5. Je ne suis pas expérimenté en programmation et j'ai donc quelques questions et doutes. Certains d'entre eux peuvent être résolus par moi-même, en analysant des exemples et en partie par l'intuition, mais certains aspects sont difficiles à comprendre immédiatement. J'ai commencé à étudier une chose simple - avoir deux toollines affichées dans la fenêtre principale du graphique. Je dessine la clôture de l'instrument actuel et de l'instrument supplémentaire (lié, la note suivra) pour le cadre temporel actuel par 1000 barres en arrière. L'instrument connexe est le contrat à terme de la série suivante, il est illiquide et présente toujours des lacunes dans les données, c'est-à-dire que le nombre de transactions n'est pas aussi fréquent que dans la série principale de contrats à terme. La tâche semble accomplie, mais il y a des erreurs. Je ne peux pas dire si le lissage est utile, c'est pourquoi j'ai utilisé iMA avec la période 1, de sorte que si nécessaire, il peut être lissé sans reprise.

Voici les questions :

1) Lors de la compilation, lorsque je copie le tampon iMA dans un tableau, je vois un avertissement "possible loss of data due to type conversion". Qu'est-ce que c'est et pourquoi, de quel type de conversion s'agit-il ? Les lignes sont tracées normalement et rien ne semble manquer.

2. après que l'indicateur ait fonctionné et que les lignes des deux instruments apparaissent sur la fenêtre principale du graphique, je constate qu'elles ne sont pas synchronisées. C'est-à-dire que le premier instrument est normal et correspond au graphique en chandelier de la fenêtre principale. Le second (moins liquide) présente des lacunes et il est donc progressivement "écrasé", ce qui provoque la désynchronisation. J'ai besoin qu'il soit synchronisé dans le temps d'une manière ou d'une autre. C'est tellement au-delà de mes capacités. Je dois le voir visuellement pour comprendre ce qui manque.

Voici une capture d'écran de ce à quoi il ressemble. La ligne jaune représente ce qui doit être synchronisé par rapport à la ligne verte. De sorte que la ligne jaune, où les trous dans les dates ne sont que des "connexions" des valeurs précédentes aux suivantes, plutôt qu'un pincement avec des dates manquantes. Le code est dans la pièce jointe.

Dossiers :
 
ottenand:

Je ne fais que dupliquer la question ici, personne ne répond dans les indicateurs...

J'ai commencé à étudier MQL5. Je ne suis pas expérimenté en programmation et j'ai donc quelques questions et doutes. Certains d'entre eux peuvent être résolus par moi-même, en analysant des exemples et en partie par l'intuition, mais certains aspects sont difficiles à comprendre immédiatement. J'ai commencé à étudier une chose simple - avoir deux toollines affichées dans la fenêtre principale du graphique. Je dessine la clôture de l'instrument actuel et de l'instrument supplémentaire (lié, la note suivra) pour le cadre temporel actuel par 1000 barres en arrière. L'instrument connexe est le contrat à terme de la série suivante, il est illiquide et présente toujours des lacunes dans les données, c'est-à-dire que le nombre de transactions n'est pas aussi fréquent que dans la série principale de contrats à terme. La tâche semble accomplie, mais il y a des erreurs. Je ne peux pas dire si le lissage est utile, c'est pourquoi j'ai utilisé iMA avec la période 1, de sorte que si nécessaire, il peut être lissé sans reprise.

Voici les questions :

1) Lors de la compilation, lorsque je copie le tampon iMA dans un tableau, je vois un avertissement "possible loss of data due to type conversion". Qu'est-ce que c'est et pourquoi, de quel type de conversion s'agit-il ? Les lignes sont tracées normalement et rien ne semble manquer.

2. après que l'indicateur ait fonctionné et que les lignes des deux instruments apparaissent sur la fenêtre principale du graphique, je constate qu'elles ne sont pas synchronisées. C'est-à-dire que le premier instrument est normal et correspond au graphique en chandelier de la fenêtre principale. Le second (moins liquide) présente des lacunes et il est donc progressivement "écrasé", ce qui provoque la désynchronisation. J'ai besoin qu'il soit synchronisé dans le temps d'une manière ou d'une autre. C'est tellement au-dessus de mes moyens. Je dois le voir visuellement pour comprendre ce qui manque.

Voici une capture d'écran de ce à quoi il ressemble. La ligne jaune représente ce qui doit être synchronisé par rapport à la ligne verte. De sorte que la ligne jaune, où les trous dans les dates ne sont que des "connexions" des valeurs précédentes aux suivantes, plutôt qu'un pincement avec des dates manquantes. Le code est dans la pièce jointe.


Le manche de l'indicateur doit être de type int. Exemple voir ici :CopyBuffer

int  CopyBuffer( 
   int       indicator_handle,     // handle индикатора 
   int       buffer_num,           // номер буфера индикатора 
   int       start_pos,            // откуда начнем  
   int       count,                // сколько копируем 
   double    buffer[]              // массив, куда будут скопированы данные 
   );
 
Vladimir Karputov:


Le manche de l'indicateur doit être de type int. Exemple voir ici :CopyBuffer

C'est vrai, j'ai manqué ce point, l'erreur de compilation a disparu, merci !

Mais le principal problème à l'heure actuelle est le décalage horaire, il est toujours d'actualité. Sans sa solution, il sera impossible d'effectuer, par exemple, des opérations mathématiques entre les outils, ce que je compte tester.

 
ottenand:

Exact, j'ai manqué ce point, l'erreur de compilation a disparu, merci !

Mais le principal problème à l'heure actuelle, la question du timing, est toujours d'actualité. Sans la résoudre, il serait impossible, par exemple, d'effectuer des opérations mathématiques entre instruments, ce que je compte tester.


Si j'étais vous, je commencerais par un codage correct - le fait est que votre style actuel est un "quatre voies" imprudent - c'est-à-dire qu'il n'y a pas de contrôles, tout est aléatoire.

Commence à fixer OnInit() :

  1. Après avoir obtenu la poignée, vous devez vérifier l'exactitude des données.
  2. si tout est correct, renvoyer NON PAS "0", mais "INIT_SUCCEED".
Tout cela se trouve dans l'exemple d'iMA. C'est seulement à ce moment-là que nous pourrons passer à autre chose.

 
Vladimir Karputov:


Si j'étais vous, je commencerais par écrire le code correctement - le fait est que votre style est maintenant un "quaternaire" imprudent - c'est-à-dire pas de contrôles, tout à l'improviste.

Commencez à corriger OnInit() :

  1. Après avoir obtenu la poignée, vous devez vérifier l'exactitude des données.
  2. si tout va bien, renvoyer NON PAS "0" mais "INIT_SUCCEED".
Tout ceci est dans l'exemple d'iMA. Ce n'est qu'à ce moment-là que vous pourrez passer à autre chose.

Alors qui t'a dit, mon ami, que tu ne pouvais pas agrafer sur un cinq et écrire magnifiquement sur un quatre ?

Il ne s'agit pas de la PLATE-FORME, mais de la tête de ce scribe particulier...

Le professeur Preobrazhensky avait raison quand il disait que ce n'est pas dans les placards, c'est dans les têtes...


 
Vladimir Karputov:


Si j'étais vous, je commencerais par écrire correctement le code. Le problème est que votre style est maintenant un "quaternaire" imprudent, c'est-à-dire qu'il n'y a pas de contrôles, tout est aléatoire.

Commencez à corriger OnInit() :

  1. Après avoir obtenu la poignée, vous devez vérifier l'exactitude des données.
  2. si tout va bien, renvoyer NON PAS "0" mais "INIT_SUCCEED".
Tout ceci est dans l'exemple d'iMA. Ce n'est qu'alors que vous pourrez passer à autre chose.

Bon, maintenant je vais savoir comment s'appelle mon style) C'est vrai, je commence directement à partir de la version 5, en partant de zéro)

Merci, j'ai corrigé les points 1 et 2. Le problème se situe au niveau du bloc de calcul. Je vais réfléchir à la manière de prescrire l'emplacement des barres de deux instruments en fonction du temps. Sinon, il y a un décalage et le même avertissement #4806.

Dossiers :
 
ottenand:

Bon, maintenant je vais savoir comment s'appelle mon style) Vraiment, je commence directement à partir de la version 5, en partant de zéro)

Merci, j'ai corrigé les points 1 et 2. Le problème est dans le bloc de calcul. Je vais réfléchir à la manière de prescrire l'emplacement des barres de deux instruments en fonction du temps. Sinon un lag et le même avertissement #4806.

C'est ça ! Ainsi, par exemple, sur M1, sur les futures "A", il y a des barres à 13 minutes, 14 minutes et 15 minutes. Mais le contrat à terme "B" a des barres à 13 minutes et 15 minutes seulement - c'est-à-dire un écart. Il y a eu des articles quelque part, cherchez le mot "trou".
 
Vladimir Karputov:
C'est vrai ! Parce que, par exemple, le contrat à terme M1 "A" a des barres à 13 minutes, 14 minutes et 15 minutes. Mais le contrat à terme "B" a des barres à 13 minutes et 15 minutes seulement - c'est-à-dire un écart. Il y a eu des articles quelque part, faites une recherche avec le mot "trou".
C'est de cela que je parle) L'erreur #4806 semble en être la raison. OK, je vais le chercher.)
 

Bon après-midi.

Pouvez-vous me dire comment trouver le prix de la ligne de tendance pour la barre actuelle ? J'ai essayé via ObjectGetDouble, mais cela ne donne pas le résultat souhaité. Exemple de code :

   ObjectCreate(0,"O_Resistance",OBJ_TREND,0,UpTime_2[0],UpFractal_2,UpTime_1[0],UpFractal_1);
   ObjectMove(0,"O_Resistance",0,UpTime_2[0],UpFractal_2);
   ObjectMove(0,"O_Resistance",1,UpTime_1[0],UpFractal_1);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_COLOR,O_Resistance_Color);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_STYLE,O_Resistance_Style);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_WIDTH,O_Resistance_Width);


double O_ResistancePrice = ObjectGetDouble(0,"O_Resistance",OBJPROP_PRICE,0); // при любом баре дает координату изначальной точки луча, а нужна цена
                                                                              // соответствующая текущему бару или первому
 
MaksGroup:

Bon après-midi.

Pouvez-vous me dire comment trouver le prix de la ligne de tendance pour la barre actuelle ? J'ai essayé via ObjectGetDouble, mais cela ne donne pas le résultat souhaité. Exemple de code :

ObjectGetValueByShift() (MT4 uniquement), ObjectGetValueByTime()(MT4, MT5)
Raison: