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

 

¿Pueden decirme por qué en el código que copié de este sitio el compilador escribe "identificador no declarado" antes deMagic?

for (int pos=0; pos<=OrdersTotal()-1; pos ++) 
{
 if(OrderSelect (pos, SELECT_BY_POS)==true)
  {if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic &&OrderCloseTime()==0) // если у Вас есть отложенные ордера и открытие
  return;}
 else
  Print("OrderSelect() вернул ошибку - ",GetLastError());
}            
 //продолжае
 
VasiliKolchanov:

¿Pueden decirme por qué en el código que copié de este sitio antes deMagic el compilador escribe "identificador no declarado"?

debe ser porque no está declarado.

declararlo al principio. o como un parámetro o constante... o una variable, al menos de alguna manera... la entidad debe existir :-)

input int Magic=5566; // это чтобы он был в параметрах и можно поменять

// или const int Magic = 8899;

 
VasiliKolchanov:

¿Pueden decirme por qué en el código que copié de este sitio el compilador escribe "identificador no declarado" antes deMagic?

Porque he utilizado el identificador Magic, cuyo tipo (y valor, respectivamente) no se describe en ninguna parte. Tienes que declarar una variable (o constante) con ese nombre y asignarle un valor.

 
VasiliKolchanov:

Por favor, díganme por qué en el código que copié de este sitio el compilador escribe "identificador no declarado" antes deMagic?

Porque no está declarado en ninguna parte de su código - es obvio.
 
Artyom Trishkin:
Porque no está declarado en ninguna parte de su código - eso es obvio.
Gracias a todos.
 

Chicos, ¡díganme cómo tratar y por dónde empezar!

Ejemplo: Tengo 15 órdenes con un lote de 0,01. Necesito cerrar alguna(s) operación(es) con un tamaño de lote de 0,07 en algún momento.

Mi pregunta es, ¿cómo puedo cerrar 7 órdenes o 0,07 en un OrderClose(...)?

Si pongo 0,07 a la vez no ve las operaciones con volumen 0,01.

Soy nuevo en la programación

 
Rustam Bikbulatov:

Chicos, ¡díganme cómo tratar y por dónde empezar!

Ejemplo: Tengo 15 órdenes con un lote de 0,01. Necesito cerrar alguna(s) operación(es) con un tamaño de lote de 0,07 en algún momento.

Mi pregunta es, ¿cómo puedo cerrar 7 órdenes o 0,07 en un OrderClose(...)?

Si pongo 0,07 a la vez no ve las operaciones con volumen 0,01.

Soy nuevo en la programación.

No hay manera de cerrarlo por una orden. Sólo podemos hacer una selección de pedidos y, en consecuencia, eliminar cada uno de ellos. Y si borras la orden de un volumen menor, sigues teniendo un volumen abierto. Lo comparamos con nuestro volumen abierto restante. Cerramos hasta que el volumen de 0,07 alcance su límite. Esa es la única manera.

 
Rustam Bikbulatov:

Chicos, ¡díganme cómo tratar y por dónde empezar!

Ejemplo: Tengo 15 órdenes con un lote de 0,01. Necesito cerrar alguna(s) operación(es) con un tamaño de lote de 0,07 en algún momento.

Mi pregunta es, ¿cómo puedo cerrar 7 órdenes o 0,07 en un OrderClose(...)?

Si pongo 0,07 a la vez no ve las operaciones con volumen 0,01.

Soy nuevo en la programación.

Si el broker permite utilizar el contracierre, puede abrir una orden opuesta con el volumen 0,07, fijando así el precio de ganancia/pérdida para este volumen. Pues bien, después de esto, todavía tendríamos que realizar 7 operaciones de cierre opuestas (función OrderCloseBy()). Hay una operación más que se ejecuta con este enfoque. La ventaja es que las siete órdenes se cierran a un solo precio.

 

Hola a todos.

Por favor, asesórese sobre la velocidad del EA, y probablemente la fiabilidad y corrección del código.

Me refiero a las órdenes abiertas y pendientes en cada tick y cambiarlas si es necesario.

En el manual de OrderSelect, está escrito:"Cuando las órdenes se seleccionan secuencialmente utilizando el parámetro SELECT_BY_POS, la información se da en el orden en que se recibió del servidor de comercio."

A partir de esto, surge la pregunta: ¿Podemos crear una matriz en la que se almacenen el tipo, el precio de entrada y, por ejemplo, un comentario único de una orden? ¿Podría recorrer el array en cada tick y luego, si es necesario, dirigirse a la función OrderSelect y hacer una selección utilizando el comentario único de la orden?

 
Decromor:

Hola a todos.

Por favor, den su consejo, se trata principalmente de la velocidad de la EA y probablemente de su fiabilidad y corrección en la escritura.

Me refiero a las órdenes abiertas y pendientes en cada tick y cambiarlas si es necesario.

En el manual de OrderSelect, está escrito:"Cuando las órdenes se seleccionan secuencialmente utilizando el parámetro SELECT_BY_POS, la información se da en el orden en que se recibió del servidor de comercio."

A partir de esto, surge la pregunta: ¿Podemos crear un array, en el que debemos guardar el tipo, el precio de entrada y, por ejemplo, un comentario único de la orden? En cada tick, debemos recorrer el array y, si es necesario, dirigirnos a la función OrderSelect y hacer una selección por el comentario único del pedido?

El OrderSelect() se implementa dentro del terminal, y no hay ninguna petición al servidor. Por eso no hay nada malo en llamar a la lista de pedidos en cada tic. Esto es exactamente lo que hacen la mayoría de los EA.

Y tu pregunta sobre la matriz está relacionada con la arquitectura del programa. En el caso de un EA complejo que opera con una gran cantidad de órdenes, esto es absolutamente necesario. Si el Asesor Experto opera con una sola orden con lógica simple, la matriz es redundante.

Sólo cabe mencionar el hecho de que aunque tengamos un array de pedidos, no podemos prescindir de llamar a OrderSelect(). Al fin y al cabo, tenemos que comprobar en cada tick si la orden sigue existiendo o no. Y además, sus parámetros pueden modificarse.