Discusión sobre el artículo "Introducción a MQL5: Cómo escribir un Expert Advisor y un Indicador Personalizado"

 

Artículo publicado Introducción a MQL5: Cómo escribir un Expert Advisor y un Indicador Personalizado:

MetaQuotes Programming Language 5 (MQL5), incluido en el terminal del cliente de MetaTrader 5, tiene muchas nuevas posibilidades y un mayor rendimiento, en comparación con MQL4. Este artículo le ayudará a familiarizarse con este nuevo lenguaje de programación. En este artículo se encuentran los sencillos ejemplos de cómo escribir un Expert Advisor y un Indicador Personalizado. También tendremos en cuenta algunos detalles del lenguaje MQL5, que son necesarios para entender estos ejemplos.

Autor: Denis Zyatkevich

 
No puedo iniciar el depurador para un indicador, por ejemplo MACD o Media Móvil Personalizada. Al pulsar la tecla F5, el botón "Compilar" cambia al botón "Cancelar", después de una fracción de segundo la pantalla parpadea y todo vuelve al estado inicial. La pestaña "Depurar" no aparece. En caso de depurar el script "AccountInfo" el depurador funciona normalmente, Build 257.
 
La depuración de indicadores no está implementada por el momento.
 

¡Feliz Día de la Victoria!

¿Podría aconsejarme?

El Asesor Experto contiene un ciclo de búsqueda alterna de todas las posiciones abiertas. En el ciclo se utiliza la función PositionGetDouble(POSITION_SL). De la descripción del parámetro POSITION_SL se deduce que se puede utilizar para obtener elnivel de Stop Loss de una posición abierta.

Pregunta 1: ¿qué valor mostrará la función PositionGetDouble(POSITION_SL) si una posición abierta se formó como resultado de la activación de varias órdenes pendientes con diferentes niveles de Stop Loss?

Pregunta 2: si una posición abierta se formó como resultado de la activación de varias órdenes pendientes con diferentes niveles de Stop Loss, ¿cuál es la mejor manera de obtener datos sobre estos niveles de Stop Loss?

Si este tema ha sido discutido anteriormente, por favor proporcione un enlace.

Документация по MQL5: Торговые функции / PositionGetDouble
Документация по MQL5: Торговые функции / PositionGetDouble
  • www.mql5.com
Торговые функции / PositionGetDouble - Документация по MQL5
 
Yedelkin:

¡Feliz Día de la Victoria!

Pregunta 1: ¿qué valor mostrará la función PositionGetDouble(POSITION_SL) si se formó una posición abierta como resultado de la activación de varias órdenes pendientes con diferentes niveles de stop-loss?
¿ha comprobado lo que devuelve la función?
 
sergeev:
¿Has comprobado lo que devuelve la función?

No, no lo he hecho. Porque no conozco todas las condiciones iniciales importantes que deben observarse al comprobar (probar) una función determinada. Y también por mi actitud negativa ante la posibilidad de utilizar el método científico del poke al aprender un lenguaje de programación nuevo para mí.

Explicación. El escasísimo número de artículos dedicados a los Asesores Expertos y la ausencia de un libro de texto sobre MQL5 obliga al usuario medio a confiar en los materiales disponibles en la web, incluido este (y muy útil) artículo, a la hora de implementar su propia estrategia de trading.

Como comprenderás muy bien, mis preguntas se refieren a aspectos teóricos y aplicados que no están reflejados en la versión actual de la Guía de Referencia MQL5, así como en los artículos disponibles sobre Asesores Expertos MQL5.

En tales circunstancias, creo que es mucho más razonable hacer preguntas a personas entendidas (desarrolladores del lenguaje y autores de artículos) sobre determinados aspectos teórico-aplicados de las funciones MQL5, en lugar de realizar experimentos, "comprobar lo que devuelve una función" en determinadas condiciones, y similares amateurismos.

Estoy de acuerdo en que una respuesta de gente con conocimientos sobre "lo que debería ser" parece más óptima que una contra-pregunta del tipo "¿has comprobado lo que devuelve la función?" (a falta de mi comprensión de las peculiaridades de su funcionamiento).

 

Encontré la respuesta. En la Guía del Usuario del Terminal Cliente:

...Уровни Тейк Профит и Стоп Лосс устанавливаются для позиции по последнему ордеру (рыночному или сработавшему отложенному).
Иными словами, стоп уровни в каждом последующем ордере по одной позиции заменяют предыдущие. 
...Срабатывание ордеров Тейк профит и Стоп Лосс приводит к полному закрытию позиции.  

Extraño. Dado que sólo es posible una posición abierta por cada instrumento financiero, resulta que en principio no se pueden implementar escenarios con cierre parcial de una posición por stop-loss?

P.D. Después de descubrir esta peculiaridad inherente a MT5, no es necesario comprobar el valor devuelto por la función PositionGetDouble(POSITION_SL) si se ha formado una posición abierta como resultado de la activación de varias órdenes pendientes con diferentes niveles de stop-loss.

 
Yedelkin:

Encontré la respuesta. En el Manual de Usuario del terminal cliente:

Extraño. Dado que sólo es posible una posición abierta por cada instrumento financiero, resulta que en principio no se pueden implementar escenarios con cierre parcial de una posición por stop loss?

P.D. Una vez descubierta esta peculiaridad inherente a MT5, no es necesario comprobar qué valor devuelve la función PositionGetDouble(POSITION_SL), si se ha formado una posición abierta como resultado de la activación de varias órdenes pendientes con distintos niveles de stop-loss.

es posible hacer en forma de la función "izpodvypodvert vypert vypert podvypert" que dividirá el take profit según el volumen de transacciones en el instrumento dado en órdenes pendientes por niveles.

pero personalmente considero esta función innecesaria ya que estoy familiarizado con los terminales de comercio oficiales donde no hay bloqueo.

 
CoreWinTT:

se puede hacer como una función "from-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub" ...

Sí, ya me he rascado la cabeza con este tema. Hay tres opciones :)

- o bien rehacer creativamente los escenarios existentes para las peculiaridades de MT5;

- o crear una clase de sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub funciones;

- o evitar el uso de stop-losses y take-profits en las órdenes, operando inicialmente en su lugar con paquetes de órdenes de sentido contrario.

No importa, ¡lo superaremos! :)

 

Pregunta sobre la colocación de las funciones ArraySetAsSeries en el Asesor Experto.

Las funciones ArraySetAsSeries se colocan en la función OnTick() justo después de las funciones CopyTime, CopyHigh y CopyLow.

¿Existe algún obstáculo para colocar las funciones ArraySetAsSeries en la función OnInit(), o las matrices siempre deben ser indexadas sólo después de ser copiadas?

Документация по MQL5: Операции с массивами / ArraySetAsSeries
Документация по MQL5: Операции с массивами / ArraySetAsSeries
  • www.mql5.com
Операции с массивами / ArraySetAsSeries - Документация по MQL5
 
Yedelkin:

Pregunta sobre la colocación de funciones ArraySetAsSeries en el EA.

Las funciones ArraySetAsSeries se colocan en la función OnTick() justo después de las funciones CopyTime, CopyHigh y CopyLow.

¿Existe algún obstáculo para colocar las funciones ArraySetAsSeries en la función OnInit(), o deberían indexarse siempre las matrices sólo después de copiarlas?

Para los buffers indicadores, dice SetIndexBuffer:

Nota

Después de enlazar, el array dinámico buffer[] será indexado como en arrays regulares, incluso si el array que está siendo enlazado está preestablecido para ser indexado como en timeseries. Si es necesario cambiar el orden de acceso a los elementos del array del indicador, es necesario aplicar la función ArraySetAsSeries( ) después de vincular el array con la función SetIndexBuffer().

Debería ser similar para los Asesores Expertos, compruebe