Ayuda a la codificación - página 245

 
mladen:
macerina

Sólo la primera parte (el resto es sólo una variación de eso) :

si ema(7) < ema(21) y ema(7) anterior < ema(21) anterior entonces si ema(de rsi(14),9) < rsi(14) señal de compra

se puede decir de esta manera también :

si macd(7,12) < y macd(7,12) anterior < 0 entonces si ema(de rsi(14),9) < rsi(14) señal de compra

Gracias por la respuesta mladen es posible codificar un indicador mt4 con este criterio

Gracias de antemano

 
macerina:
Gracias por la respuesta mladen es posible codificar un indicador mt4 con este criterio Gracias de antemano

macerina

Eso es un simple sistema macd + rsi. Creo que ya existe. Si no hay tal, es fácil hacer un indicador y luego se hará

 
mladen:
Por favor, publique la parte del código en la que está tratando de lograr lo que ha descrito aquí: https: //www.mql5.com/en/forum/174385/page162 (no la colocación de 3 take profits en las órdenes y la gestión de 3 trailing stops, sino la parte que está tratando de hacer exactamente lo que ha descrito) y entonces, tal vez alguien pueda ayudarle con su codificación.

//contar las órdenes de compra abiertas.

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol());

//contar las órdenes de venta abiertas.

iOpenOrders_Sell = CntOrd(iOrderType_Sell,MagicNumber,Symbol());

if (iOpenOrders_Buy==3 || iOpenOrders_Sell==3)

{

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop);

}

if (iOpenOrders_Buy==1 || iOpenOrders_Sell==1)

{

if(TrailingStop_2>0 && TrailingStart_2 > 0) TrailOrder_3 (TrailingStart_2, TrailingStop_2);

}

//////////////////////////////////////////////////////////////////////////////////////////////

Esta es la parte en la que el EA busca el número de órdenes abiertas para el par adjunto.

Si encuentra 3 órdenes, seguirá la función habitual de Trailing Stop. Y si encuentra que sólo hay una operación en curso, entonces seguirá la segunda función de Trailing Stop.

Esto funciona "bien" para un solo par, pero cuando adjunto este EA a múltiples gráficos (pares), no funciona, ya que obtiene todas las órdenes abiertas a través de la función "OrdersTotal()".

Inmediatamente me viene a la mente un problema: cómo sabe que había 3 órdenes y luego sólo quedaba 1 (no hay una sola línea de código en ese EA que intente averiguar eso)

/Fin - Cerrar posiciones de venta abiertas------------------------------------------

double PrecioAbierto=Precio;

int count=3;

if (count==3)

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue);

if (BuyOrder_1>0) //Comprobar si la orden se ha abierto o no

{

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Orden de compra 1 enviada con éxito. Ticket=" + BuyOrder_1;

count = count - 1;

//////////////////////////////////////////////////////////////

Así, el recuento va disminuyendo y abriendo órdenes hasta count=1. Así que 3 órdenes se están abriendo como count=3 inicialmente.

 
Oridroo:
//contar las órdenes de compra abiertas.

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol());

//contar las órdenes de venta abiertas.

iOpenOrders_Sell = CntOrd(iOrderType_Sell,MagicNumber,Symbol());

if (iOpenOrders_Buy==3 || iOpenOrders_Sell==3)

{

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop);

}

if (iOpenOrders_Buy==1 || iOpenOrders_Sell==1)

{

if(TrailingStop_2>0 && TrailingStart_2 > 0) TrailOrder_3 (TrailingStart_2, TrailingStop_2);

}

//////////////////////////////////////////////////////////////////////////////////////////////

Esta es la parte en la que el EA busca el número de órdenes abiertas para el par adjunto.

Si encuentra 3 órdenes, seguirá la función habitual de Trailing Stop. Y si encuentra que sólo hay una operación en curso, entonces seguirá la segunda función de Trailing Stop.

Esto funciona "bien" para un solo par, pero cuando adjunto este EA a múltiples gráficos (Pares), no funciona ya que obtiene todas las órdenes abiertas a través de la función "OrdersTotal()".

/Final - Cerrar posiciones abiertas de venta------------------------------------------

double PrecioAbierto=Precio;

int count=3;

if (count==3)

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue);

if (BuyOrder_1>0) //Comprobar si la orden se ha abierto o no

{

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Orden de compra 1 enviada con éxito. Ticket=" + BuyOrder_1;

count = count - 1;

//////////////////////////////////////////////////////////////

Así, el recuento va disminuyendo y abriendo órdenes hasta que el recuento es de 1. Por lo tanto, se abren 3 pedidos ya que el recuento=3 inicialmente.

La pregunta era la siguiente: ¿cómo se sabe que una vez hubo 3 órdenes abiertas y luego sólo queda una? El hecho de que sólo quede una orden abierta no muestra nada. Tiene que comprobar en la lista de órdenes cerradas las otras 2 órdenes que formaban parte de un triplete, y como los corredores pueden cambiar su campo de comentarios, no hay manera de saber que algunas órdenes formaban parte de un mismo triplete (no hay ningún campo en la lista de órdenes que pueda utilizarse para marcar que algunas órdenes pertenecen a un mismo grupo de órdenes).

Podrías intentar usar archivos para guardar los números de tickets que pertenecían a tripletas, pero, en caso de intentar usar el mismo EA desde otro terminal, puedes obtener terribles errores. Lo mismo puede ocurrir cuando reinstalas metatrader. El uso de variables globales es aún peor (son casi lo mismo que el uso de archivos - pero peor), por lo que no hay manera significativa de que usted pueda rastrear trillizos de órdenes correctamente

Entonces, ¿cómo saber que 1 orden abierta es la última orden abierta de las 3 o es la primera orden abierta de un nuevo triplete de órdenes?

 
mladen:
La pregunta era la siguiente: ¿cómo se sabe que una vez hubo 3 órdenes abiertas y luego sólo queda una? El hecho de que sólo quede una orden abierta no muestra nada. Hay que buscar en la lista de órdenes cerradas las otras 2 órdenes que formaban parte de un triplete, y como los brokers pueden cambiar su campo de comentarios, no hay forma de saber que algunas órdenes formaban parte de un mismo triplete (no hay ningún campo en la lista de órdenes que pueda utilizarse para marcar que algunas órdenes pertenecen a un mismo grupo de órdenes). Entonces, ¿cómo se sabe que 1 orden abierta es esa última orden abierta de las 3 o es una primera orden abierta de un nuevo triplete de órdenes?

Mladen,

Revisa tu pm, necesito un codificador

¡Sueño de un icono GRANDE para PM !

 
mladen:
Entonces, ¿cómo se sabe que 1 orden abierta es la última orden abierta de las 3 o es la primera orden abierta de un nuevo trío de órdenes?

Hay una condición:

if (MA_Diferencia_1>=Valor_Diferencia && iOpenOrders_Buy ==0)

Así que con esto me estoy asegurando de que si hay alguna orden de compra existente, no se abrirá ninguna nueva orden de compra a pesar de que se cumplan las condiciones. Abrirá una nueva orden sólo cuando no haya ninguna orden de compra/venta existente.

Y como está abriendo 3 órdenes a la vez del mismo tipo (compra/venta) y si dos de ellas ya están cerradas, entonces la que queda es del mismo tipo con seguridad.

Lo he probado. Así que no hay ninguna confusión al respecto.

 
Oridroo:
Hay una condición:

if (MA_Diferencia_1>=Valor_Diferencia && iOpenOrders_Buy ==0)

Con esto me aseguro de que si hay alguna orden de compra existente, no se abrirá ninguna nueva orden de compra a pesar de que se cumplan las condiciones. Abrirá una nueva orden sólo cuando no haya ninguna orden de compra/venta existente.

Y como está abriendo 3 órdenes a la vez del mismo tipo (compra/venta) y si dos de ellas ya están cerradas, entonces la que queda es del mismo tipo con seguridad.

Lo he probado. Así que no hay confusión al respecto.

Hay muchas suposiciones en todo el asunto. La primera es que cuando intentas abrir 3 órdenes, realmente se abrirán 3 órdenes. ¿Y si abre sólo 1? . Y así sucesivamente ...

Lo siento. Pero parece que estamos hablando de cosas diferentes todo el tiempo. Espero que alguien te pueda ayudar, ya que yo no puedo

Feliz comercio

 
mladen:
Hay muchas suposiciones en todo el asunto. La primera es que cuando intentas abrir 3 órdenes, realmente abrirá 3 órdenes. ¿Y si abre sólo 1? Y así sucesivamente ...

Lo siento. Pero parece que estamos hablando de cosas diferentes todo el tiempo. Espero que alguien pueda ayudarte, ya que yo no puedo

Feliz comercio

Si no puedes, no pasa nada.

Lo he estado probando durante un tiempo con diferentes brokers y hasta ahora no ha 'Fallado' en la apertura de 3 órdenes.

De todas formas, creo que podrías decir al menos qué punto/lógica hace que un EA pueda distinguir entre diferentes pares mientras estoy llamando a 'OrdersTotal()'.

Cualquier pequeño ejemplo de EA estará bien.

 
macerina:
Gracias por la respuesta mladen es posible codificar un indicador mt4 con este criterio Gracias de antemano

macerina

Compruebe el indicador en este post : https://www.mql5.com/en/forum/173574/page432. Es casi exactamente igual al descrito por aspen graphic code

 

Gracias Mladen por el código ... ¿Tiene esto el doble macd comparision y 50 crossover como usted ha explicado en la lógica anterior.

Gracias de antemano

Razón de la queja: