Erreurs, bugs, questions - page 3030

 
mktr8591:
Extrait de l'aide :"Le paramètre prev_calculated lors d'un appel de fonction contient la valeur renvoyée par OnCalculate() lors de l' appelprécédent."

Oui, il y a beaucoup de choses écrites dans l'Aide, mais pas toujours compréhensibles, malheureusement (sans vouloir vexer les développeurs), il faut apprendre, apprendre, apprendre. Mais cette branche existe parce que parfois on découvre des choses qui ne sont pas cohérentes avec l'Aide ou le bon sens, A100 est notre héros, parce qu'il va même là où personne ne monterait tout seul))).

 
Сергей Таболин:

1. Merci à tous - je suis devenu un peu plus compétent en matière d'indicateurs )))).

Andrew, si quelqu'un ne comprend pas tes idées (y compris moi), cela ne signifie qu'une chose : TU ne dessines pas correctement le tableau ! Ou plutôt, vous le faites d'une manière telle que beaucoup de gens ne le comprennent pas...

la vérité est plus importante. elle n'est pas toujours claire pour tout le monde, malheureusement.

 

Andrey Dik:

retourne 0, indiquant ainsi que nous n'avons encore rien compté et que prev_calc ne sera pas incrémenté de 1 sur la prochaine barre.

Alors return(rates_total) devrait augmenter prev_calc par rates_total ?

 
Andrey Dik:

retourne 0, indiquant ainsi que nous n'avons encore rien calculé et que le kalk prev n'augmentera pas de 1 sur la prochaine barre.

il se concentre lui-même sur le calcul et se plaint qu'il se concentre sur lui).

 
Andrey Dik:

nous pouvons nous permettre de calculer une nouvelle barre une seule fois et non à chaque tick.

nous ne pouvons pas nous le permettre car le terminal ne générera pas de données historiques en ligne sur le "TF supérieur".

en général, une certaine hypothèse est nécessaire ici :

- soit nous construisons nous-mêmes l'OHLC dans l'indicateur.

- ou le terminal construit lui-même l'OHLC pour nous


Si c'est le dernier cas, alors nous devons considérer que le terminal ne sait pas du tout comment les TF interagissent, qui est un multiple de quoi et ce qui se passe lors de l'événement"nouvelle barre". mais nous devrions laisser le terminal construire la TF nécessaire


Essayez ce code dans votre deuxième indicateur :

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[])
{
   double buff [];
   if(prev_calculated == 0)
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
         return 0;
      }
   }
   else
   {
      if (rates_total == prev_calculated)
      {
         if(CopyBuffer (Handle, 0, 0, 1, buff)<0) return 0;
         return rates_total;
      }
   }

   ulong t = GetMicrosecondCount ();

...... далее без изменений
 
Andrei Trukhanovich:

réinitialise lui-même le calcul et se plaint qu'il le réinitialise )

Andrei, exécute le code, s'il te plaît... mais ne commence pas, hein ? Je ne peux pas te combattre.

 
Igor Makanu:

nous ne pouvons pas nous le permettre car le terminal ne générera pas de données historiques en ligne sur le "vieux TF".

en général, une certaine hypothèse est nécessaire ici :

- Soit nous construisons nous-mêmes l'OHLC dans l'indicateur.

- ou le terminal construit lui-même l'OHLC


si c'est le dernier cas, alors nous devons considérer que le terminal ne sait pas du tout comment le TF interagit, qui est un multiple de quoi et ce qui se passe lors de l'événement"nouvelle barre".


Essayez ce code dans votre deuxième indicateur :

Votre code va faire des calculs à chaque tick, ce n'est pas intéressant pour moi, je ne vais même pas l'exécuter. J'ai besoin de faire le calcul UNE seule fois sur chaque barre, sur tous les indicateurs utilisés, pas sur chaque tick de tous les indicateurs utilisés.

 
Andrey Dik:

Votre code va effectuer des calculs à chaque tick, je ne suis pas intéressé, je ne l'exécuterai même pas. J'ai besoin de faire le calcul UNE seule fois sur chaque barre, sur tous les indicateurs utilisés, pas sur chaque tick de tous les indicateurs utilisés.

Mon code va "tick by tick" seulement votre indicateur #1, où vous avez écrit :

 if (rates_total == prev_calculated) return rates_total;

il permettra au terminal de construire lui-même le "cadre temporel supérieur".

Pour moi - c'est "moins cher" que d'effectuer un recalcul complet de l'indicateur № 1, qui se produit dans votre code lors de la synchronisation de l'historique sur le "vieux TF".

 
Andrey Dik:

Andrei, pouvez-vous exécuter le code, s'il vous plaît ... mais ne commence pas, hein ? Je ne peux pas te combattre.

Remplacer

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return 0;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return 0;
   }

à

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return prev_calculated;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return prev_calculated;
   }

et le tester.

 
Igor Makanu:

mon code va "marteler sur chaque tick" seulement votre indicateur #1, où vous avez écrit :

il permettra au terminal de construire de manière indépendante le "délai supérieur".

Pour moi - c'est "moins cher" que d'effectuer un recalcul complet de l'indicateur 1, qui se produit dans votre code lors de la synchronisation de l'historique sur le "TF supérieur".

Oui, mais pourquoi la réinitialisation avant défaut est-elle sur la TF inférieure ?

Raison: