[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 434

 
¿Es posible calcular la equidad mínima utilizando los datos históricos de los pedidos?
 
forexnew:
¿Es posible calcular la equidad mínima utilizando los datos históricos de los pedidos?
.


Entienda una cosa: ¿qué se especifica en "datos históricos de pedidos"? ¿Te interesa el precio de cierre, si es de ganancia o de pérdida para la orden seleccionada? ¿Y qué? El historial de órdenes no muestra el importe de la reducción de capital de la cuenta (la pérdida actual) cuando la orden ha estado en el mercado, es decir, la pérdida al cierre puede ascender, por ejemplo, a 500 unidades monetarias. Esto se mostrará en el historial de órdenes mientras que el capital podría haber disminuido a -1000 unidades monetarias cuando la orden estaba en el mercado. Nota: El Probador de Estrategias calcula las pérdidas sobre el capital.

La respuesta a su pregunta: no puede.

 
LOA:

¡Buenos días!

Ayuda de los profesionales: ¡no voy a ir a ninguna parte sin ti!

Ya he tratado este tema, pero no he encontrado el error, realmente quería entenderlo yo mismo, me devané los sesos durante unos días, pero hasta ahora no hay mucha experiencia.

La última discusión terminó con la idea de que tal vez la razón está en el código de esos indicadores que estoy tratando de usar.

He escrito un indicador (es mis primeros pasos) que muestra el desglose de ME_Proboy_F5

El problema es ..... El indicador no se vuelve a dibujar cuando se forman nuevas barras y se pone a cero en la última barra después del tick entrante. Se vuelve a dibujar si se cambia el tf o se muestran las propiedades.

El indicador solicita datos de otros indicadores, todos excepto uno ME_Proboy_F_5 (coloco su código también) funciona bien. Tampoco encuentro ningún error en el segundo indicador. El indicador se redibuja, pero es lento, es decir, se muestra correctamente al segundo reinicio (cambiar el FF o las propiedades de visualización).

Estaría muy agradecido por la ayuda.

Proboy_Order_F5 - este es el indicador principal, sobre el que pregunto

ME_Proboy_F5 - el segundo, que es dudoso


Siento seguir molestando con mi pregunta, pero realmente quiero llegar al fondo de la cuestión.

La aplicación de la función limit=MathMin(Bars-1, Bars-counterd_bars-1) no resolvió el problema, pero tomé las recomendaciones, trabajé en el estilo de programación, espero que haya funcionado, me deshice de las variables innecesarias.

Ver arriba la esencia del problema

Archivos adjuntos:
 
Roman.:


Una cosa que debería entender: ¿qué se especifica en los "datos históricos de los pedidos"? ¿Le interesa el precio de cierre, el beneficio o la pérdida de la orden seleccionada? ¿Y qué? El historial de órdenes no muestra el importe de la reducción de capital de la cuenta (pérdida actual) cuando la orden ha estado en el mercado, es decir, la pérdida al cierre puede ascender, por ejemplo, a 500 unidades de la divisa, pero se mostraría en el historial de órdenes mientras que el capital podría haber disminuido a -1000 unidades de la divisa cuando la orden estaba en el mercado. Nota: El comprobador de la estrategia calcula la pérdida sobre el capital.

La respuesta a su pregunta: no puede.

Sin embargo, existe un indicador https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip en el que la equidad se calcula de alguna manera a partir de datos históricos. Todavía no he descubierto cómo hacerlo. Tal vez, la equidad puede ser calculada en base a puntos clave (cierres de órdenes) pero ¿cómo se ve en forma de una fórmula única?

 

Aquí está el código con la condición de que los pedidos deben ser eliminados después de la expiración del tiempo, esta es la condición

MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber

Entonces, ¿por qué si insertamos esta condición en el primer operador if, el otro operador situado dentro de él no considera esta condición?

Es decir, este código no funciona y borra todas las órdenes pendientes a la vez.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }

Y este código funciona y no elimina los pedidos de una vez.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP && MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }
 
sss2019:

Aquí está el código con la condición de que los pedidos deben ser eliminados después de la expiración del tiempo, esta es la condición

Entonces, ¿por qué si insertamos esta condición en el primer operador if, el otro operador situado dentro de él no considera esta condición?

Es decir, este código no funciona y borra todas las órdenes pendientes a la vez.

Y este código funciona y no elimina los pedidos de una vez.

Ambos códigos no son correctos, por lo que analizo tu código y no sé qué es correcto/incorrecto.

Tomemos el ejemplo más sencillo. Tienes 2 pedidos que deben ser eliminados.

1) for(int counter=0;counter<OrdersTotal();counter++)

el comienzo de un buen 0 es menor que dos y el primer orden se elimina con seguridad, pero entonces

2)

 for(int counter=0;counter<OrdersTotal();counter++)

contador = 1, ¡pero sólo queda una orden! Significa que la condición (1<1) no se cumple, y el bucle termina...

 
ilunga:

Ten en cuenta que ambos códigos están sin corregir, por lo que no sé qué funciona bien/mal para ti.

Tomemos el ejemplo más sencillo. Tienes 2 pedidos, ambos deben ser eliminados.

1) for(int counter=0;counter<OrdersTotal();counter++)

El buen 0 es menos de dos y la primera orden se ha borrado con éxito, pero entonces

2)

contador = 1, ¡pero sólo queda una orden! Significa que la condición (1<1) no se cumple y el bucle termina...


No, pero esa es la cuestión, en este punto borra TODOS los pedidos, limpiamente. El problema es que los borra inmediatamente.
 
LOA:

¡Buenas tardes!

He escrito un indicador (estos son mis primeros pasos) que muestra claramente el desglose de ME_Proboy_F5


Buenos primeros pasos, Olga Alexandrovna. 330 líneas de código

 
forexnew:

Sin embargo, existe un indicador https://c.mql5.com/mql4/forum/2010/11/Equity_v7.zip en el que la equidad se calcula de alguna manera a partir de datos históricos. Todavía no he entendido el método. Tal vez, la equidad puede ser calculada en base a los momentos clave (cierres de órdenes) pero ¿cómo se ve en forma de fórmula?




Familiarízate con los conceptos de EQUIDAD y EQUILIBRIO y cuál es la diferencia entre ellos.

Este indicador muestra la línea de equidad en tiempo real, ya que la línea de equidad es la ganancia/pérdida actual en posiciones no cerradas, "Es posible determinar realmente la equidad por puntos clave (cierres de órdenes)" - no es posible, por lo que contaría el cambio de la línea de equidad en posiciones cerradas.

"La equidad se calcula de alguna manera sobre la base de datos históricos" - no. Este indicador calcula la línea de equidad para el momento actual - por posiciones abiertas en el Mercado.

 

¡Buenas noches! He encontrado esto en el tutorial de S. Kovalev. Kovalev, pero en el terminal MT4 no hay más que "¡guau! Por favor, aconsejen, ¿quién sabe dónde pedir prestado un conjunto de señales de sonido para diferentes operaciones, para no tener que estar mirando el ordenador todo el tiempo? ¡Gracias por una posible pista!

   switch(Mess_Number)                 // Elegir texto del mensaje segun el numero 
     {
      case 1:
         Graf_Text="Closed order Buy "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 2:
         Graf_Text="Closed order Sell "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 3:
         Graf_Text="Deleted pending order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 4:
         Graf_Text="Opened order Buy "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 5:
         Graf_Text="Opened order Sell "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 6:
         Graf_Text="Placed pending order "+ Number;
         PlaySound("Ok.wav");                                       break;
      case 7:
         Graf_Text="Order "+Number+" modified into the market one";
         PlaySound("Transform.wav");                                break;
      case 8:
         Graf_Text="Reopened order "+ Number;
         PlaySound("Bulk.wav");                                     break;
      case 9:
         Graf_Text="Partly closed order "+ Number;
         PlaySound("Close_order.wav");                              break;
      case 10:
         Graf_Text="New minimum distance: "+ Number;
         PlaySound("Inform.wav");                                   break;
      case 11:
         Graf_Text=" Not enough money for "+
         DoubleToStr(Value,2) + " lots";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 12:
         Graf_Text="Trying to close order "+ Number;
         PlaySound("expert.wav");                                   break;
      case 13:
         if (Number>0)
            Graf_Text="Trying to open order Sell..";
         else
            Graf_Text="Trying to open order Buy..";
         PlaySound("expert.wav");                                   break;
      case 14:
         Graf_Text="Invalid password. EA doesn't function.";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      case 15:
         switch(Number)                 // Elegir texto del mensaje segun el numero del error 
           {
            case 2:   Graf_Text="Common error.";                    break;
            case 129: Graf_Text="Wrong price. ";                    break;
            case 135: Graf_Text="Price changed. ";                  break;
            case 136: Graf_Text="No prices. Awaiting a new tick.."; break;
            case 146: Graf_Text="Trading subsystem is busy";        break;
            case 5 :  Graf_Text="Old version of the terminal.";     break;
            case 64:  Graf_Text="Account is blocked.";              break;
            case 133: Graf_Text="Trading is prohibited";            break;
            default:  Graf_Text="Occurred error " + Number;//otros errores 
           }
         Color_GT=Red;
         PlaySound("Error.wav");                                    break;
      case 16:
         Graf_Text="Expert Advisor works only for EURUSD";
         Color_GT=Red;
         PlaySound("Oops.wav");                                     break;
      default:
         Graf_Text="default "+ Mess_Number;
         Color_GT=Red;
         PlaySound("Bzrrr.wav");                    
     }
Razón de la queja: