
¡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.
//---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.
- Ejecuto sólo en los índices verdes - drenaje. Obviamente, tal aleatoriedad endereza (reduce el número de ZZ) el gráfico final.
- 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.
- Corro en ambos colores - ciruela.

- 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; }
мы хотим, чтобы 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.
- Se crea una matriz de incrementos logarítmicos (entre ticks vecinos) bid/ask.
- Esta matriz se baraja. Se mezcla fuertemente.
- 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.

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
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.
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