Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1177

 

Bonjour !

Pouvez-vous m'indiquer comment configurer l'indicateur pour qu'il ne fonctionne qu'à l'ouverture de la barre, et non à chaque tick, et comment faire en sorte qu'il ne s'exécute pas à chaque fois (à chaque nouvelle barre) sur l'ensemble de l'historique ?

Je voudrais utiliser l'indicateur comme indicateur d'ouverture de barre, et je vous remercie d'avance.

Rostislav


 
Rost17: Pouvez-vous m'indiquer comment configurer l'indicateur pour qu'il ne fonctionne qu'à l'ouverture des barres et non à chaque tick et comment faire en sorte qu'il ne s'exécute pas à chaque fois (à chaque nouvelle barre) dans tout l'historique ?
Datetime t ;
Tout d'abord, à propos des barres. Lorsqu'une nouvelle barre est formée, une nouvelle valeur est écrite dans Time[0] - le moment où la barre s'ouvre.
OnCalculate(...)
{
if(Time[0] == t) return(0) ; // Si cette barre est traitée --> exit
t = Time[0] ;

Maintenant pour toute l'histoire : elle va ralentir
 
STARIJ:
date t ;
D'abord, à propos des barres. Lorsque nous formons une nouvelle barre, nous écrivons une nouvelle valeur dans Time[0] - le moment où la barre s'ouvre.
OnCalculate(...)
{
if(Time[0] == t) return(0) ; // si cette barre est traitée --> exit
t = Temps [0] ;

Maintenant, pour toute l'histoire : il va ralentir

Merci pour cette réponse rapide. Ce que je demande, c'est comment faire pour qu'il ne ralentisse pas et ne passe pas par l'historique lorsqu'une nouvelle barre apparaît, mais qu'il traite simplement la nouvelle barre...

Maintenant, il est organisé comme suit : for(int i=limit-1 ; i>=0 ; i--) et tel que je le comprends, cela signifie qu'à chaque ouverture d'une barre, toutes les valeurs sur l'historique entier seront recalculées à nouveau, alors que vous devriez travailler seulement avec la dernière barre...

 
Rost17: Je demande comment faire pour qu'il ne ralentisse PAS et ne passe pas en revue tout l'historique lorsqu'une nouvelle barre apparaît, mais qu'il ne traite que la nouvelle barre...

C'est ainsi qu'il calcule sur la dernière barre :

//| Bears Power                                                      |
//+------------------------------------------------------------------+
int OnCalculate(.....)
  {
   int limit=rates_total-prev_calculated; // Количество баров, которые будем считать = ВсегоБаров - РанееПросчитано
   if(rates_total<=InpBearsPeriod) return(0);

   if(prev_calculated>0) limit++; // Если давно считаем, то захватим и предыдущий бар для точности
   for(int i=0; i<limit; i++)
     {
      ExtTempBuffer[i]=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE,i);
      ExtBearsBuffer[i]=low[i]-ExtTempBuffer[i];
     }
   return(rates_total);
  }
 
STARIJ:

Examinons d'abord la ligne

pour que ce soit plus clair pour moi, je l'ai réécrit de cette façon.

Aha !!! Maintenant je commence à comprendre... Dans la boucle, la variable a passe de 1 à 6. Avec les valeurs de cette variable 1, 5 et 6, il n'y a pas d'action. Ensuite, juste

Ou dans votre style.

Le résultat sera le même mais il sera plus rapide !

Maintenant, vous devez vous débarrasser de la fonction Statistic, écrire son corps trois fois de suite, remplacer les paramètres formels dans chacune des trois parties par des paramètres réels et supprimer les déclarations de variables dupliquées. Le code total sera un peu plus long mais l'exécution sera plus rapide. Il est logique de lancer print() - qui exactement à ce moment-là va regarder le journal des messages ? - Ou bien remplacez-le par Alert() pour l'afficher à l'écran. De plus, il y a une variable namZz2 - sa valeur change-t-elle ?


Je dois utiliser stats() au lieu de stats(). Stupidement, je sais que je peux réécrire trois fois, comme vous l'avez dit, mais le problème est que le résultat de la collecte de statistiques devra très probablement ajouter d'autres tableaux et que je reviendrai tôt ou tard aux tableaux d'origine. C'est pourquoi je vous propose des moyens simples, que je connais déjà, et qui me mèneront malheureusement au début. C'est pourquoi je regarde devant moi, afin de ne pas avoir à y revenir dans le futur !

for(int a=1;a<6;a++)
{
   if(a==2){Statistic(mZz2,namZz2);}
   if(a==3){Statistic(mZz3,namZz3);}
   if(a==4){Statistic(mZz4,namZz4);}
}

comment mettre ce code dans le statisticien !? pour être une procédure unique vous au début comme j'ai énoncé la question s'il vous plaît regarder !

 
STARIJ:

Voici comment il est calculé sur la dernière barre :

Merci beaucoup ! J'ai une source d'indicateurs très ancienne. Pourriez-vous faire en sorte qu'il ne recalcule pas tout l'historique à chaque fois, qu'il ne fonctionne qu'à la clôture des barres et qu'il place la flèche uniquement sur la barre après laquelle le signal est apparu ? Bien, et dans le nouveau style, avec OnCalculate... Je suis prêt à compenser le coût de votre temps... Si vous êtes d'accord, quelle est la meilleure façon de procéder ? Je peux vous l'envoyer dans un message privé ou à quel endroit ?
 
Игорь:

Voici un extrait du code de travail ! Comment le collecter en une seule statistique de vide sans statistique de vide intermédiaire ! Je devrais retravailler l'ensemble du code afin de rassembler tous les tableaux en un seul et essayer de le faire à partir de là !

L'extrait de votre code de travail que vous avez cité est soit erroné, soit votre fonction Statistic() ne fait rien d'autre qu'imprimer lorsqu'elle est appelée par Stat().

De toute façon, ça s'arrêtera juste après le retour ;.

Veuillez nous donner le code entier pour comprendre ce que vous voulez.

 

Pour mémoire. Trop de fils sur le forum pour aider les débutants sur MQL4.

Ce fil de discussion n'est plus pris en charge et est fermé.


Veuillez adresser toutes vos questions à l'un des fils de discussion actifs suivants :

https://www.mql5.com/ru/forum/160683

https://www.mql5.com/ru/forum/160587

Tous les autres messages dans ce fil seront supprimés.


 
aide un ordre déjà acheté peut changer son prix d'achat en 2 heures
 
Je veux une photo d'un personnage Minecraft et une pioche dans mes mains lorsque je suis rentable. Comment faire ?
Raison: