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

 
EA starts 
---> Does nothing till there is 0 or 1 order 
----> Makes a 'call open sound' when 2nd order gets triggered 
----> Closes both orders at X amount of pure profit [after considering spread] and makes a 'call close sound' ]

of course, call open and call close sound files can be any small wave files.. easily available on mt4 itself. .. 
I think these things can be achieved in the above EA that I had posted by changing a few things !
Wow .. lo que quieres es básicamente bastante fácil de codificar.
 
deysmacro:
Wow .. lo que quieres es básicamente bastante fácil de código.


¿Puedes guiarme a ello? Ya tengo esto de la web

//+------------------------------------------------------------------+
//|                    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()
{
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);
}

Ahora, he dejado muy claro que no soy un codificador, pero creo que necesito alguna línea debajo de "int start() " que cuente el número de órdenes EJECUTADAS [no pendientes] y luego pase al siguiente código sólo si son 2 y ejecute el resto del código ..if (AccountProfit()>= My_Money_Profit_Target).. etc

¿correcto? ¿Cómo decir tal línea en MQL?

int start()
{
 {
   if (Ordertotal()<=1)  ------>   See , something here which says only execute lower code if total executed orders are two else dont go to lower code.. I know that syntax is totally busted, trying to push the concept                                                                                                             
                                   as a weak non coder mind ;( .. so till total open orders are less than or equal to 1 means not 2, the code below that line wont come into play !         

      if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
 
thrdel:

Si deVries,

todo falla y no debería hacerlo si tú lo dices, pero como realmente no veo mucha ayuda en tu respuesta .....

Entiendes que el código no es un EA comercial destinado a la venta a un cliente quisquilloso, cierto Estamos intentando solucionar algo y si no quieres ayudar, al menos deberías dejarlo estar.

¿De verdad crees que si cambio el plazo varias veces..... qué? El deslizamiento será 3000000 ? No en mi MT4 aparentemente. Y si no me crees, haz una prueba tú mismo.

Mi prueba dice que cuando cambias los marcos de tiempo, el EA pasa por el ciclo deinit/init y como el código mencionado está en el OnInit, el Slippage estará justo en el punto 30 cada vez.

Como cualquiera puede ver, cambiar los marcos de tiempo no llevará el Slippage a un millón, si eso es lo que estás sugiriendo.

Y no, no es una imagen falsa, es real, puedes comprobar el tiempo de cambio de cada time frame.

Espero que te sirva de ayuda.


esto falla .....

para muchas operaciones prc no es el precio correcto

que tienes que decir al respecto...

leer las llamadas dobles a OnInit() y OnDeinit()

hay problemas con las nuevas versiones

(El problema de las dobles llamadas a OnInit() parece estar solucionado en la build 628 pero todavía no tienen esta versión )

 
deVries:

esto falla .....

para muchos oficios prc no es el precio correcto

que tienes que decir al respecto...

¡jejeje, ahora os habéis metido en la madriguera del conejo y estáis discutiendo algo que hace que los pájaros vuelen sobre mi cabeza ! xD .. ¿podríais mirar esa línea de código tan cutre que he añadido? =D

 
tatyawinchu:

¡jejeje, ahora os habéis adentrado en la madriguera del conejo y estáis discutiendo algo que hace que los pájaros vuelen sobre mi cabeza ! xD .. ¿podríais mirar esa línea de código tan cutre que he añadido? =D


Correcto La compra y la venta son los precios del símbolo del gráfico si la operación es otro símbolo el precio de cierre es incorrecto

       if(result == false)
          {
            Sleep(0);
          }  

¿que efecto tendrá esto?

¿está fallando? ¿el tipo de orden es pendiente?

o es que falla el cierre

en ese caso necesitas obtener el último error GetLastError() para saber la razón

 
tatyawinchu:

EA comienza ---> No hace nada hasta que hay 0 o 1 orden ----> Hace un 'sonido de llamada abierta' cuando la segunda orden se activa ----> Cierra ambas órdenes en X cantidad de beneficio puro [después de considerar la propagación] y hace un 'sonido de llamada cerrada' ]

por supuesto, los archivos de sonido de call open y call close pueden ser cualquier archivo de onda pequeña.. fácilmente disponible en el propio mt4. ... Creo que estas cosas se pueden lograr en la EA anterior que había publicado cambiando algunas cosas! jejeje ayudarme plz =D

Hola tatyawinchu,

Creo que no entendiste bien lo que hace el EA publicado. Dejame guiarte paso a paso y tu decides si es algo que puedes o no usar para tu propósito.

El stop loss basado en la cuenta está ahí para proteger a cualquiera que quiera usarlo y nunca recomendaría estar en el mercado sin al menos un stop de emergencia, si tienes 10 000 en tu cuenta y quieres arriesgarlo todo, simplemente pon el StopLossLimit a 10 000.

Su decisión.

Ahora, volviendo al código, es tan fácil como 1, 2, 3 :

1. Si lees el código en la función OnTick - que es la parte que se ejecuta en cada tick - verás que lo primero que hace es : CountMyOrders. Espero que lo veas. Después, si myOrders <1 significa que no hay órdenes todavía, comprueba la equidad de la cuenta, la recuerda y eso.

No hace nada más. Siguiente tick, si todavía no hay órdenes, vuelve a esperar. Bastante aburrido para ser un EA, ¿no?

2.Cuando se coloca una orden, myOrders<1 ya no es verdadera, así que en el siguiente tick, saltará a la siguiente línea y calculará el beneficio de la orden u órdenes que están en el mercado.

3.A continuación, comparará la suma de los beneficios de todas las órdenes con el beneficio objetivo.

Fácil, ¿verdad? Si el beneficio alcanza el objetivo, la siguiente línea dice : ExitAll . ¡Y aparecerá una alerta (con sonido) en la pantalla diciendo que las órdenes han alcanzado su objetivo!

No fue tan malo, ¿verdad?

Y me olvidé de mencionar, si el mercado va en contra de usted y la pérdida de la equidad alcanza el nivel preestablecido, que le llevará fuera del mercado para proteger el capital que queda.

Y esa es la mejor ayuda que podría darte.

Si necesitas más que eso, probablemente sea un trabajo para los chicos que hacen más código personalizado que esto.

Espero que te sirva de ayuda.

Saludos

 
thrdel:

Hola tatyawinchu,

Creo que no entendiste bien lo que hace el EA publicado. Dejame guiarte paso a paso y tu decides si es algo que puedes o no usar para tu propósito.

El stop loss basado en la cuenta está ahí para proteger a cualquiera que quiera usarlo y nunca recomendaría estar en el mercado sin al menos un stop de emergencia, si tienes 10 000 en tu cuenta y quieres arriesgarlo todo, simplemente pon el StopLossLimit a 10 000.

Su decisión.

Ahora, volviendo al código, es tan fácil como 1, 2, 3 :

1. Si lees el código en la función OnTick - que es la parte que se ejecuta en cada tick - verás que lo primero que hace es : CountMyOrders. Espero que lo veas. Después, si myOrders <1 significa que no hay órdenes todavía, comprueba la equidad de la cuenta, la recuerda y eso.

No hace nada más. Siguiente tick, si todavía no hay órdenes, vuelve a esperar. Bastante aburrido para ser un EA, ¿no?

2.Cuando se coloca una orden, myOrders<1 ya no es verdadera, así que en el siguiente tick, saltará a la siguiente línea y calculará el beneficio de la orden u órdenes que están en el mercado.

3.A continuación, comparará la suma de los beneficios de todas las órdenes con el beneficio objetivo.

Fácil, ¿verdad? Si el beneficio alcanza el objetivo, la siguiente línea dice : ExitAll . ¡Y aparecerá una alerta (con sonido) en la pantalla diciendo que las órdenes han alcanzado su objetivo!

No está tan mal, ¿verdad?

Y me olvidé de mencionar, si el mercado va en contra de usted y la pérdida de la equidad alcanza el nivel preestablecido, que le llevará fuera del mercado para proteger el capital que queda.

Y esa es la mejor ayuda que podría darte.

Si necesitas más que eso, probablemente sea un trabajo para los chicos que hacen más código personalizado que esto.

Espero que te sirva de ayuda.

Saludos


Hmm.. parece que nos estamos distanciando ..

Mi requisito exacto es el siguiente:-

Paso 1 EA se inicia .

Paso 2 EA comprueba el beneficio actual de la cuenta para saber el punto de partida para calcular.

Paso 3 El EA comprueba si hay órdenes abiertas en curso [no pendientes].

Paso 4 El EA no hace nada si no hay una orden en curso o si sólo hay una orden en curso.

Paso 5 El EA emite un sonido cuando la SEGUNDA orden se activa... Esta segunda orden estará en algún otro par.

Paso 6 El EA cierra AMBAS órdenes con X beneficios después de tener en cuenta el SPREAD y hace un sonido.... aquí AMBAS deben ser TODAS las órdenes abiertas .. no necesita eliminar las órdenes pendientes

Lo que el EA no necesita .. SL o TP ajuste de cualquier tipo ..

Preferiblemente, EA debe trabajar en las órdenes más de dos, pero no es necesario si su demasiado difícil ..

[¡Aunque lógicamente creo que no será difícil, más bien muy fácil, porque el EA se activa para cerrar TODAS las órdenes abiertas si son MÁS DE 1 .. es decir 2 o MÁS automáticamente! así que eso puede estar ya cubierto por el EA.. ¡corregidme si me equivoco!]

 
deysmacro:
Wow .. lo que quieres es básicamente bastante fácil de codificar.

Eres gracioso. Sutil pero gracioso.
 
thrdel:

Es gracioso. Sutil pero gracioso.

¿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 OrdersTotal sea => 2 para que se pase el control para cerrar todas las órdenes abiertas con X beneficios después del spread?

¿Cómo le digo al EA que no lo haga en ciertos casos?

Digamos que hago lo siguiente

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start() 
{
if (OrdersTotal()=>2)                                     // Can this work? Can a function be directly called like this?
} 
{
 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)
Ok, cant seem to get out of this box yet ! hehe need to know forum stuff more ! but, as you can see above, if that "if (OrdersTotal()=>2)" is valid, it would directly solve my problems .. because the rest of
the stuff would be executed only if the total running market orders are 2 ! =D ..  and some forum guru please release this text from this src prison box ! ;)
 
Sin embargo, debe recordar. El EA sólo cierra las operaciones en curso. Tienes que abrir la operación tú mismo.