Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 3301

 
mytarmailS #:

Estoy un poco perdido con esto del switch y el C++.

las dos primeras funciones son implementación de R, la última es switch en C++.

De hecho, no hay ninguna ganancia, ¿cómo puede ser...?

¿Puedes enseñarme el código?

Probablemente estás desperdiciando una función cuando la respuesta ya se ha recibido...

 
Aleksey Vyazmikin #:

¿Puede enseñarme el código?

Probablemente estás ejecutando la función en vano, cuando la respuesta ya está recibida...

El código es el mismo que el que he publicado, excepto que hice las reglas 300 en lugar de 5.

¿Qué sentido tiene publicar el código?
Ya he decidido la arquitectura
 
mytarmailS #:
El código es el mismo que publicaste, excepto que hice las reglas 300 en lugar de 5

¿Cuál es el punto de publicar el código R?
Ya he decidido sobre la arquitectura

La cuestión está en el código de la llamada a la función.

 
Aleksey Vyazmikin #:

La cuestión está en el código de llamada a la función.

No lo entiendo
 
mytarmailS #:

Básicamente no hay ganancia en absoluto, ¿cómo puede ser...?

Hay muchas cosas que podrían ser. La secuencia de comandos se adjunta, a continuación es la parte de la función.

bool Rule0( const vector<double> &x ) { return(x[3] > x[4]); }
bool Rule1( const vector<double> &x ) { return(x[0] < x[4]); }
bool Rule2( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule3( const vector<double> &x ) { return(x[3] == x[4]); }
bool Rule4( const vector<double> &x ) { return(x[0] != x[4]); }
bool Rule5( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule6( const vector<double> &x ) { return(x[3] <= x[4]); }
bool Rule7( const vector<double> &x ) { return(x[0] < x[4]); }
bool Rule8( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule9( const vector<double> &x ) { return(x[3] <= x[4]); }

bool rule3( const int n, const vector<double> &x )
{
  typedef bool (*RULE)( const vector<double>& );
  static const RULE Rules[] = {Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9};

  return(Rules[n](x));
}

#define  BENCH(A)                                                              \
  StartTime = GetMicrosecondCount();                                          \
  A;                                                                          \
  Print(#A + " - " + (string)(GetMicrosecondCount() - StartTime) + " mcs");

void OnStart()
{
  const vector<double> x = {1, 2, 3, 4, 5};
  int Tmp = 0;

  ulong StartTime;

  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule(i % 100, x));
  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule2(i % 100, x));
  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule3(i % 100, x));
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule(i % 100, x));  // Если добавить эту строку, то выше rule замедлится.
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule2(i % 100, x)); // Если добавить эту строку, то выше rule2 замедлится.
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule3(i % 100, x)); // Если добавить эту строку, то выше rule3 замедлится.

  Print(Tmp);
}


Resultado.

for (uint i = 1 e8; (bool)i--;) Tmp += rule(i % 100, x) - 505436 mcs
for (uint i = 1 e8; (bool)i--;) Tmp += rule2(i % 100, x) - 261261 mcs
for (uint i = 1 e8; (bool)i--;) Tmp += rule3(i % 100, x) - 709846 mcs


No está claro lo que se mide aquí - ver los comentarios resaltados. Supuestamente mucho más rápido que la regla2.

Archivos adjuntos:
 
fxsaber #:

Curiosamente, en términos de cantidad de datos (citas), el cerebro humano (como red neuronal) comparado con MO es como un infusorio comparado con un humano.

Sin embargo, los humanos tan primitivos han demostrado que pueden crear CTs que funcionan bastante bien. Resulta que no se necesita una cantidad tan enorme de datos para crear una CT que funcione.

Es un misterio para mí cómo, por ejemplo, el hombre llegó al punto de trabajar modelos scalper. Se hizo casi enteramente sin calculadores de números.


El escenario para esto era aparentemente algo como esto:

  1. A menudo veo algún tipo de aplanamiento (he estado moliendo estúpidamente en la pantalla durante unos días).
  2. Voy a tratar de sacar provecho de ella con un TS primitiva.
  3. No drena mucho. Debería refinar un poco el TS. Miré el historial de operaciones - parece que algo se puede mejorar.
  4. Empezó a aumentar un poco. Repita el punto 3.
No hay número cruncher. Sólo miré el punto 1 y empecé a hacerlo. La probabilidad de este enfoque parece ser casi cero, pero de alguna manera funciona. Algún tipo de método de trabajo poke loco.


Al parecer, en algún subconsciente cerebro humano todavía es capaz de encontrar "patrones" en extremadamente pequeña cantidad de datos. No puedes llamarlo suerte. Es un misterio.

En mi opinión, todo el secreto está en la transferencia de experiencia: todo lo nuevo se construye sobre los logros de la generación anterior. Por ejemplo, los procesadores modernos. Para la gente del siglo XIX será magia. Para los del siglo XX, será una tecnología muy compleja que no dispondrá de las herramientas adecuadas para hacer ingeniería inversa. Sólo mediante la transferencia de conocimientos y el desarrollo gradual podremos alcanzar el nivel tecnológico moderno. Por eso se dice que si hay tercera guerra mundial, se luchará con piedras en la cuarta. Hay leyendas sobre el trading, que antes los mercados eran mucho más fáciles, y los traders cenitales hacían fortunas con la ayuda de las medias móviles, ahora no será posible hacerlo.

 
fxsaber #:

No está muy claro qué se mide aquí; véanse los comentarios resaltados. Supuestamente mucho más rápido que la regla2.

Aquí esta función y sus diferentes implementaciones (equivalentes), incluidos los de C ++, se midieron.

Bueno, ya he decidido sobre la arquitectura por ahora, me sentaré en puro R-ke por ahora, he encontrado una manera de acelerar 25 veces + todavía hay pluses / fuertes razones para no añadir C ++ a mi código.

 

Puedes tener un reto con mi AMO.

"Resuelve el TS".


Me das un pequeño fragmento de datos que utilizas.

Describes que operadores, funciones y variables usas en el código.

Y me das tu eqidad o señales del algoritmo.


Yo creo una gramática de búsqueda, y recojo el código como un cifrado y resuelvo tu TS.

 
🤦
 
¿Alguien tiene alguna idea de por qué un diferencial de 2 puntos de cinco dígitos mata alfa en eurobucks cinco minutos? Quiero decir, sin ella, es un grial, con ella es malo. Pero casi no tiene efecto en las operaciones por hora.

Es más, si ejecutas un bot de 5 minutos en mercados horarios, funciona. La única diferencia es la apertura en una nueva barra cada hora.

He restado el spread de los incrementos, visualmente no ha cambiado mucho. Parece más bien que el margen de las operaciones no lo tiene en cuenta correctamente.