Curso Gratuito - Trading IA

Cómo la Inteligencia Artificial mejora el Rendimiento del scanner

2»

Comentarios

  • Manuel
    Manuel 109 puntos

    Pues tienes razón en que ya tengo que pensar dar por bueno algún algoritmo.

    Este tiene buena pinta, me falta probarlo en tiempo real y hacer más backtests.

    También quiero dar alguna vuelta más a la gestión de riesgos.

    El algoritmo e scalping lo tenía terminado en easylanguage y comencé a hacerlo en mt5, pero me pasé a Scanner porque quería alejarme un poco de scalping. Esto me ayuda a volver a retomarlo con nuevas ideas y suele ayudarme a avanzar cuando me atasco. En scalping me estaba pasando con la IA, no conseguía avanzar.

  • Luismi
    Luismi 224 puntos

    Eres un ctack, por lo menos de la informatica, sigo pensando que estaria bien hacer alguna kedada por zoom o algo asi, para hablar de trading, nuestros avances y conocernos un poco, que bastante dificil es ya de por si para hacerlos solos, una vez al mes o algo asi estaria bien

  • Manuel
    Manuel 109 puntos

    Bueno date cuenta que hace muchos años que programo, los lenguajes son distintos pero las metodologías son parecidas y eso ayuda.

    Este no es el foro indicado, pero si alguien quiere aprender a programar "bien" lo mejor es empezar por pseudocodigo, de esta forma no te atas al lenguaje y aprendes a resolver problemas de una forma algorítmica sin las limitaciones de una plataforma concreta. Después ya aprendes a adaptar estos algortimos a cada lenguaje.

    Respecto a zoom, yo creo que puede ser positivo pero yo voy fatal de tiempo. Quizás algún fin de semana.

    Se pueden proponer temas, fechas, horarios y a ver si se consigue cuadrar algo que interese.

  • Luismi
    Luismi 224 puntos
    editado noviembre 2023

    Hombre yo me referia a un zoom grupal ,con tod@s los alumnos que se quieran conectar, no se trata de exprimirte yo a ti a cara cara, lo de programar bien si algun dia me libero tiempo de sobra facil que lo intente, de momento me conformo con ser capaz de ir sacando lo que hago poco a poco, lo que pasa es que como aqui hacemos cosas nuevas, nueva plataforma , nuevo lenguaje….. hay cosas que parece que no sabes por donde empezar y ahi es donde a ti te veo mas suelto y se agradece que nos eches una mano.

    Y no te digo nada cuando empieze con lo de la red neuronal, que ya no me queda tanto,…😅.

    Pero como esto del trading es un "negocio" muy solitario comparar lo que hacen compañeros con algo que en teoria se parece a lo que haces tu, seguro que aporta a todos , a ti no te vamos a enseñar a implantarlo pero alomejor te parece interesante como plantea otro un setup o que no tiene en cuenta, o que ……

  • luis
    luis 425 puntos

    En los entrenamientos, podemos utilizar datos de los últimos 365 días, pero… ¿Qué algoritmo de entrenamiento estás utilizando?

    Dependiendo del algoritmo utilizado y los parámetros utilizados para este, podemos dar más peso a las últimas sesiones y menos a las anteriores (algo recomendable). También afecta el orden en el que ejecutamos el entrenamiento (sí, en muchos algoritmos de entrenamiento afecta).

  • Manuel
    Manuel 109 puntos

    Hola, pues la anterior arquitectura estaba basada en capas LSTM y aprendía muy bien de los ejemplos, pero después no daba buenos resultados con otros datos. Estas capas son buenas para series de tiempo, pero no conseguí llegar a buenos resultados.

    Ahora he vuelto a redes con capas densas, pero he cambiado los datos de entrada adaptándolos a este tipo de redes.

    ¿Puedes explicarme un poco más do cómo afecta el orden de entrenamiento?

    Yo sabría asignar pesos distintos a los ejemplos según su fecha (días desde hoy por ejemplo), pero no sé si es esto a lo que te refieres.

  • luis
    luis 425 puntos

    Una cosa es la arquitectura de la red, el cómo esta está diseñada y otra es el cómo la vamos a entrenar.

    Me refería a los algoritmos de entrenamiento.

    Afecta igual que afecta la diferencia entre una media móvil simple y una exponencial. La simple da el mismo peso o valor a todos los periodos y la esponencial, la ponderada, etc dan más peso a las últimas sesiones.

  • Manuel
    Manuel 109 puntos

    Uff, perdona pero no estoy seguro de entenderte.

    Lo que hago:

    Ejecuto el robot en 365 días y se exportan las operaciones en el orden que se ejecutan.

    Estas operaciones las paso a la red, tal cual están, no cambio el orden ni las modifico.

    No estoy seguro, pero supongo que cuando pasas el conjunto de entrenamiento a la red, el algortimo toma los ejemplos para entrenar según el orden que le pasas. En este caso la red entrenará primero con los datos más antiguos.

    ¿te refieres a este orden de entrenamiento?

  • luis
    luis 425 puntos

    Sí, tanto al orden como al método de entrenamiento.

  • Manuel
    Manuel 109 puntos

    Ok, he probado con varios optimizadores y funciones de pérdida, sigo investigando en este sentido.

  • luis
    luis 425 puntos
    editado noviembre 2023

    Mira, ahora que está tan de moda ChatGPT.

    ¿Cuáles son los principales algoritmos de entrenamiento de redes neuronales y en qué se diferencian?

    Los algoritmos de entrenamiento de redes neuronales son técnicas utilizadas para ajustar los pesos y sesgos de una red neuronal durante el proceso de aprendizaje. Algunos de los principales algoritmos de entrenamiento de redes neuronales incluyen:

    1. Retropropagación (Backpropagation): Es el algoritmo de entrenamiento más común para redes neuronales. Utiliza el descenso de gradiente para minimizar la función de pérdida en relación con los parámetros del modelo.
    2. Descenso de gradiente estocástico (SGD): Este método actualiza los pesos de la red utilizando el gradiente de la función de pérdida calculado en muestras individuales o en lotes pequeños de datos. El SGD es más rápido en comparación con el descenso de gradiente tradicional y a menudo se utiliza en conjunción con la retropropagación.
    3. Descenso de gradiente estocástico con momento (SGD con momento): Este algoritmo mejora el SGD al incorporar un término de momento que suaviza las actualizaciones de los pesos a lo largo de múltiples iteraciones. Esto ayuda a acelerar la convergencia y a superar problemas de oscilación.
    4. Descenso de gradiente con Adagrad: Adagrad adapta la tasa de aprendizaje para cada parámetro en función de su historial de actualizaciones. Esto permite una adaptación más rápida de la tasa de aprendizaje para parámetros infrecuentes.
    5. RMSprop (Root Mean Square Propagation): Similar a Adagrad, RMSprop ajusta la tasa de aprendizaje para cada parámetro, pero hace una normalización de la tasa de aprendizaje acumulada, lo que puede mejorar la eficiencia en algunos casos.
    6. Adam (Adaptive Moment Estimation): Adam combina las ventajas de RMSprop y SGD con momento. Ajusta las tasas de aprendizaje de cada parámetro de manera adaptativa y utiliza momentos de primer y segundo orden para ajustar los pasos del gradiente.

    Cada uno de estos algoritmos tiene sus propias características y es más adecuado para ciertos tipos de conjuntos de datos o problemas específicos. La elección del algoritmo de entrenamiento depende en gran medida de la naturaleza del problema y de las propiedades de los datos.

    Vamos, pero esque le pregunto "¿Podrías ponerme un ejemplo de Retropropagación?" y me lo hace:

    import tensorflow as tf
    
    # Definir los datos de entrada y salida
    X = tf.constant([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=tf.float32)
    y = tf.constant([[0], [1], [1], [0]], dtype=tf.float32)
    
    # Definir la arquitectura de la red neuronal
    model = tf.keras.Sequential([
        tf.keras.layers.Dense(units=2, input_shape=(2,), activation='sigmoid'),
        tf.keras.layers.Dense(units=1, activation='sigmoid')
    ])
    
    # Definir el optimizador y la función de pérdida
    optimizer = tf.optimizers.SGD(learning_rate=0.1)
    loss_object = tf.keras.losses.MeanSquaredError()
    
    # Definir la función de entrenamiento
    def train_step(inputs, outputs):
        with tf.GradientTape() as tape:
            predictions = model(inputs)
            loss = loss_object(outputs, predictions)
        gradients = tape.gradient(loss, model.trainable_variables)
        optimizer.apply_gradients(zip(gradients, model.trainable_variables))
        return loss
    
    # Entrenar la red neuronal
    for i in range(1000):
        loss = train_step(X, y)
        if i % 100 == 0:
            print(f'Epoch {i}, Loss: {loss.numpy()}')
    
    # Evaluar la red neuronal entrenada
    predictions = model(X)
    print("Predicciones:")
    print(predictions.numpy())
    

    Este código crea una red neuronal con dos capas ocultas y una capa de salida. Utiliza la retropropagación para actualizar los pesos y sesgos de la red con el objetivo de minimizar la pérdida entre las predicciones y los valores reales. Puedes ejecutar este código para ver cómo la red aprende a realizar la tarea de clasificación binaria después de varias iteraciones.

  • luis
    luis 425 puntos

    ¿Podrías ponerme un ejemplo de Descenso de gradiente estocástico?

    import numpy as np
    
    # Datos de entrada y salida
    X = 2 * np.random.rand(100, 1)
    y = 4 + 3 * X+ np.random.randn(100, 1)
    
    # Añadir término de sesgo a los datos de entrada
    X_b = np.c_[np.ones((100, 1)), X]
    
    # Definir parámetros iniciales aleatorios
    eta = 0.1  # Tasa de aprendizaje
    n_iterations = 1000
    m = 100  # Tamaño del lote
    
    theta = np.random.randn(2,1)  # Inicialización aleatoria
    
    # Algoritmo de Descenso de gradiente estocástico
    for iteration in range(n_iterations):
        for i in range(m):
            random_index = np.random.randint(m)
            xi = X_b[random_index:random_index+1]
            yi = y[random_index:random_index+1]
            gradients = 2 * xi.T.dot(xi.dot(theta) - yi)
            theta = theta - eta * gradients
    
    # Imprimir los parámetros finales
    print("Parámetros finales:")
    print(theta)
    

    En este ejemplo, estamos utilizando el descenso de gradiente estocástico para encontrar los parámetros óptimos de una regresión lineal simple. En cada iteración, seleccionamos aleatoriamente una instancia (o un lote pequeño de instancias) y actualizamos los parámetros en consecuencia. Este enfoque ayuda a evitar quedar atascado en mínimos locales y puede converger más rápido en conjuntos de datos grandes. Puedes ejecutar este código para ver cómo el algoritmo actualiza los parámetros para ajustarse a los datos de entrada y salida.

    Leyendo el otro post se me ha venido a la mente hacerlo.

  • enormi
    enormi 183 puntos

    Quería haceros una pregunta que me ronda la cabeza respecto a los parámetros relevantes y al peso que deben tener. Yo estoy todavía en la estrategia de scalping pero aplica igualmente al scanner supongo.

    En la estrategia de scalping usamos varios setups de entrada al mercado y cada uno tiene unos parámetros y unas variables pero también tenemos algunos setups que pueden ser comunes a todos como por ejemplo la vela de intención o volumen de parada.

    ¿Estos parámetros que se pueden usar en diferentes setups no se deberían optimizar con la IA de forma independiente para cada setup en el que se usen? o quizá esto podría entenderse como una sobreoptimización?

  • luis
    luis 425 puntos

    Antes de nada, no confundamos el algoritmo que distingue si una vela tiene intención o no del que realmente opera el setup de intención tomando como fuente este dato y muchos otros.

    Sí, se puede aunque no encuentro ventaja en ello. La intención es muy fácil y eficiente de detectar con los parámetros que tenemos.

  • Manuel
    Manuel 109 puntos

    Son dudas razonables las que tienes, en Metatrader existe un asistente para generar robots que es sorprendentemente sencillo de ejecutar y da como resultado un robot experto para operar con, incluso, gestión de riesgo parametrizada.

    Pero bueno, esto te lo vengo a contar porque entre otras cosas el diseño de estos robots cuenta con varias señales, tantas como quieras, solo tienes que ir añadiendo desde el repositorio que lleva por defecto o añadir nuevas señales.

    Estás señales son las que el experto recibe y pondera para decidir si operar o no. Una de estas señales podría ser, por ejemplo, la de intención. Puede que tu estrategia solamente con esta señal opere, o puede que necesite de otras, por ejemplo estructura, o una cantidad determinada de cada una.

    Para entrenar la IA podrías usar esta señales, por lo que la intención la estarías entrenando.

  • enormi
    enormi 183 puntos

    Sólo son dudas que me van surgiendo y las planteo porque seguro que habrá más gente que se las hace y pueden servir. Seguro que más adelante lo iré viendo más claro.