Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1025

 

Você pode aconselhar um zig-zag adequado, por favor... Porque tenho usado um destes e às vezes fica muito instável.


 

Por favor me diga, eu não entendo bem - no gráfico do testador está o seguinte, todos os ticks são M1, início do depósito 5000, mas o saque mostra 62% (3325), obviamente não está no gráfico. Uma discrepância?

É a qualidade da modelagem? Como o testador calcula este drawdown? Se ele o calcula, por que não pode ser visto na curva do patrimônio líquido?



 
Aleksey Mavrin:

Se ele o calcula, por que não aparece na curva do patrimônio líquido?

O MT4 não mostra a linha verde de equidade até que um pedido seja fechado.

Aleksey Mavrin:

A taxa de drawdown mostra 62% (3325), enquanto que obviamente não é mostrada no gráfico. Discrepância?

O testador calcula o saque de acordo com o patrimônio líquido, mas em relação à ordem com o saque máximo, ou seja, talvez você tivesse uma ordem em aberto no testador e tivesse feito a média, seu patrimônio líquido total poderia estar em mais, mas a ordem mais deficitária estava em grande saque em um determinado momento do teste


HH: A qualidade da modelagem é muito baixa, você está testando o TS em todos os carrapatos, mas um TF muito grande é escolhido para o testehttps://www.mql5.com/ru/articles/1486

 
Igor Makanu:

A MT4 não mostra a linha verde até que uma ordem seja fechada, assim que ela for fechada, a linha verde aparecerá (a MT5 não tem este inconveniente).

O testador considera o saque sobre o patrimônio líquido, mas em relação à ordem com um saque máximo, ou seja, você pode ter tido uma ordem em aberto no testador e ter feito a média, seu patrimônio líquido total pode ter ficado no +, mas a ordem mais deficitária foi em um certo momento de teste em um grande déficit


ZS: a qualidade da simulação é muito baixa, você está testando o TS em todos os carrapatos, mas um TF muito grande foi escolhido para o testehttps://www.mql5.com/ru/articles/1486

É isso mesmo, o averager. Agora está mais claro, muito obrigado! A única coisa sobre a linha de equidade é.

Analisei seu gráfico de negociação (isto é, visualizador) como está, ou seja, ele tem drawdowns muito freqüentes e a linha de equidade no gráfico não reflete isso, por exemplo, aqui

trade 2018 dezembro 04. trade 1238, no gráfico este é próximo ao segundo a partir da linha de traço vertical final sob a qual o número de comércio é 1251. Não há nenhuma dica de qualquer levantamento na linha verde do patrimônio líquido ali.

Isto é, ainda não está claro como é desenhado, mas concluo que é impossível confiar e que devemos parar de usar o MT5)

R.S. Eu não sei porque a qualidade da simulação é tão ruim, TF é M1, tudo carrapatos.


 
Aleksey Mavrin:

É isso mesmo, o averager. Isso agora faz mais sentido, muito obrigado! A única coisa sobre a linha de equidade é.

Analisei seu gráfico de negociação (isto é, visualizador) como ele é, ou seja, ele tem drawdowns muito freqüentes, e a linha de equidade no gráfico não reflete isso, por exemplo, aqui

trade 2018 Dez. 04. trade 1238, no gráfico este é próximo ao segundo a partir da linha de traço vertical final sob a qual o número de comércio é 1251. Não há nenhuma dica de qualquer levantamento na linha verde do patrimônio líquido ali.

Isto é, ainda não está claro como é desenhado, mas concluo que é impossível confiar e que devemos parar de usar o MT5)

R.S. Eu não sei porque a qualidade da simulação é assim, TF é M1, tudo carrapatos.


O testador MetaTrader 4 é muito inferior ao testador MetaTrader 5. Ela não pode mostrar fundos até que algo esteja fechado - mostra-os apenas no momento da tomada de lucros/perdas. Em sua foto todas as posições curtas são fechadas de uma só vez, por isso não há linha de equidade entre abertura e fechamento no relatório. Se você tivesse fechado pelo menos uma posição entre a abertura eo fechamento das posições em sua captura de tela, o levantamento de capital que você tinha no momento do fechamento seria refletido em seu relatório. Ou seja, o relatório mostraria dois saques - no balanço patrimonial a partir do fechamento de uma posição com perda, e nos fundos - a partir do saque dos fundos atuais devido à perda flutuante atual nos fundos de todas as posições abertas.

 
Aleksey Mavrin:

Isto é, ainda não está claro como é desenhado, mas concluo que não há como confiar nele e devemos culpar o MT5)

você pode confiar, mas você precisa ler o relatório completo do testador

adicionar sua estimativa do sorteio ao código e exibi-lo no log in OnDeinit(), se você estiver falando sobre como verificar o testador no cálculo do sorteio máximo, então algo como isto

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: não verificado, mas deve funcionar

 
Igor Makanu:

você pode confiar, mas você precisa ler o relatório completo do testador

adicionar sua estimativa de saque ao código e enviá-la ao log in OnDeinit(), se estamos falando de como verificar o testador no cálculo do saque máximo, então algo como isto


ZS: não verificado, mas deve funcionar

Eu peguei, obrigado. Estou coletando todas as estatísticas em meus EAs e para o testador-optimizador em geral, estou contando os coeficientes de afiação e outros, volatilidade e DD, etc. diariamente, mensalmente, total, é claro, tudo o que posso.

E isto foi uma experiência com um robô do Mercado, eu o coloquei para verificar, porque sei que tal curva gráfica não pode existir com tais mega-lucros. Eu estava convencido de que estava certo, ou seja, por causa da forma como a curva do patrimônio líquido é exibida na MT4

Eu me certifiquei de estar certo, por causa da forma como a curva de equidade é traçada no MT4, a avaliação errada é feita das capacidades do produto (se você olhar para o gráfico de comércio), enquanto os gráficos estão por todo o Mercado, você recebe a mensagem? s.s. eles vendem merda para as pessoas

 

Boa tarde.

Escreva um indicador, mas perceba que há um erro!!! Pergunta para a linha horizontal vermelha (desde o início da sessão do dia).

Tentei usá-lo por alguma razão, mas não funcionou corretamente em consultores especializados. E jura pela entrada em EAs.

(2019.12.19 11:25:31.532 Session Day (EURUSDrfd,H1) array out of range in 'Session Day.mq5' (144,41)

Ajuda do salão...

Obrigado antecipadamente pela dica!


PS

A direção da RED LINE (abertura da sessão) é DIREITA, de hoje a ontem!!!!!!!

//+------------------------------------------------------------------+
//|                                                  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:

Boa tarde.

Escreva um indicador, mas perceba que há um erro!!! Pergunta para a linha horizontal vermelha (desde o início da sessão do dia).

Tentei usá-lo por alguma razão, mas não funcionou corretamente em consultores especializados e acho que não entendi bem. E jura pela entrada em EAs.

(2019.12.19 11:25:31.532 Session Day (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;

neste ponto, em algum momento, você acessa um índice de vetor negativo. verificar a configuração e todas as condições de limite para i, j

 
Artyom Trishkin:

O testador MetaTrader 4 é consideravelmente inferior ao MetaTrader 5. Ela não pode mostrar fundos até que algo esteja fechado - mostra-os apenas no momento da tomada de lucros/perdas. Em sua foto todas as posições curtas foram fechadas de uma só vez, por isso não há linha de equidade entre abertura e fechamento no relatório. Se você tivesse fechado pelo menos uma posição entre a abertura e o fechamento das posições em sua captura de tela, o levantamento de capital que você tinha no momento do fechamento seria refletido em seu relatório. Ou seja, o relatório mostraria dois saques - no balanço patrimonial a partir do fechamento de uma posição com perda, e nos fundos - a partir do saque dos fundos atuais devido à perda flutuante atual nos fundos de todas as posições abertas.

Essa é uma descrição bastante clara, obrigado. Não notei o cargo no início por alguma razão(

E depois uma pergunta) - Solicitação dentro do testador de funções de informações sobre o estado da conta, tais como AccountEquity, etc. - dá uma imagem correta, independentemente de alguma posição estar fechada ou não?

Por exemplo, se forem abertas negociações a longo prazo e o levantamento de capital for registrado todos os dias, o testador não irá trapacear?

Razão: