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

 
Alexey Viktorov:

No lo recuerdo, tengo que comprobarlo, pero no quiero hacerlo. Quizás, en mql4 al intentar crear un objeto con el nombre de uno existente, se devolvía un error, y en mql5 no un error, sino la modificación de los parámetros si las coordenadas son diferentes.

Como ha dicho Artem, comprueba la existencia del objeto.

Sí, así es.

 
Maxim Kuznetsov:

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 usted trabaja con sus propios objetos (creados en su propio stock), no debería usar ObjectFind - usted ya sabe en qué ventana se creó el objeto y que muy probablemente existe y es del tipo correcto.
Lo peor que podría ocurrir es que el usuario borrara el objeto o cambiara la propiedad.

Gracias. Eso es interesante.

 

Buenos días a todos.
En el libro de Kovalev se dice que los índices de las matrices pueden establecerse en valores enteros como constantes,variables o expresiones.
Cuando establezco el índice en mql4 como una variable, el compilador sólo me da un error

Así es como he establecido el índice
intW=1000;

doble T_P[W]={0};

void OnTick()

{

código

}
Por favor, dígame qué estoy haciendo mal.
Gracias.

 
ANDREY:

Buenos días a todos.
El libro de Kovalev dice que los índices de las matrices pueden establecerse en valores enteros como constantes,variables o expresiones.
Cuando establezco el índice en mql4 como una variable, el compilador sólo me da un error

Así es como he establecido el índice
intW=1000;

doble T_P[W]={0};

void OnTick()

{

código

}
Por favor, dígame qué estoy haciendo mal.
Gracias.

El índice del array no es el tamaño del mismo.
 
Alexey Viktorov:
El índice del array no es el tamaño del mismo.

Lo tengo, gracias. ¿Hay alguna forma de establecer el tamaño del array mediante una variable?

 
ANDREY:

Entendido, gracias. ¿Hay alguna forma de establecer el tamaño del array mediante una variable?

Establece un nuevo tamaño en la primera dimensión del array

intArrayResize(
void&array[],// array pasado por la referencia
intnew_size,// nuevo tamaño de la matriz
intreserve_size=0// valor de reserve_size (redundante)
)

 
Aleksey Vyazmikin:

Establece el nuevo tamaño en la primera dimensión del array

intArrayResize(
void&array[],// array pasado por referencia
intnew_size,// nuevo tamaño de la matriz
intreserve_size=0// valor de reserve_size (redundante)
);

Gracias por la valiosa información.

 

Hola! Por favor, ayúdame con un código simple.

Estoy tratando con mecanismos de apertura/cierre de órdenes en este momento y me he encontrado con un problema con el cierre de posiciones abiertas.

El código es sencillo. La idea del algoritmo es dibujar la MA (media móvil) con un periodo de 100 en el gráfico. Si la vela anterior [1] abrió por encima de la MA, y cerró por debajo de la MA, entonces la siguiente vela [0] abre una ordende VENTApara vender.

//(Las condiciones para comprar son diferentes, no las describiré)

Para el cierre de la orden las siguientes condiciones - el precio actual ha pasado del precio de apertura de la orden el valor establecido de puntos, por ejemplo 40.

Ejemplo: Un lote se abre a Bid= 1,20045, debería cerrar a Ask= 1,20005.

El código de apertura y cierre está empaquetado en dos funciones correspondientes - CheckForOpen() y CheckForClose() que a su vez son llamadas con la función OnTick(). De hecho, el precio puede pasar un cierto valor de puntos (pasar el nivel de cierre) pero la orden no se cerrará.

No puedo entender qué es lo que está mal.

p/s/ Capturas de pantalla y código adjuntos.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
4elovechishe:

Hola! Por favor, ayúdame con un código simple.

En este momento estoy tratando con mecanismos de apertura/cierre de órdenes y me he encontrado con el problema de cerrar posiciones abiertas.

El código es sencillo. La idea del algoritmo es dibujar la MA (media móvil) con un periodo de 100 en el gráfico. Si la vela anterior [1] abrió por encima de la MA, y cerró por debajo de la MA, entonces la siguiente vela [0] abre una ordende VENTApara vender.

//(Las condiciones para comprar son diferentes, no las describiré)

Para el cierre de la orden las siguientes condiciones - el precio actual ha pasado del precio de apertura de la orden el valor establecido de puntos, por ejemplo 40.

Ejemplo: Un lote se abre a Bid= 1,20045, debería cerrar a Ask= 1,20005.

El código de apertura y cierre está empaquetado en dos funciones correspondientes - CheckForOpen() y CheckForClose() que a su vez son llamadas con la función OnTick(). De hecho, el precio puede superar un determinado valor de puntos (pasar el nivel de cierre) pero la orden no se cerrará.

No puedo entender qué es lo que está mal.

p/s/ Capturas de pantalla y código adjuntos.

El CheckForOpen() no debe ser llamado directamente en OnTick, sino en un OnBar autoescrito (que debe ser llamado en OnTick) - en la apertura de la barra. Pero esto es algo trivial

, en lugar de Open[1], Close[1] (la vela anterior ha roto la MA100) deberíamos mirar Open[1],Open[0] (la vela anterior abrió desde un lado de la MA, la actual desde el otro lado). De lo contrario, se verá un hueco poco profundo entre velas y se perdonará la lógica.

La SMA de la Mediana cambia en la barra 0, es decir, no es constante. No se puede comparar con ella. Corregir el algoritmo.

 
Aleksey Vyazmikin:

Establece el nuevo tamaño en la primera dimensión del array

intArrayResize(
void&array[],// array pasado por referencia
intnew_size,// nuevo tamaño de la matriz
intreserve_size=0// valor de reserve_size (redundante)
);

Gracias de nuevo por tu sugerencia, pero..... en la Ayuda está escrito que esta función se aplica sólo a los arrays dinámicos. Y mi código NO es un array dinámico, sino uno normal.

Te agradeceré mucho si me dices (o, mejor, me enseñas) cómo cambiar el tamaño de un array regular en la primera dimensión.
Gracias de nuevo por su ayuda.