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

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

En medicina, siempre me ha sorprendido su enfoque supuestamente basado en la evidencia, en el que se coge a 100 pacientes, se les da la mitad de un fármaco y la otra mitad de un placebo , y se presenta esto como ESTADÍSTICAS para justificar las conclusiones supuestamente estadísticamente significativas.

Me parece un engaño a escala universal.

Para procesos estacionarios 100 no es una muestra, pero aquí hay una persona, las 100 son SIEMPRE diferentes, con un montón de otras enfermedades de diferente gravedad, viviendo vidas diferentes y todas con correlación desconocida con el fármaco probado. Se llama medicina basada en la evidencia.

En una palabra, una estafa médica universal.



Siempre por tres) Y es sólo un estudio de control después de 5 años de investigación interna in vitro (sobre eso está escrito el artículo farmacopeico), luego normalmente a partir de las circunstancias y la comprensión de cómo funciona el medicamento, y si no funciona, hasta 5 años de seguimiento del uso).

Los riesgos políticos de romper las reglas propias de la investigación médica son grandes)).

Pero el dinero es demasiado grande...)))))

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

O tal vez no tenga NADA que ver con la evidencia y sea, en el mejor de los casos, mera publicidad, y desleal, dirigida a la mayoría de la población analfabeta en estadística. Una banal sed de dinero a cualquier precio.

Ahora que hemos tocado el tema de Covid.

Si usted toma las instrucciones del Ministerio de Salud de hace 20 años, escrito en estricta conformidad con los requisitos de la medicina basada en la evidencia, entonces nosotros, así como en todo el mundo (1) no había epidemia y (2) no había vacuna. Y entonces, de acuerdo con su principio"Pero es mejor tener alguna evidencia que ninguna" , emitimos regulaciones temporales y rápidamente empezamos a ganar miles de millones, ignorando nuestras propias instrucciones. Al ignorar las estadísticas, la medicina se ha vuelto peligrosa.

Se trata de la honestidad en las estadísticas. O cumplimos cada letra de los requisitos de la estadística, o no es estadística en absoluto.

Sólo tienes razón en parte sobre el requisito de muestras grandes. Las pruebas asintóticas no funcionan bien en muestras pequeñas, mientras que las pruebas exactas funcionan bastante bien.

Hay muchos otros problemas en las pruebas de drogas además de los matemáticos, pero es mejor intentar resolverlos de alguna manera que cancelarlo todo y volver al tratamiento con plátano.

 
Aleksey Nikolayev #

Forester #

Lo hice de esta manera, si he entendido bien - contar el número de unidades en la columna / matriz con el objetivo y luego llenar al azar la nueva matriz con unidades, a continuación, copiar el nuevo en el antiguo.

//+------------------------------------------------------------------+
//|Генерируем массив с целевой случайным образом                     |
//+------------------------------------------------------------------+
void Random_Target()
{
   char arr_Target_Random[];//Массив со сгенерированными целевыми
   ArrayResize(arr_Target_Random,Strok_Total_Data);
   ArrayInitialize(arr_Target_Random,0);

   int S_T_1=0;//Сумма целевой 1;
   int Nomer_Stroki_Random=0;
   for(int i=0; i<Strok_Total_Data; i++)
   {
      switch(arr_Target[i])
      {
      case 1:
         S_T_1++;
         break;
      }
   }

   MathSrand(GetTickCount());
   for(int i=0; i<S_T_1; i++)
   {
      Nomer_Stroki_Random=RandomInteger(Strok_Total_Data-1);
      if(arr_Target_Random[Nomer_Stroki_Random]==1)i--;
      else arr_Target_Random[Nomer_Stroki_Random]=1;
   }
   ArrayCopy(arr_Target,arr_Target_Random,0,0,WHOLE_ARRAY);//Заменяем целевые
}

//+------------------------------------------------------------------+
//|Определяем комбинацию случайным образом
//+------------------------------------------------------------------+
int RandomInteger(int max_vl)
{
   return (int)MathFloor((MathRand()+MathRand()*32767.0)/1073741824.0*max_vl);  //случайное Int от 0 до  1073741824
}
 
Aleksey Vyazmikin #:

Lo hice de esta manera, si he entendido bien - contar el número de unidades en la columna / matriz con el objetivo y luego llenar al azar la nueva matriz con unidades, a continuación, copie el nuevo en el antiguo.

Tienes algo complicado, especialmente poco claro con i--
mezclo columnas así. En este ejemplo, el array de índices está mezclado, pero puedes mezclar los propios datos sustituyendo el tipo de datos por
.
void RandomizeIdx(int & idx[], int rows) {
        int j = 0, c = 0;
        for (int r = 0; r < rows; r++) {//перебор train участка
                j = RandomInteger(rows);//номер строки с которой поменять - 
                c = idx[r]; idx[r] = idx[j]; idx[j] = c;//меняем местами каждую строку с случайной
        }
}
 
Forester #:
Tiene algo complicado, especialmente con i--
.

Esto es si la fila ya ha salido, hará otro intento, y saldrá si el valor es igual a uno.

Forester #:
Así es como mezclo columnas. En este ejemplo, se mezcla la matriz de índices, pero también se pueden mezclar los propios datos sustituyendo el tipo de datos por
.

Interesante, y parece más versátil.


De todas formas, han pasado dos pasadas - 18% de unidades en la muestra, en la primera pasada se encontró un segmento cuántico, y en la segunda dos.

Es incluso algo sospechosamente pequeño.

Añadido - en la tercera de nuevo.

Entonces, ¿se puede reconocer que mi método funciona?

 
Aleksey Vyazmikin #:


Entonces, ¿se puede reconocer que mi método funciona?

Buscando un error en el código después de la modificación

 
Aleksey Vyazmikin #:

Buscando un error en el código después de la modificación

No error no

 
fxsaber #:

Gracias, probaré con incrementos MathRand.

Aleksey Nikolayev #:

El más universal es probablemente Monte Carlo.

Parece que tengo una interesante generación aleatoria.

double GetAvgPrice( const MqlTick &Tick )
{
  return((Tick.bid + Tick.ask) / 2);
}

void SetAvgPrice( MqlTick &Tick, const double Price )
{
  const double Spread = (Tick.ask - Tick.bid) / 2;
  
  Tick.bid = NormalizeDouble(Price - Spread, 8);
  Tick.ask = NormalizeDouble(Price + Spread, 8);
  
  return;
}

// Случайный знак приращения средней цены.
bool RandomPrice( MqlTick &Ticks[] )
{  
  const int Size = ArraySize(Ticks) - 1;
  
  if (Size > 0)
  {
    Print("Random price...");
    
    MqlTick PrevTick = Ticks[Size];
    double PrevPrice = GetAvgPrice(PrevTick);
    
    MathSrand((int)TimeLocal());
    
    for (uint i = Size; (bool)i--;)
    {
      const double Diff = GetAvgPrice(PrevTick) - GetAvgPrice(Ticks[i]);
      
      PrevTick = Ticks[i];

      SetAvgPrice(Ticks[i], PrevPrice += !(MathRand() & 1) ? Diff : -Diff);
    }
  }
  
  return(Size >= 0);
}

En la parte superior es un símbolo real, en la parte inferior es al azar.

RandomPrice se puede aplicar de forma iterativa. Los spreads y el tiempo se conservan.


Sería correcto hacerlo vía logaritmo, pero no me molesté en hacerlo. Si lo perfeccionamos, puede ser la mejor opción para que Monte Carlo genere un símbolo aleatorio con las características estadísticas requeridas.

 
fxsaber #:

para Monte Carlo es probablemente la mejor opción para generar un símbolo aleatorio con las características estadísticas deseadas.

Prueba de piojos con el mismo conjunto.

Arriba - real, abajo - aleatorio.

Fallo.