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

 
Neo333:
Hola, el problema es el siguiente: el EA establece órdenes limitadas pendientes, luego el precio se mueve y las órdenes se convierten en órdenes de mercado. Todo funciona, pero en algunas órdenes hay un fallo absolutamente poco claro, ya que todas las órdenes se establecen a través de una determinada constante fija "K", la distancia entre ellas debería ser siempre una constante (Rn+1 = Rn + "K"). Sin embargo, no tenemos suerte; la orden está abierta, el precio está indicado y todo está comprobado pero la distancia de la orden anterior a la siguiente no es igual a "K". Si comprobamos los resultados de las operaciones aritméticas con los precios, es decir, si simplemente restamos y comprobamos el resultado, es igual a "K"; sin embargo la comparación lógica == sigue mostrando falso y esto lleva al EA a abrir constantemente órdenes a ese precio y así "pensar" que no hay ninguna orden allí. Perdona si es muy largo, pero quería explicarlo con más detalle. Sinceramente, no entiendo qué hacer :(
Si comparas por ==, entonces usa NormalizeDouble, en general es mejor MathAbs(Precio1-Precio2)<delta
 
VladimirR:

¡Muchas gracias! Pero hay este 2011.09.30 21:26:49 TestGenerator: error de datos no coincidentes (límite de volumen 13634 en 2011.07.19 20:00 superado)

Por lo que he entendido, este mensaje no afecta al Asesor Experto, pero aun así me gustaría saber cómo entenderlo...



Incongruencia en el relato del tiempo. https://www.mql5.com/ru/forum/108760
 
sergeev:

Ayudar a arreglar la función


73
Eugene1 30.09.2011 16:19

Estoy tratando de escribir una función que determine el precio de cierre de la última orden (por la hora más cercana a la hora actual)

Lo escribo así:


Pero

hacer

uble PriceCloseLastPos(string smb = "", int cmd = -1, int mMin = -1, int mMax = -1) {
int ticketDateTime=0;
int pedidoTicket=-1;
double closePrice = 0;
int ordTotal = OrdersTotal();
if (smb == "0") smb = Symbol();
for (int i = 0; i < ordTotal; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol() == smb || smb == "") {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
if (cmd < OP_BUY || OrderType() == cmd) {
if (mMin < 0 || (OrderMagicNumber() >= mMin && OrderMagicNumber() <= mMax)) {
if (ticketDateTime < OrderCloseTime()) {
ticketDateTime = OrderCloseTime();
orderTicket = OrderTicket();
closePrice = OrderClosePrice();
}
}
}
}
}
}
}
if(orderTicket > -1) OrderSelect(orderTicket, SELECT_BY_TICKET, MODE_HISTORY );
return(closePrice);
}

Pero por alguna razón, la función devuelve los datos del primer pedido que se abrió en el probador.

En realidad, este es mi objetivo intermedio. Quería escribir una función que diera el último precio de cierre de una orden parcial (no para todo el volumen del lote). Pero no sé cómo molestar...

int ordTotal = OrdersTotal();

En cambio...

int ordTotal = OrdersHistoryTotal();

... Siguiente ...

if(orderTicket > -1) OrderSelect(orderTicket, SELECT_BY_TICKET, MODE_HISTORY );

Aquí veo que tus conocimientos no son muy buenos. Cuando se selecciona una orden por ticket, el parámetro de pool se ignora. Es decir, es inútil escribir MODE_HISTORY - este parámetro sólo se refiere a la selección por índice.

Si una orden ha sido seleccionada por ticket, debe comprobar la hora de cierre para asegurarse de que ha sido seleccionada de la lista de órdenes cerradas. Debe ser mayor que cero - sólo las posiciones cerradas tienen este parámetro >0.

 
En el marco temporal de 5 minutos en el terminal de operaciones MT4, el historial no se muestra. ¿Puede solucionarse?
 
rosman:
En el marco temporal de 5 minutos en el terminal de operaciones MT4, el historial no se muestra. ¿Puede solucionarse?
Me disculpo por la pregunta estúpida. Me refería a que el historial anterior a noviembre de 2010 no aparece :)
 
rosman:
Pido disculpas por la pregunta tan directa. Me refería a que el historial anterior a noviembre de 2010 no aparece :)

Así que no está ahí. También puede aclarar. Intenta hacer más barras en el gráfico en la configuración de MT4.

Se soluciona descargando o comprando un historial más largo.

 
Zhunko:

Entonces no existe. También puede aclarar. Intenta hacer más barras en el gráfico en la configuración de MT4.

Esto se puede solucionar descargando o comprando un historial más largo.

Servicio>Configuración>Pestaña de gráficos > elnúmero máximo de barras en la ventana era de 65 000 --> lo cambié a 100 000 o más, aún así sólo es noviembre de 2010. El archivo de cotizaciones para este instrumento y marco temporal está completamente cargado, hasta noviembre de 1999
 
¿Cuál es el número máximo de barras en la historia? Tal vez la historia ya esté recortada.
 
Zhunko:
¿Cuál es el número máximo de barras en la historia? Tal vez la historia ya esté recortada.
Vale 10.000.000.
 
Sube el archivo. Voy a echar un vistazo a la mía.
Razón de la queja: