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

 

Buenas tardes. He escrito una función que debe devolver el número de barras cuando se abrió una orden:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

Sin embargo, siempre devuelve -1. ¿En qué me he equivocado? Gracias de antemano.

 
first_may:

Buenas tardes. He escrito una función que debe devolver el número de barras cuando se abrió una orden:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

Sin embargo, siempre devuelve -1. ¿En qué me he equivocado? Gracias de antemano.

Tal vez sea así:

return(iBarShift(Symbol(),Period(),t)); es decir, sin true.

 
first_may:

Buenas tardes. He escrito una función que debe devolver el número de barras cuando se abrió una orden:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

Sin embargo, siempre devuelve -1. ¿En qué me he equivocado? Gracias de antemano.

A la variable t se le asigna el precio de apertura, aunque se declara como un entero

 
Vinin:

A la variable t se le asigna el precio de apertura, aunque se declara como un entero

Correcto, quise escribirOrderOpenTime (), pero escribí OrderOpenPrice();
 
Gracias, me he dado cuenta de mi error.
 

¿Cómo se describe esta situación?



avatar
13
4absinth 25.09.2011 19:23

Por favor, avisa.

Si un extremo (por ejemplo, el máximo) de la primera barra de 5 minutos del día actual coincide con un extremo del día actual (en el diario), entonces hacemos algo. ¿Cómo lo describiría?


Roger 25.09.2011 20:25 corregido | borrar
if(MathAbs(High[1]-iHigh(NULL,PERIOD_D1,0))<Punto)
 

¡¡¡ayuda a la gente buena!!!


avatar
1
droopy 25.09.2011 19:34

¡Hola, queridos usuarios del recurso!

Por favor, ayuda a quien se enfrenta a la lectura/escritura de un número real en un archivo.

La tarea consiste en leer de un archivo el saldo, si el saldo actual es más - sobrescribir el archivo.

El problema es que siempre da como resultado 0 (cero).

Con la escritura/lectura de números enteros no encontré tales problemas.

Aquí está el código:

doble balance;

int manija_archivo_bala;

file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_READ);
//copia de la posición, en caso de archivo vacío - posición = 0
si (FileSize(file_handle_bala)>0)
{
balance=FileReadDouble(file_handle_bala,DOUBLE_VALUE);
Alert(balance); ------------------------------------- aquí es donde se debe escribir el cero aunque se debe escribir el balance previamente guardado
FileClose(file_handle_bala);
if (AccountBalance()>balance) ------------------------------------ y esta regla no funciona porque la alerta de abajo no muestra nada
{
file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_WRITE);
balance=Saldo de la cuenta();
Alerta (saldo);
FileWriteInteger(file_handle_bala,balance,DOUBLE_VALUE);
FileClose(file_handle_bala);
}
}
else // si el archivo está vacío
{
FileClose(file_handle_bala); // primero, cerrar el archivo abierto
file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_WRITE); //abrir para escribir
balance=Saldo de la cuenta();
FileWriteDouble(file_handle_bala,balance,DOUBLE_VALUE);
FileClose(file_handle_bala);
}

¡¡¡Muchas gracias antes!!!


avatar
2222
Roger 25/9/2011 20:22

Observe esta línea

FileWriteInteger(file_handle_bala,balance,DOUBLE_VALUE);


3461
Zhunko 25/09/2011 20:27

1. Deberías ser más respetuoso y amigable para publicar tu código.

2. Estás intentando escribir un entero de 8 bytes. MQL4 no tiene este tipo de datos.

 

\¿Qué hice mal? ¿Por qué tantos errores? (Necesito saber el máximo(Necesito saber el valor máximo del indicador en las últimas 10 barras). gracias de antemano.

 

¡Buenos días a todos!

Estoy escribiendo mi primer bot, y al mismo tiempo me estoy familiarizando con MQL. Tengo el siguiente problema durante las pruebas:

La orden OP_BUYSTOP se ejecuta justo después de la colocación de la orden, aunque a juzgar por el gráfico, el precio no alcanza el valor objetivo (véase más abajo)

TiempoTipoPidaVolumenPrecioS / LT / PBeneficiosSaldo
12011.09.19 02:10comprar stop10.0176.93576.73577.135
22011.09.19 02:10comprar10.0176.93576.73577.135

USDJPY,M5 (visual)

Fecha 2011.09.19

Hora 02:15

Abierto 76.903

Alta 76.909

Bajo 76.890

Cerrar 76.890

Volumen 66

Estoy probando todas las garrapatas.

¿Quizás no entiendo bien la orden OP_BUYSTOP? Para comprar si el precio supera un determinado valor, ¿no?

Aquí hay un poco de código fuente que hace un pedido

int ticket=OrderSend(Symb, OP_BUYSTOP, Lot, Price, 0, SL, TP);

Muchas gracias a todos por adelantado.

 
Shniperson:

\¿Qué hice mal? ¿Por qué tantos errores? (Necesito saber el valor máximo del indicador para las últimas 10 barras). gracias de antemano.

Estás declarando la función Hi:

double Hi(int pos=0)
dentro de la función start()
Razón de la queja: