Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1204

 
Mihail Matkovskij:

Pero habrá que hacer muchos ajustes antes de que este código pueda utilizarse en el comercio real...

Sí, lo entiendo. Es poco probable que se llegue a un comercio totalmente automático. Tiene que probar a fondo sus ideas de negociación durante un largo periodo de tiempo con un gran número de operaciones.

Sin el probador es imposible comprobar una idea cualitativamente, lo cual es lamentable. La optimización de los parámetros de la estrategia también es desafortunada. El probador hace que el proceso sea muy fácil.

 
Alexey Viktorov:

Nunca pensé que tendría que citarte en la documentación...

... .. .la hora de cierre de la orden es 0...

Gracias, yo tampoco lo creía. No lo he hecho a menudo, pero he tenido que probar un billete y nunca he tenido problemas, aparentemente porque he pasado por los del mercado.

 
Igor Makanu:
Alexey Viktorov:

Gracias.

 

Hola. Tratando de encontrar errores de cálculo en el indicador. Emite un valor de Close[0] (utilizado a continuación) a través de una alerta. Da salida a un número con 4 decimales, el corredor tiene cinco dígitos.

Alert(Close[0]);

¿Qué estoy haciendo mal? Gracias.

 
Oleg Bondarev:

Hola. Tratando de encontrar errores de cálculo en el indicador. Emite un valor de Close[0] (utilizado a continuación) a través de una alerta. Da salida a un número con 4 decimales, el corredor tiene cinco dígitos.

¿Qué estoy haciendo mal? Gracias.

¿Y de dónde has sacado Close[0]? Sería interesante echar un vistazo al código fuente, ya que no está en un foro de videntes... :)

 

Hola, ayúdame a encontrar una salida - ¡problema!

#define           Pmax 1200   //размер массива по периоду
double           ExtBuffer[];

//+------------------------------------------------------------------+
//| Структура для хранения данных Фибо                               |
//+------------------------------------------------------------------+
struct PosFib
  {
   double            period[Pmax]; 
  };

int OnCalculate(const int rates_total,....)
{
   PosFib BP[Pmax];
   
   for(int p=2; p<Pmax; p++) // отбор по периодам
      for(int b=prev_calculated>Pmax?prev_calculated:Pmax; b<rates_total; b++)
        {
         BP[b].period[p]=sm.d[p-1].m[b];
        }

   return(rates_total);
}

Al compilar, da una advertencia - el tamaño de las variables locales es demasiado grande (más de 512kb)

¿Qué importancia tiene esta advertencia?


 
Top2n:

Hola, ayúdame a encontrar una salida - ¡problema!

Al compilar, da una advertencia - el tamaño de las variables locales es demasiado grande (más de 512kb)

Por favor, aconséjeme cómo evitar esta situación.

int OnCalculate(const int rates_total,....)
{
   PosFib BP[];
   ArrayResize(BP, Pmax);
....

SZY: es conveniente utilizar los buffers de los indicadores para los cálculos (INDICATOR_CALCULATIONS), si tiene problemas, utilícelos en su lugar

 
Igor Makanu:

Gracias

 

¡Buenos días a todos!

Pregunta en MQL-4.
Existe la función ArrayBsearch( S_L,Ask,WHOLE_ARRAY,0,MODE_ASCEND);. Busca un elemento de un array preordenado. Si la matriz es bidimensional, esta función sólo busca un elemento en la primera dimensión.

P. ¿Qué función o construcción del lenguaje se puede utilizar para encontrar el elemento requerido en la segunda dimensión de la matriz? Tengo un array bidimensional con dos filas

10,9,8,7,6,5,4,3,2,1

10,3,8,9,2,1,1,8,8,6
¿Cómo puedo encontrar el elemento del array con el valor que quiero en la línea inferior, no en la superior? Porque ArrayBsearch( ) sólo busca en la fila superior.
Gracias por su ayuda.

 
ANDREY:

¡Buenos días a todos!

Pregunta en MQL-4.
Existe la función ArrayBsearch( S_L,Ask,WHOLE_ARRAY,0,MODE_ASCEND);. Busca un elemento de un array preordenado. Si la matriz es bidimensional, esta función sólo busca un elemento en la primera dimensión.

P. ¿Qué función o construcción del lenguaje se puede utilizar para encontrar el elemento requerido en la segunda dimensión del array? Tengo un array bidimensional con dos filas

10,9,8,7,6,5,4,3,2,1

10,3,8,9,2,1,1,8,8,6
¿Cómo puedo encontrar el elemento del array con el valor que quiero en la línea inferior, no en la superior? Porque ArrayBsearch( ) sólo busca en la fila superior.
Gracias por la ayuda.

En MQL4, sólo tengo esta manera:

//+------------------------------------------------------------------+
//|                                                  FindInArray.mq4 |
//|                                       Copyright 2020, © Cyberdev |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev"
#property version   "1.00"
#property strict

#property script_show_inputs

#define  size1 2 
#define  size2 10

input double value1 = 3;
input double value2 = 8;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {
  double array[size1][size2] = {
    {10,9,8,7,6,5,4,3,2,1}, 
    {10,3,8,9,2,1,1,8,8,6}
  };
  
  double bufer[size2];
  
  int i;
  
  int index;
  
  string str;
  
  i = 0;
  for(; i < size2; i++) {
    bufer[i] = array[0, i];
  }
  
  ArraySort(bufer, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  index = ArrayBsearch(bufer, value1, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  str = "";
  
  i = 0;
  for(; i < size2; i++) {
    array[0, i] = bufer[i];
    str += (string)array[0, i] + ((i != size2 - 1) ? ", " : "");
  }
  
  Print("array[0]: {" + str + "}");
  
  Print("value1 array[0]["+(string)index+"]: ", array[0][index]);
  
  
  i = 0;
  for(; i < size2; i++) {
    bufer[i] = array[1, i];
  }
  
  ArraySort(bufer, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  index = ArrayBsearch(bufer, value2, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  str = "";
  
  i = 0;
  for(; i < size2; i++) {
    array[1, i] = bufer[i];
    str += (string)array[1, i] + ((i != size2 - 1) ? ", " : "");
  }
  
  Print("array[1]: {" + str + "}");
  
  Print("value2 array[1]["+(string)index+"]: ", array[1][index]);
}
//+------------------------------------------------------------------+

Resultado:

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: value2 array[1][6]: 8.0

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: array[1]: {1, 1, 2, 3, 6, 8, 8, 8, 9, 10}

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: value1 array[0][2]: 3.0

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: array[0]: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}


Archivos adjuntos: