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

 
Roman:

Porque los plazos de un minuto por debajo de H1 devuelven los valores correctos.
Como se describe en la ayuda, devuelven un valor de tiempo, no una constante de salida.

¿Qué tonterías?

Límpiate los ojos, te he mostrado la representación interna de ENUM_TIMEFRAMES

El bit 16 que se establece determina el marco temporal semanal y mensual

El bit 15 establecido define el TF horario, donde el TF D1 = 1000000011000 --> 11000 --> 24, es decir, los desarrolladores han comparado D1 con 24 horas y los restantes TF horarios corresponden a la conversión decimal

los plazos de los minutos son los mismos que los de las horas, pero los bits altos se reinician


otra cuestión es que usted pensaba que las funciones que devuelven ENUM_TIMEFRAMES devuelven el tiempo de la TF en minutos - esto no es cierto, estas funciones devuelven la enumeración ENUM_TIMEFRAMES - ni más ni menos, sólo ENUM_TIMEFRAMES

ver el ejemplo de la ayudaen https://www.mql5.com/ru/docs/basis/types/integer/enumeration.

los enums también pueden ser con asignación de cualquier valor constante a un miembro del enum

Puede crear su propia enumeración para adaptarla a sus necesidades

 

¡Muchas gracias! ¡Fuewchar_t lo que ayudó! He leído sobre ello, almacena 2 bytes por carácter, a diferencia de char.


extern "C" __declspec(dllexport) wchar_t* __stdcall ToString(wchar_t* str)

{

        str = L" - 889 - dsa - просто!";

        return L"--- Привет! ---";

}


Pero el parámetro de la función "str" sigue sin devolver el valor que se le ha asignado... Me pregunto por qué...

 

Hola, ¿podríais decirme cómo resolver un problema? Quiero escribir un EA para un indicador (atado a la plancha) que construya muchos niveles (líneas) en el gráfico, el número de líneas puede ser hasta 500.

Todo lo que quiero implementar es abrir una orden o cualquier otro evento (como alerta o mensaje) cuando el precio cruza las líneas en el gráfico. Pero el problema es que el indicador no devuelve ningún valor y sólo dibuja líneas horizontales (objetos con nombre) - no hay nada más en el gráfico.

Intenté encontrar una solución a través de la función iCustom que recupera los niveles de precios a través de la variable "_price", pero el EA no abre operaciones cuando se tocan las líneas. No sé qué he hecho mal.

void OnTick()
  {
  
ENUM_OBJECT typeObj = OBJ_HLINE;
string   ArrLines[];
  
  double 
  Price;
  Price=Bid;
  
//ВАРИАНТ 1 (не получился). Я хотел, чтобы ордер открывался при пересечении любой из линий на графике   
  
//вызовем индикатор: (пара, таймфрейм, индикатор...)
iCustom(Symbol(), 0, "ITS-Level Gun", 0, 0); 

int i, k = ObjectsTotal();

ArrayResize(ArrLines, 0);

//в цикле перебираем все объекты на графике
for (i=k-1; i>=0; i--) {
  
  //узнаем имя объекта на графике
  string _name = ObjectName(i);

{

    //узнаем координату цены линии
    double _price = NormalizeDouble(ObjectGetDouble(0, _name, OBJPROP_PRICE), Digits);
  } 
}

if(Price==_price)
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);}

    // И ВСЁ, дальше не знаю, что делать


     
    } 
 
  }

OPCIÓN 2. Se abre una orden en la línea que he especificado en la configuración, funciona y abre operaciones al nivel que he especificado en los parámetros del EA


extern string h="@Line_week_open-0"; //ИЗМЕНЕНИЕ ННАЗВАНИЯ ЛИНИИ В СВОЙСТВАХ СОВЕТНИКА.ВАРИАНТ 2.

if(ObjectFind(h)>-1)

    {

     double prise = ObjectGet(h, OBJPROP_PRICE1);

     if (Price==prise)

      {OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);}       

    } 
Archivos adjuntos:
we3s6_kgeqx.jpg  151 kb
 
Fib0 RU:

Hola, ¿podríais decirme cómo resolver un problema? Quiero escribir un EA para un indicador (atado a la plancha) que construya muchos niveles (líneas) en el gráfico, el número de líneas puede ser hasta 500.

Todo lo que quiero implementar es abrir una orden o cualquier otro evento (como alerta o mensaje) cuando el precio cruza las líneas en el gráfico. Pero el problema es que el indicador no devuelve ningún valor y sólo dibuja líneas horizontales (objetos con nombre) - no hay nada más en el gráfico.

Intenté encontrar una solución a través de la función iCustom que recupera los niveles de precios a través de la variable "_price", pero el EA no abre operaciones cuando se tocan las líneas. No sé qué he hecho mal.

