El oscilador de equidad de MQL5 significa - página 2

 
DV2010: pero, ¿por qué no se muestra un valor cambiante dela Equidad en el Indicador, aunque los valores cambiantes (¡comprobados!) se escriben en la matriz del Indicador?

Allí no se escribe nada, no se llama al bucle. Compruébelo usted mismo.
 

Esa es la cuestión: ¡el bucle se llama en todos los ticks!

Compruébalo tú mismo! Puse la salida en el cuerpo del bucle a propósito:

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[]){
   for (int i = prev_calculated; i <= rates_total-1; ++i){
      Print("Equity - OnCalculate - Cycle: prev_calculated=",prev_calculated,"   rates_total=",rates_total);
      Print("Equity - OnCalculate - Cycle: AccountInfoDouble(ACCOUNT_EQUITY)=", AccountInfoDouble(ACCOUNT_EQUITY));
      Values[i] = AccountInfoDouble(ACCOUNT_EQUITY);
   }
   return rates_total;
}

Y este es el resultado final:

2011.01.20 13:58:56     Core 1  OnTester result 0
2011.01.20 13:58:56     Core 1  2011.01.14 23:59:59   order performed sell 0.15 at 1.33829 [#13 sell 0.15 EURUSD at 1.33829]
2011.01.20 13:58:56     Core 1  2011.01.14 23:59:59   deal performed [#13 sell 0.15 EURUSD at 1.33829]
2011.01.20 13:58:56     Core 1  2011.01.14 23:59:59   deal #13 sell 0.15 EURUSD at 1.33829 done (based on order #13)
2011.01.20 13:58:56     Core 1  2011.01.14 23:59:59   position closed due end of test at 1.33829 [buy 0.15 EURUSD 1.33593]
2011.01.20 13:58:56     Core 1  2011.01.14 22:00:00   Equity - OnCalculate - Cycle: AccountInfoDouble(ACCOUNT_EQUITY)=9949.299999999999
2011.01.20 13:58:56     Core 1  2011.01.14 22:00:00   Equity - OnCalculate - Cycle: prev_calculated=6418   rates_total=6419
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   CTrade::PositionOpen: instant buy 0.15 EURUSD at 1.33593 [done at 0.00000]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   order performed buy 0.15 at 1.33593 [#12 buy 0.15 EURUSD at 1.33593]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   deal performed [#12 buy 0.15 EURUSD at 1.33593]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   deal #12 buy 0.15 EURUSD at 1.33593 done (based on order #12)
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   instant buy 0.15 EURUSD at 1.33593 (1.33577 / 1.33593 / 1.33577)
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   CTrade::PositionClose: instant buy 0.15 EURUSD at 1.33593 [done at 0.00000]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   order performed buy 0.15 at 1.33593 [#11 buy 0.15 EURUSD at 1.33593]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   deal performed [#11 buy 0.15 EURUSD at 1.33593]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   deal #11 buy 0.15 EURUSD at 1.33593 done (based on order #11)
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   instant buy 0.15 EURUSD at 1.33593 (1.33577 / 1.33593 / 1.33577)
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   Equity - OnCalculate - Cycle: AccountInfoDouble(ACCOUNT_EQUITY)=9929.65
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   Equity - OnCalculate - Cycle: prev_calculated=6417   rates_total=6418
 
DV2010:

Esa es la cuestión: ¡el bucle se llama en todos los ticks!

Compruébalo tú mismo! Puse la salida en el cuerpo del bucle a propósito:

Y este es el resultado final:

¿Qué tienen que ver las pruebas con esto? Ejecute el indicador en el gráfico y verá. No te olvides de hacer mis ediciones.
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - Документация по MQL5
 

La prueba aquí es que necesito ver el cambio de la equidad dentro del período probado en la historia.

He realizado tus correcciones, he ejecutado el indicador tanto en modo de prueba como arrastrándolo a un nuevo gráfico.

El indicador funciona para todo el período, hasta las cotizaciones actuales, así como para cualquier marco temporal (¿o qué significa exactamente "lo verás todo"?)

Sin embargo, el valor de la Equidad se mantiene constante, aunque la salida al registro muestra que cambia.

( Por lo demás, ¿cómo podemos saber si el bucle funciona o no, si no es a través de Print? )

...Por si acaso, aquí está el "esqueleto" del Asesor Experto con el indicador adjunto:

#property copyright "Copyright 2010, Pavlov Sergei"
#property link      ""
#property version   "1.00"

#include <\..\Experts\_My\Classes\ClassExpert\ClassExpert.mqh>
ClassExpert Expert1;

int Equity1=0;
void OnInit(){
   Equity1 = iCustom(NULL,0,"Equity",
                          5,          // Период
                          0,          // Смещение
                          MODE_SMA,   // Метод рассчета
                          PRICE_CLOSE // считаем по ценам закрытия)
                          );
   Expert1.Init();
}
void OnTick(){
   Expert1.OnTick();
}
void OnDeinit(const int reason){
   Expert1.Deinit();
}
 
DV2010:

La razón para probar aquí es que necesito ver el cambio de la Equidad dentro del período probado en el historial.

He realizado tus correcciones, he ejecutado el indicador en modo de prueba y arrastrándolo y soltándolo en un nuevo gráfico.

El indicador funciona para todo el período, hasta las cotizaciones actuales, así como para cualquier marco temporal (¿o qué significa exactamente "lo verás todo"?)

Sin embargo, el valor de la Equidad se mantiene constante, aunque la salida al registro muestra que cambia.

( Por lo demás, ¿cómo podemos saber si el bucle funciona o no, si no es a través de Print? )

...Por si acaso, aquí está el "esqueleto" del Asesor Experto con el indicador adjunto:

No tiene sentido poner el indicador equivocado en un EA, no lo hará mejor. ¿Todavía no has comprobado mi opción?
 

Tal vez me equivoque, pero ¿no se compara el aspecto del indicador en el gráfico una vez finalizada la prueba con los cálculos realizados durante la misma?

La cuestión es que los resultados (matrices de cálculo) del indicador personalizado del probador no se transfieren al gráfico de ninguna manera, sino que el indicador especificado simplemente se lanza en un nuevo cálculo en el gráfico.

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - Документация по MQL5
 

Ejecute este indicador en un gráfico de minutos (si tiene una posición abierta) y después de 10-15 minutos obtendrá una imagen como esta.


Código:

//+------------------------------------------------------------------+
//|                                             Equity_Indicator.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double Values[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Values,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,100);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArraySetAsSeries(Values,false);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {


   Print("prev_calculated=",prev_calculated,"   rates_total=",rates_total);
   int limit=prev_calculated;
   if(limit>0) limit--;

//---Блок заполнения Индикатора и журнала сообщений значениями
   for(int i=limit; i<rates_total;++i)
     {
      Values[i]=AccountInfoDouble(ACCOUNT_EQUITY);
     }
   return rates_total;
  }
//+------------------------------------------------------------------+
 

Roche, ya te pregunté qué es lo que falla en mi indicador, y te escribí sobre cómo comprobé tu variante también . Y traté de explicártelo con todo el detalle posible, mientras que tú sólo escribiste brevemente sobre "el bucle no funciona" y "lo verás por ti mismo"...

...Renat, según tengo entendido, el indicador se mostrará en el gráfico una vez finalizada la prueba, en función de los cálculos realizados durante la misma y el llenado de la matriz del indicador. Pero, ¿qué significa que los resultados del probador no se transfieran a un gráfico de indicadores personalizados del probador?

Entonces, ¿para qué necesitan y por qué la línea indicadora desaparece de golpe, cuando quito del código la asignación de valores a un array (aunque sea una línea horizontal constante, desaparece)?

Pensaba que la correspondencia entre el array de valores de los indicadores que se rellenan en OnCalculated y los valores de los indicadores en el gráfico es inequívoca, si no, ¿cómo se pueden inicializar los valores de los indicadores?

Es difícil de entender... Parece una tarea trivial, pero llevo varios días luchando con ella, y es difícil encontrar a alguien que pueda al menos insinuar cómo se puede resolver de manera diferente en la historia y si se resuelve en absoluto.

Una vez más, tal y como yo lo entiendo (corrígeme si me equivoco, si no te importa).

1.Especifico un período de prueba en el probador y selecciono un Asesor Experto con mi indicador adjunto.

2. laprimera llamada OnCalculated se realiza con los parámetros prev_calculated =0 y rates_total = número de tick (barra) correspondiente al inicio de la prueba. Dentro de este periodo, el valor del equilibrio se mantiene en el nivel inicial y constante.

Lassiguientes llamadas de OnCalculated por barra dentro del periodo de prueba, ocurren para cada barra individual, y aquí podemos inicializar un array de valores del indicador con aquellos datos que cambien (por ejemplo, duplicar el precio, lo cual, como escribí, funcionó, pero entonces ¿por qué no inicializar la Equidad con valores cambiantes en lugar de cambiar los precios ?)

Y de todos modos, eres un profesional. Espero que esta sencilla tarea esté resuelta, ¿o es queMetaTraderaún no ha alcanzado tales "cotas"? :)))

He ofrecido mi sencilla solución a este problema, pero se niega a funcionar.

Entonces, ¿cómo se puede implementar - un gráfico de la equidad por debajo del gráfico de precios basado en los resultados de las pruebas en la historia?

 
Te diré una cosa, no será fácil resolver tu problema hasta que se ponga en marcha el modo de visualización. Hay una solución: escribir los datos de la renta variable en un archivo durante la prueba. A continuación, escribir los datos del archivo en el búfer del indicador y trazar el gráfico de la renta variable.
 

Rosh, la variante para online ya ha sido publicada, pero como alguien que trabaja principalmente con Historia, necesito una variante que funcione con datos históricos. Y todavía me cuesta entender cuál puede ser la principal dificultad.

El comerciante tiene una idea sobre el gráfico de balance en línea debido a un menor número de operaciones (a menos que sea un extrabajador que apenas tiene tiempo para pulsar Comprar y Vender).

De hecho, la dinámica de la renta variable se vuelve crítica en un historial largo con cientos o incluso miles de operaciones, pero el gráfico en el probador no proporciona una simple comparación de esta dinámica con la dinámica del precio en principio (a menos que, por supuesto, MetaQuote considere que lo principal para los programadores es una rápida eliminación de los expertos ya preparados sin el análisis de series separadas de posiciones débiles y fuertes).

Razón de la queja: