Erros, bugs, perguntas - página 343

 
Kairoser:

Boa tarde!

Depois de actualizar para a versão 420, comecei a testar a minha EA e reparei que ela começou a "perder" por alguma razão. Analisei os meus negócios e reparei que o fim das perdas é desencadeado a preços inexistentes. Por exemplo, fixei o stop loss em 1,06520 no EURUSD, mas funciona, embora o preço máximo seja 1,05920. Quando olho mais longe, vejo muitos desses negócios. O Take Profit é desencadeado pelo mesmo princípio (a preços inexistentes) - o delta é o mesmo - 600 pontos. No testador do gráfico, as setas para cima e para baixo "penduram" no ar, longe das barras.

Uma imagem de ecrã é anexada.

Realizar testes em MetaQuotes-Demo, por favor. Alpari tem uma história manifestamente errada (em spreads) de gráficos.
 
Renat:
Realizar testes em MetaQuotes-Demo, por favor. Alpari tem uma história manifestamente errada (em spreads) de gráficos.
Sim, de facto, tudo funciona bem no servidor MetaQuotes-Demo. Obrigado pela ajuda.
 

Um par de questões são de interesse.

1. Se forem utilizados indicadores no testador de estratégias, como funciona o sistema? Primeiro, todos os indicadores para os quais as pegas são calculadas e só depois o OnTick é lançado?

2. Se sim, seria bom iniciar primeiro o OnTick e depois executar um comando para calcular os indicadores anexos. Assim, por exemplo, não preciso de calcular indicadores em cada tick de cinco dígitos, mas apenas em quatro dígitos. Quando inicio o OnTick, verifico o preço actual e anterior e decido se devo ou não iniciar o cálculo dos indicadores.

Porque se há muitos deles e são bastante "pesados", consomem recursos em modo de optimização...

Embora possa tentar criar pegas em ontick e apagar indicadores no final e no início seguinte do ontick (se necessário) criar novamente pegas - e não está claro se irá melhorar o desempenho...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
olyakish:

Um par de questões são de interesse.

1. Se forem utilizados indicadores no testador de estratégias, como funciona o sistema? Primeiro, todos os indicadores para os quais as pegas são calculadas e só depois o OnTick é executado?

Sim. A resposta mais geral - todos os valores dos indicadores são calculados antes de cada chamada do manipulador do evento:

  • OnTick
  • OnTimer
  • OnChartEvent e assim por diante
 
olyakish:
2. Se assim for, seria muito útil executar primeiro o OnTick e depois executar o cálculo dos indicadores anexos com este comando. Por exemplo, não preciso de calcular indicadores em cada tick de cinco dígitos, mas apenas em quatro dígitos. Quando inicio o OnTick, verifico o preço actual e anterior e decido se devo ou não iniciar o cálculo dos indicadores.

Porque se são muitos e são bastante "pesados", consomem recursos em modo de optimização...

Não se pode fazer isso. Pode utilizar modos de geração de carrapatos mais rápidos para os testes:

  1. Preços OHLC em barras de minutos
  2. Apenas preços abertos do período em teste
 
Rosh:

Não se pode fazer desta forma. Pode-se usar modos de geração de carrapatos mais rápidos para testes:

  1. Preços OHLC em barras de minutos
  2. Preços de abertura do período em teste apenas
Conheço esses modos e as suas peculiaridades. Queria apenas acelerar a optimização de uma forma razoável (provavelmente óptima).
 

Ajuda, funções de conversão de dados não querem funcionar, escreveu um guião simples para o testar. Construir SO 420, 64 bit.

void OnStart()
  {
//---
   int i=0;
   bool res=false;
   string stroka1;
   string stroka2;
   string stroka3;
   string stroka4;
   string stroka5;

   datetime buf1;
   double   buf2;
   double   buf3;
   double   buf4;
   double   buf5;
   
   int filehandle=FileOpen("56451.csv",FILE_READ|FILE_CSV|FILE_ANSI,',',CP_UTF8);

   if(filehandle==INVALID_HANDLE)Print("Ошибка № - ",GetLastError());
   else
     {

      while(!res)
        {
         stroka1 = FileReadString(filehandle);
         stroka2 = FileReadString(filehandle);
         stroka3 = FileReadString(filehandle);
         stroka4 = FileReadString(filehandle);
         stroka5 = FileReadString(filehandle);

         buf1 = StringToTime(stroka1);
         buf2 = StringToDouble(stroka2);
         buf3 = StringToDouble(stroka3);
         buf4 = StringToDouble(stroka4);
         buf5 = StringToDouble(stroka5);

         res=FileIsEnding(filehandle);
         i++;
        }
      FileClose(filehandle);
     }
  }
//+------------------------------------------------------------------+
Arquivos anexados:
56451.zip  16 kb
 
sergey1294:

Ajuda, funções de conversão de dados não querem funcionar, escreveu um guião simples para o testar. Construir SO 420, 64 bit.


Livre-se das citações em qualquer fase....
 
AlexSTAL:
Livre-se das vírgulas invertidas em qualquer fase....
Como se faz isso?
 
sergey1294:
Como se faz isto?

Ou se certificam de que não estão inicialmente no ficheiro, ou aplicam uma função adicional quando lêem, por exemplo:

string StringWithoutQuotes(string Value)
{
   StringTrimLeft(Value);
   StringTrimRight(Value);
   return(StringSubstr(Value, 1, StringLen(Value) - 2));
}

..........

         stroka1 = StringWithoutQuotes(FileReadString(filehandle));
         stroka2 = StringWithoutQuotes(FileReadString(filehandle));