OPCIÓN 2, se abre una orden en la línea que he especificado en la configuración; funciona y abre operaciones en ese nivel, que he especificado en los parámetros del EA



for(int i = ObjectsTotal() - 1; i >=0; i--) {

        // все что не горизонтальные линии - игнорируем

        if(ObjectType(ObjectName(i)) != OBJ_HLINE) continue; 

        double PriceLine = NormalizeDouble(ObjectGet(ObjectName(i), OBJPROP_PRICE1), Digits());
	
	// измените условие Bid == PriceLine
        
	 if(Bid == PriceLine) {

                // ..... тут что-то происходит ... 

        }
}


PERO, ¿y si la oferta por alguna razón se salta la línea, y no es igual al precio de la línea, entonces qué? Proporcionar a continuación, al menos una variable que almacena la garrapata anterior, y si era una nueva garrapata cruzó su línea - a continuación, hacer alguna acción ... Pero en este caso no se olvide de proporcionar el cruce "permisible", porque si el mercado se abrirá con un Gap grande, o simplemente un gran salto en el precio, que se abrirá en muchas líneas de una sola vez y probablemente no allí donde usted quiere. Si el cruce es mayor de lo permitido - sólo se dará un mensaje...

 
Vadim Lin:



PERO, ¿qué pasa si la oferta por alguna razón cruzó la línea, y no fue igual al precio de la línea, entonces qué...? Proporcionar entonces al menos una variable, en la que se almacena la garrapata anterior, y si había una nueva garrapata que cruza su línea - a continuación, hacer alguna acción ... Pero en este caso no se olvide de proporcionar el cruce "permisible", porque si el mercado abre con un gran Gap, o hay un gran salto en el precio, usted abrirá en muchas líneas de una sola vez y probablemente no en el lugar que desea. Si el cruce es mayor de lo permitido - sólo se dará un mensaje...

Código del problema.

 
Igor Makanu:

¿Qué tonterías?

Límpiate los ojos, te he mostrado la representación interna de ENUM_TIMEFRAMES

El bit 16 que se establece determina el marco temporal semanal y mensual

el bit 15 se fija para determinar el TF horario y el TF D1 = 1000000011000 --> 11000 --> 24, es decir, los desarrolladores han comparado D1 con 24 horas y los TF horarios restantes corresponden a la conversión decimal

las franjas horarias de los minutos son las mismas que las de las horas, pero los bits altos se restablecen


otra cuestión es que usted pensaba que las funciones que devuelven ENUM_TIMEFRAMES devuelven el tiempo de la TF en minutos - esto no es cierto, estas funciones devuelven la enumeración ENUM_TIMEFRAMES - ni más ni menos, sólo ENUM_TIMEFRAMES

ver el ejemplo de la ayudaen https://www.mql5.com/ru/docs/basis/types/integer/enumeration.

los enums también pueden ser con asignación de cualquier valor constante a un miembro del enum

Puede crear su propia enumeración para adaptarla a sus necesidades

Igor, hace tiempo que está claro lo de los valores constantes.
A eso me refiero, a qué significan 15 y 16 bits como valor de retorno. Esto es una tontería.
Por alguna razón antes de M30 las constantes ENUM correspondían a los valores deTIMFRAME !!!!.
Y además ya corresponde a valores de algunos bits
. Dónde está la lógica de los chicos.
Es un error grosero. Si se hizo así intencionadamente, es una distracción).
La variable _Period ya contiene todos estos valores de tiempo de la enumeración ENUM, no necesitan conversión adicional.
Por lo tanto, estos valores constantes, deben corresponder a los valores de los plazos como se indica en la ayuda. ¡No es BITS!

 
Roman:

Definitivamente es el momento de la cuarentena. Busca todo lo que se ha dicho sobre él y léelo con tranquilidad. ¿Por qué crees que la gente que te rodea tiene que repetir todo lo que has escrito?

 
Alexey Viktorov:

Definitivamente es el momento de ponerlo en cuarentena. Busca todo lo que se ha dicho al respecto y léelo con tranquilidad. ¿Por qué crees que la gente de tu entorno debe repetir todo lo que has escrito?

¿Y por qué aguantas las soluciones equivocadas? He entregado una explicación lógica de los valores de las constantes, no lo que el desarrollador inventó.

 
Roman:

¿Y por qué aguantas las soluciones equivocadas? He entregado una explicación lógica de los valores de las constantes, no lo que el desarrollador inventó.

Por lo visto, para ti sólo hay dos opiniones: la tuya y la equivocada. Es posible que encuentre una explicación que le convenga.
 
Alexey Viktorov:
Por lo visto, para ti sólo hay dos opiniones: la tuya y la equivocada. Es posible que encuentre una explicación que le convenga.

Intente utilizar el valor devuelto por la variable _Period para los períodos superiores a H1 en sus cálculos matemáticos.
Y entenderás inmediatamente quién está equivocado.

Razón de la queja: