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

 

Bonjour, je veux obtenir une date d'expiration pour les contrats à terme.

EXPIRATION=(datetime)SymbolInfoInteger(Symbol(),SYMBOL_EXPIRATION_TIME) ;

Il donne 1970 01 01 00 00

 

Bonjour, Quelqu'un peut-il m'indiquer comment faire pour qu'un EA ouvre un ordre à un certain point du graphique lorsque vous cliquez sur un certain point ? Lorsque vous installez un script ou un EA, la fonction NormalizeDouble(WindowPriceOnDropped(),Digits) ; définit le point lorsque vous cliquez sur la souris. Mais la question est que cela peut être fait à tout moment à partir d'un EA en cours d'exécution. Y a-t-il une telle possibilité.

Je vois une fonction ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1) Je ne sais pas encore comment l'utiliser, est-il possible de déterminer où (vers quel point) le pointeur de la souris a été dirigé ?

 
Basicprof:

Bonjour, Quelqu'un peut-il m'indiquer comment faire pour qu'un EA ouvre un ordre à un certain point du graphique lorsque vous cliquez sur un certain point ? Lorsque vous installez un script ou un EA, la fonction NormalizeDouble(WindowPriceOnDropped(),Digits) ; définit le point lorsque vous cliquez sur la souris. Mais la question est que cela peut être fait à tout moment à partir d'un EA en cours d'exécution. Y a-t-il une telle possibilité.

Je vois une fonction ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1) Mais je n'ai pas encore trouvé comment l'utiliser. Est-il possible de déterminer où (vers quel point) le pointeur de la souris a été dirigé ?

Utilisez l'événement "CHARTEVENT_CLICK".

Vous pouvez obtenir des parties du code ici

 
Vitaly Muzichenko:

Utilisez l'événement de clic "CHARTEVENT_CLICK".

Vous pouvez obtenir les extraits de code à partir d'ici


Merci beaucoup ! !!

 

Une dernière question : j'ai déplacé les fonctions de l'EA vers la bibliothèque, lorsque j'exécute l'EA, il se plante immédiatement et les messages indiquent que le terminal ne peut pas charger la bibliothèque Cannot call 'ATP_funkcii.mq4::DrawLABEL', 'ATP_funkcii.mq4' n'est pas chargé.

Comment puis-je résoudre ce problème ?

J'ai remarqué une chose ! L'éditeur de l'EA et la bibliothèque sont visibles, mais sur l'ordinateur, je ne les vois pas dans les fichiers du programme pour une raison quelconque. Seulement le fichier du conseiller expert.

 
Bonjour, pouvez-vous me dire comment connaître l'indice de l'élément suivant d'un tableau?
 
vikzip:
Bonjour, Pourriez-vous me dire comment connaître l'indice d'un élément d'un tableau pour connaître l'indice de l'élément suivant du tableau ?

L'indice de tout tableau commence toujours par zéro. C'est-à-dire que si la taille du tableau est 1, l'index de cette cellule sera 0.

Comment connaître le nombre 5 pour connaître le nombre 6 ?

Connaissant le chiffre 6, comment puis-je connaître le chiffre 7, sachant qu'il n'y a que 8 chiffres ?

Connaissant l'indice 7, comment connaître l'indice suivant, sachant que la taille du tableau est de 8 ?

 

Bonjour, j'ai besoin d'aide. L'indicateur ne se met pas à jour, je veux qu'il se mette à jour à chaque tick.


//+------------------------------------------------------------------+
//|                                             alx_RSI_BANDS_MA.mq4 |
//|                                                       alx_Babon |
//+------------------------------------------------------------------+
#property copyright "alx_Babon"
#property link      "babon82@gmail.com"

#property indicator_separate_window
#property indicator_buffers 6
#property  indicator_color1 Yellow
#property  indicator_color2 DarkBlue
#property  indicator_color3 White
#property  indicator_color4 White
#property  indicator_color5 White
//---- input parameters
extern int       RSI_Per=8;
extern int       MA_Per=8;
extern int       Bands_Per=20;
extern int       SmoothType=0;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double Sostoyanie;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   string type;
   switch(SmoothType)
   {
   case MODE_EMA: type="EMA";break;
   case MODE_SMMA: type="SMMA";break;
   case MODE_LWMA: type="LWMA";break;
   default: type="LWMA";SmoothType=0;break; // если ни один вариант не подошел
   }

   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0,ExtMapBuffer1);//Свойства RSI
   SetIndexLabel(0,"RSI("+RSI_Per+")");
   SetIndexStyle(1,DRAW_LINE,0,2);
   SetIndexBuffer(1,ExtMapBuffer2);//Свойства MA
   SetIndexLabel(1,"MA ("+MA_Per+"), "+type);
   SetIndexStyle(2,DRAW_LINE,2,1);
   SetIndexBuffer(2,ExtMapBuffer3);//Свойства Bands
   SetIndexLabel(2,"Bands ("+Bands_Per+")");
   SetIndexStyle(3,DRAW_LINE,2,1);
   SetIndexBuffer(3,ExtMapBuffer4);//Свойства Bands
   SetIndexLabel(3,"Bands ("+Bands_Per+")");
   SetIndexStyle(4,DRAW_LINE,2,1);
   SetIndexBuffer(4,ExtMapBuffer5);//Свойства Bands
   SetIndexLabel(4,"Bands ("+Bands_Per+")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit,cnt;
   int cnt_rsi,cnt_bb,cnt_ma;
   if (counted_bars==0) 
      {
      limit=Bars-RSI_Per-1;
      for(cnt=limit;cnt>=0;cnt--)
         {
          ExtMapBuffer1[cnt]=iRSI(NULL,0,RSI_Per,PRICE_CLOSE,cnt);
         }
      for(cnt=1;cnt<=Bars;cnt++)
         {
          ExtMapBuffer6[cnt]= iMA(NULL,0,MA_Per,0,SmoothType,PRICE_CLOSE,cnt);
                
         }
      for(cnt=limit-MA_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer2[cnt]=iMAOnArray(ExtMapBuffer1,0,MA_Per,0,SmoothType,cnt);
         }          
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer3[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_LOWER,cnt);
         }
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer4[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_UPPER,cnt);
         }  
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer5[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_MAIN,cnt);
         } 
         
      }
      cnt_rsi=limit;
      cnt_bb=limit-Bands_Per;
      cnt_ma=limit-MA_Per;
      Comment(
               "RSI (",RSI_Per,")=",ExtMapBuffer1[1],"\n",
          "Bolinger (",Bands_Per,")=",ExtMapBuffer5[1],"\n",
                "MA (",MA_Per,")=",ExtMapBuffer2[1],"\n"
                //,"MA CNT (",MA_Per,")=",ExtMapBuffer6[8],"\n"
                //,"CNT_MA (",cnt_ma,")"
             );
//----
      //ObjectCreate("Arrow", OBJ_ARROW, 0, 0, 5);
      //ObjectSet("Arrow",OBJPROP_ARROWCODE,OBJ_PERIOD_M15 | OBJ_PERIOD_H1);
      //ObjectSetText("PivotText", "Pivot Point (DJ)", fontsize, "Arial", 
                 //colorPivot);
//----
   return(0);
  }
//+---------------------------------------

 
Artyom Trishkin:

L'indice de tout tableau commence toujours par zéro. Autrement dit, si la taille du tableau est de 1, l'indice de cette cellule sera de 0.

Comment connaître le nombre 5 pour connaître le nombre 6 ?

Comment connaître le chiffre 6 pour connaître le chiffre 7, sachant qu'il n'y a que 8 chiffres ?

Comment, connaissant l'indice 7, comment pouvons-nous trouver l'indice suivant, sachant que la taille du tableau est de 8 ?


Merci pour l'explication détaillée)))) Il serait donc correct d'écrire


double Mas[];                                                                //массив для упорядочивания всех ордеров
  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       ArrayResize(Mas, i+1);                                                 //задан размер массива
       Mas [i] = Price; 
       ArraySort (Mas,WHOLE_ARRAY,0,MODE_DESCEND);                           // Теперь цены открытия упорядочены по убыванию
     }
   } 
   if(ArraySize(Mas)>1)                                                         //Если массив не пустой
   
         { 
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

       int Blizko1; 

Mas[Blizko1]= Blizko2+1;     Это верно??

                                                      //Определен индекс ближайшего меньшего по значению елемента к текущей цене         PriceBlizko1=Mas[Blizko1];
Pouvez-vous me le dire ?

 
vikzip:

Merci pour l'explication détaillée)))) Il serait donc correct d'écrire


Pouvez-vous me le dire ?

Il n'est pas nécessaire de trier le tableau après chaque ajout d'un élément du tableau. Il serait préférable de déplacer le tri

double Mas[];                                                                //массив для упорядочивания всех ордеров
  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       ArrayResize(Mas, i+1);                                                 //задан размер массива
       Mas [i] = Price; 
     }
   } 
   if(ArraySize(Mas)>1)                                                         //Если массив не пустой
   
         { 
       ArraySort (Mas,WHOLE_ARRAY,0,MODE_DESCEND);                           // Теперь цены открытия упорядочены по убыванию
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

       int Blizko1; 
        Mas[Blizko1]= Blizko2+1;     Это верно??
                                                      //Определен индекс ближайшего меньшего по значению елемента к текущей цене
        PriceBlizko1=Mas[Blizko1];

De l'aide.

Valeur de retour

Renvoie l'index du premier élément trouvé. Si la valeur recherchée n'est pas trouvée, il renvoie l'indice du plus proche moindre des éléments entre lesquels se trouve la valeur recherchée.

Mas[Blizko2] est la plus petite valeur la plus proche dans le tableau.