Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 560

 
Leo59:
Mi Asesor Experto, en deinit() escribe 98496 líneas al archivo de registro en *.csv
Por qué se descarga de manera diferente cuando el experto termina en el probador:
- en el caso de la descarga al final de la fecha de la prueba todo es normal ( 98496 líneas)
- en el caso de la descarga mediante el botón "Stop", sólo un 10% de los datos.
¿Quién sabe cuál puede ser el problema?


Terminación forzada del Asesor Experto cuando el propio usuario descarga el Asesor Experto.

es mejor registrar los datos directamente al principio.

 
Roman.:

Chicos, ¿cómo interpretáis esta advertencia?

Gracias.


debe establecerse en una variable

por ejemplo bool closee=OrderClose...........

  • Elvalor de retorno de 'OrderSelect' debe ser comprobado
  • Elvalor de retorno de 'OrderDelete' debe ser comprobado
  • Elvalor de retorno de 'OrderSend ' debe ser comprobado
  • Elvalor de retorno de 'OrderClose ' debe ser comprobado
  • El valor de retorno de 'OrderModify ' debe ser comprobado


Para evitar estas advertencias, se debe especificar explícitamente el retorno a la variable
por ejemplo, así:
  • bool select1=OrderSelect..........
  • bool delete1=OrderDelete..........
  • bool close1=CerrarPedido..........
  • bool modify1=OrderModify..........
  • int send1=OrderSend..........
 
Buenas tardes. ¿Pueden decirme si es posible definir o calcular la anchura/altura en un gráfico de un objeto OBJ_TEXT?
 
alxm:
Buenas tardes. ¿Pueden decirme si es posible definir o calcular la anchura/altura en un gráfico de un objeto OBJ_TEXT?

¿Cómo calcular el número de caracteres, + el tamaño de la fuente o algo así?
 
cipsi:

Cómo encontrar el OrderOpenPrice de la primera orden abierta si se conoce:

1.Símbolo

2.Las órdenes de compra pueden abrirse de una a muchas

3.Magia

4.Diferencias entre los pedidos, probablemente por ticket - encontrar el ticket más pequeño.


double PriceOpenFirstPos(string sy="", int op=-1, int mn=-1) {
  datetime t==0;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t>OrderOpenTime() || t==0) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
psdmaster:
Lea el artículo sobre la creación de un EA: https://book.mql4.com/ru/samples/expert

¿Puedes decirme cómo abrir una operación en una barra y cerrarla cuando aparezca la siguiente?


1. Al abrir un trato, recuerda la hora del bar

así:

fuera de la salida:

 int timeopen;

al principio donde tienes una operación abierta:

 timeopen=Time[0];

Cerrando así:

if(timeopen!= Time[0]) OrderClose............
 
Zolotai:
Por favor, dígame. ¿Cómo puedo averiguar el número de órdenes abiertas para un determinado símbolo, sin bucles...


No hay manera de hacerlo sin un ciclo.

 

Querida, necesito tu ayuda.

Estoy optimizando mi Asesor Experto por el indicador, el código del indicador está abajo.

La optimización es lenta, he hecho un código en el EA para recalcular el indicador en una nueva barra, que no es del todo adecuado.

Por favor, vea el código del indicador, lo que se puede hacer en él para que el recálculo ocurra más rápido.

#property indicator_separate_window
#property indicator_buffers 4
#property  indicator_color1 Lime
#property  indicator_color2 Yellow
#property  indicator_color3 Red
#property  indicator_color4 Aqua

//--- input parameters
extern int       Period_MA_1=14;
extern int       p2          =7;
extern int       p3          =5;
extern int       p4          =3;
extern int Limit=70;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_NONE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ExtMapBuffer4);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,limit2,limit3,limit4;
   double impuls;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
 
   limit1=Bars-counted_bars-1;
   if (limit1>Limit && Limit>0) limit1=Limit;
   limit2=limit1;
   limit3=limit2;
   limit4=limit3;
   if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;
      limit2=limit1-p2;
      limit3=limit2-p3;
      limit4=limit3-p4;
     }
   for(i=limit1;i>=0;i--) {ExtMapBuffer1[i]=Close[i]-Close[i+Period_MA_1];}
   for(i=limit2;i>=0;i--) {ExtMapBuffer2[i]=iMAOnArray(ExtMapBuffer1, 0, p2, 0, MODE_EMA,i);}
   for(i=limit3;i>=0;i--) {ExtMapBuffer3[i]=iMAOnArray(ExtMapBuffer2, 0, p3, 0, MODE_EMA,i);}
   for(i=limit4;i>=0;i--) {ExtMapBuffer4[i]=iMAOnArray(ExtMapBuffer3, 0, p4, 0, MODE_EMA,i);}

   return(0);
  }
 

¿dónde puedo leer sobre las clases en mt4?

He leído la ayuda, pero no explica qué significan las siguientes líneas

CArray::CArray(void) : m_step_resize(16),
                       m_data_total(0),
                       m_data_max(0),
                       m_sort_mode(-1)
  {
  }

dónde leer sobre la inicialización de variables...

 
Vladon:


se debe establecer la variable

por ejemplo, bool closee=OrderClose...........

  • Elvalor de retorno de 'OrderSelect' debe ser comprobado
  • Elvalor de retorno de 'OrderDelete' debe ser comprobado
  • Elvalor de retorno de 'OrderSend ' debe ser comprobado
  • Elvalor de retorno de 'OrderClose ' debe ser comprobado
  • El valor de retorno de 'OrderModify ' debe ser comprobado


para evitar estas advertencias, se debe especificar explícitamente el retorno a la variable
así:
  • bool select1=OrderSelect..........
  • bool delete1=OrderDelete..........
  • bool close1=CerrarPedido..........
  • bool modify1=OrderModify..........
  • int send1=OrderSend..........


Gracias. Funcionó sin ninguna advertencia:


Guiado por un ejemplo del manual :-)


OrderDelete

Elimina una orden pendiente previamente colocada.

bool BorrarPedido(
int ticket, /número de pedido
color arrow_color // color
);

Parámetros

billete

[Número de serie único del pedido.

color_flecha

[in] Color de la flecha en el gráfico. Si falta este parámetro o su valor es CLR_NONE, la flecha no se muestra en el gráfico.

Valor devuelto

Devuelve true si la función se completó con éxito o false si hubo un error. Para obtener la información del error, llame a GetLastError().

Ejemplo:

if(Pregunta>var1)
{
OrderDelete(order_ticket);
return(0);
}