Scripts: ThirdPartyTicks - página 2

 
Maxim Dmitrievsky:

Estou apenas pensando em voz alta, desculpe, mas posso excluir postagens anteriores, devo? )

Não luto pela pureza das classificações, deixo-o viver. Como você tem algo no kit de ferramentas, escreva.

Para os estrangeiros do MO, a primeira coisa que eu faria seria um desempenho comparativo com outras fontes.

E para os mais realistas - Tester.


ZЫ Sugira aos "camaradas da loja".

Машинное обучение в трейдинге: теория и практика (торговля и не только)
Машинное обучение в трейдинге: теория и практика (торговля и не только)
  • 2016.05.26
  • www.mql5.com
Добрый день всем, Знаю, что есть на форуме энтузиасты machine learning и статистики...
[Excluído]  
fxsaber:

Não luto pela pureza das classificações, deixo-o viver. Se você tiver alguma informação sobre o kit de ferramentas, escreva-me.

Para os estrangeiros do MO, a primeira coisa que eu faria é comparar as características com outras fontes.

E para os mais realistas - Tester.


ZY sugere "camaradas de armas".

É improvável que alguém além de mim perceba isso, até que eu os mostre nos dedos, mas escrevi :)

 

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

Bibliotecas: Symbol

fxsaber, 2018.04.07 22:37

Ao mesmo tempo, um pequeno teste dessa implementação também (apenas o spread da barra contado de forma diferente)

Dois modos são comparados: "Todos os ticks" e "OHLC M1".


Todos os ticks

final balance 10006150.00 EUR
TESTER4_Censored,M1: 6576734 ticks, 60353 bars generated. Test passed in 0:00:04.587 (including ticks preprocessing 0:00:00.343).
394 Mb memory used including 27 Mb of history data, 128 Mb of tick data


OHLC M1

final balance 10006119.00 EUR
TESTER_Censored,M1: 240366 ticks, 60353 bars generated. Test passed in 0:00:00.359 (including ticks preprocessing 0:00:00.031).
306 Mb memory used including 27 Mb of history data, 64 Mb of tick data


A qualidade do backtest é a mesma, o desempenho da segunda variante em uma única execução é 12 vezes maior.

 
Исторически сложилось, что для MetaTrader 4 пользуются популярностью сторонние приложения, позволяющие получать тиковую историю из различных источников. Как правило, ее используют в Тестере Стратегий как полигон для проверки советников, а также для исследований (машинное обучение и т.д.). Некоторые источники котировок в обсуждениях стали почти стандартом при поиске "грааля".
Um exemplo simples que mostra que muitas pessoas sofrem com a falta de sentido ao procurar um TC funcional. Em particular, os fãs do aprendizado de máquina.

Vamos executar a otimização do EA (por ticks reais) na primeira semana de abril no modo "Todos os símbolos selecionados na janela Market Watch"

#include <fxsaber\ThirdPartyTicks\Data.mqh>

input double inCommissionProcent = 0.002;
sinput bool inLog = true;
sinput int inOnTester = 0;

#define  RESERVE 100000

// Lucro potencial em valores relativos e absolutos (pips)
class MAXPROFIT : public DATA<double>
{
private:    
  bool FlagUP;
  double MinMax;

  const double MarkupAsk;  
  const double MarkupBid;

  void SetMarkup( MqlTick &Tick ) const
  {
    Tick.bid *= this.MarkupBid;
    Tick.ask *= this.MarkupAsk;
    
    return;
  }
  
  static void MathLog( MqlTick &Tick )
  {
    Tick.bid = ::MathLog(Tick.bid);
    Tick.ask = ::MathLog(Tick.ask);
    
    return;
  }
  
  double MathRelative( const double Value ) const
  {
    return(this.Relative ? ::MathExp(Value) : Value);
  }
  
public:  
  const bool Relative;
  
  MAXPROFIT( const double Commission = 0, const bool inRelative = false ) : FlagUP(true), MinMax(-DBL_MAX), Relative(inRelative),
                                                                            MarkupBid(1 - Commission), MarkupAsk(1 + Commission)
  {
  }
  
  void AddTick( MqlTick &Tick )
  {
    this.SetMarkup(Tick);
    
    if (this.Relative)
      MAXPROFIT::MathLog(Tick);
    
    if (this.FlagUP)
    {
      if (Tick.bid > this.MinMax)
        this.MinMax = Tick.bid;
      else if (Tick.ask < this.MinMax)
      {
        this.Add(this.MinMax, RESERVE);
        
        this.MinMax = Tick.ask;
        this.FlagUP = false;
      }
    }
    else
    {
      if (Tick.ask < this.MinMax)
        this.MinMax = Tick.ask;
      else if (Tick.bid > this.MinMax)
      {
        this.Add(this.MinMax, RESERVE);
        
        this.MinMax = Tick.bid;
        this.FlagUP = true;
      }
    }
    
    return;
  }
  
  double GetProfit() const
  {
    double Res = 0;
    
    const uint Size = this.GetAmount();
    
    for (uint i = 1; i < Size; i++)
      Res += this.MathRelative(::MathAbs(this.Data[i] - this.Data[i - 1]));
      
    if (Size)
      Res += this.MathRelative(::MathAbs(this.MinMax - this.Data[Size - 1]));
      
    return(Res);
  }
};

MAXPROFIT MaxProfit(inCommissionProcent / 100, inLog);

void OnTick()
{  
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    MaxProfit.AddTick(Tick);
}

double OnTester()
{  
  switch (inOnTester)
  {
  case 0:
    return(MaxProfit.Relative ? MaxProfit.GetProfit() : (int)(MaxProfit.GetProfit() / _Point + 0.1));
  case 1:
    return(MaxProfit.GetAmount());
  case 2:
    return((MaxProfit.Relative ? MaxProfit.GetProfit() : (int)(MaxProfit.GetProfit() / _Point + 0.1)) / MaxProfit.GetAmount());
  }
  
  return(0);
}


Resultado

O valor numérico é o lucro máximo possível no histórico (incluindo a comissão).

Na captura de tela, o EURUSD está destacado, que foi retirado do MQ-Demo, e os outros símbolos são ThirdPartyTicks. Podemos ver que o EURUSD tem 8878,74, enquanto seu homônimo de terceiros tem 15134,94. Isso significa que qualquer TS no EURUSD mostrará menos lucro do que em seu símbolo homônimo.

Acontece que qualquer pessoa que realizar o mesmo MO no MQ-Demo EURUSD perderá toda uma camada de possíveis TSs lucrativas. E subestimará muito o símbolo FOREX.


No topo está o GBPAUD. Seu nível mostra que é muito fácil escrever um pipsarist, que mostrará espaço no OOS no Tester com execução perfeita.

Não é a demonstração que quebrará a ilusão do graal, porque a demonstração também mostrará um resultado perfeito. Mas, é claro, o verdadeiro.


Em primeiro lugar, a comissão interferirá, porque a expectativa de um piper é baixa, ~ 8 pips (* milhares de negociações por semana). Mas o que é ainda pior, ela distorcerá o resultado da execução.

No caso de realização por meio de mercados, teremos muitas derrapagens negativas, que, juntamente com a comissão, se sobreporão à expectativa da esteira. E haverá uma drenagem.

No caso da realização por meio de ordens limitadas, não teremos derrapagens negativas (às vezes, haverá positivas), mas seremos arruinados por rejeições muito frequentes de ordens, quando elas simplesmente não serão executadas. Portanto, um grande número de negociações lucrativas que teriam sido feitas na mesma demonstração será simplesmente ignorado. E isso levará a um esgotamento novamente. Se não se tratasse de forex, mas de uma bolsa de valores, a situação certamente seria muito melhor em termos de execução.


A conclusão desse exemplo simples provavelmente ainda pode ser tirada. Antes de escrever um TS, escolha as melhores condições de negociação (cotações) não apenas pela fonte das cotações (corretora), mas também pelo símbolo. Esse EA pode ajudar claramente nesse aspecto. Usando essa metodologia, você pode verificar um corretor no MT5 e depois outro. E entender imediatamente onde e por qual símbolo será mais lucrativo trabalhar com qualquer TS.

[Excluído]  

Ninguém faz isso porque essas estratégias de ticks são facilmente eliminadas pelas corretoras

Está claro que ninguém testa as cotações das metaquotes de demonstração, mas sim as cotações da corretora em que vai operar.

E o que o MO tem a ver com isso ainda não está claro :)

 
Maxim Dmitrievsky:

Ninguém faz isso, porque essas estratégias de ticks são facilmente eliminadas pelos corretores

Não creio que tenhamos falado sobre TSs baseadas em ticks aqui. Baixa expectativa não é pipsing.

Está claro que ninguém testa as cotações das metaquotes de demonstração, mas sim as cotações da corretora em que vão operar.

O MQ-Demo foi um exemplo. Qual é o argumento para que, ao escolher um dts, a busca por TS seja feita nele?

E o que o MO tem a ver com isso ainda não está claro :)

Deve-se observar que um objeto razoável e de pesquisa é escolhido primeiro, e não um AUDCAD de uma corretora aleatória.

[Excluído]  
fxsaber:

Não creio que tenha havido nenhuma conversa sobre TSs de ticks aqui. A expectativa de baixa esteira não é pipsing.

O MQ-Demo foi, por exemplo. Qual é o argumento para que, ao escolher uma corretora, a busca por TS seja feita nela?

Deve-se observar que um objeto razoável e de pesquisa é escolhido primeiro, não um AUDCAD de uma corretora aleatória.

Normalmente, as estratégias são tomadas apenas nos preços de abertura, os ticks não as afetam em nada. Então, não importa qual corretora

 
Maxim Dmitrievsky:

Normalmente, as estratégias são tomadas apenas com base nos preços de abertura, os ticks não têm nenhuma influência. Então, não importa qual corretor

Você também pode usar o H1 ou melhor D1 para se tornar completamente independente. Em geral, caras estranhos.

[Excluído]  
fxsaber:

E você também pode usar o H1 ou, melhor ainda, o D1 para se tornar completamente independente. Em geral, caras estranhos.

Bem, em 1-5 minutos está tudo bem :) você pode criar seus próprios TFs, então você precisa de bons ticks, sim.

A propósito, de acordo com seu arquivo - eles têm o LP Admiral Markets, talvez faça sentido obter cotações diretamente deles, deve ser a mesma coisa.

 
Maxim Dmitrievsky:

Bem, de 1 a 5 minutos é normal).

E onde está o limite, onde antes é "normal" e depois é "não normal"?