[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 268

 
drknn:


1. Pour pouvoir décider exactement ce qu'une fonction normale doit retourner, je dois savoir exactement pourquoi le code principal a besoin d'une telle valeur. Par exemple, si je veux prendre la décision d'ouvrir un ordre d'achat lorsqu'il y a un signal, je vais écrire une fonction qui renvoie le nombre d'ordres d'achat déjà ouverts. En fonction de leur nombre, le code prendra une décision en suivant la logique intégrée dans le code. Je ne sais pas quelle logique est intégrée dans le code de retour. Aujourd'hui, je parcourais un article sur la création d'un sémaphore et je suis tombé sur un code de retour (-2). Surpris, j'ai posé une question ici. C'est tout. ( https://www.mql5.com/ru/articles/1412 - article ici).

2. le terminal ignore les valeurs de retour. Est-ce exact ? Si c'est le cas, alors une nouvelle question légitime se pose, pourquoi en créant un EA/indicateur/script le développeur met dans un modèle exactement int, parce qu'il serait plus logique d'y mettre void - alors le terminal ne devrait rien ignorer - nous gagnerions alors 1 tact de temps processeur ? Peut-être qu'il y a une certaine logique dans QUOI retourner des fonctions int init(), int deinit() et int start() ? Je pense que Roche l'a déjà expliqué à quelqu'un quelque part - il se souvenait d'une description du moment où il fallait renvoyer zéro et du moment où il fallait renvoyer (-1). C'est justement cette explication que je cherchais. Dommage que je n'aie pas pu le trouver...

P.S.

L'auteur de l'article utilise la déclaration (-2) pour ses propres besoins. Mais le fait est que parfois la fonction start() se termine par un code retournant une valeur différente de zéro. Et ce n'est pas une seule personne qui le fait. C'est exactement cette logique que je veux comprendre.

1. Je ne peux rien y ajouter. Tout ce que vous voulez, rendez-le.

2. le terminal l'ignore et votre code ne l'ignore pas, si c'est ainsi qu'il est construit. L'appel système ignore les deux paramètres et la valeur de retour. C'est assez évident. Où est-ce que ça remonte dans ce cas ?

Nous ne pouvons que deviner la création du motif. Les développeurs ont dû procéder à partir de l'INT par défaut.

 
okvseok:

comment vous pouvez comprendre ces lignes :

Écrivez comme ceci et regardez dans le journal :

//---- return orders volume

if(buys>0){
 Print("buys = ",buys);
 return(buys);
}
else{
 Print("-sells = ",-sells);
 return(-sells);// это эквивалентно команде return(sells*(-1));
}
 

Pouvez-vous me donner des conseils ?

J'utilise plusieurs indicateurs qui utilisent la date dans des variables globales.

extern bool   shiftdata           = false;
extern string ShiftHistory        = "02.06.2012 00:00";

Si vous modifiez la date dans l'historique, vous devez la modifier dans tous les indicateurs.

J'ai créé un indicateur qui envoie une valeur de décalage à travers iCustom à des barres int.

Mais le problème est qu'il passe la date inchangée qui est compilée (02.07.2012), mais quand vous la changez manuellement (02.06.2012), elle n'est pas passée !

POURQUOI et QUOI FAIRE ????

//+------------------------------------------------------------------+
//|                                                        iTime.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 1
extern string BLOK_______1        = "Работа с историей";
extern string ShiftHistory        = "02.07.2012 00:00";
extern string PERIOD              = "D1";
//---
double buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,buffer);
   SetIndexStyle(0,DRAW_ARROW,0,0);
   SetIndexEmptyValue(0,0.0);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
int  counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
int i,period,limit,bs,barn;

if(PERIOD=="MN1") period=PERIOD_MN1;
else
if(PERIOD=="W1")  period=PERIOD_W1;
else
if(PERIOD=="D1")  period=PERIOD_D1;
else 
if(PERIOD=="H4")  period=PERIOD_H4;
else
if(PERIOD=="H1")  period=PERIOD_H1;
else
if(PERIOD=="M30") period=PERIOD_M30;
else
if(PERIOD=="M15") period=PERIOD_M15;
else
if(PERIOD=="M5")  period=PERIOD_M5;
else
if(PERIOD=="M1")  period=PERIOD_M1;
else
period=PERIOD_D1;

bs=iBarShift(Symbol(),period,StrToTime(ShiftHistory));
barn=iBars(Symbol(),period);
limit=barn-100;

if(limit>bs)
for(i=barn-1; i>=0; i--)
{
if (i==bs) buffer[i]=bs;
} RefreshRates();
return(0);
}

Voici le récepteur

for(int y=barn-100; y>=0; y--)
{
int bbb,st=iCustom(Symbol(),PERIOD,"iTime",0,y);
if(st>0) bbb=st;
}
 Comment(bbb);

Le commentaire écrit shift 16. Et au 02.06.2012, il devrait être de 48.

Aidez-nous à vous conseiller !

 

aidez-moi à déterminer le dernier haut et le dernier bas d'un zigzag dans un EA

double zz1 ;
int start()
{
zz1=iCustom(NULL,0, "ZigZag", 12, 5, 3, 0, 1) ;
MessageBox("zz1="+zz1,"zz1");
retour(0) ;
}
"0.00000" sort

 
spek:

aidez-moi à déterminer le dernier haut et le dernier bas d'un zigzag dans un EA

double zz1 ;
int start()
{
zz1=iCustom(NULL,0, "ZigZag", 12, 5, 3, 0, 1) ;
MessageBox("zz1="+zz1,"zz1");
retour(0) ;
}
"0.00000" sort

double ZZ[10000]={0.0};  //массив для значений ZigZag
double zz1[10000]={0.0};

//-----
int init()
{

}
return(0);
//---
int start()
{
int q=1;   //ПОПРАВИЛ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

for(int i=1; i<=1000; i++)
{
zz1[i]=iCustom(NULL,0,"ZigZag", 12, 5, 3, 0, i);
if(zzl[i]>0) { ZZ[q]=zzl[i];  q++; }
//MessageBox("zz1="+zz1,"zz1");
Comment(ZZ[1],"  ",ZZ[2]);

return(0);
}
 

Je veux y mettre "Alert()" pour me dire quand la tendance s'est inversée.

Je veux y mettre "Alert()" pour me dire quand la tendance s'inverse.

//+------------------------------------------------------------------+
//|                                                    mikahekin.mq4 |
//|                        Copyright 2004, MetaQuotes Software Corp. |
//|                                                http://www.sasara |
//|                              Modified by: Ronald Verwer/ROVERCOM |
//+------------------------------------------------------------------+
#property copyright "Copyright 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property  indicator_chart_window
#property  indicator_buffers 4
#property  indicator_color1  Silver
#property  indicator_color2  Yellow
#property  indicator_color3  Red
#property  indicator_color4  Blue
#property  indicator_width1 3
#property  indicator_width2 3

//---- input parameters
extern int KPeriod=3;
extern int DPeriod=3;
extern int JPeriod=7;

double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
double HighesBuffer[];
double LowesBuffer[];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
        IndicatorBuffers(6);
   SetIndexStyle(0,DRAW_HISTOGRAM, 0, 3);
   SetIndexStyle(1,DRAW_HISTOGRAM, 0, 3);
   SetIndexStyle(2,DRAW_ARROW, 0, 1);
   SetIndexStyle(3,DRAW_ARROW, 0, 1);
//----
   SetIndexDrawBegin(0,10);
   SetIndexDrawBegin(1,10);
   SetIndexDrawBegin(2,10);
   SetIndexDrawBegin(3,10);
   SetIndexDrawBegin(4,10);
   SetIndexDrawBegin(5,10);
//---- indicator buffers mapping
   SetIndexBuffer(0,ind_buffer1);
   SetIndexBuffer(1,ind_buffer2);
   SetIndexBuffer(2,ind_buffer3);
   SetIndexBuffer(3,ind_buffer4);
   SetIndexBuffer(4, HighesBuffer);
   SetIndexBuffer(5, LowesBuffer);
   
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("mikahekin");
   SetIndexLabel(0,"Open");
   SetIndexLabel(1,"Close");
   SetIndexLabel(2,"High");
   SetIndexLabel(3,"Low");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k,j;
   int    counted_bars=IndicatorCounted();
   double price;
   
//----
   if(Bars<=10) return(0);
//---- initial zero
   if(counted_bars<0) return (-1);
//---- minimums  counting
   i=Bars-KPeriod;
   if(counted_bars>KPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double min=1000000;
      k=i+KPeriod-1;
      while(k>=i)
        {
         price=Low[k];
         if(min>price) min=price;
         k--;
        }
      LowesBuffer[i]=min;
      i--;
     }
//---- maximums counting
   i=Bars-DPeriod;
   if(counted_bars>DPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double max=-100000;
      j=i+DPeriod-1;
      while(j>=i)
        {
         price=High[j];
         if(price>max) max=price;
         j--;
        }
      HighesBuffer[i]=max;
      i--;
     }
//---- mikahekin calcaulation
   i=Bars-JPeriod;
   if(counted_bars>JPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double sumlow=0.0;
      double sumhigh=0.0;
      double sumopen=0.0;
      double sumclose=0.0;
      double close=0.0;
      double open=0.0;
      double high=0.0;
      double low=0.0;

      for(k=(i+JPeriod-1);k>=i;k--)
         {
         sumclose+=Close[k];
         close=sumclose/JPeriod;
         sumlow+= LowesBuffer[k];
         low= sumlow/JPeriod;
         sumopen+=Open[k];
         open=sumopen/JPeriod;
         sumhigh+=HighesBuffer[k];
         high=sumhigh/JPeriod;
         }
         
      ind_buffer1[i]=open;
      ind_buffer2[i]=close;
      ind_buffer3[i]=high;
      ind_buffer4[i]=low;

      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
Z.I. Je suis un peu meilleur au mql4 qu'au ballet, mais...
 
Zhunko:

1. Je ne peux rien ajouter. Tout ce que vous voulez, rendez-le.

2. le terminal ignore et votre code n'ignore pas, si c'est ainsi qu'il est construit. L'appel système ignore à la fois les paramètres et la valeur de retour. C'est assez évident. Où est-ce que ça remonte dans ce cas ?

Nous ne pouvons que deviner la création du motif. Les développeurs ont dû procéder à partir de l'INT par défaut.


Un tick est arrivé, le terminal appelle la fonction start() de l'EA. Vous affirmez que la valeur renvoyée par cette fonction est indifférente à la borne. Est-ce que cela est documenté quelque part ?
 
KoKoS:

Je veux y mettre "Alert()" pour me dire quand la tendance s'est inversée.

Je veux utiliser "Alert()" pour me dire quand la tendance s'inverse.

Z.U. Je suis un peu meilleur au mql4 qu'au ballet mais...


Lignes

#property  indicator_color1  Silver
#property  indicator_color2  Yellow

Je pense que les deux premiers tampons sont l'indicateur d'un changement de tendance. Ils ont des signes rouges sur le haut des chandeliers et des signes bleus sur le bas. Seule la combinaison jaune-gris fonctionne comme un indicateur de renversement de tendance. Pour eux, ce sera en conséquence :

//---- indicator buffers mapping
   SetIndexBuffer(0,ind_buffer1);// для серого цвета
   SetIndexBuffer(1,ind_buffer2);// для жёлтого цвета
Là, dans les valeurs de ces tampons, creusez.
 
Les amis, donnez votre avis sur le transfert de date via iCustom. Transmet la valeur compilée actuelle, comment transmettre le tampon modifié au niveau global ? Lorsque je change la date, la même valeur est transmise.
extern bool   shiftdata           = false;
extern string ShiftHistory        = "02.06.2012 00:00";

Indicateur affiché juste au-dessus de .....

Ou il ne change pas du tout ?????

Pouvez-vous me parler du transfert de date via iCustom ?

 

Aidez-nous, si vous le pouvez, à écrire le code pour la condition suivante :

"si un ordre a été fermé par TakeProfit, après avoir franchi une moyenne mobile, alors n'ouvrez plus de transactions dans cette direction jusqu'à ce que le prix franchisse la moyenne mobile dans la direction opposée".

Merci d'avance pour votre aide !

Raison: