Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 328

 

Hola, quiero obtener la fecha de vencimiento de los futuros

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

Da 1970 01 01 00 00

 

Hola, ¿alguien puede aconsejar cómo hacer que un EA abra una orden en un punto determinado del gráfico cuando se hace clic en un punto determinado? Cuando se instala un script o un EA, la función NormalizeDouble(WindowPriceOnDropped(),Digits); define el punto cuando se hace clic con el ratón. Pero la cuestión es que esto se puede hacer en cualquier momento desde un EA en funcionamiento. ¿Existe esa posibilidad?

Veo una función ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1) Todavía no sé cómo utilizarlo, ¿es posible determinar hacia dónde (hacia qué punto) se dirigió el puntero del ratón?

 
Basicprof:

Hola, ¿alguien puede aconsejar cómo hacer que un EA abra una orden en un punto determinado del gráfico cuando se hace clic en un punto determinado? Cuando se instala un script o un EA, la función NormalizeDouble(WindowPriceOnDropped(),Digits); define el punto cuando se hace clic con el ratón. Pero la cuestión es que esto se puede hacer en cualquier momento desde un EA en funcionamiento. ¿Existe esa posibilidad?

Veo una función ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1) Pero aún no he descubierto cómo utilizarlo. ¿Es posible determinar hacia dónde (hacia qué punto) se ha dirigido el puntero del ratón?

Utilice el evento "CHARTEVENT_CLICK".

Puedes obtener partes del código desde aquí

 
Vitaly Muzichenko:

Utilice el evento de clic "CHARTEVENT_CLICK".

Puede obtener los fragmentos de código desde aquí


¡¡¡Muchas gracias!!!

 

Una pregunta más: he movido las funciones a la biblioteca desde el EA, cuando ejecuto el EA, inmediatamente se bloquea y los mensajes muestran que el terminal no puede cargar la biblioteca No se puede llamar a 'ATP_funkcii.mq4::DrawLABEL', 'ATP_funkcii.mq4' no está cargado

¿Cómo puedo solucionar este problema?

¡Me he dado cuenta de una cosa! El editor del EA y la biblioteca se pueden ver, pero en el ordenador, no los veo en los archivos del programa por alguna razón. Sólo el archivo del Asesor Experto.

 
Hola, ¿podríais decirme cómo saber el índice del siguiente elemento de un array?
 
vikzip:
Hola, ¿podríais decirme cómo conocer el índice de un elemento del array para saber el índice del siguiente elemento del array?

El índice de cualquier matriz siempre empieza por cero. Es decir, si el tamaño de la matriz es 1, el índice de esta celda será 0.

¿Cómo se conoce el número 5 para conocer el número 6?

Sabiendo el dígito 6, ¿cómo puedo saber el dígito 7, sabiendo que sólo hay 8 dígitos?

Conociendo el índice 7, ¿cómo saber el siguiente índice, sabiendo que el tamaño del array = 8?

 

Hola, necesito ayuda. El indicador no se actualiza, quiero que se actualice en cada 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:

El índice de cualquier matriz siempre empieza por cero. Es decir, si el tamaño del array es 1, el índice de esa celda será 0.

¿Cómo se conoce el número 5 para conocer el número 6?

¿Cómo se conoce el dígito 6 para conocer el dígito 7, sabiendo que sólo hay 8 dígitos?

¿Cómo, conociendo el índice 7, podemos averiguar el siguiente índice, sabiendo que el tamaño del array = 8?


Gracias por la explicación detallada)))) Por lo tanto, sería correcto escribir


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];
¿Puede decírmelo, por favor?

 
vikzip:

Gracias por la explicación detallada)))) Por lo tanto, sería correcto escribir


¿Puede decírmelo, por favor?

No es necesario ordenar el array después de cada adición de un elemento del array. Sería mejor mover la clasificación

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 la ayuda.

Valor de retorno

Devuelve el índice del primer elemento encontrado. Si no se encuentra el valor buscado, devuelve el índice del menor de los elementos más cercanos entre los que se encuentra el valor buscado.

Mas[Blizko2] es el valor más pequeño de la matriz.

Razón de la queja: