Rafraîchir la fenêtre du graphique - page 2

 

Le "problème" est peut-être que les indicateurs utilisent une limite, c'est-à-dire la fonction IndicatorCounted()
afin de ne pas repeindre les barres.

Le changement d'horizon temporel le réinitialise, mais pas WindowRedraw(). Sa fonction est de redessiner les objets, pas les indices des indicateurs.

void WindowRedraw( )
Redessine le graphique actuel de manière forcée. Elle est normalement utilisée après que les propriétés des objets ont été modifiées.

Je sais que j'ai l'habitude de recalculer environ 1000 barres pour la plupart des choses que j'écris, et cela est déclenché par un clic droit sur le graphique.
et cela est déclenché par un clic droit sur Refresh.

Si vous ne limitez pas sévèrement la boucle de l'indicateur, vous obtenez un rafraîchissement de l'indicateur à chaque tick.

 
? certains ont une idée de ce qui se passe ? Pourquoi je ne vois aucun effet après avoir utiliséWindowRedraw() ?

Merci beaucoup,
 

Etes-vous "difficile à lire" ?

 
Salut Phy,

juste après presque deux mois, j'ai reçu ta dernière réponse. Je ne sais pas comment j'ai pu passer à côté. J'ai toujours des problèmes avec "redessiner mon indicateur". maintenant je vais essayer de résoudre le problème avec les informations que vous m'avez données. merci beaucoup,,,...,
 

Montrez votre code...

 
brspMA:
hi phy,

juste après presque deux mois j'ai reçu ta dernière réponse. Je ne sais pas comment j'ai pu passer à côté. J'ai toujours des problèmes avec "redessiner mon indicateur". maintenant je vais essayer de résoudre le problème avec les informations que vous m'avez données. merci beaucoup,,,,
J'ai lu ce fil et je pense qu'il y a un problème dans votre code => la fonction WindowRefresh() ne vous aidera pas.
 
Bonjour,

Je suppose que j'essaie de réinitialiser l'indicateur pour le forcer à tout redessiner depuis le début !? mon problème est que j'utilise une fonction qui change les données passées en fonction des nouvelles données, et le résultat est que mon graphique devient une masse au fil du temps. J'ai besoin de redessiner tout mon indicateur périodiquement. dernièrement, j'ai changé le cadre temporel, de sorte que lorsque je retourne au cadre temporel où j'étais, j'obtiens mes fenêtres de graphique propres (redessinées) . voici le schéma de mon code :

int start(){
   int limit;
   int counted_bars=IndicatorCounted();
   //---- check for possible errors
   if(counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if (limit>GV) limit = GV;
   //---- main loop
   for(int i=limit; i>=1; i--){
 
 
{calculates the variable and feed the buffers}
 
return(0);}
merci beaucoup, ,
 
insérez 2 lignes dans votre code

int start(){
   int limit;
   int counted_bars=IndicatorCounted();
   //---- check for possible errors
   if(counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
 
   double startTime=GetTickCount();
   if (limit>GV) limit = GV;
   //---- main loop
   for(int i=limit; i>=1; i--){
 
 
{calculates the variable and feed the buffers}
 
   double finishTime=GetTickCount();
   Print("Calculation time is ",(finishTime-startTime)/1000.0," seconds");
return(0);}
 

Qu'est-ce que la GV ?

Ce que j'ai fait récemment, c'est quelque chose comme ceci :

for( int i = MathMax(WindowFirstVisibleBar(), Bars-IndicatorCounted()) ; i>= 0 ; i--){

Il redessine la partie visible de l'indicateur à chaque tick, mais pas les barres qui sont hors de vue.

 
phy:

Qu'est-ce que la GV ?

Ce que j'ai fait récemment, c'est quelque chose comme ceci :

for( int i = MathMax(WindowFirstVisibleBar(), Bars-IndicatorCounted()) ; i>= 0 ; i--){

Il redessine la partie visible de l'indicateur à chaque tick, mais pas les barres qui sont hors de vue.


GV est une variable globale que j'utilise pour définir la limite en fonction de la durée du retour en arrière que je veux effectuer.

vous êtes géniaux ! Je vais mettre en œuvre ce code cet après-midi.

for( int i = MathMax(WindowFirstVisibleBar(), Bars-IndicatorCounted()); i>= 0; i--){
merci pour votre générosité,