Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
gracias por el consejo, aquí está una versión muy simple de mi código, esto no es mi código real, pero espero que esto sea más claro.
como dije este no es el código real, encontrar el patrón etc es solo un ejemplo. la razón por la que abrí este hilo es lafunción DetectExistingPattern()
Ya te he dado un código de ejemplo sobre cómo ejecutar el código en la primera ejecución de OnTick( ), así que ahora actualiza tu post de código en consecuencia para que tu DetectExistingPattern() se ejecute en la primera llamada de OnTick() y no en el OnInit().
Además, no puede utilizar "Bars" para detectar una nueva barra. Eso es incorrecto. Debe utilizar "Time[0]" o "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Aquí tiene un ejemplo:
Ya te he dado un código de ejemplo sobre cómo ejecutar el código en la primera ejecución de OnTick (), así que ahora actualiza tu post de código en consecuencia para que tu DetectExistingPattern() se ejecute en la primera llamada de OnTick() y no en el OnInit().
Además, no puede utilizar "Bars" para detectar una nueva barra. Eso es incorrecto. Debe utilizar "Time[0]" o "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Aquí tienes un ejemplo:
gracias @FMIC, añadí el código simple porque @jjc lo pidió. Por cierto, aprendí a usar Bares desde que recuerdo, todo el mundo escribía de esa manera así que lo hice. ¿Por qué está mal? ¿Puede funcionar mal?
ps: Yo uso metatrader 4, por lo que es mql4 derecho?
gracias @FMIC, añadí el código simple porque @jjc lo pidió. Por cierto, aprendí a usar Bares desde que recuerdo, todo el mundo escribía de esa manera así que lo hice. ¿Por qué está mal? ¿Puede funcionar mal?
ps: Yo uso metatrader 4, por lo que es mql4 derecho?
FMIC:
No! On the forum, you will find that many users have shown that the "Bars" method is very old and unreliable because the number of bars can be changed by the "Options" for charts or it can be constant when the maximum number of bars per chart has been reached. So, it is wrong to use it. Use either "Time[0]" or if you want it to be compatible with MQL5 as well, use "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Please see my example.
como he dicho esto no es el código real, encontrar el patrón etc es sólo un ejemplo. la razón por la que abrí este hilo es lafunción DetectExistingPattern()
Volviendo a tu pregunta original... En este ejemplo, una opción sería que cambiaras tu función CheckTrendPattern() para que se le pueda decir que empiece en una barra específica. En lugar de utilizar el rango fijo de las barras 1 a 10, utilice un desplazamiento de 1 a 10 desde un punto de inicio especificado.
Cuando no hay una orden existente, y se quiere comprobar si el patrón se cumple actualmente, se utiliza entonces CheckTrendPattern(0) en lugar de CheckTrendPattern().
Al arrancar, si tiene una orden existente, puede buscar el patrón que la desencadenó de la siguiente manera. Esta es la misma sugerencia que hice al principio: se obtiene el índice de la barra que es equivalente al tiempo de apertura de la orden existente, y se empieza a buscar hacia atrás desde allí.
Sin embargo, como dice FMIC, es preferible hacer esta comprobación en la primera llamada a OnTick() que en OnInit(). Mis propias razones para sugerir esto no tienen nada que ver con "retrasar la inicialización". En lugar de eso, me preocuparía que, cuando MT4 se reinicie con el EA ya unido a un gráfico, todavía no tenga una lista de órdenes del broker o un historial de barras actualizado de forma 100% fiable.
Otra consideración que puede querer tener en cuenta es el siguiente escenario, todo sucediendo durante el tiempo cubierto por una sola barra:
Es posible que desee comprobar las órdenes cerradas, así como las órdenes abiertas, para evitar esto.
Volviendo a su pregunta original... En este ejemplo, una opción sería que cambiara su función CheckTrendPattern() para que se le pueda decir que empiece en una barra específica. En lugar de utilizar el rango fijo de las barras 1 a 10, utilice un desplazamiento de 1 a 10 desde un punto de inicio especificado.
Cuando no hay una orden existente, y se quiere comprobar si el patrón se cumple actualmente, se utiliza entonces CheckTrendPattern(0) en lugar de CheckTrendPattern().
Al arrancar, si tiene una orden existente, puede buscar el patrón que la desencadenó de la siguiente manera. Esta es la misma sugerencia que hice al principio: se obtiene el índice de barra que equivale al tiempo de apertura de la orden existente, y se empieza a buscar hacia atrás desde ahí. Sin embargo, como dice FMIC, es preferible hacer esta comprobación en la primera llamada a OnTick() en lugar de en OnInit(). Mis propias razones para sugerir esto no tienen nada que ver con "retrasar la inicialización". En lugar de eso, me preocuparía que, cuando MT4 se reinicie con el EA ya unido a un gráfico, todavía no tenga una lista de órdenes del broker o un historial de barras actualizado de forma 100% fiable.
Otra consideración que puede querer tener en cuenta es el siguiente escenario, todo sucediendo durante el tiempo cubierto por una sola barra:
Ahora está más claro por qué debo hacerlo en OnInit, la fiabilidad es el punto más importante, por supuesto, y no pensé en su advertencia de consideración. esta parte es realmente importante, podría abrir órdenes redundantes, tal vez raro pero posible. Tengo que manejar esto de alguna manera. realmente muchas gracias.
@WHRoeder su nuevo control de la barra es tan simple y hermoso. He añadido su método a mi código, gracias.
Hola a todos,
como @FMIC aconsejado, escribo y el indicador que encuentra mi patrón, dar una señal y algunos datos más que va a utilizar para mis órdenes (podría abrir más de una orden en los precios de diferencia). Ahora quiero usarlo en mi EA pero tengo una pregunta, necesito su experiencia en realidad. Cuando obtengo una señal de mi indicador, abro una orden o pongo una orden (límite de venta o límite de compra, etc.) si mi mt4 se bloquea por cualquier razón cuando lo vuelvo a abrir, ¿cómo puedo encontrar que la orden abierta pertenece a qué señal en mi indicador, está bien usar el desplazamiento de la barra para eso? como hablamos antes, puedo encontrar el tiempo de creación de la orden, luego encontrar ese desplazamiento de la barra y debo tratar de obtener el valor del indicador mediante el uso de este desplazamiento? ¿Cómo puedo hacer coincidir esta orden con el desplazamiento del indicador?
Gracias.
Sí, puedes utilizar iBarShift(), tal y como te ha explicadojjc en un post anterior para luego referenciar los datos de tu indicador a través de la función iCustom().