Errores, fallos, preguntas - página 662

 

¡Buenas tardes!

Por favor, compruebe la corrección de la función que debe determinar si una posición abierta está "congelada".

En particular, ¿no me excedí con Ask/Bid?

bool IsPositionFrozen(const string Symbol) {
  if (!PositionSelect(Symbol)) return false;
  bool FreezTP = true, FreezSL = true;
  double FreezLevel = SymbolInfoInteger(Symbol, SYMBOL_TRADE_FREEZE_LEVEL) * SymbolInfoDouble(Symbol, SYMBOL_POINT);
  switch (PositionGetInteger(POSITION_TYPE)) {
    case POSITION_TYPE_BUY:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_TP) - SymbolInfoDouble(Symbol, SYMBOL_BID) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_BID) - PositionGetDouble(POSITION_SL) > FreezLevel))
          FreezSL = false;
        break;
      case POSITION_TYPE_SELL:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_ASK) - PositionGetDouble(POSITION_TP) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_SL) - SymbolInfoDouble(Symbol, SYMBOL_ASK) > FreezLevel))
          FreezSL = false;
      break;
    default: return false;
  }
  if (FreezTP || FreezSL) return true;
  else return false;
}
 
tol64:

No, todo ha funcionado correctamente en el servidor ( cuenta demo MQ). Es decir, las paradas se activaron cuando no estaba conectado. Pero, cuando me conecté, el mercado ya estaba cerrado. En la ventana de Market Watch se registró la hora del último tick antes de que se cortara mi conexión. Al solicitar el historial de operaciones especificando TimeCurrent() como segundo valor, no obtuve todo el historial. Aunque la ayuda de TimeCurrent() dice que:

Es decir, entiendo que esta función debe devolver el valor de la última llegada de la cotización de uno de los instrumentos en la ventana de Market Watch desde el servidor, aunque la conexión se haya roto y la conexión se haya producido cuando el mercado ya estaba cerrado. En mi caso, esto no sucedió y no obtuve toda la historia. No sé si el Market Watch debe sincronizar la hora con el servidor cuando el mercado está cerrado o no, no se menciona en la Ayuda.

En ese caso, si se necesita un historial completo, simplemente se puede añadir un número más de día por delante y será una garantía de que se elegirán todas las ofertas. :)

En el probador, hay un error con la función HistoryDealsTotal(), y aparece en el modo de visualización. El tiempo está correctamente modelado allí. Sólo una muleta ayuda en algunos casos.


Sí, recuerdo lo esencial, que hubo una ruptura en la comunicación. Parece que el terminal comienza a comprobar y descargar el historial adicional sólo en la recepción de ticks para un instrumento y no hay ticks en el fin de semana. Por supuesto, puede actualizar los gráficos manualmente, y entonces se actualizará la última hora del servidor. Y si está en el modo automático, entonces debe arreglar la interrupción de la conexión y, si se restablece durante el fin de semana, entonces iniciar la función de comprobación y descarga del historial, CheckLoadHistory(). Utiliza un temporizador.

En general, al terminal le ocurren cosas "sorprendentes". Aquí es ayer, el portátil estaba trabajando a través del teléfono como un módem. El Asesor Experto Multimoneda funcionaba en modo de seguimiento (autotrading desactivado). Me fui 15 minutos con el teléfono, volví y me conecté de nuevo. El terminal restauró la conexión con el servidor. Parecía que podía descargar fácilmente las citas perdidas. Pero el terminal comenzó a descargar furiosamente el historial, ¿qué más se puede hacer? Todo se congeló: la visión general del mercado, la pestaña de operaciones, los gráficos. El teléfono no admite 3G, sino que funciona a través de EDGE, por lo que el procedimiento se retrasó. Cuando alcanzó los 20 MB, decidí comprobar si podía negociar algo manualmente en esas condiciones. Intenté cerrar la posición, recibí una negativa por falta de conexión y ahí se detuvo la descarga. Tras la reconexión, todo ha ido bien. Aquí hay un extracto del registro de la terminal:

OK 0 Red 09:45:09 '709704': autorizado en MetaQuotes-Demo a través del Punto de Acceso Singapur
Red IR 0 09:45:09 '709704': autorización previa realizada con éxito desde 77.35.11.181 el 2012.03.04 06:10:12
KP 0 Red 09:45:12 '709704': terminal sincronizado con MetaQuotes Software Corp.
GI 0 Expertos 09:45:12 experto Fractals_ (EURUSD,H1) cargado con éxito
OI 0 Operaciones 10:43:29 '709704' : operación #8671794 vender 0.10 GBPJPY a 129.268 hecho (basado en el pedido #9494984) // esta operación fue ejecutada por un Asesor Experto que trabaja en otro ordenador
RM 0 Trades 10:51:22 '709704' : trato #8671842 vender 0.10 USDJPY a 81.586 hecho (basado en el pedido #9495037)// Del mismo modo
KL 1 Red 12:00:38 '709704': se ha perdido la conexión con MetaQuotes-Demo// Se ha ido
IE 0 Red 12:16:15 '709704': Autorizado en MetaQuotes-Demo a través de Access Point Hong Kong// Vino
IS 0 Red 12:16:15 '709704': autorización anterior realizada con éxito desde 80.83.239.67 el 2012.03.04 23:45:03
OS 0 Red 12:16:18 '709704': terminal sincronizado con MetaQuotes Software Corp.// Comunicación restaurada
IQ 0 Trades 12:18:12 '709704' : trato #8672388 vender 0.10 GBPCHF a 1.44540 hecho (basado en el pedido #9495596) // esta operación fue ejecutada por un Asesor Experto que trabaja en otro ordenador
DF 0 Trades 12:35:37 '709704' : compra instantánea 0.10 EURGBP a 0.83422 // Intenté cerrar la posición manualmente, antes de que se descargara el historial
IN 2 Trades 12:35:44 '709704' : falló la compra instantánea 0.10 EURGBP a 0.83422 [Solicitud rechazada por falta de conexión a la red] // Denegada
JP 1 Red 12:35:44 '709704': se ha perdido la conexión con MetaQuotes-Demo
EI 0 Red 12:36:00 '709704': autorizado en MetaQuotes-Demo a través del punto de acceso Hong Kong
IG 0 Network 12:36:00 '709704': autorización previa realizada con éxito desde 80.83.239.67 en 2012.03.05 02:16:12
PG 0 Red 12:36:08 '709704': terminal sincronizada con MetaQuotes Software Corp.// La comunicación se restablece, el funcionamiento sigue siendo normal
MS

 
El registro muestra que antes de la interrupción el terminal estaba trabajando con un servidor, pero después de la interrupción se conectó a otro servidor y comenzó a descargar el historial. Se puede concluir que el historial entre diferentes servidores no está sincronizado.
 
Valmars:

Sí, recuerda lo esencial, hubo una interrupción de la comunicación. Parece que el terminal inicia la reconciliación y la descarga del historial sólo cuando se recibe un tick para el instrumento, y no hay ticks en el fin de semana. Por supuesto, puede actualizar los gráficos manualmente, y entonces se actualizará la última hora del servidor. Y si quieres utilizar el modo automático, entonces debes arreglar la interrupción de la conexión y, si se restablece durante el fin de semana, iniciar la comprobación y descargar el historial, función CheckLoadHistory(). Utiliza un temporizador.

...

Sí, parece que hay una actualización de la hora cuando entra la garrapata, pero el historial ya estaba ahí y se podía ver visualmente. Gracias por las opciones de solución. Intentaré volver a reproducir una situación similar antes del fin de semana para probar las opciones de solución.
 

Conectado al servidor AlpariFS-MT5 para probar el Asesor Experto bajo diferentes condiciones. El tipo de ejecución era inicialmente EXECUTION_MARKET - Ejecución de órdenes por mercado. Abrí/cerré posiciones con éxito utilizando mis paneles de negociación. Entonces descubrí que la profundidad del mercado estaba disponible en el menú contextual del gráfico. Lo abrí y descubrí que era posible realizar operaciones de compra/venta. Como prueba, compré una posición y la cerré allí en la Profundidad de Mercado. Después de eso, el tipo de ejecución de la cuenta se cambió a EXECUTION_EXCHANGE. Esto se aclara en MQL5 y sólo hay dos opciones en la lista desplegable de la ventana de órdenes (F9): Ejecución de intercambio y Orden pendiente. Intentar iniciar la sesión de nuevo o recargar el terminal no ha solucionado el problema. Y ahora el tipo de ejecución en la cuenta demo sigue siendo EXECUTION_EXCHANGE.

Me puse en contacto con el soporte de Alpari, describí el problema y lo aclaré:

//---

Anatoly | 17:55
¿Estoy en lo cierto al entender que en las cuentas de demostración para MT5 en este momento, la opción EXECUTION_MARKET debe estar en su lugar?

Sergey | 17:56
Sí, correcto.

//---

Parece que es un error.

 

Algunos identificadores no se describen en la ayuda:

ORDER_FILLING_FOK, ORDER_FILLING_IOC y ORDER_FILLING_RETURN están ahí, peroORDER_FILLING_AON y ORDER_FILLING_CANCEL no, aunque todos llevan a la misma lista con una descripción.

 
tol64: yORDER_FILLING_AON y ORDER_FILLING_CANCEL no lo son, aunque todos llevan a la misma lista con descripción.
Ya están suprimidos, los eliminaremos también de los índices.
 
Rosh:
Ya han sido suprimidos, los eliminaremos también de los índices.

Gracias.

//---

Se ha planteado esta cuestión. ¿El servidor del concurso está ahora disponible para las pruebas con las mismas restricciones que en el concurso(Límite de volumen 15 lotes / Volumen máximo 5 lotes)? He intentado conectarme a la cuenta antigua, pero no hay conexión con el servidor. He buscado en todos los servidores en los que Metatrader 5 está disponible para operar, pero no he encontrado elLímite de Volumen en ningún sitio, y tengo que probarlo. ¿O será suficiente para responder a la pregunta, utilizando un ejemplo con valores de concurso:

Tengo una posición abierta y su volumen es de 14 lotes. ¿Si intento colocar una orden pendiente con un volumen de 2 lotes, la solicitud será rechazada? O bien, la orden se colocará con el mismo tamaño, pero se ejecutará parcialmente, es decir, 1 lote, siempre que la posición se mantenga con el mismo tamaño(14 lotes).

Y viceversa. Tenemos un conjunto de órdenes pendientes de 14 lotes. ¿Si intento abrir una posición con 2 lotes, la solicitud será rechazada?

 

Voy a probar suerte aquí, porque hay silencio en Kettles...

Por favor, aclare:https://www.mql5.com/ru/forum/3775/page113#comment_160125. También estoy interesado en el cálculo del software de los cálculos requeridos.

 

Buenas tardes.

¿Cómo puedo acceder al valor del indicador iADX incorporado? Es decir, a su valor hace un número determinado de compases... En mql4 se hace mediante el ajuste del parámetro shift.

Gracias ya.

Документация по MQL5: Технические индикаторы / iADX
Документация по MQL5: Технические индикаторы / iADX
  • www.mql5.com
Технические индикаторы / iADX - Документация по MQL5