[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 367

 
LOA:


Tres máximos para el período, no el más reciente. O mejor dicho, no necesariamente el último.

Mira: tienes un array con valores. Tienes que encontrar tres máximos en esta matriz. No tienen que ser los últimos o los primeros en la matriz de series de tiempo. Sólo tienes que encontrar los tres máximos.

1. Copiemos su array en uno temporal (los buscaremos en el array temporal):

int ArrayCopy( object &dest [], object source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY)

Copia un array en otro. Las matrices deben ser del mismo tipo. Las matrices de tipo double[], int[], datetime[], color[] y bool[], pueden copiarse como matrices del mismo tipo.
Devuelve el número de elementos copiados.
Parámetros:
dest[] - Array-receptor.
fuente[] - Conjunto de fuentes.
inicio_dest - Índice inicial del array de destino. Por defecto, el índice de inicio es 0.
fuente_de_inicio - Índice de inicio de la matriz de origen. El índice de inicio por defecto es 0.
contar - Número de elementos a copiar. Por defecto, el array completo(WHOLE_ARRAY).


2. buscar el valor máximo en la matriz temporal:

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Busca el elemento con el valor máximo. La función devuelve la posición del elemento máximo en la matriz.
Parámetros:
array[] - Matriz numérica en la que buscar.
contar - Número de elementos a buscar.
iniciar - Inicio - Iniciar el índice para la búsqueda.


3. Guardar el índice encontrado en una matriz (por ejemplo, MassIndexMaxValue[])

4. Poner a cero el valor del máximo encontrado en la matriz de tiempo - simplemente escribir cero allí

5. Vuelve a buscar el siguiente valor máximo en el array temporal (el índice del primero que hemos encontrado ya está almacenado en MassIndexMaxValue[] y el valor de este máximo se pone a cero)

Este bucle continúa hasta que encontremos el número necesario de valores máximos en la matriz temporal.

MassIndexMaxValue[] contendrá ahora los índices del número requerido de valores máximos en su matriz.
Pongamos a cero el tamaño de la matriz temporal, no hay razón para saturar la memoria

Así es como va...

ZS... Acabo de hacer un boceto rápido en el acto... Puede que me haya equivocado, estaba despierto cuando escribía y no comprobé nada, pero la función tiene algo parecido a este contenido:

void FindMaxValue(double &ms[], int &ind[], int NumMaxValue) {   
   int i, IndMax;
   double tmp[];                       // создаём временный массив
   ArrayResize(ind,NumMaxValue);       // изменяем размер массива индексов максимальных значений под количество макс. значений
   ArrayResize(tmp,ArraySize(ms));     // размер временного массива = размеру вашего массива значений
   ArrayCopy(tmp, ms);                 // копируем ваш массив во временный
   for (i=0; i<NumMaxValue; i++) {     // цикл по количеству искомых максимумов
      IndMax=ArrayMaximum(tmp);        // ищем индекс максимального значения
      ind[i]=IndMax;                   // сохраняем индекс i-го максимального значения
      tmp[IndMax]=0;                   // обнуляем i-е найденное максимальное значение во временном массиве
      }
   ArrayResize(tmp,0);                 // обнуляем размер временного массива
   return;   
}

Cuando se llama:

FindMaxValue(Ваш_Массив_Значений, MassIndexMaxValue, 3);

... El array int MassIndexMaxValue[] previamente definido debe contener los índices de los tres valores máximos encontrados en su_Array_Value[];

 

No consigo averiguar cómo se calcula el porcentaje de beneficios por operación y el porcentaje de pérdidas por operación. ¿Puede decírmelo?

http://www.assessor.ru/forum/index.php?t=822

 
artmedia70:

Mira: tienes un array con valores. Tienes que encontrar tres máximos en esta matriz. No tienen que ser los últimos o los primeros en la matriz de series de tiempo. Sólo tienes que encontrar los tres máximos.


Artem, ¡muchas gracias!

Me alegro de que mi idea con la puesta a cero del valor máximo del array fuera correcta, y has descrito todo con detalle, con la copia en otro array, ahora me ocuparé de las minucias

Y siguiendo el consejo de Vladimir voy a empezar con el algoritmo del programa, voy a procesar su información y estoy seguro de que todo va a funcionar - buenos maestros.

GRACIAS ESPECIALMENTE POR EL ARTÍCULO https://www.mql5.com/ru/articles/1357

 

¡Buenas tardes!

¿Puede decirme cómo obtener señales de un indicador personalizado en un Asesor Experto?

He utilizado iCustom, pero los búhos siguen sin recibir la señal

double Signal_I=iCustom(NULL,0,"FL",0,0);
 
skyjet:

¡Buenas tardes!

¿Puede decirme cómo obtener señales de un indicador personalizado en un Asesor Experto?

He utilizado iCustom, pero los búhos siguen sin recibir la señal


Quizás el código del indicador iCustom no se preste a ello... muy poca información en su pregunta para una respuesta.
 
skyjet:

¡Buenas tardes!

¿Puede decirme cómo obtener señales de un indicador personalizado en un Asesor Experto?

He utilizado iCustom, pero los búhos siguen sin recibir la señal


¿Ocurre lo mismo con otros indicadores? En caso afirmativo, utiliza incorrectamente la función iCustom(). Si no es así, intente comprobar el código del indicador - puede ser que su indicador no utilice ningún búfer de indicador - funciona con la construcción de objetos gráficos.
 

Hola, hay una función:

bool Trade()
{
  if(!IsConnected())
  {
     Print("Связь отсутствует.");
     return(false);
  }

  if(!IsExpertEnabled())
  {
     Print("Торговля экспертами выключена.");
     return(false);
  }
  
  if(DayOfWeek()==0 || DayOfWeek()==6)
  {
     Print("В выходные не торгуем.");
     return(false);
  }
  
  if(!IsTradeAllowed())
  {
     Print("Торговля запрещена? WTF???.");
     return(false);
  }
  return(true);
}

Pero por alguna razón no funciona. Se llama en el EA justo al principio después de int start() como sigue:

  if(!Trade())
  {
    Sleep(5000);
    return;
  }

El Asesor Experto se carga con éxito en las pestañas Registro y Expertos, y no aparece nada más. Aunque debería decir: "No comerciamos los fines de semana", porque el 26.11.2011 es sábado.

¿Dónde está el error y qué estoy haciendo mal?

 
Roman.:

Quizás el código del indicador iCustom no se preste a... Hay muy poca información en su pregunta para responder.
El indicador dibuja líneas de soporte y resistencia, lo que hace durante la visualización. El propio indicador da una señal LT_1 == 1 o -1 cuando se cruza.
if((Close[i] > BuyLevel) 
         {
    
          LT_1=1;
               
         }                                 
       if((Close[i] < CloseLevel)
         {
           
           LT_1=-1;
               
         }
 
ivan2k2:

Hola, hay una función:

Pero por alguna razón no funciona. Se llama en el EA justo al principio después de int start() como sigue:

El Asesor Experto se carga con éxito en las pestañas Registro y Expertos, y no aparece nada más. Aunque debería decir: "No comerciamos los fines de semana", porque el 26.11.2011 es sábado.

¿Dónde está el error y qué estoy haciendo mal?


Hoy es sábado, día libre. Se inicia el Asesor Experto, se produce la inicialización, pero como es de día y no hay tick, no se inicia la función de inicio (es decir, no se llama a Trade(). Para comprobar si funciona correctamente, es necesario pegar la llamada de esta función en el bloque de inicialización, o probarla en el probador.
 
skyjet:
El indicador traza líneas de soporte y resistencia, lo que hace durante la visualización. El propio indicador da una señal LT_1 == 1 o -1 cuando se cruza.

Entonces no se moleste en absoluto - simplemente mueva el código del indicador al Asesor Experto como es para cumplir con los criterios de negociación y eso es todo - a continuación, en el tablero, de acuerdo con estas condiciones de negociación transferidas con este indicador, usted abre posiciones a través del Asesor Experto y eso es todo ...