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

 
Maxim Kuznetsov:

Pero no clasifiques los datos al azar, sin un objetivo global.

Del proyecto actual: tomamos un array (corto), la salida es un índice de elementos en el orden correcto:

void BubleSortIndex5(double &data[5],int &index[5])
{
   for(int i=0;i<5;i++)
      index[i]=i;
   for(int i=0;i<4;i++) {
      for(int j=1;j<5;j++) {
         if (data[index[i]]>data[index[j]]) {
            int tmp=index[i];
            index[i]=index[j];
            index[j]=tmp;
         }
      }
   }
}


para arrays más grandes necesitamos cambiar el algoritmo de ordenación (el burbujeo no funciona para arrays más grandes) - cámbialo.

El mensaje principal es: no tocar los datos de origen. Operar con referencias o, mejor aún, con índices de matrices. De lo contrario, se perderá la información, que será muy necesaria más adelante.

Muchas gracias .

" .....Opera con enlaces o, mejor aún, con índices de matrices. De lo contrario, se pierde información, que será necesaria más adelante...."

Es la primera vez que oigo hablar de las operaciones de referencia. Te agradecería que me dijeras donde puedo leer sobre ello, para entender la diferencia entre operar con referencias y operar con datos de origen no recuerdo tal tema en el libro de texto de Kovalev.

 

Colegas, por favor, avisen por qué el sonido deja de sonar cuando el volumen de la vela es el deseado.

El archivo de sonido está en la carpeta SOUNDS, cuando pongo la alerta el archivo se reproduce normalmente, pero no hay sonido en el indicador.

¿O necesita una carpeta especial con sonidos para los indicadores?


¡/---- El bucle principal de cálculo del indicador

for(bar=limit; bar>=0 && !IsStopped(); bar--)
{
Range=(high[bar]-low[bar])/_Point;
IndBuffer[bar]=Rango;

if(Rango<5)
{
if (prev_calculated > 0 && Flag==0)
{
Flag=1;
}
}
if(Range>=Threshold){
clr=0;
if (prev_calculated > 0 && Flag==1 )
{
Flag=0;

PlaySound("zummer");


}
}

Archivos adjuntos:
 
ANDREY:

Muchas gracias por su rápida respuesta. En mi caso, cada valor de un elemento del array es único y existe en una única instancia. Es decir, el valor 5, al igual que otros valores, no se repite.

En mi caso el valor 5 puede no existir en un array no ordenado. Esto significa que algunas celdas de la matriz sin clasificar pueden estar vacías.
Pero si el valor 5 no está en la matriz sin clasificar, entonces no puedo especificar el valor 5 como segundo parámetro en la función ArrayBsearch(). Sólo los valores que existen necesariamente en la matriz sin clasificar entran en esta función.
Gracias por su ayuda.

¿Por qué necesitasArrayBsearch() si no pretendes ordenar arrays? Para encontrar un número, todo lo que necesitas es una simple comparación alternativa del número que buscas con los números de las celdas de la matriz. Si el número que buscas no está ahí, simplemente devuelve un número falso.

//+------------------------------------------------------------------+
//|                                                  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 value = 5;
input int index = 0;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int vIndex = -1;

bool searshValue(double & array2D[2][], const int _len, const int _index, const double _value) {
  int i;
  for(i = 0; i < _len; i++) {
    if(NormalizeDouble(array2D[_index][i], _Digits) == NormalizeDouble(_value, _Digits)) {
      vIndex = i;
      return true;
    }
  }
  return false;
}

//+------------------------------------------------------------------+
//| 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}
  };
  
  if(searshValue(array, size2, index, value)) 
    Print("value1 array["+(string)index+"]["+(string)vIndex+"]: ", array[index][vIndex]);
  else
    Print("Value: "+(string)value+" not found!");
}
//+------------------------------------------------------------------+
 
Mihail Matkovskij:

Entonces, ¿por qué necesitasArrayBsearch() si no quieres ordenar arrays en absoluto? Para encontrar un número, sólo tienes que comparar el número que buscas con los números de las celdas de la matriz, uno por uno. Si el número que buscas no está ahí, simplemente devuelve un número falso.

Muchas gracias. Gracias a vosotros he aprendido información útil y he mejorado mis conocimientos sobre MQL4

 
ANDREY:

Muchas gracias. Gracias a vosotros he aprendido información valiosa y he ampliado mis horizontes y conocimientos sobre MQL4.

Me alegro de haber podido ayudar.

 
Mihail Matkovskij:

Entonces, ¿por qué necesitasArrayBsearch() si no quieres ordenar arrays en absoluto? Para encontrar un número, todo lo que necesitas es una simple comparación alternativa del número que buscas con los números de las celdas de la matriz. Si el número que buscas no está ahí, simplemente devuelve un número falso.

¿Entiendo correctamente que la función

searshValue ()

¿No desde MQL4 o incluso desde MQL5?

 
Mihail Matkovskij:

Me alegro de ser de ayuda.

Me gustaría que hubiera más gente como tú...... que estuviera encantada de ayudar

 
ANDREY:

¿Entiendo correctamente que la función

¿No es de MQL4 o incluso de MQL5?

Observe atentamente el ejemplohttps://www.mql5.com/ru/forum/160683/page1208#comment_17279150 . ¿No has encontrado nada allí?

Esta función:

bool searshValue(double & array2D[2][], const int _len, const int _index, const double _value) {
  int i;
  for(i = 0; i < _len; i++) {
    if(NormalizeDouble(array2D[_index][i], _Digits) == NormalizeDouble(_value, _Digits)) {
      vIndex = i;
      return true;
    }
  }
  return false;
}
Deberías tener un poco más de cuidado.
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.07.09
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 

Hola, necesito ayuda, tengo una cuenta abierta en esta plataforma a través de una sociedad de valores que no quiere retirar mis fondos, ¿qué debo hacer?

 
Ботагоз Битабарова:

Hola! Necesito ayuda, en esta plataforma me abrieron una cuenta, a través de una empresa de corretaje que no quiere retirar mis fondos, ¿qué hacer?

Este recurso no tiene nada que ver con las empresas de corretaje.

Razón de la queja: