Características da linguagem mql5, subtilezas e técnicas - página 29

 
Andrey Dik:

Nos testes, os dados minúsculos são considerados mais confiáveis.

As barras minúsculas são mais confiáveis? Os dados do tick não são o último recurso? Por que precisamos de dados reais se não são levados em conta?

Eu costumava fazer isto ingenuamente: eu testei em barras minúsculas, depois testei em carrapatos, depois em carrapatos reais como uma verificação final de precisão. Agora entendo que o terceiro cheque não faz muito sentido.


As pernas crescem a partir daqui.

https://www.mql5.com/ru/forum/188047

Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
  • www.mql5.com
Пытаюсь сделать мультивалютный советник,но с фьючами. Запускаем в тестере простой советник на ближнем фьюче,т.к. он более живой...
 
Vladimir Karputov:


Não há necessidade de retirar a frase do contexto. A frase soa assim:

Como pode ver, se não tentar manipulá-la, verá que interpretou mal a referência.

Eu não estava a manipular nada. A ajuda afirma claramente que as barras de minutos são de extrema importância. Por falta de dados de carrapatos - os carrapatos são gerados de acordo com barras de minutos.

Na minha opinião, o minuto TFs deve ser calculado a partir de ticks reais no modo "Real ticks", caso contrário, não faz sentido neste modo.

 
Andrey Dik:

Na minha opinião, os minutos TFs devem ser formados a partir de carrapatos reais em modo "Real ticks", caso contrário não faz muito sentido neste modo.


orientando para a história dos minutos e conduz a uma situação em que carrapatos reais de 02.04.17 a 08.04.17

2017.04.08 18:06:17.780 сколько тиков (GOLD-9.17,H1)    Колво тиков за 2017.04.02 00:00:00 = 116844

e o testador só usa carrapatos para 88 barras de minutos existentes. todos os outros carrapatos só existem em algum lugar ...

2017.04.08 18:05:17.263 Core 1  GOLD-9.17,M1: 5918 ticks, 88 bars generated. Environment synchronized in 0:00:00.070. Test passed in 0:00:03.125 (including ticks preprocessing 0:00:00.070).
2017.04.08 18:05:17.263 Core 1  GOLD-9.17,M1: total time from login to stop testing 0:00:03.195 (including 0:00:02.944 for history data synchronization)
2017.04.08 18:05:17.263 Core 1  166135 total ticks for all symbols
2017.04.08 18:05:17.263 Core 1  GOLD-9.17: generate 5918 ticks in 0:00:00.020, passed to tester 5918 ticks
 
Diário do testador
GOLD-6.17,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04.03 00:00 to 2017.04.08 00:00 started
GOLD-6.17 : real ticks begin from 2017.04.03 00:00:00
final balance 100000.00 EUR
GOLD-6.17,H1: 145777 ticks, 70 bars generated. Environment synchronized in 0:00:01.388. Test passed in 0:00:00.062 (including ticks preprocessing 0:00:00.031).

E aqui está o número de carrapatos reais


Isto é Metaquotes-Demo.

Acontece que os ticks reais são 147700 durante a semana, enquanto o testador no seu modo mais preciso mostra 145777 ticks de tipo desconhecido.

 
fxsaber:
Diário do Testador

E aqui está o número de carrapatos reais


Isto é Metaquotes-Demo.

Acontece que os carrapatos reais são 147700 durante a semana, enquanto o testador no seu modo mais preciso dá 145777 carrapatos desconhecidos.


O testador usa menos carrapatos do que na realidade, porque está focado neles.

melhor olhar para futuros longos, a imagem é mais clara lá

 
kaus_bonus:


Faltam várias barras M1 e como o marco está nelas, o testador usa menos carrapatos do que realmente usava.

As barras M1 são formadas quando há um preço de flipper. Se não há nenhum, não há bar. E o facto de haver tic-tac na altura é ignorado!

Portanto, o problema não está apenas no testador, mas também no algoritmo de formação de barras.

É melhor olhar para futuros longos, a imagem lá é mais clara.

Exatamente em futuros longos esta situação, como eu escrevi acima, acontece com mais frequência.

Tem razão, vou apenas demonstrar a situação mais claramente.

GOLD-9.17,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04.03 00:00 to 2017.04.08 00:00 started
GOLD-9.17 : real ticks begin from 2017.04.03 00:00:00
final balance 100000.00 EUR
GOLD-9.17,H1: 5918 ticks, 39 bars generated. Environment synchronized in 0:00:00.032. Test passed in 0:00:00.046.

Os ticks reais são 116844, os ticks do testador no modo mais preciso são 5918. Um modesto 20 vezes menos.


SZY A refutação de uma hipótese de que a dada situação é desenvolvida por causa da omissão pelo testador de carrapatos idênticos

#include <TypeToBytes.mqh>

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnStart()
{
  MqlTick Ticks[];
  
  const int Amount = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, D'2017.04.03' * 1000, D'2017.04.08' * 1000);
  
  int Count = 1;
  
  for (int i = 1; i < Amount; i++)
    if (_R(Ticks[i]) != Ticks[i - 1])
      Count++;
      
  Print(TOSTRING(Amount) + TOSTRING(Count));
}
Resultado
Test2 (GOLD-9.17,H1)    Amount = 116844 Count = 116840

Apenas 4 carrapatos idênticos poderiam falhar.

 
Tradução de MqlTick para string

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Bibliotecas: Price_Compare

fxsaber, 2016.10.19 17:18

string GetTickFlag( uint tickflag )
{
  string flag = "";

#define TICKFLAG_MACRO(A) flag += ((bool)(tickflag & TICK_FLAG_##A)) ? " TICK_FLAG_" + #A : "";
  TICKFLAG_MACRO(BID)
  TICKFLAG_MACRO(ASK)
  TICKFLAG_MACRO(LAST)
  TICKFLAG_MACRO(VOLUME)
  TICKFLAG_MACRO(BUY)
  TICKFLAG_MACRO(SELL)
#undef TICKFLAG_MACRO

  if (flag == "")
    flag = " FLAG_UNKNOWN (" + (string)tickflag + ")";
    
  return(flag);
}

#define TOSTRING(A) " " + #A + " = " + (string)Tick.A

string TickToString( const MqlTick &Tick )
{
  return(TOSTRING(time) + "." + (string)IntegerToString(Tick.time_msc %1000, 3, '0') +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    Print(TickToString(Tick));
}
Resultado
time = 2017.04.07 23:58:18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
fxsaber:
Traduzindo MqlTick para string
Resultado

Impossível de ler:

time = 2017.04.07 23:58:18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
Dennis Kirichenko:

Impossível de ler:

Eu não entendo. Eu próprio a utilizo para imprimir quaisquer estruturas, tipos e matrizes simples.

Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação

MetaEditor build 1463

fxsaber, 2016.11.10 10:42

class PRINTCLASS
{
public:  
  template <typename T>
  static void MyPrint( const T &Value )
  {
    T Array[1];
    
    Array[0] = Value;
    
    ::ArrayPrint(Array, _Digits, NULL, 0, WHOLE_ARRAY, ARRAYPRINT_HEADER|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN);
  }
  
  template <typename T>
  static void MyPrint( const T Value )
  {
    ::Print(Value);
  }

  template <typename T>
  static void MyPrint( const T &Value[] )
  {
    ::ArrayPrint(Value);
  }
};

#define Print(A) PRINTCLASS::MyPrint(A)

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    Print(Tick);
}

O resultado
             [time]   [bid]   [ask]  [last] [volume]    [time_msc] [flags]
2017.04.07 23:58:18  110620  110640  110630        1 1491609498000      30

Tudo depende dos objectivos.
 
Comentários não relacionados a este tópico foram movidos para"Quaisquer perguntas de novatos sobre MQL4, ajuda e discussão sobre algoritmos e códigos".
Razão: