Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 513

 

¿Lo estoy haciendo bien?

y = OrderOpenPrice()-Ask;

¿Resto el precio actual del precio de la última orden abierta?

int i_buy=0; int i_sell=0;

for(int i=0;i<OrdersTotal();i++){

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol()){

switch(OrderType()){// Есть ли открыте ордера

case OP_BUY:

i_buy++;

break;

case OP_SELL:

i_sell++;

break;

}

y = OrderOpenPrice()-Ask;

}

}


if((i_buy==0 && i_sell==0) || y > Step) //--- нет открытых ордеров, открываем или расстояние от последнего ордера до текущей цены. Больше step

OrderSend(Symbol(), OP_BUY,StartLot,Ask,Slippage,0,Ask+TakeProfit*Point(),WindowExpertName()+" "+(string)0,0,0,clrBlue);


 
woin2110:

https://docs.mql4.com/ru/trading/orderselecthttps://docs.mql4.com/ru/trading/orderopenprice https://docs.mql4.com/ru/trading/orderlots

double z; //declarar la variable "z"
double y; //declarar la variable "y"


if(OrderSelect(10,SELECT_BY_POS)==true) //si el pedido seleccionado (por ticket) está presente

{

OrderLots()=z //asignar el lote de esta orden a la variable "z"

OrderOpenPrice()=y //asignar el precio de apertura a la variable "y"

}

prueba esto

No confundas a la gente y cuentes chorradas, por favor. Dices por billete, pero escribes selección por índice. Y si selecciona por ticket, no necesita especificar piscina - la función la ignora y la selecciona en cualquiera de las dos listas - en la que esté. Y para comprobar de qué lista se selecciona la orden, debemos comprobar la hora de cierre de la orden después de la selección exitosa y si es mayor que cero - entonces la orden ya ha sido cerrada, de lo contrario - se selecciona de la lista de posiciones abiertas

No está asignando el valor del lote a una variable, y viceversa - está intentando asignar el valor de la variable a la función que devuelve el lote del pedido seleccionado - esto no tiene ningún sentido

Exactamente lo mismo que intentas hacer con la función que devuelve el precio de apertura.

 

artmedia70:

Dime qué estoy haciendo mal. Todo parece correcto.

if((i_buy==0 && i_sell==0) || y > Step)

O (i_buy==0 && i_sell==0) o y > Step. Si alguna de las dos cosas es cierta. Entonces lo omitimos y abrimos una orden.

 
evillive:

Si Alpari - nunca pudo. Si es otra empresa de corretaje, depende de la cuenta. Si tenemos una buena relación de trabajo con Alpari, volveremos a la retirada. Hay que estudiar las condiciones comerciales antes de empezar a hacer algo, ahí está todo escrito.

El servicio de asistencia 8-800-200-01-31 explicó que a finales de la semana pasada habían corregido un error que permitía abrir órdenes en las cuentas ECN al mismo tiempo que se fijaban el SL y el TP. Cerré la última posición el jueves.

Tienes razón en que el Reglamento de Comercio no dice nada al respecto y que ahora sólo se guardará OrderModify() .

Gracias por la respuesta.

 
Zolotai:

artmedia70:

Dime qué estoy haciendo mal. Todo parece correcto.

if((i_buy==0 && i_sell==0) || y > Step)

O (i_buy==0 && i_sell==0) o y > Step. Si alguna de las dos cosas es cierta. Entonces lo omitimos y abrimos una orden.

Prácticamente no entiendo la pregunta...

No sé qué nos falta, pero se puede abrir un pedido... Es decir, si se cumple esta condición y se debe abrir una orden, entonces

Puedo decirle lo que dice aquí:

Si i_buy e i_sell son ambos iguales a cero, se puede abrir una orden. O bien, si alguno de ellos no es igual a cero, o incluso ambos no son iguales, pero si y es mayor que Step, entonces abre una orden también.

 
artmedia70:

Prácticamente no entiendo la pregunta...

No sé qué nos falta, pero se puede abrir un pedido... Es decir, si se respeta esta condición y se debe abrir una orden.

Puedo decirle lo que dice aquí:

" Abrir una orden si i_buy e i_sell son ambos iguales a cero. O si alguno de ellos no es igual a cero, o incluso ambos no son iguales, pero si y es mayor que Step, entonces también se debe abrir una orden.



Entiendo correctamente en el bucle. Procedemos desde la primera orden abierta hasta la última. En consecuencia, debemos tomar el precio del último pedido.

Hay más. He puesto Alert("d") en OnTick. He ejecutado el código en el probador pero no he escuchado ningún pitido o ventana.

 
Zolotai:

En el ciclo de la horquilla entiendo que es correcto. Pasamos de la primera orden abierta a la última. En consecuencia, tomo el precio del último pedido.

También tengo esto. He puesto Alert("d") en OnTick. He ejecutado el código en el probador pero no he escuchado ningún pitido ni ventana.

Las alertas en el probador se muestran en el registro del probador. Pero sobre el ciclo, saltar, seleccionar, fuerza bruta no está claro. ¿Puedes entender la esencia de lo que quieres terminar?
 

¡Buenas tardes!

¿Cómo luchar contra el "MetaEditor no encontrado" al intentar editar un EA? MetaTrader build 600.

Me parece que no recuerdo un problema semejante en las construcciones más antiguas...

Puede explicarse por el hecho de que el ordenador en el que estoy trabajando es bastante poco potente y se carga el 50-75% del tiempo. Tengo 7 instancias de MT4 funcionando en él, pero en condiciones normales (es decir, sin carga externa como el acceso a través de TeamViewer y tratando de lanzar MetaEditor) su rendimiento es suficiente, y el Administrador de Tareas que se ejecuta en segundo plano muestra el uso de la CPU avg <=45-50% durante 15-20 min.

Este problema no se produce en el 100% de los casos y el MetaEditor, tras hacer gala de una paciencia y persistencia poco comunes, se ejecutará siempre a partir de la 5ª-10ª-25ª vez. Pero es realmente molesto intentar iniciar MetaEditor durante media hora.

 
artmedia70:
Las alertas en el probador se imprimen en el registro del probador. Y lo del bucle, la omisión, la selección y la fuerza bruta no está claro. ¿Puede obtener la esencia de lo que quiere como resultado?


Sólo quiero escribir el robot más sencillo. Funciona por martin, por sí mismo.

Aquí es donde está el error.

y = OrderOpenPrice()-Ask;

No tengo números enteros como pensaba. Pero, por ejemplo, 0,0044. ¿Cómo obtengo 44, un número entero?

 
Zolotai:


Sólo quiero escribir el robot más sencillo. Funciona por martin, por sí mismo.

Aquí es donde está el error.

y = OrderOpenPrice()-Ask;

No tengo números enteros como pensaba. Pero, por ejemplo, 0,0044. ¿Cómo obtengo 44, un número entero?



int y = int((OrderOpenPrice()-Ask)/Point);