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

 
Алексей КоКоКо:

¿Puede decirme cómo entender la documentación en general? Me preocupa mucho que en los ejemplos, incluso de un objeto gráfico sencillo como el texto, te tiran a la cara un ejemplo con un montón de código y en ningún sitio escriben qué parámetros son obligatorios y cuáles no. Así que para escribir simplemente un texto o establecer una tendencia o incluso entender los buffers de un indicador no entiendes qué parámetros mínimos hay que introducir y tienes que copiar y pegar tu código

Hola, los parámetros necesarios para el texto son el índice de la ventana, la referencia de la coordenada y el propio texto, los demás son opcionales.

Hay que tener en cuenta que hay dos tipos de objetos, OBJ_LABEL y OBJ_TEXT. El primer objeto está ligado a los píxeles de la ventana y el segundo al tiempo y al precio en el gráfico.

Digamos que necesitamos una etiqueta de texto vinculada a los píxeles, entonces haz esto:

   ObjectCreate(0,name,OBJ_LABEL,0,0,0); // создаём объект в текущем (нулевом окне)
   ObjectSetString(0,name,OBJPROP_TEXT,text); // указываем какой текст должен в нём отображаться
   ObjectSetString(0,name,OBJPROP_FONT,fontname); // назначаем шрифт например Verdana или Tahoma
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize); // назначаем размер шрифта
   ObjectSetInteger(0,name,OBJPROP_COLOR, text_color); // назначаем цвет шрифта
   ObjectSetInteger(0,name,OBJPROP_CORNER,text_corner); // указываем от какого угла окна отсчитывать пиксели
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,text_anchor); // указываем как должен быть выровнен текст по центру или какому-то краю
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,XOFFSET); // указываем координату по горизонтали
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,YOFFSET); // указываем координату по вертикали
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); // указываем можно ли выделять и двигать метку мышкой или нельзя

este es un código casi mínimo que dibuja la etiqueta de texto

lo mismo para el objeto OBJ_TEXT, pero también hay que especificar las propiedades de precio y hora:

   ObjectSetDouble(0,name,OBJPROP_PRICE,0,price);
   ObjectSetInteger(0,name,OBJPROP_TIME,0,time);



text_corner debe ser uno de los valores constantes:

ID

Descripción

ESQUINA_IZQUIERDA_SUPERIOR

Centro de coordenadas en la esquina superior izquierda del gráfico

ESQUINA_IZQUIERDA_INFERIOR

Centro de coordenadas en la esquina inferior izquierda del gráfico

ESQUINA_DERECHA_INFERIOR

Centro de coordenadas en la esquina inferior derecha del gráfico

ESQUINA_DERECHA_SUPERIOR

Centro de coordenadas en la esquina superior derecha del gráfico


más detalles aquí: https://www.mql5.com/ru/docs/constants/objectconstants/enum_basecorner#enum_base_corner




text_corner debe ser uno de los valores constantes:

Identificador

Descripción

ANCHOR_LEFT_UPPER

Punto de anclaje en la esquina superior izquierda

ANCHOR_LEFT

Punto de anclaje a la izquierda en el centro

ANCHOR_LEFT_LOWER

Punto de anclaje en la esquina inferior izquierda

ANCHOR_INFERIOR

Punto de anclaje por debajo del centro

ANCHOR_RIGHT_LOWER

Punto de anclaje en la esquina inferior derecha

ANCHOR_DERECHO

Punto de anclaje a la derecha en el centro

ANCHOR_RIGHT_UPPER

Punto de anclaje en la esquina superior derecha

ANCHOR_UPPER

Punto de anclaje en el centro superior

CENTRO DE ANCLAJE

Punto de anclaje exactamente en el centro del objeto


más detalles aquí:https://www.mql5.com/ru/docs/constants/objectconstants/enum_basecorner



también puedes conectar la librería estándar #include <ChartObjects\ChartObject.mqh> y usar sus clases, pero esto sólo te complica la vida en mi opinión

 
transcendreamer:

Saludos, los parámetros obligatorios para el texto son el índice de la ventana, la unión de coordenadas y el propio texto, los demás son opcionales.

Tenga en cuenta que hay dos tipos de objetos: OBJ_LABEL y OBJ_TEXT. El primero está vinculado a los píxeles de la ventana y el segundo al tiempo y al precio en el gráfico.

Digamos que necesitamos una etiqueta de texto vinculada a los píxeles, entonces haz esto:

este es un código casi mínimo que dibuja la etiqueta de texto

lo mismo para el objeto OBJ_TEXT, pero sólo hay que establecer las propiedades de precio y hora:


Dios te bendiga )No es sólo el texto sino muchas cosas, incluso los topes de los indicadores. ¿Qué hay en el carro que se retira?)

 
Алексей КоКоКо:

Dios te bendiga )No es sólo el texto, son muchas cosas, incluso los topes de los indicadores. ¿Por qué te borran del carro?)

He borrado del carrito como siempre por paranoia y que los chexistas no me descubran 😀 No tengo ni idea de qué hacer con él.

 
Artyom Trishkin:

Y la opción correcta es, bueno, muy simple...

¿Y qué es? ¿Por qué no lo escribes?

 
Hola a todos, he insertado en un EA "starhour y stophour" para abrir órdenes a una hora determinada, pero no he tenido en cuenta que la orden que se abrió por ejemplo a las 22:00 no se cerrará en stophour(23:00)
Ya que antes no había ningún indicador de señal para cerrar la posición y después de las 23:00 está incluso prohibido tomar cualquier decisión.

Por favor, aconseje cómo hacer que el EA sea capaz de cerrar las posiciones abiertas después de la hora límite (23:00).
O simplemente cerrar todas las posiciones a las 23:00, para no mantenerlas toda la noche.


Gracias de antemano
 
Eugen8519:
Hola a todos, he insertado en un EA "starhour y stophour" para abrir órdenes a una hora determinada, pero no he tenido en cuenta que una orden que se abrió por ejemplo a las 22:00 no se cerrará en stophour(23:00)
No tengo ninguna señal del indicador para cerrar la posición antes y después de las 23:00 está prohibido tomar cualquier decisión.

Por favor, aconseje cómo hacer que el EA sea capaz de cerrar las posiciones abiertas después de la hora límite (23:00).
O simplemente cerrar todas las posiciones a las 23:00, para no mantenerlas toda la noche.


Gracias de antemano

poner "starhour y stophour" sólo en las órdenes abiertas

 
MakarFX:

poner "starhour y stophour" sólo en las órdenes de apertura

Ese es el problema - sólo abre y cierra las órdenes starthour->stophour
Y las órdenes abiertas no se cierran después de la hora límite

No se puede operar después de la hora límite



Los parámetros globales se establecen

bool           UseTimeLimit = true;
int            startHour    = 15;
int            stopHour     = 23;
bool           YesStop=false;
input          ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT;



Y en OnTick

if(UseTimeLimit)
  {
    YesStop=true;
    MqlDateTime str1;
    TimeToStruct(TimeCurrent() , str1);
    if(str1.hour > startHour && str1.hour < stopHour)
       YesStop=false;
       if (YesStop)
       return;
  }
 
Eugen8519:
Ese es el problema, sólo abre y cierra las órdenes starthour->stophour
Y las órdenes abiertas no se cierran después de la hora límite
Mostrar función de cierre de órdenes
 
Eugen8519:
Ese es el problema, sólo abre y cierra las órdenes starthour->stophour
Y las órdenes abiertas no se cierran después de la hora límite

algo así como

if(UseTimeLimit)
  {
    YesStop=true;
    MqlDateTime str1;
    TimeToStruct(TimeCurrent() , str1);
    if(str1.hour > startHour && str1.hour < stopHour)
       YesStop=false;
       if (YesStop)
       return;
  }
....
if(YesStop==false)
  {
   условие для открытия ордеров
  }
 
MakarFX:

algo así como

Así es como se cierra el pedido



(EMA0[m_bar_current]<WMA0[m_bar_current] && EMA0[m_bar_current+1]>WMA0[m_bar_current+1]) //Buy
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Sell");
     }
//if(color_buffer[m_bar_current+1]<color_buffer[m_bar_current]) //Sell
   if(EMA0[m_bar_current]>WMA0[m_bar_current] && EMA0[m_bar_current+1]<WMA0[m_bar_current+1]) //Sell
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Buy");
     }


void CLOSEORDER(string ord)
  {
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ord=="Buy")
               m_trade.PositionClose(m_position.Ticket());  // Close Buy
            if(m_position.PositionType()==POSITION_TYPE_SELL && ord=="Sell")
               m_trade.PositionClose(m_position.Ticket()); // Close Sell
           }
  }
Razón de la queja: