Discusión sobre el artículo "Indicador de posiciones históricas en el gráfico como diagrama de sus ganancias/pérdidas"
- www.mql5.com
Es una pena que MQ no haya añadido la función HistoryPositionGet a la lista de funciones de Historia. Habría sido mucho más fácil con ella.
Por eso tenemos que hacerlo nosotros mismos
Hola,
¿cómo puedo hacer que el indicador no muestre cada ganancia/pérdida, sino un total acumulativo?
¡¡y si es posible - con una línea ?!!
Hola,
¿cómo puedo hacer que el indicador de mostrar no todos los beneficios / pérdidas, pero el total acumulado?
¡¡y si es posible - con una linea ?!!
Por una corazonada y sin comprobarlo, solo hay que sumar el beneficio al ya recibido, y no registrarlo cada vez el tomado de las posiciones.
Eso es lo que hay:
//+------------------------------------------------------------------+ //| Función de iteración del indicador personalizada | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- Establecer la indexación de las matrices close y time como en series temporales ArraySetAsSeries(close,true); ArraySetAsSeries(time,true); //--- Indicador de creación correcta de la lista de elementos static bool done=false; //--- Si se crea el objeto de datos de posición if(history!=NULL) { //--- Si aún no se ha creado la lista de elementos if(!done) { //--- Si la lista de posiciones para el instrumento actual se crea con éxito, if(history.CreatePositionList(Symbol())) { //--- imprimir las posiciones en el diario y fijar la bandera para la creación exitosa de la lista de posiciones history.Print(); done=true; } } } //--- Número de barras necesarias para el cálculo del indicador int limit=rates_total-prev_calculated; //--- Si el límite es mayor que 1, significa que se trata de la primera ejecución o de un cambio en los datos históricos if(limit>1) { //--- Establecer el número de barras para el cálculo igual a toda la historia disponible e inicializar los buffers con valores "vacíos limit=rates_total-1; ArrayInitialize(BufferFilling1,EMPTY_VALUE); ArrayInitialize(BufferFilling2,EMPTY_VALUE); } //--- En el bucle de la barra de historial de símbolos static double profit=0; for(int i=limit;i>=0;i--) { //--- obtener el beneficio de las posiciones presentes en la barra con índice de ciclo i y escribir el valor obtenido en el primer buffer profit+= Profit(close[i],time[i]); BufferFilling1[i]=profit; //--- Escribe siempre cero en el segundo buffer. Dependiendo de si el valor en el primer buffer es mayor o menor que cero, //--- el color del relleno dibujado cambiará entre las matrices 1 y 2 del buffer del indicador BufferFilling2[i]=0; } //--- valor de retorno de prev_calculado para la siguiente llamada return(rates_total); }
Bueno, y con el búfer como una línea - es a sí mismos. Allí usted necesita para eliminar un búfer extra, porque el relleno siempre utiliza dos búferes. Y para una línea que necesita uno.
Creo que funciona.
Hice tus cambios y sólo especifiqué el tipo - gráficos lineales.
No he quitado los buffers.
https://www.mql5.com/ru/charts/18738352/nzdcad-d1-roboforex-ltd
- www.mql5.com
Todo parece ir bien en las divisas, pero en la plata se redibuja constantemente por alguna razón.
Es necesario mirar qué datos recibe el indicador y por qué no se calcula. El redibujado puede ser causado por el valor límite mayor que 1. Este valor se calcula como la diferencia entre rates_total y prev_calculated. Es necesario mirar estos valores para ver lo que contienen en cada tick
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Indicador de posiciones históricas en el gráfico como diagrama de sus ganancias/pérdidas:
En el artículo analizaremos una variante para obtener información sobre posiciones cerradas usando la historia de sus transacciones. Asimismo, crearemos un indicador sencillo que mostrará en forma de gráfico los beneficios/pérdidas aproximados de las posiciones en cada barra.
La función recibirá el precio (Close de la barra) en relación al cual deberemos recibir el número de puntos de beneficio de la posición, y el momento en el que se comprobará la existencia de la posición (Time open de la barra). Además, se sumará y se retornará el beneficio de todas las posiciones obtenidas de cada objeto de posiciones históricas.
Tras realizar la compilación, podremos ejecutar el indicador en un gráfico de símbolos en el que haya muchas posiciones abiertas, y este dibujará el gráfico de beneficio de todas las posiciones históricas:
Autor: Artyom Trishkin