Indicateur Questions diverses - page 12

 

Il n'y a aucune raison pour que cette instruction d'impression ne génère pas quelque chose.

Si vous ajoutez l'indicateur à un nouveau graphique, est-ce qu'il s'imprime (sans avoir à modifier l'horizon temporel) ?

Si c'est le cas, il se peut que l'indicateur soit déjà présent sur un graphique et que vous recompiliez en vous attendant à voir le changement.

 
honest_knave:

Il n'y a aucune raison pour que cette instruction d'impression ne génère pas quelque chose.

Si vous ajoutez l'indicateur à un nouveau graphique, est-ce qu'il s'imprime (sans avoir à modifier l'horizon temporel) ?

Si c'est le cas, cela pourrait être un problème d'avoir déjà l'indicateur sur un graphique et de recompiler en s'attendant à voir le changement.


Merci pour le commentaire rapide, j'apprécie.

Oui ! Le message ci-dessous s'imprime, qu'il s'agisse de Load Template ou d'Add Indicator.

20...   ... EURUSD,M1: This Year1900

Mais comme vous le savez, ce code pourrait me donner " 2017 ".

//--- 2eme fois édité

Lorsque je recompile, le résultat est correct.

Mais je ne peux pas ouvrir le MetaEditor que j'ai recompilé quand j'essaie d'ajouter un indicateur et de charger un modèle... J'espère que vous comprenez ce que je veux dire.

 
Max Enrik:


Merci pour le commentaire rapide, j'apprécie.

Oui ! Le message ci-dessous s'imprime soit en chargeant le modèle, soit en ajoutant un indicateur.

Mais comme vous le savez, ce code pourrait me donner " 2017 ".

//--- 2eme fois édité

Quand je recompile, le résultat est correct.

Mais je ne peux pas ouvrir le MetaEditor que j'ai recompilé quand j'essaie d'ajouter un indicateur et de charger un modèle... J'espère que vous comprenez ce que je veux dire.


Il est possible que la raison pour laquelle vous obtenez la "mauvaise" année est que OnInit() est exécuté avant que vous ne soyez connecté à votre courtier.

Year() est basé sur l'heure du serveur... s'il n'y a pas de connexion, il ne connaît pas l'année.

Comparez avec :

TimeYear(TimeLocal())
 
honest_knave:


Il est possible que la raison pour laquelle vous obtenez la "mauvaise" année soit que OnInit() est exécuté avant que vous ne soyez connecté à votre courtier.

Year() est basé sur l'heure du serveur... s'il n'y a pas de connexion, il ne connaît pas l'année.

Comparez-le avec :


Je suis sûr que OnInit() etOnCalculate(...) nécessitent un style de code différent...
Je vais essayer de réécrire mes indicateurs à nouveau.
( il est possible que j'abandonne )

Merci pour votre commentaire.

 

Je pense que je pourrais écrire un code pour d'abord supprimer tous les objets de l'indicateur puis les réécrire.
J'ai essayé comme le code ci-dessous. Mais j'ai des doutes sur cette méthode.

Q : Cette méthode est-elle suffisante pour supprimer tous les objets de l'indicateur, s'il vous plaît ?

Tout conseil serait le bienvenu, merci.

int OnInit()
 {
  ObjectsDeleteAll( 0, prefix );
  
  // then all my indicator code here...
 }
 
Max Enrik:

Je pense que je pourrais écrire un code pour d'abord supprimer tous les objets de l'indicateur puis les réécrire.
J'ai essayé comme le code ci-dessous. Mais j'ai des doutes sur cette méthode.

Q : Cette méthode est-elle suffisante pour supprimer tous les objets de l'indicateur, s'il vous plaît ?

Tout conseil serait le bienvenu, merci.


C'est la façon correcte de supprimer tous les objets du graphique actuel qui commencent par 'prefix'.
 
honest_knave:

C'est la bonne façon de supprimer tous les objets du graphique actuel qui commencent par 'prefix'.

Cool ! Merci pour votre réponse.
Maintenant, j'ai juste besoin de voir comment mon indicateur fonctionnera le jour suivant.

( p.s je n'aime pas tester mon indicateur avec Tester )

 

( Une fois que je l'ai dit )

J'utilise le code de la méthode ci-dessous pour mes quelques indicateurs, ces indicateurs n'ont pas de problèmes, mais seulement un problème lorsque je démarre la plate-forme MT4 qui est que les indicateurs ont besoin de redémarrer la plate-forme qui met à jour juste pour les valeurs correctes. Je ne rencontre ce problème qu'une fois par jour.

Q : Alors, est-ce que la partie du code ci-dessous peut causer un problème qui ne peut pas mettre à jour les valeurs correctes, s'il vous plaît ?

Merci d'avance.

int OnInit()
{
    //---
    datetime a = iTime( Symbol(), 0, 0 );
    int      b = iBarShift( Symbol(), 0, a );
    datetime c = iOpen( Symbol(), 0, b );
    //---
    return(0);
}
 

Le code dans OnInit() ne s'exécute qu'une fois.

Lorsque vous redémarrez votre terminal, OnInit() peut se terminer avant que vous ne vous soyez connecté à votre courtier.

Sans une connexion à votre courtier, l'heure sera fausse.

Je vous suggère de déplacer votre code hors de OnInit(), ou au moins de vérifier IsConnected().

 
honest_knave:

Je vous suggère de déplacer votre code en dehors de OnInit(), ou au moins de vérifier IsConnected().

Je n'utilise jamais ce IsConnected(), je vais faire des recherches à ce sujet.

Merci beaucoup.

Raison: