Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 638

 

Mi pregunta es para un novato:

Recientemente descubrí que el MetaEditor no se abre en la terminal, y el comando "cambiar" no funciona en los EAs e indicadores ............. Por favor, ayúdenme con esto. Por favor, ayúdenme a averiguarlo.

 
gnawingmarket:

Mi pregunta es para un novato:

Recientemente descubrí que el MetaEditor no se abre en la terminal, y el comando "cambiar" no funciona en los Asesores Expertos e indicadores ............. Por favor, ayúdenme con esto. Gracias.


Intentaré responder a eso.

Ya no hay posibilidad de corregir los códigos antiguos.

 
Pero tienes un príncipe coronado.
 
tara:
Al menos tienes un príncipe al que coronar.


¡Lo sabes todo! Hoy no he podido pillar a quien me ha puesto de Administrador, y no he conseguido la contraseña, ¡y no se me ha ocurrido preguntar! ¡Lo conseguiré mañana! ¿Qué haces levantado?

¡Gracias tara por tu participación! Mi vecino de la cuadra me restauró todo. ¡Experto en informática!

 
Top2n:

Sí, entiendo que hay muchas preguntas estúpidas. Sinceramente, llevo todo el día intentándolo, pero sin resultados.

Estoy escribiendo los valores del precio de varias líneas de tendencia en la barra actual en un array.

¿Cómo puedo eliminar un valor de la matriz si no hay ningún objeto?

artmedia70:

Si recorremos los valores de los precios de las líneas de tendencia en cada tick, inicializamos el array y aumentamos su dimensión al encontrar el siguiente precio necesario de la línea de tendencia necesaria, entonces no habrá necesidad de eliminar los valores de las líneas de tendencia borradas del array. El array será dinámico, y cada vez, en cada tick, contendrá sólo los valores de los objetos existentes.


?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
double MassTrendNumber(double &array[], string tip) // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
ArrayResize(array,ObjectsTotal(OBJ_TREND));

 for (int i = 0, limit = ArrayResize(array,ObjectsTotal(OBJ_TREND)); i < limit; i++) 

 {
 string DWnem=ObjectName(i); 
  string DW="downtrendline"+IntegerToString(i); // существует два названия трендовых линий, первое
  string DW2="uptrendline"+IntegerToString(i); // второе
if(tip="Sell")   //первый массив цен на селл
  if(DWnem=DW)//если имя равно "downtrendline"
   if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
// Также существует три цвета
   array[i]=ObjectGetValueByShift(DWnem,1); //записываем
if(tip="Buy")   //второй массивцен на бай
 if(DWnem=DW2)
 if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
  array[i]=ObjectGetValueByShift(DWnem,1);

  }   return;
   }

	          
 

Estoy tratando de hacer un oscilador alrededor de 0 desde el precio de cierre en una ventana separada, pero no puedo.

Es decir, tenemos el precio Close[i], necesito que este precio vaya por encima/por debajo de cero como en el MACD/CCI, en una ventana aparte, pero por más que lo intento, no puedo hacerlo sin valores adicionales como el MA: ahora obtengo algo similar si le resto iClose-iMA, pero tal vez haya variantes sin suavizar?

O en el rango 0,0...1,0 si no hay forma de evitar el cero...

 
Top2n:

El método de búsqueda en el siguiente es ligeramente diferente:

#property strict

/******************************************************************************/
bool AddValue(double &array[], const double value) {
  const int size = ArraySize(array);

  if (ArrayResize(array, size + 1) != size + 1) {
    return false; // Ошибка, значение не может быть добавлено к массиву
  }

  array[size] = value; //записываем
  return true; // Нет ошибки, значение добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound(double &array[], const string name) {
  const int type = ObjectType(name);

  if (type == OBJ_TREND) {
    switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switch
    case Goldenrod:
    case Gainsboro:
    case White:
      if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
        return false; // Ошибка, значение найдено, но не может быть добавлено к массиву
      }
    }
  }

  return true; // Нет ошибки, значение, если найдено, добавлено к массиву
}

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))) {
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }

  return true; // Нет ошибки, массив заполнен достоверно
}

/******************************************************************************/
void FillAndPrint(double &array[], const bool buy) {
  if (MassTrendNumber(array, buy)) {
    const int limit = ArraySize(array);

    Print("Найдено объектов: ", limit);

    for (int i = 0; i < limit; i++) {
      Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
    }
  } else {
    Print("Чёрт!");
  }
}

/******************************************************************************/
void OnStart() {
  double masS[];
  double masB[];

  Print("Sell:");
  FillAndPrint(masS, false);

  Print("Buy:");
  FillAndPrint(masB, true);
}

Añade al gráfico dos líneas de tendencia blancas con sus correspondientes nombres y ya lo tienes:

04:14:34 Script 2 EURUSDm,H1: loaded successfully
04:14:34 2 EURUSDm,H1: initialized
04:14:34 2 EURUSDm,H1: Sell:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.36268
04:14:34 2 EURUSDm,H1: Buy:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.35668
04:14:34 2 EURUSDm,H1: uninit reason 0
04:14:34 Script 2 EURUSDm,H1: removed

No escriba funciones kilométricas, divida el programa en "frases" cortas, "ladrillos". Los "ladrillos" pequeños hacen otros más grandes, y los más grandes hacen otros aún más grandes. Ya ves, es posible.

Pase todos sus datos a las funciones únicamente a través de parámetros.

Asegúrese de manejar los errores si la función que se llama falla y la acción posterior si se ignora el error tendrá graves consecuencias. La gran mayoría de los fallos de los programas (en general) se producen porque el manejo de errores no está programado de ninguna manera.

Por ejemplo, si ArrayResize(), llamada para ampliar el tamaño del array, devuelve un error, y el programador no lo ha comprobado y hace referencia al array supuestamente ampliado, se produce un error que hace que el programa MQL4 deje de funcionar posteriormente. El Asesor Experto, por ejemplo, deja de operar dejando posiciones abiertas. ¿No es genial?

Intente insertar "array[0] = 0;" antes del bucle en la función MassTrendNumber(), y asegúrese de que el script termina después del error de desbordamiento del array.

 
evillive:

Estoy tratando de hacer un oscilador alrededor de 0 desde el precio de cierre en una ventana separada, pero no puedo.

Es decir, tenemos el precio Close[i], necesito que este precio vaya por encima/por debajo de cero como en el MACD/CCI, en una ventana separada, pero por más que lo intento, no puedo hacerlo sin valores adicionales como MA: ahora obtengo algo similar si le resto iClose-iMA, pero tal vez haya variantes sin suavizar?

O en el rango 0,0...1,0 si no hay forma de evitar el cero...


https://www.mql5.com/ru/code/9340
 

Oh, eso es correcto. Nada es nuevo en este mundo )))
 
simpleton:

El método de búsqueda que sigue es ligeramente diferente:

Añade al gráfico dos líneas de tendencia blancas con sus correspondientes nombres y ya lo tienes:

No escriba funciones kilométricas, divida el programa en "frases" cortas. Los "ladrillos" pequeños hacen otros más grandes, y los más grandes hacen otros aún más grandes. Ya ves, es posible.

Pasar todos los datos a las funciones sólo a través de parámetros.

Asegúrese de manejar los errores si la función que se llama falla, y la acción posterior si se ignora el error tendrá graves consecuencias. La gran mayoría de los fallos de los programas (en general) se producen porque el manejo de errores no está programado de ninguna manera.

Por ejemplo, si ArrayResize(), llamada para ampliar el tamaño del array, devuelve un error, y el programador no lo ha comprobado y hace referencia al array supuestamente ampliado, se produce un error que hace que el programa MQL4 deje de funcionar posteriormente. El Asesor Experto, por ejemplo, deja de operar dejando posiciones abiertas. ¿No es genial?

Intente insertar "array[0] = 0;" antes del bucle en MassTrendNumber() y asegúrese de que el script termina después del error de desbordamiento del array.


Sí, muchas gracias, no hay palabras para describir lo útil que es, ¡tan claro! ¡¡¡Impresionanteooo!!!