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

 

Un ejemplo perfecto de la total falta de comprensión de LO QUE se está haciendo son las docenas de páginas de correlaciones de algo con algo.

Antes de calcular la correlación, hay que responder a la pregunta: ¿existe correlación para la serie utilizada? Para series financieras - esta es la primera y más importante pregunta, porque para series financieras la correlación no existe, porque para ellas no hay expectativa matemática y es necesario probar que la media usada PUEDE ser usada como expectativa matemática.

Por cierto, en R es comprobar una vez un estornudo, rutina.

 
СанСаныч Фоменко #:

Es un libro maravilloso.

Debe cubrir todos los problemas del Ministerio de Defensa.

para principiantes, que es por ahora.

para chicos en general. El Tideverse.

 
СанСаныч Фоменко #:

Un ejemplo perfecto de la total falta de comprensión de LO QUE se está haciendo son las docenas de páginas de correlaciones de algo con algo.

Puesto que usted no entiende, voy a explicar.

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading

Aprendizaje automático en el trading: teoría, modelos, práctica y trading con algoritmos

fxsaber, 2023.10.01 09:38

void FillArray( double &Array[], const int Amount )
{
  for (uint i = ArrayResize(Array, Amount); (bool)i--;)
    Array[i] = MathRand();
}

MathRand es un número aleatorio. Es decir, la correlación se calcula sobre matrices aleatorias. El propósito es asegurarse de que las diferentes variantes de las implementaciones de algoritmos dan el mismo resultado. Se compara la velocidad de ejecución del algoritmo y el consumo de memoria. Si eres incompetente, no te metas.

 
fxsaber #:

No he encontrado uno estándar para el cálculo línea por línea. Alglib parecía lento. Estoy probando mi propia variante.

#include <fxsaber\Math\Math.mqh> // https://www.mql5.com/ru/code/17982

matrix<double> CorrMatrix( const double &Array[], const int PatternLen, const bool CreateMatrix = true )
{
  matrix<double> Res = {};
  const int Size = ArraySize(Array) / PatternLen - 1;
  
  if (CreateMatrix)
  {
    Res.Init(Size + 1, Size + 1);
    Res[Size][Size] = 1;
  }
  
  double Corr[];

  DEJAVU Dejavu;
  Dejavu.SetSignal(Array);
  
  if (CreateMatrix)
    for (int i = 0, j; i < Size; i++)
    {
      Res[i][i] = 1;
      j = i + 1;

      Dejavu.SetPattern(PatternLen, i * PatternLen);
      Dejavu.GetCorrelation(Corr, PatternLen, j * PatternLen);
      
      for (; j <= Size; j++)
      {
        const double Tmp = Corr[(j + 1) * PatternLen - 1];
        
        Res[i][j] = Tmp;
        Res[j][i] = Tmp;
      }    
    }
  else
    for (int i = 0; i < Size; i++)
    {
      Dejavu.SetPattern(PatternLen, i * PatternLen);
      Dejavu.GetCorrelation(Corr, PatternLen, (i + 1) * PatternLen);
    }
        
  return(Res);
}

#property script_show_inputs

input int inRows = 100; // Длина строки
input int inCols = 15000; // Количество строк

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

// NumPy: https://www.mql5.com/ru/forum/86386/page3257#comment_49545300
void OnStart()
{  
  PrintCPU(); // https://www.mql5.com/ru/forum/86386/page3256#comment_49538685

  double Array[];
  FillArray(Array, inRows * inCols); // https://www.mql5.com/ru/forum/86386/page3267#comment_49671602

  matrix<double> Matrix;  
  Matrix.Assign(Array);
  Matrix.Init(inCols, inRows);
  Matrix = Matrix.Transpose();
  
  ulong StartTime, StartMemory;
  
  Print(TOSTRING(inRows) + TOSTRING(inCols));
  
  BENCH(matrix<double> Matrix1 = CorrMatrix(Matrix)) // https://www.mql5.com/ru/forum/86386/page3267#comment_49671602
  BENCH(matrix<double> Matrix2 = Matrix.CorrCoef(false)); // https://www.mql5.com/ru/docs/basis/types/matrix_vector
  BENCH(matrix<double> Matrix3 = CorrMatrix(Array, inRows)); // https://www.mql5.com/ru/code/17982

  BENCH(CorrMatrix(Array, inRows, false)); // https://www.mql5.com/ru/code/17982

  Print(TOSTRING(IsEqual(Matrix1, Matrix2)));
  Print(TOSTRING(IsEqual(Matrix1, Matrix3)));
}


Resultado.

EX5: 4000 AVX Release.
TerminalInfoString(TERMINAL_CPU_NAME) = Intel Core i7-2700 K  @ 3.50 GHz 
TerminalInfoInteger(TERMINAL_CPU_CORES) = 8 
TerminalInfoString(TERMINAL_CPU_ARCHITECTURE) = AVX 
inRows = 100 inCols = 15000 
matrix<double> Matrix1 = CorrMatrix(Matrix) - 13795998 mcs, 1717 MB
matrix<double> Matrix2 = Matrix.CorrCoef(false) - 38346008 mcs, 1717 MB
matrix<double> Matrix3 = CorrMatrix(Array, inRows) - 26632760 mcs, 1716 MB
CorrMatrix(Array, inRows, false) - 19412824 mcs, 0 MB
IsEqual(Matrix1, Matrix2) = true 
IsEqual(Matrix1, Matrix3) = true 

El diseño propio resultó ser más rápido que la variante estándar, pero más lento que Alglib (no pude entender el algoritmo). Al mismo tiempo, la versión casera puede contar matrices de cualquier tamaño, a diferencia de otras variantes.

 
fxsaber #:


Resultado.

El autodiseño fue más rápido que la variante estándar, pero más lento que Alglib (no pude entender el algoritmo). Al mismo tiempo, puede leer matrices de cualquier tamaño, a diferencia de otras variantes.

¿Por qué te gusta tanto mql para los cálculos? Puedes escribir dlls en C y será lo más rápido posible.

Para mí, mql sigue siendo un lenguaje para abrir operaciones, sobre todo. Y lo que es correcto, de hecho.

 
fxsaber #:
Si no lo entiende, se lo explicaré.

MathRand es un número aleatorio. Es decir, la correlación se calcula sobre matrices aleatorias. El objetivo es asegurarse de que diferentes implementaciones del algoritmo dan el mismo resultado. Se compara la velocidad de ejecución del algoritmo y el consumo de memoria. Si eres incompetente, no te metas.

Entonces, ¿cuál es el objetivo final de toda esta epopeya con la correlación?

Bueno, has averiguado qué implementación es más rápida, cuál da resultados idénticos, cuál no.... ¿Qué vas a hacer con estos conocimientos?
 
Maxim Dmitrievsky #:

Y por qué te gusta tanto mql para cálculos? Puedes escribir dlls en c y será lo más rápido posible.

Yo estoy limitado por mi incompetencia.

 
Maxim Dmitrievsky #:

para mí, mql sigue siendo el lenguaje para abrir operaciones, sobre todo. Y con razón, de hecho.

También las pruebas y la visualización, y la acción rápida, supongo.
 
mytarmailS #:
Entonces, ¿cuál es el objetivo final de todo esto de la correlación?

Bueno, has descubierto qué aplicación es más rápida, cuál da resultados idénticos, cuál no... ¿Qué vas a hacer con este conocimiento?

Podré calcular lo que otros no pueden por limitaciones técnicas.

 
mytarmailS #:
También pruebas y visualización y acción rápida, probablemente

También es normal la optimización final, para recoger parámetros de tratos