Scripts: ThirdPartyTicks

 

ThirdPartyTicks:

Biblioteca para trabalhar com arquivos de ticks de terceiros.


Autor: fxsaber

 
Automated-Trading:

ThirdPartyTicks:

Autor: fxsaber

Mas o testador de estratégia do mt5 não pode trabalhar com esses dados de ticks - correto? :(

Você pode codificar um script que crie um símbolo artificial para o MT5 a partir dos dados de ticks, de modo que esse(s) símbolo(s) artificial(is) possa(m) ser testado(s) e otimizado(s) com os dados de ticks locais de um proprietário?

== google translate ====>

Mas o testador de estratégia do MT5 não pode trabalhar com dados de ticks, certo? :(

Você codificará um script que crie um símbolo artificial para o MT5 a partir dos dados de ticks, de modo que esse(s) símbolo(s) artificial(is) possa(m) ser testado(s) e otimizado(s) com os dados de ticks locais?
 
Carl Schreiber:

Mas o testador de estratégias do mt5 não pode trabalhar com esses dados de ticks - correto? :(

Você pode codificar um script que crie um símbolo artificial para o MT5 a partir dos dados de ticks, de modo que esse(s) símbolo(s) artificial(is) possa(m) ser testado(s) e otimizado(s) com os dados de ticks locais de um proprietário?

Esse script cria um símbolo personalizado que você pode usar para testar no Strategy Tester.

 
// https://www.mql5.com/pt/code/20225
#include <fxsaber\ThirdPartyTicks\Web.mqh>
#include <fxsaber\ThirdPartyTicks\String.mqh>
#include <fxsaber\ThirdPartyTicks\Data.mqh>

struct SYMBOL_PROFILE 
{
  string Name;
  
  double BuyLots;
  double SellLots;
  
  bool operator ==( const SYMBOL_PROFILE &Value) const
  {
    return(this.Name == Value.Name);
  }
  
  string ToString( void ) const
  {
    return(this.Name + " +" + ::DoubleToString(this.BuyLots, 2) + " -" + ::DoubleToString(this.SellLots, 2));
  }
};

class SYMBOLS_PROFILE : public DATA<SYMBOL_PROFILE >
{
private:
  static const uchar CensoredURL[];
  
public:
  SYMBOLS_PROFILE( const string URL = NULL )
  {
    uchar Bytes[];
    
    if (WEB::Get(Bytes, (URL == NULL) ? ::CharArrayToString(SYMBOLS_PROFILE::CensoredURL) : URL))
    {
      string Str = ::CharArrayToString(Bytes);
      
      STRING::Between(Str, "<tbody>", "</tbody");
      STRING::Between(Str, "<tbody>", "</tbody");
      Str = STRING::Between(Str, "<tbody>", "</tbody");
      
      SYMBOL_PROFILE SymbProfile;
      
      while (::StringLen(Str) > 400)
      {
        SymbProfile.Name = STRING::Between(Str, "<td width=\"10%\">", "</td>");
        SymbProfile.BuyLots = (double)STRING::Between(Str, "<span>", "</span>");
        SymbProfile.SellLots = (double)STRING::Between(Str, "<span>", "</span>");
        
        this.Add(SymbProfile);
      }
    }
  }
  
  string ToString(void ) const
  {
    string Res = NULL;
    
    const uint Size = this.GetAmount();
    
    for (uint i = 0; i < Size; i++)
      Res += this[i].ToString() + "\n";
    
    return(Res);
  }
};

static const uchar SYMBOLS_PROFILE::CensoredURL[] =
{
  0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x72, 0x61, 0x6E, 0x6E, 0x66, 0x6F,
  0x72, 0x65, 0x78, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x72, 0x75, 0x2F, 0x73, 0x68, 0x6F,
  0x77, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2F
};

// Perfil
void OnStart()
{
  SYMBOLS_PROFILE Symbols;
  
  Print(Symbols.ToString());
}


Resultado

AUDCAD +0.06 -0.00
AUDCHF +0.02 -0.03
AUDUSD +0.05 -0.04
CADCHF +0.02 -0.03
CHFJPY +0.00 -0.01
DAX30 +0.00 -0.10
DJI30 +0.90 -0.00
EURAUD +0.16 -0.08
EURCAD +0.12 -0.00
EURCHF +0.00 -0.03
EURGBP +1.35 -19.99
EURJPY +0.00 -0.28
EURNZD +0.10 -0.00
EURRUB +0.00 -0.02
EURUSD +0.29 -0.19
GBPAUD +0.04 -0.03
GBPCAD +0.22 -0.54
GBPCHF +0.00 -0.06
GBPNZD +0.00 -0.05
GBPUSD +0.02 -0.02
NZDCAD +0.00 -0.01
NZDUSD +0.00 -0.01
USDCAD +0.09 -0.01
USDCHF +0.05 -0.01
USDJPY +0.15 -0.02
USDRUB +0.00 -0.02
USDZAR +0.00 -0.01
XAGUSD +0.00 -0.01
XAUUSD +0.02 -0.00
XBRUSD +0.00 -0.10
 
Библиотеки: Symbol
Библиотеки: Symbol
  • 2017.10.13
  • www.mql5.com
Symbol: Автор: fxsaber...
 

Em ThirdPartyTicks-quotes, sem desativar o deslizamento de ordens de limite com a ajuda dessa biblioteca, podemos obter a seguinte imagem no testador

final balance 10005004.00 RUR
OnTester result 10004391
2018.04.04 23:59:57   deal #397 balance -613.00 [withdrawal] done
TESTER_Censored,M1: 6268667 ticks, 57486 bars generated. Environment synchronized in 0:00:00.468. Test passed in 0:00:03.416 (including ticks preprocessing 0:00:00.811).
TESTER_Censored,M1: total time from login to stop testing 0:00:03.884 (including 0:00:00.468 for history data synchronization)

Ou seja, lucro de 5004 pips, enquanto 631 pips (cada oitavo pip) é um "bônus" do testador, o que não é bom.


com a desativação da derrapagem das ordens de limite.

final balance 10004391.00 RUR
OnTester result 10004391
TESTER_Censored,M1: 6268667 ticks, 57486 bars generated. Environment synchronized in 0:00:00.031. Test passed in 0:00:03.432 (including ticks preprocessing 0:00:00.827).
TESTER_Censored,M1: total time from login to stop testing 0:00:03.463 (including 0:00:00.031 for history data synchronization)

o "bônus" está ausente, o que não é enganoso.

SlipPage
SlipPage
  • votos: 20
  • 2016.08.25
  • fxsaber
  • www.mql5.com
Проскальзывания при исполнении ордеров вносят несистемные прибыль/убыток. Данный скрипт выводит величины этих проскальзываний в валюте счета. Можно оценить качество исполнения ордеров торговавшей ТС — вклад несистемных проскальзываний в ее мат. ожидание. Тестер в режиме...
[Excluído]  

Você mencionou o uso de caracteres de elenco para o MO, pode explicar um pouco mais?

Entendo que isso é uma arbitragem na versão atual. Ou há opções para carregar outros dados?

Também estou interessado em carregar dados de outro terminal aberto em tempo real. Como isso pode ser implementado mais corretamente por meio da biblioteca?

 
Maxim Dmitrievsky:

Você mencionou o uso de personagens de elenco para o MO, pode falar um pouco mais sobre isso?

Eu sugeri história para o MdD. Eu não o expliquei - veja a descrição. Os símbolos personalizados são convenientes porque podem ser usados no MQL e no Tester de uma só vez.

Entendo que, na versão atual, isso é arbitragem. Ou existem variantes de carregamento de outros dados?

Versão atual de quê? Não vejo nenhuma razão para usar outras fontes.

Também estou interessado em carregar dados de outro terminal aberto em tempo real, como isso pode ser implementado de forma mais adequada por meio da biblioteca?

Os personalizados em tempo real são muito fáceis de implementar. Por exemplo, o Equity-symbol em tempo real (com M1 gerado automaticamente e histórico de "ticks") é criado em 5 a 10 linhas de código em MQL puro.

Até o momento, eu mesmo utilizo os personalizados apenas para criar TS com base no Tester/Optimiser. Para esse fim, uso esse kit de ferramentas como fonte de material de origem.

Eu acelero e ajusto o Tester/Optimiser usando outras ferramentas - veja a postagem acima.

[Excluído]  
fxsaber:

A versão atual de quê? Não vejo nenhuma razão para usar outras fontes.

Versão atual - no sentido de usar cotações de uma fonte de terceiros, é possível adicionar alguns indicadores macroeconômicos e assim por diante, mas isso é apenas um assunto de pesquisa para o MoD

Mas para arbitragem (teste em várias moedas) em diferentes cotações - muito interessante, você pode escrever modelos interessantes, mas também é um assunto de pesquisa.

Há também uma ideia de traduzir valores de distribuições arbitrárias em um símbolo personalizado... mas como aplicá-lo posteriormente também é um assunto de pesquisa :)

 
Maxim Dmitrievsky:

versão atual - no sentido de usar citações de uma fonte de terceiros, é possível incluir alguns indicadores macroeconômicos e assim por diante, mas isso é apenas um assunto de pesquisa para o MoD.

Quanto à arbitragem (teste de várias moedas) em diferentes cotações, é muito interessante, é possível criar modelos interessantes, mas isso também é um assunto de pesquisa.

Há também uma ideia para traduzir valores de distribuições arbitrárias em um símbolo personalizado... mas como aplicá-lo posteriormente também é um assunto de pesquisa :)

Este tópico não é sobre métodos de uso de símbolos personalizados. Aqui está apenas um histórico de ticks de terceiros na forma desses mesmos símbolos.

E por que exatamente ele foi escolhido - veja a descrição.

[Excluído]  
fxsaber:

Afinal, este tópico não é sobre métodos de uso de símbolos personalizados. Aqui está apenas um histórico de ticks de terceiros na forma desses mesmos símbolos.

E por que exatamente ele foi escolhido - veja a descrição.

Só estou pensando em voz alta, desculpe, mas posso excluir as postagens anteriores, devo? )