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.
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.
¡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!
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...
El método de búsqueda en el siguiente es ligeramente diferente:
#property strict/******************************************************************************/bool AddValue(double &array[], constdouble value) {
constint size = ArraySize(array);
if (ArrayResize(array, size + 1) != size + 1) {
returnfalse; // Ошибка, значение не может быть добавлено к массиву
}
array[size] = value; //записываемreturntrue; // Нет ошибки, значение добавлено к массиву
}
/******************************************************************************/bool AddValueIfFound(double &array[], conststring name) {
constint type = ObjectType(name);
if (type == OBJ_TREND) {
switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switchcase Goldenrod:
case Gainsboro:
case White:
if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
returnfalse; // Ошибка, значение найдено, но не может быть добавлено к массиву
}
}
}
returntrue; // Нет ошибки, значение, если найдено, добавлено к массиву
}
/******************************************************************************/bool MassTrendNumber(double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второеif (ArrayResize(array, 0) != 0) {
returnfalse; // Ошибка, массив не может быть заполнен достоверно
}
for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
if (!AddValueIfFound(array, subname + IntegerToString(i))) {
returnfalse; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue; // Нет ошибки, массив заполнен достоверно
}
/******************************************************************************/void FillAndPrint(double &array[], constbool buy) {
if (MassTrendNumber(array, buy)) {
constint limit = ArraySize(array);
Print("Найдено объектов: ", limit);
for (int i = 0; i < limit; i++) {
Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
}
} else {
Print("Чёрт!");
}
}
/******************************************************************************/voidOnStart() {
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:
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.
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...
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!!!
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.
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.
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!
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.
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); // второе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...
El método de búsqueda en el siguiente 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, "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.
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
https://www.mql5.com/ru/code/9340
Oh, eso es correcto. Nada es nuevo en este mundo )))
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!!!