Erreurs, bugs, questions - page 1545

 
Karputov Vladimir:

Il s'agit d'un forum technique et chaque commentaire doit être confirmé :

  • informations sur le terminal et le système d'exploitation (trois premières lignes de l'onglet "log" après le redémarrage du terminal)
  • code
  • une description détaillée de ce que vous avez fait et de ce que vous avez obtenu.

Une description assez détaillée de ce que j'ai observé. Les développeurs ne me doivent rien et je ne leur dois rien. S'ils sont intéressés, nous leur parlerons au Service Desk.

Le code de l'indicateur vide est évident.

 
comp:

J'ai enregistré une vidéo montrant comment l'indicateur (en mode standard - non débogué) se met à jour, mais aucune nouvelle barre n'est dessinée. Dès que vous retirez l'indicateur du graphique, de nouvelles barres apparaissent immédiatement.

Les hébergeurs n'acceptent pas le fichier vidéo. Si nécessaire, je peux l'envoyer à Servicedesk, tel quel.

Regroupez-les dans une archive et envoyez-les. Les fichiers Zip sont pris en charge.
 
Veuillez me dire comment activer/désactiver l'échelle de temps précise dans MetaTrader 5 de manière programmatique. Je ne peux pas le trouver.
Par le biais de CHART_SHOW_DATE_SCALE - ce n'est pas cela, si je comprends bien.

Activez manuellement le temps d'intérêt via le chemin suivant :

Terminal -> Service -> Paramètres -> Graphiques -> Ligne de temps précise


Je joins le code de test ci-dessous. Si l'option "Échelle de temps précise" est activée manuellement dans le terminal de trading, cet indicateur de test dessine des segments de ligne verticaux avec des points d'attache entre deux barres. S'il n'est pas activé, il n'est pas entre les barres.

La capture d'écran ci-dessous montre un segment de ligne verticale créé par le code de test entre les barres lorsque l'option "Échelle de temps précise" est activée.



Je vais vous dire tout de suite la deuxième chose qui m'intéresse :

Si j'exécute ce code dans le testeur, les lignes ne sont pas dessinées avec des points d'ancrage entre les barres. Ils ne sont pas créés comme dans la capture d'écran ci-dessus, ils sont créés comme dans la capture d'écran ci-dessous.

MetaTrader 5 Version : 5.00 build 1295

Je ne sais pas comment poser une question plus précise ici, car je n'ai pas de réponse à la première.



P./S. :

J'ai apporté quelques clarifications :

  • ajout de captures d'écran ;
  • a remplacé le code de test, en supprimant la variable non utilisée ici et en affichant une fenêtre séparée ;
  • les clarifications que j'ai apportées au texte en caractères bleu foncé.
Dossiers :
 

Comment faire pour que le terminal appelle OnCalculate dans MT5 ? ChartRedraw n'aide pas. La variante DLL ne convient pas.

En d'autres termes, je dois créer un événement Calculate : https://www.mql5.com/ru/docs/runtime/event_fire#calculate.

Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

D'après les résultats de la recherche, je suis arrivé à la conclusion qu'il ne semble pas y avoir de fonction dans l'aide de MQL5 qui puisse être utilisée pour activer/désactiver par programme l'échelle de temps précise dans MetaTrader 5.

Pour une raison quelconque, j'avais l'impression qu'il y avait eu des changements à cet égard ces derniers temps. Mais bien sûr, je dois me tromper.

Si c'est le cas, je vais reformuler ma première question ci-dessus :

Y aura-t-il une fonction permettant d'activer/désactiver par programme l'échelle de temps précise ?


Et dans un cas comme dans l'autre (sera ou ne sera pas introduit) : comment faire cet interrupteur marche/arrêt dans le testeur ?

 
comp:

Comment faire pour que le terminal appelle OnCalculate dans MT5 ? ChartRedraw n'aide pas. La version DLL ne fonctionne pas.

Si vous le trouvez, dites-le moi aussi).

Pour l'instant, pour autant que je sache, la réponse est "pas question".

 
Комбинатор:

Si vous le trouvez, faites-le moi savoir aussi).

Pour l'instant, pour autant que je sache, la réponse est "pas question".

Si je suis un conseiller, c'est comme ceci

#define  PERIOD_NULL -1

void CallOnCalculates( void )
{
  const string Name = __FUNCTION__;

  if (GlobalVariableCheck(Name))
  {
    const int Value = (int)GlobalVariableGet(Name);

    if (Value == PERIOD_NULL)
    {
      GlobalVariableDel(Name);

      ExpertRemove();
    }
    else if (ChartSetSymbolPeriod(0, Symbol(), (ENUM_TIMEFRAMES)Value))
      GlobalVariableSet(Name, PERIOD_NULL);
  }
  else
  {
    const ENUM_TIMEFRAMES period = Period();

    if (ChartSetSymbolPeriod(0, Symbol(), (period == PERIOD_MN1) ? PERIOD_W1 : PERIOD_MN1))
    {
      GlobalVariableTemp(Name);

      GlobalVariableSet(Name, period);
    }
  }

  return;
}

void OnInit( void )
{
  CallOnCalculates();

  return;
}

Mais j'en ai besoin pour autre chose et il ne me convient pas.

 
comp:

Si par Conseiller Expert, alors comme ceci

Si le script, alors nous pouvons (l'implémentation est complètement différente - sans changer le TF)appeler OnCalculate pour un indicateur spécifique sur le graphique ou pour tous les indicateurs en même temps.

Mais j'en ai besoin pour autre chose et cette variante ne convient pas.

Mais cette variante (script) n'est pas non plus adaptée, si l'indicateur doit faire en sorte que le terminal appelle son propre OnCalculate (MT5).

 
Avec un indicateur, j'ai besoin d'un indicateur.
 

Dans mon indicateur, je n'utilise plus du tout OnCalculate() ces derniers temps - et rien, le visage ne fait que s'élargir. :)

Mais sérieusement : utilisezOnChartEvent (). Convient à tous les cas de la vie (imho).