Discusión sobre el artículo "Pruebas de permutación de Monte Carlo en MetaTrader 5"

 

Artículo publicado Pruebas de permutación de Monte Carlo en MetaTrader 5:

En este artículo echaremos un vistazo a cómo podemos realizar pruebas de permutación sobre la base de datos de ticks barajados en cualquier asesor experto utilizando solo MetaTrader 5.

Obviamente, después de exportar un archivo, será necesario registrar dónde se guarda. Ábralo usando cualquier aplicación de hoja de cálculo. La siguiente imagen muestra el uso de OpenOffice Calc gratuito, que ha añadido una nueva fila en la parte inferior de la tabla. Antes de continuar, sería prudente eliminar las líneas para los símbolos que no deberían incluirse en los cálculos. Debajo de cada columna correspondiente, el valor p se calculará utilizando una macro personalizada. La fórmula de macro utilizará las métricas de rendimiento del símbolo permutado (ubicadas en la línea 18 del documento mostrado), así como las métricas de rendimiento de los símbolos permutados para cada columna. La fórmula de la macro completa se muestra en la figura.

Cálculo de los valores P en OpenOffice Calc

Además de utilizar una aplicación de hoja de cálculo, podríamos utilizar Python, que tiene muchos módulos para analizar archivos XML. Si el usuario conoce MQL5, podrá analizar archivos usando un script simple. Solo recuerde seleccionar un directorio accesible al exportar los resultados de optimización del simulador.

Autor: Francis Dube

 
¡Hola! Este artículo proporciona información valiosa, y he estado buscando desde hace bastante tiempo. Sin embargo, me encontré con un problema al utilizar el ejemplo que compartiste. El spread parece ser bastante grande debido al precio de venta. ¿Podría decirme si hay algo que me estoy perdiendo o si hay un error?
 
Le Huu Hai #:
¡Hola! Este artículo proporciona información valiosa, y he estado buscando desde hace bastante tiempo. Sin embargo, me encontré con un problema al utilizar el ejemplo que compartiste. El spread parece ser bastante grande debido al precio de venta. ¿Podrías decirme si me estoy perdiendo algo o si hay algún error?

Por lo que puedo decir, no puedo encontrar un error. En mis propias pruebas también he encontrado variaciones en las series de precios con grandes diferenciales. Esto puede ocurrir. Si esto es inaceptable, puede simplemente hacer más permutaciones y probar en series con spreads más realistas.

 
He probado el script un par de veces en contratos de futuros, tanto últimos como continuos, sin éxito. No sólo los símbolos generados son visualmente idénticos en el gráfico, sus valores de volumen tick/volumen real se concentran en sólo unas pocas velas a lo largo del día, y el probador se ahoga y se congela en estos símbolos, sin producir resultados.
 
Firstly, time and tick flag information will be left untouched so our permutation routine should not alter this information. We are interested in only the bid, ask and volume.
No está nada claro por qué decidió tomar el logaritmo de los volúmenes. Especialmente el volumen de ticks.
 
Autor, no utiliza muchas características del lenguaje, por lo que su código es muchas veces más grande y más difícil de leer.

Por ejemplo, estas líneas se pueden sustituir por una sola línea.
 //---intercambiar datos de tick aleatoriamente
      tempvalue.bid_d=m_differenced[i].bid_d;
      tempvalue.ask_d=m_differenced[i].ask_d;
      tempvalue.vol_d=m_differenced[i].vol_d;
      tempvalue.volreal_d=m_differenced[i].volreal_d;

      m_differenced[i].bid_d=m_differenced[j].bid_d;
      m_differenced[i].ask_d=m_differenced[j].ask_d;
      m_differenced[i].vol_d=m_differenced[j].vol_d;
      m_differenced[i].volreal_d=m_differenced[j].volreal_d;

      m_differenced[j].bid_d=tempvalue.bid_d;
      m_differenced[j].ask_d=tempvalue.ask_d;
      m_differenced[j].vol_d=tempvalue.vol_d;
      m_differenced[j].volreal_d=tempvalue.volreal_d;
Swap(m_differenced[i], m_differenced[j]);


template < typename T>
void Swap( T &Value1, T &Value2 )
{
  const T Value = Value1;
  
  Value1 = Value2;
  Value2 = Value;
}


La misma observación se aplica a los métodos de logaritmo y transformación inversa de datos estructurales. Etc.

 

La conversión de ticks es un tema poco frecuente. Normalmente se hace con un solo precio (bid, por ejemplo) y en barras.

Agradezco al autor por plantear este tema.


Hace poco hubo un tema en un hilo en ruso sobre este tema. Allí, utilizando los mejores métodos de machine learning, se intentaba generar un histórico de ticks para que no perdiera patrones de mercado. Había un criterio claro.

Por desgracia, todos los intentos de no perder los patrones acabaron en fracaso. Había métodos mucho más sofisticados que simplemente mezclar ticks.


Sólo aquí ocurrió algo exitoso.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Машинное обучение в трейдинге: теория, модели, практика и алготорговля

fxsaber, 2023.09.07 07:33

He probado varios algoritmos. Para mayor claridad, aquí están algunos de ellos.

El PO se está construyendo en el precio Avg con la condición de ser fijo. min. rodilla

  • Puntos verdes son índicesde 3Z vértices en la matriz de teca.
  • Púrpura - el índice medio entre los vértices.

La idea es recorrer la matriz de tecas y asignar aleatoriamente nuevos incrementos en las ubicaciones de los índices encontrados.

Resulta que las marcas de tiempo, los valores absolutos de los incrementos (Avg-price) y los spreads se conservan completamente.


Según los resultados.

  1. Ejecuto sólo en los índices verdes - drenaje. Obviamente, tal aleatoriedad endereza (reduce el número de ZZ) el gráfico final.
  2. Corro sólo a lo largo de los de color púrpura -el grial es más fuerte, cuanto mayor sea la condición min. rodilla ZZ.
  3. Corro en ambos colores - ciruela.
Asumo que si construyes un 3Z basado en Bid/Ask al mismo tiempo, entonces el punto 2 será un grial más fuerte.

El tiempo inverso preserva los patrones del mercado muy bien.
Проверка обратного времени.
Проверка обратного времени.
  • 2023.09.03
  • www.mql5.com
Мною была поставлена задача разобраться в причинах получения прибыли определенной ТС (торговая система). Для этого требовалось изучить историю котировок, подтвердив или опровергнув возникающие
 
//+------------------------------------------------------------------+
//|Método auxiliar que aplica la transformación logarítmica |
//+------------------------------------------------------------------+
bool CPermuteTicks::LogTransformTicks(void)
  {
//---dimensiona m_logticks si es necesario 
   if(m_logticks.Size()!=m_ticks.Size())
      ArrayResize(m_logticks,m_ticks.Size());
//---log transforme solo los datos relevantes, evite valores negativos y cero
   for(uint i=0; i<m_ticks.Size(); i++)
     {
      m_logticks[i].bid_d=(m_ticks[i].bid>0)?MathLog(m_ticks[i].bid):MathLog(1 e0);
      m_logticks[i].ask_d=(m_ticks[i].ask>0)?MathLog(m_ticks[i].ask):MathLog(1 e0);
      m_logticks[i].vol_d=(m_ticks[i].volume>0)?MathLog(m_ticks[i].volume):MathLog(1 e0);
      m_logticks[i].volreal_d=(m_ticks[i].volume_real>0)?MathLog(m_ticks[i].volume_real):MathLog(1 e0);
     }
//---
   return true;
  }
¡¿Por qué logaritmos los volúmenes?!
 

мы хотим, чтобы p-значения были как можно ближе к нулю, в диапазоне 0,05 и ниже.

La fórmula completa se indica a continuación:

z+1/r+1

donde r es el número de permutaciones realizadas, y z es el número total de pruebas con el mejor rendimiento.

Este criterio no funcionará en este caso: se optimiza sobre el símbolo original y luego se ejecuta sobre las permutaciones.

 
Процедура перестановки важна для правильного проведения теста.

El algoritmo de permutación utilizado.

  1. Se crea una matriz de incrementos logarítmicos (entre ticks vecinos) bid/ask.
  2. Esta matriz se baraja. Se mezcla fuertemente.
  3. Se crea una nueva matriz de ticks mediante incrementos a partir del punto 2.

Este enfoque elimina todas las regularidades (si las hubiera) que había en la serie inicial. Porque la salida es un paseo aleatorio.


No debería hacerse de esta manera.

 
¿Existe alguna forma de hacer un análisis monte carlo pero con un ea multidivisa?