Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 371

 

Salutations à tous les membres du forum.

Veuillez m'aider à faire fonctionner l'indicateur avec un symbole spécifique, quel que soit le graphique sur lequel il est configuré.

Je sais qu'un paramètre externe est utilisé pour modifier le symbole

input string   Symb   ="GBPJPY";
Je ne sais pas quoi faire ensuite

Je joins l'indicateur

Dossiers :
Fisher.mq4  3 kb
 

Pouvez-vous m'indiquer comment réinitialiser le tampon lorsqu'une nouvelle barre apparaît, mais de manière à ce que les données précédentes ne soient pas effacées et soient affichées sur le graphique. Pour une raison quelconque, je n'arrive pas à remettre le tampon à zéro et lorsqu'une nouvelle barreapparaît, les nouvelles données sont superposées aux anciennes données accumulées. Qu'est-ce qui ne va pas dans mon code ? Merci pour cette précision.

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
  
   
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }
   
      
   if(Bid > Bid1) 
   {
   V1 = iVolume(NULL, 0, 0);
   V2 = V1 + V2;
   Buf_1[0]= V2;
   }                             
   else 
   {
   V3 = iVolume(NULL, 0, 0);
   V4 = V3 + V4;
   Buf_2[0]= (V4*-1);
   }
   Bid1=Bid;
   
   
  return(rates_total);
}
 
Alekseu Fedotov:

C'est comme ça que ça se passe


J'ai une question avec le code, il s'avère que la bougie actuelle non fermée a l'heure de fermeture et jusqu'à ce que la bougie se ferme, l'indicateur dessine la fermeture du prix de la période, sur laquelle l'indicateur est rouge dans la zone de l'écran qui ne devrait pas être dessiné parce que la bougie heure n'est pas fermée Bien sûr, vous pouvez résoudre le problème d'une autre manière en trouvant les barres horaires, mais je voulais un moyen plus facile, j'ai écrit plus tôt donc
for(i=limit; i>0; i--)
{
yesterday_weekday = TimeHour(iTime(Symbol(),0,i+1))-TimeHour(iTime(Symbol(),0,i));
if(yesterday_weekday!=0)

une autre solution au problème ? J'aimerais le voir dans la compilation.

 
MakarFX: Aidez-moi à faire fonctionner l'indicateur avec un certain symbole, quel que soit le graphique sur lequel il est configuré.

Il est nécessaire d'écrire ce paramètre dans les appels Higest, Lowest - ils sont obsolètes, mieux iHigest, iLowest et loué notoire Fisher immédiatement convenu d'un match nul (V.Vysotsky)

 
PokrovMT5:
J'ai une question avec le code, il s'avère que la bougie d'une heure actuelle non fermée a le temps de fermeture et jusqu'à ce que la bougie se ferme, l'indicateur dessine la fermeture des prix de la période sur laquelle l'indicateur se trouve, la zone rouge dans la capture d'écran ne doit pas être dessinée parce que la bougie d'une heure n'est pas fermée. C'est le moment de la compilation et ensuite après la compilation vient le dessin de chaque bougie fermée, bien sûr vous pouvez résoudre une autre façon en trouvant les barres horaires mais je voulais un moyen plus facile, j'ai écrit plus tôt

Y a-t-il une autre solution au problème ? Merci.

Si je vous comprends bien, vous voulez marquer la clôture horaire sur le graphique ?

// (только для TF меньше часа) для всех свечей внутри часа поставить HourCloseBuff=цена закрытия часа

// предполагается что close индексирован как тайм-серия

for(int back=i+1;back<=limit && TimeHour(time[back]==TimeHour(time[i+1]);back++) {

  HourCloseBuff[back]=close[i+1];

}

 
STARIJ:

Nous devrions écrire ce paramètre dans les appels Higest, Lowest - ils sont obsolètes, mieux vaut iHigest, iLowest et le célèbre Fischer a immédiatement accepté une partie nulle (V.Vysotsky).

#property  copyright "Copyright © 2005, Yura Prokofiev"
#property  link      "Yura.prokofiev@gmail.com"

#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Lime
#property  indicator_color3  Red
 
input string   Symb     ="GBPJPY";
extern int     period   =10;

double         ExtBuffer0[];
double         ExtBuffer1[];
double         ExtBuffer2[];


int init()
  {
   
   
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Red);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Lime);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);

   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);

   IndicatorShortName("Fisher");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);

   return(0);
  }


int start()
  {
   //int     period=10;
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current,old;
   double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
   double price;
   double MinL=0;
   double MaxH=0;  
   

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;


   for(int i=0; i<limit; i++)
    {  MaxH = High[iHighest(Symb,0,MODE_HIGH,period,i)];
       MinL = Low[iLowest(Symb,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;     
      Value=MathMin(MathMax(Value,-0.999),0.999); 
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
      
    }


   bool up=true;
   for(i=limit-2; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
           
      if (((current<0)&&(prev>0))||(current<0))   up= false;    
      if (((current>0)&&(prev<0))||(current>0))   up= true;
      
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
        
       else
         {
          ExtBuffer1[i]=current;
          ExtBuffer2[i]=0.0;
         }
     }

   return(0);
  }
Je l'ai fait, mais cela ne résout pas le problème pour...
price = (High[i]+Low[i])/2;
High et Low utilisent le symbole actuel.
 
Maxim Kuznetsov:

Si je vous comprends bien, vous voulez marquer la clôture horaire sur le graphique ?

// (только для TF меньше часа) для всех свечей внутри часа поставить HourCloseBuff=цена закрытия часа

// предполагается что close индексирован как тайм-серия

for(int back=i+1;back<=limit && TimeHour(time[back]==TimeHour(time[i+1]);back++) {

  HourCloseBuff[back]=close[i+1];

}

Maxim, bonjour ! Merci pour la variante, la mienne est presque la même, elle fonctionne aussi, maisAlekseu Fedotov l'a suggéré et j'ai écrit à ce sujet, quelle est l'idée de la corriger ?



for(i=limit; i>=0; i--)
     {
      T = iTime(NULL,0,i); 
      shift=iBarShift(NULL,60,T); 
      C=iClose(NULL,60,shift);
      CC[i]=C;
     }
 

Pouvez-vous m'indiquer comment réinitialiser le tampon lorsqu'une nouvelle barre apparaît, mais de manière à ce que les données précédentes ne soient pas effacées et soient affichées sur le graphique. Pour une raison quelconque, je n'arrive pas à remettre le tampon à zéro et lorsqu'une nouvelle barreapparaît, les nouvelles données sont superposées aux anciennes données accumulées. Qu'est-ce qui ne va pas dans mon code ? Merci pour cette précision.

 datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }
   
      
   if(Bid > Bid1) 
   {
   V1 = iVolume(NULL, 0, 0);
   V2 = V1 + V2;
   Buf_1[0]= V2;
   }                             
   else 
   {
   V3 = iVolume(NULL, 0, 0);
   V4 = V3 + V4;
   Buf_2[0]= (V4*-1);
   }
   Bid1=Bid;
   
   
  return(rates_total);
 

Personne ne peut m'aider ?

 

Bonne journée à vous tous ! Comment passer à la bonne fenêtre graphique ?

J'ai plusieurs fenêtres de différentes paires ouvertes, chacune avec un EA, un signal de trade apparaît, mais les devises sont à la merci de l'enfoiré, et j'ai besoin d'activer rapidement le graphique exact sur lequel le signal est venu.

Je connais la commande Symbol(), mais je ne sais pas comment activer la fenêtre avec une paire de devises spécifiée. Peut-être, qui a été confronté à cette tâche ?

Raison: