Por favor, guíenme con respecto a la propagación - página 4

 
deysmacro:
Sin embargo, debe recordar. El EA sólo cierra las operaciones en curso. Tienes que abrir la operación tú mismo.

100%, no hay problema, más bien eso es exactamente lo que estoy tratando de lograr .. no quiero EA para abrir cualquier comercio, que es mi trabajo .. Sólo quiero que se cierre si más de 2 órdenes están abiertas en X beneficio y debe considerar la propagación ! Poco a poco me voy acercando a ello... esto de la programación deberían haberlo enseñado en las escuelas.. jeje que pena que sea de los 80, nunca pensé que tendría que pasar por ello, pero cuanto más leo el archivo de ayuda, más intrigante me parece... además, este foro tiene un montón de ayuda, gracias a tipos como vosotros.
 
tatyawinchu:

¿Qué pasa si puedo añadir un bucle IF y luego pegar el resto del código de abajo que inicia el bucle?

La condición IF debe comprobar que el Total de Órdenes sea => 2 para que el control se pase a cerrar todas las órdenes abiertas con X de beneficio después del spread?



No estoy seguro de lo que realmente quieres decir con "La condición IF debería comprobar que el Total de Órdenes es => 2 para que el control se pase a cerrar todas las órdenes abiertas con X beneficios después del spread"

pero estoy bastante seguro de que no pasará nada realmente malo si lo intentas. Y si no funciona, no hay nada que perder. Al menos lo has intentado.

 
tatyawinchu:

100%, no hay problema, más bien eso es exactamente lo que estoy tratando de lograr .. no quiero EA para abrir cualquier comercio, que es mi trabajo .. Sólo quiero que se cierre si más de 2 órdenes están abiertas en X beneficio y debe considerar la propagación ! Poco a poco me voy acercando a ello... esto de la programación deberían haberlo enseñado en las escuelas.. jeje que pena que sea de los 80, nunca pensé que tendría que pasar por ello, pero cuanto más leo el archivo de ayuda, más intrigante me parece... además, este foro tiene un montón de ayuda, gracias a tipos como vosotros.

Solo hay que incluir la propagación en el beneficio total.
 
thrdel:


No estoy seguro de lo que realmente quieres decir con "La condición IF debe comprobar que el OrdersTotal sea => 2 para que se pase el control para cerrar todas las órdenes abiertas a X de beneficio después del spread"

pero estoy bastante seguro de que no pasará nada realmente malo si lo intentas. Y si no funciona, no hay nada que perder. Al menos lo has intentado.


No estoy seguro de lo que realmente quieres decir con "La condición IF debe comprobar que el OrdersTotal sea => 2 para que se pase el control para cerrar todas las órdenes abiertas a X beneficios después del spread"

Hmm... Ok lo que quiero decir con eso es

SI .. número total de órdenes abiertas es más que o igual a 2 .. sólo entonces seguir adelante y seguir el resto del código ..

SI el número total de órdenes abiertas .. [ OrdersTotal() ?? ] .. es inferior a 2 .. que significa su 1 o 0, entonces no hacer nada ..

Ahora, aquí hay un problema para mí, que el archivo de ayuda de mql 4 dice que OrdersTotal() cuenta todas las órdenes, de mercado y pendientes... Estoy tratando de buscar alguna función que pueda obtener sólo las órdenes de mercado en vivo, no las pendientes, O, puede ser calculado matemáticamente ya que en su mayoría sólo tengo un máximo de 2 operaciones que se ejecutan a la vez de todos modos.

¿Esta explicación es más clara?

Gracias por el tiempo que me dedicas.

 

thrdel quiere que pruebes primero y veas lo que sucede aunque estoy bastante seguro de lo que probablemente sucedería.

 
deysmacro:

thrdel quiere que pruebes primero y veas lo que pasa.



sí, revisando el archivo de ayuda para encontrar la función adecuada que sólo da órdenes abiertas.
 
Enséñanos tu código cuando consigas completarlo y te ayudaremos si podemos.
 
deysmacro:
Muéstranos tu código cuando consigas completarlo y te ayudaremos si podemos.

Entendido. Gracias un montón ..

..

y no pude encontrar una función que sólo devuelve las operaciones abiertas .. Esto está bien, así que he añadido el bucle IF como abajo ..

//+------------------------------------------------------------------+
//|                    CloseTrades_After_Account_Profit_Reached.mq4  |
//|                                     Copyright © 2007, Tradinator |
//|                                          tradinator.fx@gmail.com |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, Tradinator"
#property link      "tradinator.fx@gmail.com"


                                       
extern double My_Money_Profit_Target=100;     //The amount of money profit at which you want to close ALL open trades.
extern string Profit_Target= "Enter above To Close all OPEN trades when amount of profit is Reached in Account and not per OPEN trade! ";
                                          
int Slippage=5;
int i;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start()

//+------------------------------------------------------------------+
//| This is just the single line of code that I have added
//+------------------------------------------------------------------+
{ 
 if (OrdersTotal()>=2)

 {
   if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
       int type   = OrderType();
               
       bool result = false;
              
       switch(type)
          {
          //Close opened long positions
          case OP_BUY  : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage,Pink);
                         break;
               
          //Close opened short positions
          case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage,Pink);
                          
          }
          
       if(result == false)
          {
            Sleep(0);
          }  
       }
      Print ("Account Profit Reached. All Open Trades Have Been Closed");
      return(0);
   }  
   
   Comment("Balance: ",AccountBalance(),", Account Equity: ",AccountEquity(),", Account Profit: ",AccountProfit(),
           "\nMy Account Profit Target: ",My_Money_Profit_Target);
   
  return(0);
   }
 }

He añadido la condición IF en el inicio que va si (OrdersTotal()>=2) .. [ Resaltado en el código anterior con el comentario ]

Ahora, hubo un problema al cerrar el {} ya que en el primer intento lo intenté como

{ 
 if (OrdersTotal()>=2)
}

 {
   if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       { .. etc etc 
     

así que básicamente como un codificador de primera vez, traté de poner esa condición if para ser comprobada PRIMERO .. no compiló ..

Así que cerré el {} obteniendo la condición dentro .. ahora se compila con sólo 2 advertencias y ningún error ..

el valor de retorno de 'OrderSelect' debe ser comprobado Testcode 1.mq4 56 8

no todas las rutas de control devuelven un valor Testcode 1.mq4 86 2

Así que compila .. ¿es lógicamente correcto?

[Además, no se elimina ninguna información de derechos de autor, sólo estoy añadiendo una línea, la eliminación de sus detalles sería totalmente injusto por mi parte .. ¿cuál es la regla con respecto a eso? ]

 
tatyawinchu:

Sí, revisando el archivo de ayuda para encontrar la función adecuada que sólo da órdenes abiertas.


Lo siento mucho hombre, como he dicho antes, realmente no soy tan bueno en la explicación . Entiendo que quieres encontrar una función que cuente sólo las órdenes de compra o venta abiertas, te pedí que miraras mi código, te lo expliqué lo mejor que pude y no era tan bueno como esperaba .

¿Recuerdas el primer paso que mencioné sobre ese código?

Fue : CountMyOrders. Ahora, si miraras el código como te pedí, esto es lo que encontrarías

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CountMyOrders()
  {
   myOrders=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {
         myOrders++;
        }
     }
   return(myOrders);
  }

Dice :

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

Debes saber lo que significa OP_BUY y OP_SELL.

No cuentan las órdenes pendientes, no hay stop de compra abierto, no hay stop de venta abierto, no hay límite de compra o límite de venta, sólo compra abierta y venta abierta.

¿Cómo puedo explicar mejor ese trozo de código y lo que hace?

Puedes seguir buscando en la documentación y familiarizarte con ella pero te puedo decir que la función que buscas no está ahí.

Mi EA dice que si no hay órdenes todavía, espere :

if(myOrders<1)

Quiere que su espere 2 órdenes. Si prestaras un poco de atención a lo que he dicho, probablemente te darías cuenta de que todo lo que tienes que hacer es :

if(myOrders<2)

Voilla. Ahora espera a que las 2 órdenes estén en su sitio - sin pendientes, ¡sólo compra o venta!

Por favor, comprenda que traté de poner el código para adaptarse a otros también que podrían estar buscando una manera de gestionar las operaciones abiertas y no tanto una costumbre diseñada para un propósito específico.

Está pensado como un ejemplo, toma lo que te parezca bueno, deja el resto fuera, mejóralo, cámbialo, aprende de él si puedes y experimenta con él.

Espero que tenga sentido.

 
thrdel:


Lo siento mucho hombre, como dije antes, no soy muy bueno explicando . Entiendo que quieres encontrar una función que cuente sólo las órdenes de compra o venta abiertas, te pedí que miraras mi código, te lo expliqué lo mejor que pude y no fue tan bueno como esperaba .

¿Recuerdas el primer paso que mencioné sobre ese código?

Fue : CountMyOrders. Ahora, si miraras el código como te pedí, esto es lo que encontrarías

Dice :

Debes saber lo que significa OP_BUY y OP_SELL.

No cuentan las órdenes pendientes, no hay stop de compra abierto, no hay stop de venta abierto, no hay límite de compra o límite de venta, sólo compra abierta y venta abierta.

¿Cómo puedo explicar mejor ese trozo de código y lo que hace?

Puedes seguir buscando en la documentación y familiarizarte con ella pero te puedo decir que la función que buscas no está ahí.

Mi EA dice que si no hay órdenes todavía, espere :

Quiere que su espere 2 órdenes. Si prestaras un poco de atención a lo que he dicho, probablemente te darías cuenta de que todo lo que tienes que hacer es :

Voilla. Ahora espera a que las 2 órdenes estén en su sitio - sin pendientes, ¡sólo compra o venta!

Por favor, comprenda que traté de poner el código para adaptarse a otros también que podrían estar buscando una manera de gestionar las operaciones abiertas y no tanto una costumbre diseñada para un propósito específico.

Está pensado como un ejemplo, toma lo que te parezca bueno, deja el resto fuera, mejóralo, cámbialo, aprende de él si puedes y experimenta con él.

Espero que tenga sentido.

Gracias a un montón .. En primer lugar, no es usted! su todo yo! jeje Soy el novato aquí .. sus explicaciones son perfectas! sólo poco difícil de digerir en este momento como voy paso a paso .. palabra por palabra a través de archivos de ayuda =) y pidiendo ayuda como me atascado ..Rather, ahora debido a su código, estoy leyendo la sección de la función en el archivo de ayuda! ¡! Además, ¿podría compilar el código que pegué arriba en su extremo y ver si hay algo mal con la lógica de esa condición IF? Omitamos ahora mismo que cuenta todas las órdenes... digamos que si este EA se ejecuta cuando no hay órdenes abiertas, entonces la primera orden se abrió y algún tiempo después otra orden se activa... ¿es el flujo lógico de esa condición IF correcto?Además, ahora estoy casi seguro de que este código sólo necesita una línea de fijación o tal[Además, dejé la idea de publicar esto como un trabajo .. ], no tengo que complicarlo para escanear si omitir órdenes de otros EAs porque para mí esto será el único EA que se ejecuta, por lo que no tengo que asignar específicamente número mágico a cada orden, etc ... ahora sólo tengo que averiguar si la lógica de mi IF es correcta ^^
Razón de la queja: