Dividir las posiciones abiertas en grupos - página 8

 
Sergey Voytsekhovsky:

Por favor, dígame, el artículohttps://www.mql5.com/ru/articles/567 tiene el siguiente código y menciona

Pero no pude encontrarlo en el paquete estándar. ¿No es una buena búsqueda o el artículo no está actualizado?

No, sólo cometí un error.

Estás sacando trozos de código de aquí, de allí y de allá, y se supone que tenemos que adivinar.

El código para añadir un elemento al final de la lista que has mostrado es muy similar al código para añadir un elemento al final de la lista de la biblioteca estándar.

Y resulta que sacaste algo de alguna parte...

 
Sergey Voytsekhovsky:

La idea es clara, no está claro por qué no debemos utilizar algoritmos ya probados, pero sobre "tres bucles" - muy comprensible, gracias. Cuando se obtienen soluciones sencillas de alta calidad, siempre me pregunto por qué no lo he descubierto yo mismo, porque es tan obvio. Gracias.

Allí también hay muchos errores, y buscar problemas en el código de otras personas me resulta absolutamente imposible. Además, si de repente encuentras un error, lo arreglas por ti mismo y aunque lo comuniques, no significa que vayan a ver el mensaje y lo arreglen. Y la próxima actualización comenzará de nuevo.
 
Alexey Viktorov:
También hay muchos errores allí, y buscar un problema en el código de otra persona me resulta bastante imposible. Además, si de repente encuentras un error, lo arreglas tú mismo y aunque lo comuniques, no es seguro que el mensaje sea visto y corregido. Y la próxima actualización comenzará de nuevo.

¿Seguro que hay muchos bichos en el SB? ¿O simplemente no te gustan los gatos porque no tienes un libro de cocina?

 
Artyom Trishkin:

No, sólo cometí un error.

Estás "sacando" trozos de código de aquí, de allí, de allá..., y tenemos que adivinar.

El código para añadir un elemento al final de la lista que nos has mostrado es muy similar al código para añadir un elemento al final de la lista de la biblioteca estándar.

Y resulta que has sacado algo de algún sitio...

El código para añadir un elemento al final de la lista es de la biblioteca estándar, tienes razón. Y he intentado "tirar" de él después de no encontrar ese código del artículo. :-))

 
Artyom Trishkin:

¿Seguro que sabes que hay muchos errores en SB? ¿O simplemente no le gustan los gatos por falta de un libro de cocina?

Dime, Artyom, ¿recuerdas el problema del cierre parcial de una posición? ¿Recuerdas que posteriormente añadieron otro método en lugar de encontrar la razón de este comportamiento?

No sé cómo deviation=ULONG_MAX hizo que todo el método no funcionara, pero lo sustituí por deviation=1000 y todo funcionó bien. Escribí sobre ello en el hilo "Bugs bugs...", pero el tema creció tan rápido que este mensaje cayó en el olvido y no se notó. Como resultado, apareció otro método, pero ¿es realmente necesario? ¿Y cómo se puede asegurar ahora que no hay errores en ningún otro sitio? ¿Cómo puede estar seguro de que el mensaje será percibido?

 
Sergey Voytsekhovsky:

El código para añadir un elemento al final de la lista es de la biblioteca estándar, tienes razón. Y he intentado "tirar" de él después de no encontrar ese código del artículo. :-))

Si utiliza la biblioteca estándar para almacenar sus datos representados por objetos, entonces los datos no deben ser una estructura, sino un objeto basado en CObject de la biblioteca estándar, y entonces puede utilizar matrices dinámicas de punteros a objetos de la biblioteca estándar para almacenarlos. No hay manera de sacar una pieza.

Документация по MQL5: Стандартная библиотека / Базовый класс CObject
Документация по MQL5: Стандартная библиотека / Базовый класс CObject
  • www.mql5.com
Класс CObject обеспечивает всем своим потомкам возможность быть элементом связанного списка. Кроме того определяется ряд виртуальных методов для дальнейшей реализации в классах-потомках.
 
Alexey Viktorov:

Dime, Artyom, ¿recuerdas el problema del cierre parcial de una posición? ¿Recuerdas que más tarde añadieron otro método en lugar de encontrar la razón de este comportamiento?

No sé cómo afectó la desviación=ULONG_MAX a que todo el método no funcionara, pero lo sustituí por desviación=1000 y todo funcionó bien. Escribí sobre ello en el hilo "Bugs bugs...", pero el tema creció tan rápido que este mensaje cayó en el olvido y no se notó. Como resultado, apareció otro método, pero ¿es realmente necesario? ¿Y cómo se puede asegurar ahora que no hay errores en ningún otro sitio? ¿Cómo puede estar seguro de que el mensaje será percibido?

No, no recuerdo el problema del cierre parcial. Y no sé si la desviación afecta a la operación. Y ni siquiera puedo imaginar cómo una desviación máxima igual a ULONG_MAX puntos (que equivale a ninguna desviación) podría afectar al cierre parcial. Y no he oído hablar del nuevo método. ¿Cuál es el método?

Y para asegurarse de que el mensaje no se pierda, encuéntralo, cópialo en tu bolsillo y vuelve a publicarlo con una nota de que debe haberse perdido en algún lugar de la discusión de que"MQL != C++, y debería ser =="

 
Artyom Trishkin:

No, no recuerdo ningún problema de cierre parcial. Y no sé si la desviación afecta al funcionamiento. Y ni siquiera puedo imaginar cómo una desviación máxima de ULONG_MAX puntos (que equivale a ninguna desviación) podría afectar al cierre parcial. Y no he oído hablar del nuevo método. ¿Qué tipo de método?

Y para que el mensaje no se pierda - encuéntralo, cópialo en un bolsillo y vuelve a publicarlo con una nota que en algún lugar probablemente se perdió en la discusión de que"MQL != C++, y debería ser ==".

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Dividir las posiciones abiertas en grupos

Alexey Viktorov, 2020.04.08 09:13

Dime Artem, ¿recuerdas el problema del cierre parcial de posiciones? ¿Recuerdas que más tarde añadieron otro método en lugar de encontrar la causa de dicho comportamiento?

No sé cómo afectaba la desviación=ULONG_MAX a la inoperatividad de todo el método, pero lo sustituí por desviación=1000 y todo funcionó bien. En el tema "Bugs bugs..." escribió sobre ello, pero el tema creció tan rápido, que este mensaje desapareció en el abismo y no se notó. Como resultado, apareció otro método, pero ¿es realmente necesario? ¿Y cómo se puede asegurar ahora que no hay errores en ningún otro sitio? ¿Cómo puede estar seguro de que el mensaje será percibido?


 
Artyom Trishkin:

No, no recuerdo un problema de cierre parcial. Y no sé si la desviación afecta al funcionamiento. Y ni siquiera puedo imaginar cómo una desviación máxima de ULONG_MAX puntos (que equivale a ninguna desviación) podría afectar al cierre parcial. Y no he oído hablar del nuevo método. ¿Qué método?

Y para que el mensaje no se pierda - encuéntralo, cópialo en un bolsillo, y vuelve a publicarlo con una nota que en algún lugar probablemente se perdió en la discusión de que"MQL != C++, y si debería ser ==".

¿Sugiere entonces que se retrasen los otros mensajes? ¿Que nadie los saque a relucir? Eso no es correcto.

En mi opinión, sería mejor definir una sección separada del foro en la que cada problema fuera un tema independiente. El número de temas es mucho menor que el número de mensajes por tema. Por lo tanto, a pesar del gran número de temas, no serán empujados tan atrás como las preguntas individuales y los informes de errores son empujados ahora.

 
Alexey Viktorov:

Suprimir el forzamiento bruto de las posiciones para determinar "que la posición es realmente nueva". Encuentra otra manera. Por ejemplo en OnTradeTransaction. Y tratar de utilizar la función ArrayRemove en lugar de desbordamiento de la matriz

Si lo he entendido bien, este es el camino correcto. Como un compañero más experimentado, por favor, aconsejar, con el fin de captar las posiciones de los recién nacidos tal filtro funcionará ??? ¿O tal vez hay una opción mejor?

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
 {
     if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
      {
         if(trans.type != TRADE_TRANSACTION_ORDER_DELETE)
            {
             if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN) // открылась позиция
               {
Razón de la queja: