Discusión sobre el artículo "Traslado de MQL4 a MQL5" - página 3

[Eliminado]  

Propongo migrar doble MarketInfo(cadena símbolo, int tipo) como un conjunto de funciones que devuelven diferentes tipos de datos, de acuerdo con la especificación de los parámetros de entrada.


Por ejemplo, estas funciones

int MarketInfoInt( cadena símbolo, int tipo);

string MarketInfoStr(string símbolo, int tipo)....

Una vez me comuniqué con los desarrolladores sobre REFERENCIAS y resultados de funciones, pero se negaron a hacerlo (y es una pena).


PS

Sobre esta base, creo que la mejor solución para este momento será la biblioteca MarketInfo, que contendrá todas las funciones necesarias.

Por cierto, esto es exactamente lo que he hecho en mi propia biblioteca :)

 
Interesting:

En mi opinión, se necesitan dos características para gestionar la TF en un entorno de migración:

1. Convierte el número de segundos a TF - digamos ENUM_TIMEFRAMES SecondToPeriod (int Value);

2. Convierte el periodo en segundos - digamos int PeriodToSecond(ENUM_TIMEFRAMES Value).


Lo cual hice con éxito en mi módulo de migración al principio (también hay una opción DLL).


PS

Para maximizar el cumplimiento con MQL4, yo personalmente se deshizo de todos los no-estándar para ello períodos



la función es buena y útil, pero la ejecución....

Yo lo haría de esta manera

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void FixTF(int &tf)
  {
   switch(tf)
     {
      case 0: tf = 0;break;
      case 1: tf = PERIOD_M1;break;
      case 5: tf = PERIOD_M5;break;
      case 15: tf = PERIOD_M15;break;
      case 30: tf = PERIOD_M30;break;
      case 60: tf = PERIOD_H1;break;
      case 240: tf= PERIOD_H4;break;
      case 1440: tf=PERIOD_D1;break;
      case 10080: tf = PERIOD_W1;break;
      case 43200: tf = PERIOD_MN1;break;
      default: tf=0;break;
     }
  }
//+------------------------------------------------------------------+



en todas las funciones sólo tiene que definir el tamaño de las matrices

al igual que az buki vedi.

 
CoreWinTT:

la función es buena y útil, pero la ejecución..... es una herejía.

¿su trabajo?

DONDE BREAK!!!!!! pena programadores!!!!


¿Cómo es return peor que break?
 
Le pido disculpas.
 
CoreWinTT:

en toda la función sólo tiene que definir el tamaño de las matrices
simplemente como az'buki vedi.

No siempre, ver sección Acceso a series temporales e indicadores:

Funciones para trabajar con series de tiempo e indicadores. Una serie temporal difiere de un array normal en que la indexación de los elementos de la serie temporal se realiza desde el final del array hasta el principio (desde los datos más recientes hasta los más antiguos). Se recomienda utilizar únicamente arrays dinámicos para copiar los valores de las series temporales y los indicadores, ya que las funciones de copia asignan el tamaño necesario de los arrays-receptores de valores de forma independiente.

Hay una excepción importante aesta regla : si la copia de los valores de las series temporales y de los indicadores debe hacerse con frecuencia, por ejemplo, en cada llamada de OnTick() en los Asesores Expertos o en cada llamada de OnCalculate() en los indicadores, entonces en este caso es mejor utilizar matrices distribuidas estáticamente, porque las operaciones de asignación de memoria para matrices dinámicas requieren tiempo adicional y esto afectará a las pruebas y optimización de los Asesores Expertos.

 

Según mi práctica es mejor hacerlo que no hacerlo.

De lo contrario aparece un error de acceso a datos

especialmente con arrays globales.


En primer lugar, porque en una matriz con un tamaño designado indexación es estática y no hay estos momentos peligrosos de matrices de invertidos.

en segundo lugar, el espacio para arrays se asigna con más moderación

y en tercer lugar, la probabilidad de un error de acceso al array se reduce muchas veces.

Por eso creo que estas funciones necesitan simplemente una función para determinar el tamaño del array.

 
CoreWinTT:

la función es buena y útil, pero aquí está la ejecución....

Yo lo haría de esta manera

El artículo ha sido modificado:

  • restaurada la función TFMigrate() a su forma original
  • cambiado las funciones en la sección 18
 
Añadida la función iMAOnArray(...) al Manual de Referencia
 
Corregida la función iMAOnArray. En el modo MODE_SMA el tiempo de cálculo se reduce significativamente.
[Eliminado]  

Empecé a dudar mucho de la funcionalidad de este diseño. Por mucho que intentaba entender la lógica del bloque, no podía (y lo intenté con todas mis fuerzas)....

int iBarShiftMQL4(string symbol,
                  int tf,
                  datetime time,
                  bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
      return(ArraySize(Arr)-1);
   else return(-1);
  }