Error de redimensionamiento de matrices en la versión beta 530 - página 6

 
ubzen:
***P: (No quiero olvidar esto). Seguro que a la mayoría de nosotros no nos gusta no_saber qué hay en los códigos que usamos. O nos consumimos tratando de entender los códigos de alguien más, de lo contrario probablemente no lo usaríamos. Sin embargo, la mayoría de las funciones nativas ( ejemplo OrderSend() ) en mql4 son objetos desde nuestro punto de vista. No_vemos sus códigos sin embargo lo aceptamos. Creo que esta aceptación de las librerías de otros es algo que un programador profesional que trabaja en grandes proyectos tiene que aceptar y construir. De lo contrario, estás atascado re-creando la rueda.
Sí, cuando lo pones así, todos reinventamos la rueda todo el tiempo en mql4.
 
ubzen:

Creo que estás describiendo un flujo de programa. No creo que esa sea la gran_idea detrás de la POO. (imo) OOP trata de abordar los siguientes problemas. Soy un novato en POO, pero estoy formando mi visión del mundo.

1) ¿Son tus funciones independientes de las variables globales? En otras palabras, ¿son tus funciones objetos independientes? Encapsulación

2) ¿Su función oculta los detalles como local_variable_names? ¿Simplifica el volumen de códigos en la pantalla? Abstracción

3) ¿Tiene la capacidad de crear copias duplicadas de sí mismo para las modificaciones? ¿Como la capacidad de crear sus propios tipos de datos? Herencia.

4) ¿Tiene la capacidad de cambiar sobre la marcha? Ejemplo: ¿Puede la función manejar integer_array así como double_arrays? Polimorfismo.

Las formas en que la POO puede ayudar en la construcción_ea es similar a cómo un ea_builder ayuda a un no_programador a construir un expert_advisor. Usted acaba de tomar su favorito Order_Accounting_Function -> Data_Function -> Función de seguimiento de eventos -> Función de definición de volumen -> Función de definición de criterios de negociación -> Funciones de comercio -> Función de procesamiento de errores. Y boom, tienes un Expert_Advisor. Todas tus funciones de definición de criterios de negociación que has desarrollado a lo largo de los años pueden ser fácilmente intercambiadas.

Yo como ejemplo, si quisieras modificar mi asesor experto, tendrías que estudiar dónde se aplican mis variables globales y qué otra función depende de ella (como en sus matrices de estado o de situación). OOP hace que sea as_simple_as Contabilidad(Opción_3); Display(Opción_1); Caption(Opción_5); TradingSys(Opción_7); VolumeSize(Opción2); OrderType(Opción_2) y eso es todo el experto.

Esto hace que sea más fácil para otra persona a utilizar su conjunto de bibliotecas, y por lo general lo que funciona para otra persona trabaja para usted también en algún momento en el futuro. Si nada más, piensa en objetos stand_alone en una línea de montaje :)

Gracias por describir esto de forma tan concisa ubzen, he buscado esto antes y normalmente se meten en una novela tan larga sobre todo esto, que nunca entendí el punto.
 
SDC: Gracias por describir esto de forma tan concisa ubzen, he buscado esto antes y normalmente se meten en una novela tan larga sobre todo esto, que nunca entendí el punto.
De nada.
 
RaptorUK: Hay una diferencia. . . No tengo otra opción que usar OrderSend() si quiero hacer un pedido. . . Tengo la opción de usar la biblioteca de alguien más o no ... incluso cuando la fuente es respetada todavía trato de entenderla antes de tratar de usarla, así es como algunos errores son encontrados y corregidos: https://www.mql5.com/en/forum/133792/page3 "Y mi corrección para elcomentario deRaptorUK :"
Aquí no hay argumentos. La POO no resuelve el tema de los errores en los códigos ni te obliga a usar la librería de otro.
 
RaptorUK:
He jugado un poco con mql5 y no he necesitado utilizar ningún OOP en el código que he escrito

Las clases y la POO son en gran medida un complemento opcional en MQL5. El marco de la plataforma no los utiliza por sí mismo. Por ejemplo, se podría esperar que la plataforma tenga algo así como una colección de Órdenes que contenga una lista de objetos de Orden, permitiéndole escribir código como el siguiente:

for (int i = 0; i < Orders.length; i++) {
  Order O = Orders.getByIndex(i);
  if (O.symbol == "EURUSD" && O.magicNumber = 12345) {
  }
}

Pero este no es el caso. En cambio, la forma de hacer esto es básicamente idéntica entre MQL4 y MQL5:

for (int i = 0; i < OrdersTotal(); i++) {
  if (OrderGetTicket(i)) {
    if (OrderGetString(ORDER_SYMBOL) == "EURUSD" && OrderGetInteger(ORDER_MAGIC) == 12345) {
    }
  }
}

(También podría esperar que cualquier EA que escriba sea una clase derivada de una clase ExpertAdvisor que tenga cosas como funciones virtuales OnTick y OnInit en su declaración. Pero ese tampoco es el caso. El marco MQL5 sigue siendo fundamentalmente no OOP, pero con la opción de que usted mismo utilice OOP para cualquier tarea en la que sea útil).

Como resultado, se puede seguir utilizando el código MQL4 en MQL5 a través de una serie de funciones de ayuda como string OrderSymbol() {return OrderGetString(ORDER_SYMBOL);}. La única área en la que esto se rompe es el acceso a las series de tiempo, porque eso está organizado de manera muy diferente en MQL5. Una función como iOpenMQL4() en https://www.mql5.com/en/articles/81 funciona, pero es horriblemente lento e ineficiente para el uso repetido.

 

(Si a alguien le sigue interesando, el informe de errores que dio inicio a este hilo sigue siendo válido en la compilación 535. También lo hace https://forum.mql4.com/56885/page20#861740, aunque parece que MetaQuotes ha tenido un intento fallido de arreglarlo).

 
Perdón por la respuesta tardía, pero a veces tengo que dormir y trabajar

Estoy de acuerdo con RaptorUK, la documentación en mql5.com sobre OOP es al menos imperfecta. Pero desgraciadamente no conozco una buena referencia sobre Oop. Todo lo que he leído es demasiado abstracto o demasiado básico, tomando la pera y la manzana como ejemplo de objetos y la fruta como clase.

La programación OOP sólo es útil si tienes un proyecto grande. Un proyecto grande no es necesariamente 1 EA, su proyecto puede ser construir una serie de EA con indicador, etc... Entonces es bueno reutilizar el código, y la POO es principalmente sobre la reutilización del código, le ayuda a construir una estructura que puede ser fácilmente reutilizada en otro programa. Lamentablemente no tengo tiempo ahora para profundizar en eso. Pero está en mis planes escribir algunos artículos sobre eso.

Un ejemplo de un gran proyecto es el MQL5 Wizard creado por Metaquotes. Te permite crear un EA en 5 minutos con algunas entradas del usuario. Se basa en la mql5 Standard Libray que proporciona todos los elementos necesarios para construir un EA. El mismo asistente probablemente se puede hacer de forma procedimental, pero sería mucho más difícil en mi opinión. Y luego hay que mantener este código. Pero esta librería estándar es difícil de entender ya que no está bien documentada y descrita. He creado un tema para centralizar todo lo que existe sobre el tema (mql5 wizard no oop).

 
ubzen:

Creo que estás describiendo un flujo de programa. No creo que esa sea la gran_idea detrás de la POO. (imo) OOP trata de abordar los siguientes problemas. Soy un novato en POO, pero estoy formando mi visión del mundo.

1) ¿Son tus funciones independientes de las variables globales? En otras palabras, ¿son tus funciones objetos independientes? Encapsulación

2) ¿Su función oculta los detalles como local_variable_names? ¿Simplifica el volumen de códigos en la pantalla? Abstracción

3) ¿Tiene la capacidad de crear copias duplicadas de sí mismo para las modificaciones? ¿Como la capacidad de crear sus propios tipos de datos? Herencia.

4) ¿Tiene la capacidad de cambiar sobre la marcha? Ejemplo: ¿Puede la función manejar integer_array así como double_arrays? Polimorfismo.

Las formas en que la POO puede ayudar en la construcción_ea es similar a cómo un ea_builder ayuda a un no_programador a construir un expert_advisor. Usted acaba de tomar su favorito Order_Accounting_Function -> Data_Function -> Función de seguimiento de eventos -> Función de definición de volumen -> Función de definición de criterios de negociación -> Funciones de comercio -> Función de procesamiento de errores. Y boom, tienes un Expert_Advisor. Todas tus funciones de definición de criterios de negociación que has desarrollado a lo largo de los años pueden ser fácilmente intercambiadas.

Yo como ejemplo, si quisiera modificar mi asesor experto, tendría que estudiar dónde se aplican mis variables globales y qué otra función depende de ella (como en sus matrices de estado o de situación). OOP hace que sea as_simple_as Contabilidad(Opción_3); Display(Opción_1); Caption(Opción_5); TradingSys(Opción_7); VolumeSize(Opción2); OrderType(Opción_2) y eso es todo el experto.

Esto hace que sea más fácil para otra persona a utilizar su conjunto de bibliotecas, y por lo general lo que funciona para otra persona trabaja para usted también en algún momento en el futuro. Si nada más, piensa en objetos stand_alone en una línea de montaje :)

Es un buen resumen, excepto por el polimorfismo. Cuando dices "¿Puede la función manejar integer_array así como double_arrays?" no se trata de polimorfismo, es sobrecarga de funciones. También puedes tener sobrecarga de operadores en mql5 (mal traducido a sobrecarga de operaciones). La POO y el polimorfismo es más que eso. No tengo tiempo para elaborar (especialmente en inglés), así que te sugiero que leas la introducción al polimorfismo en mql5.
 
cyclops993:

Las clases y la POO son en gran medida un complemento opcional en MQL5. El marco de la plataforma no los utiliza por sí mismo. Por ejemplo, se podría esperar que la plataforma tenga algo así como una colección de Órdenes que contenga una lista de objetos de Orden, permitiéndole escribir código como el siguiente:

Pero este no es el caso. En cambio, la forma de hacer esto es básicamente idéntica entre MQL4 y MQL5:

(También podría esperar que cualquier EA que escriba sea una clase derivada de una clase ExpertAdvisor que tenga cosas como funciones virtuales OnTick y OnInit en su declaración. Pero ese tampoco es el caso. El marco MQL5 sigue siendo fundamentalmente no OOP, pero con la opción de que usted mismo utilice OOP para cualquier tarea en la que sea útil).

Como resultado, se puede seguir utilizando el código MQL4 en MQL5 a través de una serie de funciones de ayuda como string OrderSymbol() {return OrderGetString(ORDER_SYMBOL);}. La única área en la que esto se rompe es el acceso a las series de tiempo, porque eso está organizado de manera muy diferente en MQL5. Una función como iOpenMQL4() en https://www.mql5.com/en/articles/81 funciona, pero es horriblemente lento e ineficiente para el uso repetido.

Estoy de acuerdo. Yo añadiría que mql5 proporciona más funciones de "bajo" nivel que mql4. Por ejemplo, mucha gente se queja de que iBarShift() no existe en mql5. Pero mql5 proporciona funciones más detalladas, así que puedes construir tu propio iBarShift() y proporciona también oop para que puedas reutilizarlo fácilmente en cualquier proyecto (por supuesto oop no es obligatorio para reutilizarlo). No estoy seguro de si mi explicación es clara, ya que mi inglés es todavía algo rudimentario.
 
Ovo:

La POO es bastante común actualmente y atraerá a más codificadores reales al MQL. Pero el editor tipo bloc de notas repelerá a la mayoría de ellos, estoy seguro.

¿Has probado el metaeditor de mql5 (o el nuevo editor de mql4 que es el mismo)? Hay un montón de mejoras.
Razón de la queja: