Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1025

 

¿Puede aconsejar un zig-zag adecuado, por favor... Porque he estado usando uno de estos y a veces se tambalea mucho...


 

Por favor, dígame, no entiendo muy bien - en el gráfico del probador es el siguiente, todas las garrapatas son M1, a partir de depósito 5000, pero drawdown muestra 62% (3325), es evidente que no está en el gráfico. ¿Una discrepancia?

¿Es la calidad del modelado? ¿Cómo calcula el probador esta reducción? Si lo calcula, ¿por qué no se ve en la curva de patrimonio?



 
Aleksey Mavrin:

Si lo calcula, ¿por qué no aparece en la curva de patrimonio?

MT4 no muestra la línea verde de equidad hasta que se cierra una orden.

Aleksey Mavrin:

La tasa de detracción muestra un 62% (3325), aunque obviamente no aparece en el gráfico. ¿Discrepancia?

El probador calcula el drawdown en función de la equidad, pero en relación con la orden con el máximo drawdown, es decir, tal vez usted tenía una orden abierta en el probador y la promedió, su equidad total podría haber estado en plus, pero la orden con más pérdidas estaba en gran drawdown en un momento determinado de la prueba


HH: La calidad de la modelización es muy baja, se está probando la TS en todos los ticks, pero se elige una TF muy grande para la pruebahttps://www.mql5.com/ru/articles/1486

 
Igor Makanu:

MT4 no muestra la línea verde de equidad hasta que se cierra una orden, tan pronto como se cierra, la línea verde aparecerá (MT5 no tiene este inconveniente).

El probador considera el drawdown sobre la equidad, pero en relación a la orden con un drawdown máximo, es decir, usted puede haber tenido una orden abierta en el probador y ha promediado, su equidad total puede haber estado en el +, pero la orden con más pérdidas estuvo en un momento determinado de la prueba en un gran déficit


ZS: la calidad de la simulación es muy baja, se está probando el TS en todos los ticks, pero se ha elegido un TF muy grande para la pruebahttps://www.mql5.com/ru/articles/1486

Así es, el promediador. Ahora está más claro, ¡muchas gracias! Lo único que tiene la línea de equidad es.

Analicé su gráfico de operaciones (me refiero al visualizador) en cuadrícula tal como es, es decir, que tiene bajadas muy frecuentes y la línea de equidad en el gráfico no lo refleja, por ejemplo aquí

comercio 2018 diciembre 04. comercio 1238, en el gráfico esto es cerca de la segunda desde la línea punteada vertical final bajo el cual el número de comercio es 1251. No hay ningún indicio de reducción en la línea verde de la equidad allí.

Es decir, todavía no está claro cómo se dibuja, pero concluyo que es imposible de confiar y que debería hacerse en MT5)

R.S. No sé por qué la calidad de la simulación es tan mala, TF es M1, todo ticks.


 
Aleksey Mavrin:

Así es, el promediador. Ahora tiene más sentido, ¡muchas gracias! Lo único que tiene la línea de equidad es.

Analicé su gráfico de operaciones (me refiero al visualizador) en cuadrícula tal como es, es decir, que tiene bajadas muy frecuentes, y la línea de equidad en el gráfico no lo refleja, por ejemplo aquí

comercio 2018 Dic 04. comercio 1238, en el gráfico esto es cerca de la segunda de la línea discontinua vertical final bajo el cual el número de comercio es 1251. No hay ningún indicio de reducción en la línea verde de la equidad allí.

Es decir, todavía no está claro cómo se dibuja, pero concluyo que es imposible confiar y deberíamos dejar de usar MT5)

R.S. No sé por qué la calidad de la simulación es tan mala, TF es M1, todo ticks.


El probador de MetaTrader 4 es muy inferior al de MetaTrader 5. No puede mostrar los fondos hasta que se cierra algo, sólo los muestra en el momento de la toma de beneficios/pérdidas. En su imagen todas las posiciones cortas se cierran al mismo tiempo, por eso no hay línea de equidad entre la apertura y el cierre en el informe. Si hubiera cerrado al menos una posición entre la apertura y elcierre de las posiciones en su captura de pantalla, la reducción de capital que tenía en el momento del cierre se reflejaría en su informe. Es decir, el informe mostraría dos detracciones -en el balance por el cierre de una posición con pérdida, y en los fondos- por la detracción de fondos actuales debido a la pérdida flotante actual en los fondos de todas las posiciones abiertas.

 
Aleksey Mavrin:

Es decir, todavía no está claro cómo se extrae, pero da pie a concluir que no se puede confiar de ninguna manera y se debe culpar a MT5)

puede confiar, pero tiene que leer todo el informe del probador

añada su estimación del drawdown al código y muéstrelo en el registro en OnDeinit(), si quiere comprobar cómo el probador calcula el drawdown máximo, entonces algo como esto

double minOrderProfit = 0.0;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Print("minOrderProfit = ",minOrderProfit);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) minOrderProfit = fmin(minOrderProfit,OrderProfit());
   }

// основной код

   
  }
//+------------------------------------------------------------------+


ZS: no se ha comprobado, pero debería funcionar

 
Igor Makanu:

puede confiar, pero tiene que leer todo el informe del probador

añada su estimación del drawdown al código y lo envíe al registro en OnDeinit(), si estamos hablando de cómo comprobar el probador en el cálculo del drawdown máximo, entonces algo como esto


ZS: no se ha comprobado, pero debería funcionar

Ya lo tengo, gracias. Estoy recogiendo todas las estadísticas en mis EAs y para el tester-optimizador en general, estoy contando coeficientes de sharps y otros, volatilidad y DD, etc. diarios, mensuales, totales, por supuesto, todo lo que puedo.

Y esto fue un experimento con un robot de Market, lo puse para comprobarlo, porque sé que no puede existir ese gráfico de curvas con semejantes megabeneficios. Estaba convencido de que tenía razón, es decir, por la forma en que se muestra la curva de equidad en MT4

Me aseguré de que estoy en lo cierto, debido a la forma en que se muestra la curva de la equidad en MT4, se hace una evaluación errónea de las capacidades del producto (si usted mira el gráfico de comercio), mientras que los gráficos están hurgando en el mercado, usted consigue el mensaje? :) s.s. venden mierda a la gente

 

Buenas tardes.

¡¡¡He escrito un indicador pero me he dado cuenta de que hay un error!!! Pregunta a la línea horizontal roja (desde el inicio de la sesión del día).

Intenté usarlo por alguna razón pero no funcionó correctamente en los asesores expertos y creoque no lo hice bien. Y jura por la entrada en EAs.

(2019.12.19 11:25:31.532 Día de la sesión (EURUSDrfd,H1) array out of range in 'Session Day.mq5' (144,41)

Ayuda desde la sala...

¡Gracias de antemano por el consejo!


PS

¡¡¡¡¡¡¡La dirección de la LÍNEA ROJA (apertura de la sesión) es la DERECHA, desde hoy hasta ayer!!!!!!!

//+------------------------------------------------------------------+
//|                                                  Session Day.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   2
//---- plot ColorCandles
#property indicator_type1   DRAW_CANDLES
#property indicator_color1  White,Blue,Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_label1  "Open;High;Low;Close"
//----
#property indicator_type2   DRAW_LINE
#property indicator_color2  Red
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3
#property indicator_label2  "Line open session"
//-----
input int     StartCandle = 100;         //Кол-во свечек для расчета средней
input int     StartBarDay = 0;           //Час начала торгового дня
input int     BarSession1 = 10;          //Чвс Открытия дневной сессии
input int     BarSession2 = 19;          //Чвс Закрытия дневной сессии
input bool    LevelOpenSession = true;   //Уровень открытия сессии дня
//---
double ExtOpenBuffer[];
double ExtHighBuffer[];
double ExtLowBuffer[];
double ExtCloseBuffer[];
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtOpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtHighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ExtLowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,ExtCloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,ExtBuffer,INDICATOR_DATA);
//--- установим цвет контура и теней
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrWhite);
//--- установим цвет тела для бычьей свечи
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrBlue);
//--- установим цвет тела для медвежьей свечи
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
   if(Period()<PERIOD_H4)
      IndicatorSetString(INDICATOR_SHORTNAME,"Session Day \nOpen session: "+string(BarSession1)+" hour \nClose session: "+string(BarSession2)+" hour");
   else
      IndicatorSetString(INDICATOR_SHORTNAME,"Session Day");
   int bars=iBars(NULL,_Period);
   for(int b=0; b<5; b++)
      PlotIndexSetInteger(b,PLOT_DRAW_BEGIN,bars-StartCandle);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   int i;
   if(rates_total<24)
      return(0);
   MqlDateTime tm;
//----
   if(prev_calculated==0)
     {
      ArrayInitialize(ExtOpenBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtHighBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtCloseBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtBuffer,EMPTY_VALUE);
      i=0;
     }
   else
      i=prev_calculated-1;
//----
   while(i<rates_total && !IsStopped())
     {
      TimeToStruct(time[i],tm);
      if(Period()==PERIOD_MN1 && (tm.mon==4 || tm.mon==8 || tm.mon==12))
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_W1 && tm.mon>=1 && tm.mon<=12 && tm.day>=1 && tm.day<8)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_D1 && tm.day_of_week==1)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_H4 && tm.hour==StartBarDay && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()<=PERIOD_H1 && tm.hour==BarSession1 && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()<=PERIOD_H1 && tm.hour==BarSession2 && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }


                     ПРОБЛЕМА !!!!!
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      if(LevelOpenSession==true && Period()==PERIOD_H1 && tm.hour==BarSession1 && tm.min==0)
         for(int j=0; j<24; j++)
           {
            ExtBuffer[i-j]=open[i];
            if(ExtBuffer[i-j]!=ExtBuffer[i-j-1])
               ExtBuffer[i-j-1]=EMPTY_VALUE;
           }
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      //---
      i++;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+




 
kopeyka2:

Buenas tardes.

¡¡¡He escrito un indicador pero me he dado cuenta de que hay un error!!! Pregunta a la línea horizontal roja (desde el inicio de la sesión del día).

Intenté usarlo por alguna razón pero no funcionó correctamente en los asesores expertos. Y jura por la entrada en EAs.

(2019.12.19 11:25:31.532 Día de la sesión (EURUSDrfd,H1) array out of range in 'Session Day.mq5' (144,41)


 ExtBuffer[i-j]=open[i];
            if(ExtBuffer[i-j]!=ExtBuffer[i-j-1])
               ExtBuffer[i-j-1]=EMPTY_VALUE;

en este punto, en algún momento, se accede a un índice de matriz negativo. comprueba la fijación y la comprobación de todas las condiciones de contorno para i, j

 
Artyom Trishkin:

El probador de MetaTrader 4 es considerablemente inferior a MetaTrader 5. No puede mostrar los fondos hasta que se cierra algo, sólo los muestra en el momento de la toma de beneficios/pérdidas. En su imagen todas las posiciones cortas se han cerrado a la vez, por eso no hay línea de equidad entre la apertura y el cierre en el informe. Si hubiera cerrado al menos una posición entre la apertura y el cierre de las posiciones en su captura de pantalla, la reducción de capital que tenía en el momento del cierre se reflejaría en su informe. Es decir, el informe mostraría dos detracciones -en el balance por el cierre de una posición con pérdida, y en los fondos- por la detracción de fondos actuales debido a la pérdida flotante actual en los fondos de todas las posiciones abiertas.

Es una descripción bastante clara, gracias. Por alguna razón no me fijé en el post al principio(

Y una pregunta entonces) - Solicitar dentro de las funciones del probador de información sobre el estado de la cuenta como AccountEquity, etc. - da una imagen correcta independientemente de si alguna posición se cerró o no?

Por ejemplo, si se abren operaciones a largo plazo y se registra la reducción de la renta variable cada día, ¿el probador no hará trampas?