Tema interesante para muchos: las novedades de MetaTrader 4 y MQL4 - grandes cambios en camino - página 66

 
Mischek:
Bueno, no lo habrá.

¿Qué es exactamente lo que no ocurrirá? ¿La coincidencia o sus consecuencias automáticas?

Sé más específico... ;)

 
MetaDriver:

¿Qué es exactamente lo que no ocurrirá? ¿La coincidencia o sus consecuencias automáticas?

Sea específico, por favor... ;)

No habrá lecciones, eso es lo que pasa. :)
 
MetaDriver:

¿Qué es exactamente lo que no ocurrirá? ¿La coincidencia o sus consecuencias automáticas?

Sea específico, por favor... ;)

Sus consecuencias exageradas.
 
MetaDriver:

¿Qué es exactamente lo que no va a pasar?

No habrá nada. Un gran metatrader. Y el silencio).
 
MetaDriver:

La introducción masiva del Matching en las plataformas MT5 puede convertirse, en cierto sentido, en una "bomba" para el mercado, ya que teóricamente podría provocar una "revolución antimercado" en el mercado Forex en un futuro muy próximo. Tal vez el término "revolución" sea una exageración, o tal vez no, porque cualquier operador podrá ser creador de mercado (influir en los precios). Con la difusión masiva de agregadores nativos que cubren segmentos significativos del mercado mundial.... la era del (bueno, casi) poder monopólico de los proveedores de liquidez sobre los precios de las divisas puede (podría) haber terminado para siempre.

En este contexto, surge la pregunta "de época": ¿están los comerciantes preparados para la "nueva era"? ¿De qué herramientas habituales disponen las "masas de comerciantes en general" para probar, optimizar y depurar los algoritmos de difusión?

Ninguna.

No hay historial de ticks ni depuración en el probador. El formato de la base de cotizaciones no deja la posibilidad de utilizarlo para probar y optimizar estrategias HFT que utilicen órdenes limitadas (que son todos los algoritmos de propagación).

Estoy de acuerdo. Sólo un contraargumento: el formato actual de las cotizaciones es tan tonto para las estrategias de ruptura como para las inversas, pero no se puede arreglar con un método tan simple como éste. Y mientras otras estrategias no sufrirán! Si lo ves, pon un ejemplo de una clase de estrategias para las que la modificación de la dispersión de la manera sugerida hará que la prueba/optimización sea menos realista.

De hecho, el probador sigue siendo tickwise, por lo que es sólo una cuestión de formato de la historia. Y también la posibilidad de utilizar "comillas no estándar" si es necesario.
MetaDriver:

Estoy tratando de "mirar alrededor de la curva" un poco más // Todo lo que escribiste es correcto.

"La creación masiva de mercado", exactamente por el desencadenamiento de los escenarios descritos por usted, puede llevar eventualmente a la pérdida de la posición de "intercambiador universal" por parte del dólar. Esto es una simple consecuencia del colapso de los spreads en los "menores". El mercado de divisas se volverá más dinámico y eficiente. Y son los sistemas de negociación basados en la previsión (y no en la manipulación de los precios) los que se beneficiarán. En lo que a mí respecta, cualquier regulación no mercantil de los tipos de cambio está plagada de grandes abusos. No importa lo nobles que sean los objetivos declarados: siempre existe la posibilidad de monetización de la información privilegiada y es insensato suponer que cualquier mecanismo legal pueda contrarrestarla.

En resumen - me interesa el "Forex honesto", tal vez personalmente no me beneficie financieramente de tal inversión (o tal vez sí). Pero si pierdo, al menos sabré que perdí porque desarrollé un algoritmo tonto, y no porque me "engañaron".

Sin comentarios por ahora, lo pensaré un poco más. No he visto una sola estrategia rentable que opere un lote constante puramente con stops. Ni uno solo. Teóricamente es muy comprensible. ( Afirmar que tales estrategias existen es afirmar que hay algún horizonte de negociación en el que la volatilidad H es consistentemente mayor que 2,0) Todas las estrategias de tendencia que he visto funcionar se llenan usando órdenes de mercado o entrando/saliendo en los pullbacks usando limitadores (o puts de mercado). Para los mercados de highAsk/lowBid el historial no es más valioso que el de LowAsk/HighBid. Para ellos la información importante es más bien sobre el spread en todos los puntos de la barra OHLC.

Por último, se entiende que las medidas a medias como HighBid+LowAsk no serán suficientes para que un probador sea adecuado.

 
Urain:

Por último, está claro que medidas a medias como HighBid+LowAsk no serán suficientes para que el probador sea adecuado.

Si sacas esa conclusión de lo que he escrito... entonces tampoco lo entiendes)
 
TheXpert:
Si esa es la conclusión que sacas de lo que he escrito... ...entonces tú tampoco entiendes).

¿Qué vas a hacer? Llegará, dirá unas palabras y ya está, un par de noches sin dormir están garantizadas. )

El post no era para mí, pero tampoco voy a dormir.

 
MetaDriver:

( Sostener que estos existen es sostener que hay algún horizonte de negociación en el que la volatilidad H es consistentemente mayor que 2,0 )

bueno eso es un grial de una tendencia en absoluto. Tampoco es sistemáticamente inferior a 2 veces. No hay instrumentos de este tipo en los que la volatilidad H a lo largo de toda la serie sea constantemente inferior o superior a 2. En segmentos separados/en momentos separados. Saber cuándo operar una tendencia, cuándo operar un retorno. Filtrar el bazar))
 
hrenfx:

Necesitaba mejorar mi probador para un nuevo oficio. Entender el código del antiguo fue más tiempo perdido (maté varias semanas - enfoques ocasionales), que escribir uno nuevo.

Por lo tanto, me tomó 5 horas (con la depuración) para escribir un nuevo probador desde cero. Su rendimiento (satisfactorio para mí como titular):

  • Funciona con M1 HighBid + LowAsk (los resultados son más precisos que en MT5-tester).
  • Un símbolo.
  • Velocidad (i7 2700K) cerca de 100.000.000 barras por segundo (277 años FOREX por segundo) en el TS de prueba - no vacío, muchas cosas se calculan. Constantemente en el mercado.
  • No hay MM - no hay lotes.
  • Beneficio sólo en pips.
  • El operador tiene la posibilidad de controlar el deslizamiento y la comisión.
  • Optimizador con sus propios criterios de optimización - para cada uno de ellos abre su propio archivo (puede ocupar muchos GB) con cadenas de operaciones ordenadas.
  • No hay comprobaciones de errores en el probador - conozco todos los matices de mi probador, así que no lo permito.
  • El TS está escrito en un MQL4 ligeramente abreviado - se han eliminado todas las cosas innecesarias. Pero puedes utilizar toda la potencia de C++.
  • El probador está escrito sin OOP - no sé cómo hacerlo de manera competente. Así que es prácticamente un lenguaje C puro.
  • Código fuente en C++ libre~ 20Kb.
  • Las paradas y los mercados fueron desechados (se dejó OrderClose) - no es necesario.
  • Cada corrida (por elección - especificar el número de corrida) puede ser visualizada y estudiada en el paquete matemático - el archivo de cambios de equidad y balance es escrito de manera simple.
  • No hay genética.
  • No hay OpenCL - no puede hacerlo.
  • Un solo hilo. Carga todos los núcleos de forma estúpida - múltiples optimizadores ejecutados manualmente.
  • Aplicación de la consola.
  • Los parámetros de entrada del TC, los ajustes del comprobador y los rangos de optimización se establecen en el archivo.
  • TC se compila junto con el probador en un archivo EXE.
  • Antes del inicio sólo hay tres archivos: EXE, historial, configuración.
  • El optimizador tiene una interrupción de la ejecución, si el estado actual de la ejecución no satisface las condiciones (por ejemplo, el hundimiento es demasiado alto).
  • El script MQL4 prepara el historial para el probador, fue escrito hace mucho tiempo.
  • No hay asignación dinámica de memoria para la tabla de pedidos - una vez asignada la memoria y olvidada.
  • No hay registros, no los miro.
  • Sin historial de pedidos - de la misma manera.
  • No se sabe nada de los indicadores y todo lo que tiene que ver con ellos: no los necesitamos para la ST.
  • Los precios son enteros (long int).

Si la misma tontería se implementa en MQL5, podemos utilizar Cloud en el modo de optimización matricial. Sólo hay que enviar el historial cada vez - la compresión incorporada de dicha información es necesaria.

En teoría, se puede alcanzar una velocidad de ~ 100 Bb/s (en el TS de prueba). Me pregunto cuál es el rendimiento de MT5-tester en toda la nube en los mismos loros?

100 mil millones de bares por segundo es una buena velocidad para todo tipo de investigaciones. Si se convierte a otras unidades, esa velocidad dice que un año de un minuto de historia del FOREX se ejecuta ~300.000 veces por segundo en un símbolo.

La mayor parte del tiempo la pasé aprendiendo la sintaxis del lenguaje, simplemente buscando en Google. No es un programador.

Ya te digo que es una gran pérdida de tiempo escribir un marco universal para tus modestas necesidades. Es mejor explorar. Si hay que tener en cuenta algo, basta con terminarlo.

Esto es sólo un núcleo, ahora se necesita un conjunto de herramientas astutas para el optimizador. Aquí se necesitará mucho más tiempo: hay que pensarlo bien.

Aquí estoy leyendo todo esto y se me ocurre que, o bien la persona está completamente perdida en las corrientes de su conciencia, o al menos la mitad de lo que escribió es una vulgar mentira.

¿Un programador autodidacta sin conocimientos profundos del lenguaje escribió un probador de un solo hilo con el rendimiento de 100 000 000 barras por segundo durante varias horas? Por el contrario: personas del más alto nivel de profesionalidad dedican años a crear un probador de HFT competente y de alto rendimiento, crean equipos enteros para trabajar con él y lo llenan de estrategias, y aquí una persona decidió construir un probador por su cuenta e inmediatamente obtuvo un orden de magnitud de rendimiento superior de las principales plataformas de HFT (cerradas).

Calculemos cuánta memoria de ancho de banda necesitamos para ejecutar 100 000 000 barras por segundo. Cada barra tiene 4 precios + AskLow HighBid, lo que resulta en 6 tipos de enteros con 64 bits cada uno(los precios son enteros (long int)). Para 100.000.000 bares por segundo se necesitaría

64 bits * 6 precios * 100.000.000 barras = 38.400.000.000 bits = 4.800.000.000 bytes = . 4 577 Mbytes por segundo..


Esto significa que este rendimiento puede alcanzarse, fundamentalmente y de forma puramente teórica, en módulos de memoria DDR2 533 y superiores. Al menos el rendimiento declarado es comparable al límite físico del hardware moderno.

Pero los costes de tiempo de los programas informáticos imponen limitaciones aún más importantes. Estos no pueden ser ignorados. Por eso he cogido un rápido compilador de C de 64 bits Win-Lcc 64 y he medido el rendimiento de una búsqueda directa de un array de barras sin cálculos matemáticos pesados. Atención: estamos hablando de la búsqueda directa, es decir, la más rápida. Sin manipulación del entorno ni otros gastos generales. A diferencia de dickfix, proporciono el código fuente completo de mi "probador de estrategias", para que cualquiera pueda compilarlo y medir el rendimiento en su compilador favorito:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define  LAPS 10000              //Количество серий
#define  ELEMENTS 10000          //Количество баров в одной серии
#define  INVOKE                  //Определено, если требуется эмулировать
                                //вызов функции

//Представление бара
struct bar
{
        long long Open;
        long long High;
        long long Low;
        long long Close;
        long long AskLow;
        long long BidHigh;
};

int main(void)
{
        struct bar bar_array[ELEMENTS];
        //Общее время выполнения стратегии
        clock_t eleps_time = 0;
        //Общее время выполения
        clock_t total_time = 0;
        //К сожалению заявленный объем памяти (100 000 000 баров) выделить не удалось,
    //поэтому выделяем память порциями, 1000 раз, по 100 000 баров за раз.
        clock_t ttime = clock();
        for(int lap = 0; lap < LAPS; lap++)
        {
                //Заполняем бары случайными числами
                for(int i = 0; i < ELEMENTS; i++)
                {
                        bar_array[i].Open = (long long)rand();
                        bar_array[i].High = (long long)rand();
                        bar_array[i].Low = (long long)rand();
                        bar_array[i].Close = (long long)rand();
                        bar_array[i].AskLow = (long long)rand();
                        bar_array[i].BidHigh = (long long)rand();
                        //if(i < 5)
                        //      printf("%i\n", bar_array[i].High);
                }
                //Эмулируем работу ТС c массивом котировок
                //Рассчитываем время на выполнение этого блока и суммируем его, получая общее время
                //выполнения
                clock_t btime = clock();
                //Наша стратегия будет проверять простое соответствие проверяемого бара настоящему.
                //Настоящий бар, это бар чей high > open, low, close а low < high, open, close
                int signal = 0;

                for(int i = 0; i < ELEMENTS; i++)
                {
                        #ifndef  INVOKE
                        if( bar_array[i].High > bar_array[i].Low &&
                            bar_array[i].High > bar_array[i].Open &&
                                bar_array[i].High > bar_array[i].Close)
                                signal++;
                        #endif
                        #ifdef  INVOKE
                        signal += TradeSystem(&bar_array[i]);
                        #endif
                }
                eleps_time += clock() - btime;
        }
        printf("Bars was worked: %i\n", LAPS*ELEMENTS);
        //Печатаем общее время выполнения
    double timedif = ((double)clock() / (double)CLOCKS_PER_SEC);
    printf("Bars %f seconds\n", timedif);
        //Печатаем время выполнения торговой системы
        double eleps_diff = (double)eleps_time / (double)CLOCKS_PER_SEC;
        printf("The TradeSystem time is %f seconds\n", eleps_diff);
        printf("The Eleps tik is %i tiks\n", eleps_time);
        return 0;
}
//
// Функция торговой системы. Принимает на вход бар,
// обрабатывает его и возвращает целочисленный результат
int TradeSystem(struct bar &cbar)
{
        if( cbar.High > cbar.Low &&
                cbar.High > cbar.Open &&
                cbar.High > cbar.Close)
                                return 1;
        return 0;
}

Puedes ver que este código, dependiendo de la directiva Invoke, recorre el array y realiza una simple comparación (una operación muy rápida) o llama a una función que realiza la misma comparación.

Veamos cuánto tiempo tarda este código en buscar y comparar 100 000 000 barras:

Podemos ver que tardó 1,28 segundos en pasar por 100.000.000 de barras directamente, lo que es casi un tercio peor que el rendimiento anunciado.

Se observa que la búsqueda de 100 000 000 de barras con llamada a la función de cálculo en cada barra tardó 1,79 segundos, lo que es más de 1,5 veces peor que el rendimiento declarado.

Todas las pruebas se han realizado con un hardwarei7 870, DDR3 3200 8Gb.

La mayor parte del tiempo se dedicó a la preparación de los datos (unos 9 segundos). Lo cual, a la menor falta de optimización en el diseño del optimizador, se traducirá en una enorme sobrecarga. Pero no he tenido en cuenta ese tiempo, ya que sólo hablamos de la carrera de estrategia.

Saque usted sus propias conclusiones. Espero haber demostrado con cifras que el resultado pretendido, por decirlo suavemente, no se corresponde con la realidad. Incluso el rendimiento teórico del código que describe el optimizador no se corresponde con el resultado que se reclama. Y si se implementa un probador real que se acerque a la funcionalidad del reclamado, el rendimiento bajará aún más, ya que cualquier llamada a una función y cualquier cálculo matemático más o menos útil reducirá inmediatamente el tiempo de la búsqueda desnuda.

 
Avals:
bueno eso es un grial de una tendencia en absoluto. Ninguno de los dos es constante, menos de 2 veces. No hay ningún instrumento que haga que la onda H sea sistemáticamente menor o mayor que 2 en toda la serie. En algunas secciones/en algunos momentos. Saber cuándo operar una tendencia, cuándo operar un retorno. Filtrar el bazar))

Exactamente, pero en este caso llegamos a la negociación limitada como la fase final del desarrollo de un sistema de negociación ideal.

Ahora piensa con tu cerebro, si un sistema "ideal" debe negociar Límites, entonces ¿por qué un sistema real debe negociar Marquets o Stops? Por modestia? ;)