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

 
Roni Iron:

¡Buenos días a todos!


Pregunta: ¿cuál es la forma más fácil de determinar los tiempos máximos y mínimos de una barra?

Lahora de apertura/cierre del bar no es interesante.

En MT4.

Gracias.

hizo esto

publicado en KBhttps://www.mql5.com/ru/code/25897

 

Por favor, dime, en MT4 había una variable predefinida doble Ask, y según tengo entendido, dentro de void OnTick() sin forzar

RereshRates su valor NO cambiaría.

En MT5, Ask se sustituye por MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); double Ask=last_tick.ask ; su valor se actualiza siempre con un nuevo tick.

Mi problema es que necesito establecer la coordenada de la línea por el valor de Ask + X pero no puedo hacerlo en MT5 porque la línea cambia sus coordenadas después de que el valor cambia

Ask=último_tick.ask. ¿Cuál es su consejo?

Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
WinProject:

Por favor, dime, en MT4 había una variable predefinida doble Ask, y según tengo entendido, dentro de void OnTick() sin forzar

RereshRates su valor NO cambiaría.

En MT5, Ask se sustituye por MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); double Ask=last_tick.ask ; su valor se actualiza siempre con un nuevo tick.

Mi problema es que necesito establecer la coordenada de la línea por el valor de Ask + X pero no puedo hacerlo en MT5 porque la línea cambia sus coordenadas después de que el valor cambia

Ask=último_tick.ask. ¿Cuál es su consejo?

¿Cómo no ha cambiado? Cambiaba con cada tic. Pero en el bucle, no cambió. ¿Quizás te has confundido un poco con él?

Pero en mql5 puedes determinar el precio actual antes del bucle y no cambiará hasta que salgas del bucle.

 
Amigos, perdón por la pregunta tonta. En el terminal mt4 muestra el beneficio incluyendo comisiones, swaps, etc. En mt5 se muestra "desnudo". No lo encuentro, ¿hay alguna configuración para que mt5 lo muestre como mt4? ¿O no es capaz de hacerlo?
 

¿Hay alguna forma de medir la anchura en píxeles del texto escrito en OBJ_TEXT?

 
Alexey Viktorov:

¿Cómo no ha cambiado? Cambiaba con cada tic. Pero en el ciclo, sí, no lo hizo. Tal vez, ¿te confundiste un poco con eso?

Pero en mql5 puedes determinar el precio actual antes del bucle y no cambiará hasta que salgas del bucle.

Sí, gracias, mi suposición resultó ser errónea, pero la pregunta es ligeramente diferente. Tengo un código, igualpara MT4 y MT5:

 void OnTick()
              {
              string S=Symbol();
              double LastAsk= SymbolInfoDouble(S,SYMBOL_ASK);
              ObjectCreate(0,"hLine",OBJ_HLINE,0,0,LastAsk +500*Point());
              }

La cuestión es que en MT4 la línea creada se fijará en el precio al que fue creada, pero en MT5 cada vez que se produzca un nuevo tick la línea se dibujará con un nuevo valor de LastAsk y su posición cambiará junto con el precio. ¿Cómo puedo evitarlo en MT5?

 
WinProject:

Sí, gracias, mi suposición resultó ser errónea, pero la pregunta es un poco diferente. Hay un código,igual para MT4 y MT5:

La cuestión es que en MT4 la línea creada será estacionaria en el precio en el que fue creada, pero en MT5 cada vez en un nuevo tick la línea se dibujará en un nuevo valor de LastAsk y su posición cambiará junto con el precio. ¿Cómo puedo evitarlo en MT5?

Compruebe la disponibilidad de la línea por su nombre. Si no la hay, cree una. Estos son los aspectos básicos en general
 
Artyom Trishkin:
Busca una línea por su nombre. Si no hay ninguna línea, cree una. Esto es lo básico en general.

Gracias, ¿qué más puedo leer sobre estos fundamentos de lógica de programación? Parece elemental, pero es difícil de entender desde cero.

 if(ObjectFind(0,"hLine"))

Añadí una condición y todo funcionó.

 
WinProject:

Gracias, ¿qué más puedo leer sobre estos fundamentos de lógica de programación? Parece elemental, pero es difícil de entender desde cero.

Añadí una condición y todo funcionó.

De repente (como siempre) ObjectGetInteger(0,objectName,OBJPROP_TYPE) funciona más rápido.

ObjectFind es un comando sincrónico, es decir, espera a que se actualicen completamente (y estén disponibles) los objetos del gráfico.

Si trabajas con tus propios objetos (es decir, creados en tu propio stock), no deberías usar ObjectFind - ya sabes en qué ventana se creó el objeto y que muy probablemente existe y es del tipo correcto.
Lo peor que puede pasar es que el usuario borre el objeto o cambie la propiedad

 
WinProject:

Sí, gracias, mi suposición era errónea, pero la pregunta es un poco diferente. Hay un código,igual para MT4 y MT5:

La cuestión es que en MT4 la línea creada será estacionaria en el precio en el que fue creada, pero en MT5 cada vez en un nuevo tick la línea se dibujará en un nuevo valor de LastAsk y su posición cambiará junto con el precio. ¿Cómo puedo evitarlo en MT5?

No lo recuerdo, tengo que comprobarlo pero no quiero hacerlo. Tal vez, en mql4 cuando se intentaba crear un objeto con el nombre de uno ya existente, simplemente se devolvía un error, mientras que en mql5 no es un error sino una modificación de parámetros, si las coordenadas son diferentes.

Como dijo Artem, comprueba la existencia del objeto

int  ObjectFind( 
   long    chart_id,     // идентификатор графика 
   string  name          // имя объекта 
   );
Razón de la queja: