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

 
eugggy:
bar es el desplazamiento de la barra actual en relación con el tiempo establecido en los ajustes externos (Punto_inicial).

bar = ?? en el momento de borrar ¿qué?
 
ask: ¿Tienes que ser grosero?

Ahora estás siendo grosero: todavía no hay un enunciado del problema, y lo que has garabateado no es nada, ni siquiera pseudocódigo.

¿Y crees que te envié a los telépatas incorrectamente?

 
sergeev:

bar = ?? en el momento de borrar ¿qué?
Esperemos que vuelva a su valor anterior. Es decir, si no necesito el documento cuando la barra caduque, tengo que borrarlo.
 
eugggy:
Espero que su valor anterior

Bueno, sólo espero que funcione.

 
sergeev:

Bueno, sólo esperas que funcione.



:-) ¿No puedes señalar el error?
 
eugggy:
:-) ¿No puedes señalar el error?

:) pero para responder a la pregunta ¿qué bar=??, no se puede hacer eso?
 
sergeev:

:) pero no puedes responder a la pregunta ¿qué barra=?, puedes hacerlo?
Bueno, el tema es para los novatos, y si estuviera seguro de cuál es la barra en el momento del borrado, entonces tal vez el EA funcionaría. Creo que sí: cuando se cierra el documento, es decir, aparece una nueva barra, la variable barra aumenta su valor en 1. En la función de borrado, pongo bar-1, es decir, el número del documento ya cerrado y si la barra anterior no cumple los criterios especificados, se borra el documento, en cuyo valor el número = el valor actual de la variable barra menos 1. ¿Puede ser que el error se deba a que estoy borrando un documento ya eliminado?
 

nadie se dio cuenta del error, así que una vez más.

¿Podría decirme cuál es el error en el código? gracias.

//+------------------------------------------------------------------+
//| line.mq4 |
//| |
|
//+------------------------------------------------------------------+
//--- parámetros de entrada
extern bool sell = 1; // permiso para vender
extern bool buy = 1;
extern double lots = 0.1;
extern int sl = 50;
extern int tp = 150;

extern int order = 10; //

extern double bez = 15;
extern double tral_step = 15;
extern double tral_start = 10;

//+------------------------------------------------------------------+
//| función de inicialización experta |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| función experta de desinicialización |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| función de inicio experta |
//+------------------------------------------------------------------+
int start()
{
//----
string sell_stop ="ss"; //nombre la línea manualmente
string buy_stop ="bs";

//buy------------------------------------------------------------------------------------------------

// encontrar la línea y colocar una orden cuando el precio toque
if (ObjectFind (buy_stop) > 0 ) // si hay línea buy_stop
if ( ObjectGet (buy_stop, OBJPROP_PRICE1=Ask )// toca la línea
{
OrderSend (Symbol(),OP_BUYSTOP, lots, Ask+Point*order,3, Bid-sl*Point, Bid+tp*Point );// envía la orden
ObjectDelete (buy_stop); // la línea se elimina
}


return(0);
}
//+-------------------------

 
TESKATLIPOKA:

Nadie ha notado el error, así que una vez más.

¿puede decirme cuál es el error en el código? gracias.


Aquí están (hay muchos más errores en su código pero estos ni siquiera pasarán por el compilador):

.
if ( ObjectGet (buy_stop, OBJPROP_PRICE1=Ask )// касание линии
E incluso si cambias el código a algo más sano desde el punto de vista del compilador:

if ( ObjectGet (buy_stop, OBJPROP_PRICE1) == Ask )// касание линии

Si no se conoce el error, seguirá siendo teóricamente erróneo sin una normalización previa de los valores reales antes de la comparación. Peor aún, la normalización puede fallar si el precio cambia más de un pip en un tick y su condición se escapa.

Es más correcto encontrar la condición de cruce de la siguiente manera:

if (ObjectGet (buy_stop, OBJPROP_PRICE1) <= High[0]) && (ObjectGet (buy_stop, OBJPROP_PRICE1) >= Low[0]))//  на текущей свече касание линии уже имело место


P.D. En MetaTrader, encontrar el punto de error después de la compilación es bastante fácil:

1. En la pestaña "Caja de herramientas", en el campo "Archivo", especifique el número de línea y el número del símbolo en el que el compilador ha detectado un error, separados por comas.

2. Si hace doble clic en el mensaje de error de la columna "Descripción" de la misma pestaña, el cursor del editor saltará al lugar donde el compilador detectó el error.

 
eugggy:
Bueno, el tema es para novatos, y si estuviera seguro de cuál era el bar en el momento del borrado, quizás el EA funcionaría.
Así que pregúntame cómo averiguar cuál es el bar.
Razón de la queja: