Erreurs, bugs, questions - page 31

 
Urain:
C'est possible, mais parfois cela fonctionne, bien que lorsque je définisse 3, le nom court affiche 3 valeurs et je ne veux qu'une seule du tampon principal.

Alors peut-être comme ça :

#property indicator_buffers 3
#property indicator_plots   1
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   SetIndexBuffer(1,L,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,S,INDICATOR_CALCULATIONS);

Une seule valeur est affichée sur le graphique.

 
DC2008:

Alors peut-être que ça se passe comme ça :

Sur le graphique, une seule valeur est affichée.

C'est ainsi qu'il s'avère que le nom court de l'indicateur affiche 3 chiffres, tandis que le tampon pour en tirer un, il stocke tout ce que vous devez savoir,

Le problème est qu'en 4 vous pouvez juste demander la valeur de la vague sur la barre désirée et ici je dois télécharger le tampon entier et le stocker quelque part

Ce stockage n'est pas nécessaire pour les besoins de l'indicateur. Mais je ne sais pas comment recevoir la valeur de l'onde.

 
DC2008:

Alors peut-être comme ça :

Une seule valeur est affichée sur le graphique.

Aussi glitchy ....
 
Interesting:

Il ne s'agit pas d'initialisation ici. Il ne s'agit même pas de ces deux lignes que Mashek appelle.

Même si nous supposons que le paramètre SYMBOL est vraiment nécessaire (personnellement j'en doute), le travail avec les tampons est boiteux, et je ne parle même pas du bloc calculateur...

Je constate que l'indicateur affiche la valeur de l'angle de régression linéaire du mauvais instrument sur lequel il fonctionne,

et celui prescrit dans l'entrée, donc avec un peu de chance vous cacherez le vérificateur.

Maintenant, d'un autre côté, dites-moi intelligemment ce que vous voyez comme incongru dans ce qui se passe dans le calcul ?

Je ne prétends pas que c'est tout bon (comme juste apprendre cinq et naturellement à la vapeur, comme beaucoup).

La première chose qui me vient à l'esprit est que la durée de l'historique sur les différentes paires est différente et que cela entraîne des problèmes,

Mais les développeurs m'ont assuré que le terminal chargera lui-même toutes les données nécessaires.

 
Urain:

Le problème est qu'en 4, vous pouvez simplement demander la valeur de la forme d'onde sur la barre nécessaire et ici vous devez charger tout le tampon,

le problème est qu'en 4 vous pouvez simplement demander la valeur de la vague sur la barre nécessaire, mais ici vous devez télécharger le tampon entier et le stocker quelque part.

Je dois charger tout le tampon, mais je n'en ai pas besoin pour mes besoins d'indicateur. Je ne sais pas comment l'obtenir d'une autre manière.

Je peux les faire bien, ou presque bien. Pour tous les autres tampons, on peut s'arranger (les séries ne sont pas utilisées, ce qui est étrange). Mais ce qui se passe dans la calculatrice est une grande question...
 
Urain:

Je constate que l'indicateur affiche la valeur de l'angle de régression linéaire du mauvais instrument sur lequel il fonctionne,

mais celui qui est prescrit dans l'intuition, donc avec un peu de chance tu cacheras le vérificateur.

Maintenant, dans le froid, dites-moi raisonnablement ce que vous voyez d'absurde dans ce qui se passe dans le calcul ?

Je ne prétends pas que c'est tout bon (comme juste apprendre cinq et naturellement à la vapeur, comme beaucoup).

La première chose qui me vient à l'esprit est que la durée de l'histoire à différentes paires de différents et donc des pépins,

Les développeurs m'ont assuré que le terminal chargera lui-même toutes les informations nécessaires.


Qu'y a-t-il à débattre ? Nous prenons le chapeau de la calculatrice et voyons ce que nous y voyons, et voici ce que nous voyons :

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[])

Après ça, il y a le contrôle des barres...

   int count=rates_total-prev_calculated;
   if(count==0)count=1;
Si vous ne connaissez pas le mot de passe, vous recevrez un avertissement. Alors dites-moi, où est la logique ?
 

J'ai réécrit le calcul comme ceci :

  {
//---
   int count=rates_total-prev_calculated;
   if(count>_Bars())count=_Bars()-1;
   if(count==0)count=1;
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<count;i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
int _Bars(){return(Bars(symbol,_Period));}
Les messages d'erreur ont disparu, mais le système ne fonctionne toujours pas correctement.
 

C'est là qu' on s'est creusé les méninges pour une dinde similaire. Regardez ce qui en est ressorti

 
Urain:

J'ai réécrit le calcul comme ceci :

Les enregistrements d'erreurs ont disparu mais le système ne fonctionne toujours pas comme il le devrait.

La seule bonne méthode est très simple.

Vous écrivez un indicateur qui fonctionne à 100%, et il est fait classiquement sans le paramètre "Symbole", c'est-à-dire qu'il est calculé en utilisant le symbole et la période actuels.

Ensuite, cette calculatrice BASIC est appelée dans Expert Advisor (si une opération mécanique est prévue) ou dans la calculatrice (s'il est nécessaire d'afficher des informations sur le graphique de l'INSTRUMENT NON CALCULÉ).

PS

Sinon, si la calculatrice ou une fonction distincte doit effectuer un calcul supplémentaire, puis relier les résultats aux données du graphique en cours...

 
Urain:

J'ai réécrit le calcul comme ceci :

Les messages d'erreur ont disparu, mais le système ne fonctionne toujours pas correctement.

C'est probablement mieux :

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot LRma
#property indicator_label1  "LRma"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
input string             symbol      ="EURJPY";
input int                MA_Period   =25;          // период MA
input int                MA_shift    =0;           // сдвиг индикатора
input ENUM_APPLIED_PRICE price       =PRICE_OPEN;  // тип цены 
//--- indicator buffers
double  LRma[],L[],S[],iPoint,iiMA;

int Lwma,Sma;// Хендлы машек
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   ArraySetAsSeries(L,true);
   ArraySetAsSeries(S,true);
   ArraySetAsSeries(LRma,true);
   Lwma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_LWMA,price);
   Sma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_SMA,price);
   iPoint=1.0/SymbolInfoDouble(symbol,SYMBOL_POINT);
   iiMA=1.0/MA_Period;
   IndicatorSetString(INDICATOR_SHORTNAME,"LRma_symbol_"+symbol);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   int count=rates_total-prev_calculated;
   if(count>1)count=(int)SeriesInfoInteger(symbol,0,SERIES_BARS_COUNT);
   if(count==0)count=1;
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<MathMin(ArraySize(LRma),ArraySize(L));i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Il semble fonctionner correctement.

Raison: