Discusión sobre el artículo "LifeHack para tráders: preparando "comida rápida" a partir de indicadores"

 

Artículo publicado LifeHack para tráders: preparando "comida rápida" a partir de indicadores:

Si usted se ha decidido a dar el salto a MQL5 solo ahora, entonces este artículo le resultará muy útil: por una parte, el acceso a los datos de los indicadores y a las series se ha ejecutado en el estilo MQL4, al que usted ya está acostumbrado, y por otro, toda la implementación se ha escrito en MQL5 con la misma sencillez. Todas las funciones son totalmente comprensibles y se adecuan perfectamente a la depuración paso a paso.

"Comment" lo hemos introducido exclusivamente para la comprobación. Podemos coprobar el funcionamiento en el simulador si iniciamos "MACD MQL4 style EA short.mq5" en el modo visual y colocamos el cursor en la barra con el índice #1:

"MACD MQL4 style EA short.mh5" in tester

Fig. 1 "MACD MQL4 style EA short.mh5" in tester

Autor: Vladimir Karputov

 

Genial...

 

El artículo es un pequeño extracto de otro. No se ha hecho nada para que funcione eficientemente. No hay almacenamiento en caché de indicadores y series temporales. No High[i], Low[i], etc. Sin iCustom.

Era de esperar ver algo completamente diferente. Por otra parte, ¿cuál es el punto de la comida rápida en Asesores Expertos, si ni siquiera está en las fuentes de todos modos?

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selecciona la posición por índice para acceder posteriormente a sus propiedades
         if(m_position.Symbol()==m_symbol.Name())
           {
            //--- se abre una posición larga
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               //--- ¿debería cerrarse?
               if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
                  MacdCurrent>(MACDCloseLevel*m_adjusted_point))
                 {
                  //--- cerrar posición y salir
                  if(!m_trade.PositionClose(m_position.Ticket()))
                     Print("PositionClose error ",m_trade.ResultRetcodeDescription());
                  return;
                 }
               //--- comprobar trailing stop
               if(TrailingStop>0)
                 {
                  if(m_position.PriceCurrent()-m_position.PriceOpen()>m_adjusted_point*TrailingStop)
                    {
                     if(m_position.StopLoss()<m_symbol.Bid()-m_adjusted_point*TrailingStop)
                       {
                        //--- modificar posición y salir
                        if(!m_trade.PositionModify(m_position.Ticket(),
                           m_symbol.NormalizePrice(m_position.PriceCurrent()-m_adjusted_point*TrailingStop),
                           m_position.TakeProfit()))
                           Print("PositionModify error ",m_trade.ResultRetcodeDescription());
                        return;
                       }
                    }
                 }
              }

            if(m_position.PositionType()==POSITION_TYPE_SELL)
              {
               //--- ¿debería cerrarse?
               if(MacdCurrent<0 && MacdCurrent>SignalCurrent && 
                  MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*m_adjusted_point))
                 {
                  //--- cerrar posición y salir
                  if(!m_trade.PositionClose(m_position.Ticket()))
                     Print("PositionClose error ",m_trade.ResultRetcodeDescription());
                  return;
                 }
               //--- comprobar trailing stop
               if(TrailingStop>0)
                 {
                  if((m_position.PriceOpen()-m_position.PriceCurrent())>(m_adjusted_point*TrailingStop))
                    {
                     if((m_position.StopLoss()>(m_symbol.Ask()+m_adjusted_point*TrailingStop)) || (m_position.StopLoss()==0.0))
                       {
                        //--- modificar posición y salir
                        if(!m_trade.PositionModify(m_position.Ticket(),
                           m_symbol.NormalizePrice(m_symbol.Ask()+m_adjusted_point*TrailingStop),
                           m_position.TakeProfit()))
                           Print("PositionModify error ",m_trade.ResultRetcodeDescription());
                        return;
                       }
                    }
                 }
              }
           }
Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • 2010.05.11
  • Sergey Pavlov
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
fxsaber:

El artículo es un pequeño extracto de otro. No se ha hecho nada para que funcione eficientemente. No hay almacenamiento en caché de indicadores y series temporales. No High[i], Low[i], etc. Sin iCustom.

Era de esperar ver algo completamente diferente. Por otra parte, ¿cuál es el punto de comida rápida en Asesores Expertos, si ni siquiera huele en las fuentes de todos modos?


He aquí un ejemplo de un típico MQL4-ca - sin leer o mirar el código, usted va directamente al podio con banderas :) .

 
Vladimir Karputov:

He aquí un ejemplo de un típico MQL4-ca - sin leer, sin mirar el código, directamente al podio con banderas :) .

Antes de comentar, he leído no sólo el texto del artículo, sino también todas las fuentes adjuntas (incluyendo el análisis de IndicatorsMQL4.mqh VS IndicatorsMQL5.mqh).

 
fxsaber:

Antes de comentar, usted ha leído no sólo el texto del artículo, sino también todas las fuentes adjuntas (incluyendo el análisis de IndicatorsMQL4.mqh VS IndicatorsMQL5.mqh).


Usted debe haber mirado a través de (perdido) el archivo MQL5\Include\SimpleCall\Series.mqh.

Sobre el almacenamiento en caché - estas son sus conjeturas personales (expectativas).

Este articulo no pretende engañar a los usuarios de MQL4 con "conecta mi archivo y podras seguir trabajando sin pensar al estilo de MQL4", muestra como transferir el antiguo enfoque en el direccionamiento de indicadores a MQL5.

 
Vladimir Karputov:

Debes haber pasado por alto el archivo MQL5\Include\SimpleCall\Series.mqh.

Léelo detenidamente. ¿Dónde está High[i], etc.?

Sobre el almacenamiento en caché - estas son sus conjeturas personales (expectativas).

Este artículo no pretende engañar a los usuarios de MQL4 con "enchufe mi archivo y puede seguir trabajando sin pensar en el estilo de MQL4", muestra cómo transferir el viejo enfoque en el tratamiento de los indicadores a MQL5.

¿Dónde está iCustom? Usted irreflexivamente casi copiado y pegado una parte de otro artículo y consiguió un fracaso en el rendimiento. De hecho, engañando a los usuarios que este es el coste del estilo MQL4, no tu implementación.

Aquí tienes medidas de rendimiento que demuestran que MQL4-style no es inferior a MQL5 en algunas cuestiones. Podrías hacer lo mismo con los indicadores.

Aquí tienes una de las realizaciones de series temporales. Puedes ver que el autor ha hecho un esfuerzo, enfatizando el rendimiento y alejándose de MQL4-style (puedes refinar la idea si quieres).

Высокопроизводительная библиотека iTimeSeries
Высокопроизводительная библиотека iTimeSeries
  • votos: 25
  • 2017.05.25
  • nicholishen
  • www.mql5.com
Одной из основных проблем с MQL5 до сих пор было удаление встроенных функций для работы с таймсериями. Несмотря на то, что такой подход расширил для программистов возможности разработки, он также замедлил работу из-за обязательного шага по созданию и удалению новых ячеек памяти каждый раз, когда требуется доступ к данным таймсерии.  Рассмотрим...
 
fxsaber:

Léelo con atención. ¿Dónde está High[i], etc.?

¿Dónde está iCustom? Has copiado y pegado casi irreflexivamente una parte de otro artículo y has conseguido un fallo en el rendimiento. De hecho, engañando a los usuarios de que este es el coste del estilo MQL4, no tu implementación.

Aquí tienes medidas de rendimiento que demuestran que MQL4-style no es inferior a MQL5 en algunas cuestiones. Podrías hacer lo mismo con los indicadores.

Aquí tienes una de las realizaciones de series temporales. Puedes ver que el autor ha intentado enfatizar el rendimiento y se ha alejado ligeramente (es más conveniente para él) de MQL4-style (puedes refinar la idea si quieres).


Para acostumbrarse más rápidamente a MQL5, sólo se han dejado las funciones iXXXX de series, ya que tienen parámetros más completos (símbolo, timeframe, shift), que sustituirán fácilmente a las más especializadas High[], etc. El objetivo no es que el usuario siga utilizando MQL4 sin pensar, sino que empiece a reescribir poco a poco su código MQL4.

iCustom ni siquiera estaba en los planes - sólo se consideraron los indicadores estándar.

Sobre el almacenamiento en caché - esto definitivamente no está en el artículo para el público en general.


Añadido: por cierto, los comentarios de los usuarios aclararán si High[] y funciones similares son necesarias o si podemos prescindir de las series iXXXX.

 
Vladimir Karputov:

El objetivo no es que el usuario siga usando MQL4 sin pensar, sino que empiece a reescribir poco a poco su código MQL4.

El estilo MQL4 es puro MQL5. No es peor que SB. No luches con molinos de viento en tu imaginación. Usted no lucha con el StandardLibrary-Style.

iCustom ni siquiera estaba en los planes - sólo se consideraron los indicadores estándar.

Sobre el almacenamiento en caché - definitivamente no está en el artículo para el público en general.

En MT4 vs MT5 temas relativos a los indicadores, los indicadores estándar fueron los menos discutidos. Casi todo el mundo hablaba de los personalizados. Los indicadores estándar fueron escritos hace décadas y son irrevocablemente anticuados. Trabajar en MQL5 avanzado con indicadores antiguos parece extraño.

Caching no debería haber sido explicado en el artículo, pero debería haberse hecho, ya que ha tomado la objetividad de sus conclusiones en relación con MQL4-estilo.

Caída en la velocidad de las pruebas con acceso simultáneo a más de un indicador;

 
Vladimir Karputov:

Añadido: por cierto, los comentarios de los usuarios mostrarán si High[] y funciones similares son necesarias o si se puede prescindir de la serie iXXXX.

Haga una encuesta y vea el resultado sin decir nada en forma de comentarios. Lo mismo se aplica incluso a cosas tan simples como las variables Oferta/Demanda.

 

El artículo debería llamarse "cómo no se puede escribir código tratando de guardar la representación MQL4".

Horror duro con manijas filtradas (¿por qué cerrar la manija del indicador?) y una sobrecarga increíble (tratando de recrear el indicador, cayendo dentro del gestor de indicadores). Y bastante gente lo copiará sin mirar y sin entender.

Además, ineficiente extracción de 1 valor del indicador.

He leído el artículo por completo, mirado a través de los códigos bastante.