Scripts: ThirdPartyTicks

 

ThirdPartyTicks:

Librería para trabajar con el archivo de tick ajeno.


Autor: fxsaber

 
Automated-Trading:

ThirdPartyTicks:

Autor: fxsaber

Pero el probador de la estrategia de mt5 no puede trabajar con que los datos de garrapatas - ¿correcto? :(

¿Va a codificar una secuencia de comandos que crea un símbolo artificial para MT5 de los datos de garrapatas para que este símbolo artificial (s) puede ser probado y optimizado con una propia datos de garrapatas locales?

== google translate ====>

Pero mt5 probador de estrategia no puede trabajar con datos de garrapatas - ¿verdad? :(

¿Va a codificar una secuencia de comandos que crea un símbolo artificial para MT5 de los datos de garrapatas para que este símbolo artificial (s) puede ser probado y optimizado con los propios datos de garrapatas locales?
 
Carl Schreiber:

Pero el probador de estrategias de mt5 no puede trabajar con esos datos de tick - ¿correcto? :(

¿Codificarías un script que cree un símbolo artificial para MT5 a partir de los datos de tick para que este(s) símbolo(s) artificial(es) pueda(n) ser probado(s) y optimizado(s) con los datos de tick locales propios?

Este script crea un símbolo personalizado que se puede utilizar para las pruebas en Strategy Tester.

 
// https://www.mql5.com/es/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...
 

En ThirdPartyTicks-quotes sin deshabilitar el deslizamiento de órdenes limitadas con la ayuda de esta librería podemos obtener la siguiente imagen en el Probador

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)

Es decir, un beneficio de 5004 pips, mientras que 631 pips (cada octavo pip) es un "bonus" del Probador, lo cual no es bueno.


con la desactivación del deslizamiento de las órdenes limitadas.

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)

no hay "bonus", lo que no es engañoso.

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

Usted mencionó el uso de cast. caracteres para MO, ¿puede elaborar un poco más?

Entiendo que esto es arbitraje en la versión actual. ¿O hay opciones para cargar otros datos?

También estoy interesado en cargar datos de otro terminal abierto en tiempo real, ¿cómo se puede implementar esto más correctamente a través de la biblioteca?

 
Maxim Dmitrievsky:

Usted mencionó el uso de cast. caracteres para MO, ¿puede elaborar un poco más?

Sugerí historia para la MdD. No lo expliqué - ver la descripción. Símbolos personalizados son convenientes porque pueden ser utilizados a través de MQL y en el Probador a la vez.

Entiendo que en la versión actual es el arbitraje. ¿O hay variantes de la carga de algunos otros datos?

¿La versión actual de qué? Yo mismo no veo ninguna razón para utilizar otras fuentes.

También estoy interesado en cargar datos de otro terminal abierto en tiempo real, ¿cómo se puede implementar esto más adecuadamente a través de la biblioteca?

Los personalizados en tiempo real son muy fáciles de implementar. Por ejemplo, el Equity-symbol en tiempo real (con M1 generado automáticamente e historial de "tick") se crea en 5-10 líneas de código en MQL puro.

Yo mismo uso los personalizados hasta ahora sólo para crear TS sobre la base de Tester/Optimiser. Para ello, utilizo este conjunto de herramientas como fuente de material de partida.

Acelero y ajusto el Tester/Optimiser usando otras herramientas - ver el post anterior.

 
fxsaber:

¿La versión actual de qué? No veo ninguna razón para utilizar otras fuentes.

Versión actual - en el sentido de utilizar las cotizaciones de una fuente de terceros, es posible añadir algunos indicadores macroeconómicos y así sucesivamente, pero esto es sólo un tema de investigación para el Ministerio de Defensa.

Pero para el arbitraje (pruebas multidivisa) en diferentes cotizaciones - muy interesante, se pueden escribir modelos interesantes, pero también un tema de investigación.

También hay una idea para traducir valores de distribuciones arbitrarias en un símbolo personalizado... pero cómo aplicarlo más allá es también un tema de investigación :)

 
Maxim Dmitrievsky:

versión actual - en el sentido de utilizar citas de una fuente ajena, es posible embutir en ella algunos indicadores macroeconómicos, etc., pero esto es sólo un tema de investigación para el Ministerio de Defensa.

Pero para el arbitraje (pruebas multidivisa) en diferentes cotizaciones, es muy interesante, se pueden construir modelos interesantes, pero también es un tema de investigación.

También hay una idea para traducir valores de distribuciones arbitrarias en un símbolo personalizado... pero cómo aplicarlo más allá es también un tema de investigación :)

Este hilo no trata de métodos para utilizar símbolos personalizados. Aquí es sólo una historia de garrapatas de terceros en la forma de estos mismos símbolos.

Y por qué exactamente se elige - ver la descripción.

 
fxsaber:

Después de todo, este hilo no trata de métodos para utilizar símbolos personalizados. Aquí es sólo una historia de garrapatas de terceros en forma de estos mismos símbolos.

Y por qué exactamente se elige - ver la descripción.

Sólo pensando en voz alta, lo siento, puedo borrar mensajes anteriores, ¿debería? )