Nuevo terminal de cliente MetaTrader 4 build 402 - página 6

 
dmmikl86:
Esto se debe a que el valor del pip es diferente para los distintos pares...

Creo que el valor del pip es redundante en el modo de visualización "beneficio en pips"

 
olyakish:

Creo que el valor de los puntos es redundante en el modo de visualización de "beneficios en pips"

es otro eterno fallo de MT )
 

Glitches....

1) Si se eliminan los instrumentos innecesarios de Market Watch y se vuelven a añadir algunos, se obtiene una cosa interesante.

Haga clic con el botón derecho del ratón en un instrumento y seleccione "Ventana de gráfico" para abrir un gráfico.

¡¡¡Esto abrirá un gráfico de un instrumento diferente al que has seleccionado!!!

Para que se produzca este error, tienes que seleccionar una herramienta de las que acabas de añadir. (ver capturas de pantalla pic1, pic2, pic3)

2) en mi captura de pantalla se puede ver que el instrumento USDCHF está marcado como seleccionado en la ventana "Símbolos", aunque en realidad no está en la "Vigilancia del Mercado". (pic4)

Tal vez el primer fallo sea consecuencia del segundo, porque la numeración de los instrumentos en el Market Watch es errónea.

Tengo muy mal Internet, por eso todas las capturas de pantalla están en el archivo.

Aquí está el enlacehttp://www.sendspace.com/file/tbav73

 
dimonsky:

Glitches....

1) Si se eliminan los instrumentos innecesarios de Market Watch y se vuelven a añadir algunos, se obtiene una cosa interesante.

Haga clic con el botón derecho del ratón en un instrumento y seleccione "Ventana de gráfico" para abrir un gráfico.

¡¡¡Esto abrirá un gráfico de una herramienta distinta a la que has seleccionado!!!

También me di cuenta de esto en la construcción 401.
 

Hoy (o más bien ayer) por la mañana tuve un extraño fallo en MT4 - OrderSelect no encontró una orden por número de ticket en un Asesor Experto.

Se colocan dos órdenes pendientes en el EA - BUY_STOP y SELL_STOP, en lados opuestos del precio actual. Los números de ticket de estos pedidos se almacenan en t1 y t2. El código en el que se ha producido el error, tal y como se muestra a continuación, hace lo siguiente: cuando se abre una de estas órdenes pendientes, se elimina la segunda y en su lugar se coloca la siguiente orden pendiente con el número t3. Si hubo un error cuando t1 y t2 se colocaron originalmente, el ticket erróneo no debería estar en la lista de pedidos. Esto es lo que se comprueba con if (OrderSelect ...) y, en caso de error, escribimos un mensaje en el registro y salimos de la serie usando restart().

Hoy el t1 abrió a las 6:30. La orden t2 fue eliminada inmediatamente por el Asesor Experto (fue eliminada del mercado, pero permaneció en el historial - "cancelada", lo comprobé). Después de eso, se colocó el t3. Todos estos eventos están en los registros de MT y EA. Entonces la comprobación "OrderSelect(t2, SELECT_BY_TICKET)" devuelve FALSE y la serie aborta con el error "Unknown order t2". Es extraño, porque t2 se puso y se borró sin errores y se quedó en el historial. El modo de historial en MT es "Todo el historial". ¿Cómo es posible que OrderSelect no lo encuentre?

El ordenador es autónomo, se usa sólo para comerciar, nada más. Nadie lo toca, excepto yo. La carga de la CPU es del 10% de media. La memoria, el espacio en el disco, etc. son lo suficientemente grandes.
La versión de MT4 es la 402. Durante varios meses el Asesor Experto ha estado trabajando en diferentes variaciones en tiempo real en una cuenta demo en una MT paralela a tres pares diferentes (en tres gráficos). No había problemas con esta parte del código hasta esta mañana. Después, todo ha ido bien por la tarde y por la noche para otras parejas del mismo EA. Es decir, el error no puede reproducirse a voluntad.

Pregunta: ¿cómo ha podido ocurrir esto? ¿Es un fallo de MT o algo que no he tenido en cuenta en el código?

Este código utiliza las funciones OrderDeleteX y OrderSendX - envoltorios para OrderDelete y OrderSend estándar, que añaden comprobaciones de un hilo comercial para no estar ocupado y registran eventos como "Eliminación de orden ..." y "Envío de orden ..." en el registro del EA.
He eliminado los cálculos de precios para que el código sea más sencillo y claro.

if (OrderSelect(t1, SELECT_BY_TICKET)) {
  if (OrderType() == OP_BUY) {
    Print("--------------------------------------------------");
    if (t2 > 0) OrderDeleteX(t2);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_SELLSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendSell);
  }   
} else {
  Print("ERROR: Unknown order t1 in step 1");
  restart(3);
}
 

if (OrderSelect(t2, SELECT_BY_TICKET)) {     
  if (OrderType() == OP_SELL) {
    Print("--------------------------------------------------");
    if (t1 > 0) OrderDeleteX(t1);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_BUYSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendBuy);
  }
} else {
  Print("ERROR: Unknown order t2 in step 1");
  restart(4);
}


Ordenar los números en las variables:
t2 = 119732180
t3 = 119733656

Лог эксперта:
06:30:43 CheMurom v3.4.real EURUSD,H1: --------------------------------------------------
06:30:43 CheMurom v3.4.real EURUSD,H1: Deleting order #119732180; attempt number: 1
06:30:43 CheMurom v3.4.real EURUSD,H1: delete #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432 ok
06:30:43 CheMurom v3.4.real EURUSD,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.46032, slip=3, sl=1.46932, tp=1.44082; attempt number: 1
06:30:44 CheMurom v3.4.real EURUSD,H1: open #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082 ok
06:30:44 CheMurom v3.4.real EURUSD,H1: ERROR: Unknown t2 in step 1

Лог терминала:
06:30:43 '2871084': delete pending order #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432
06:30:44 '2871084': request was accepted by server
06:30:44 '2871084': request in process
06:30:44 '2871084': pending order #119732180 was deleted
06:30:44 '2871084': pending order sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
06:30:44 '2871084': request was accepted by server
06:30:45 '2871084': request in process
06:30:45 '2871084': order was opened : #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
 

No encuentro ningún orden. Podemos ver en el informe DC que la orden 67930924 estaba abierta...

Estas son operaciones cerradas en el historial de la cuenta a partir del 08.06.11. Como podemos ver esta orden no está aquí.

Así que debe estar en operaciones abiertas. La imagen de abajo, abre las operaciones.

Pero tampoco está aquí. Me pregunto qué informe enviará mañana DC, pero quiero escuchar la versión de los desarrolladores de software, cómo puede ser.

Y una cosa más, puede que no sea importante, pero mi fecha no se guarda, no la guardo y elijo el período siempre puede mes.


 
voinG:

No encuentro ningún orden. Podemos ver en el informe de DC que la orden 67930924 estaba abierta...

Estas son operaciones cerradas en el historial de la cuenta desde el 08.06.11. Como podemos ver esta orden no está aquí.

Así que debe estar en operaciones abiertas. La imagen de abajo, abre las operaciones.

Pero tampoco está aquí. Me pregunto qué informe será enviado mañana por DC, pero quiero escuchar la versión de los desarrolladores de software, cómo puede ser.

Y una cosa más, puede que no sea importante, pero mi fecha no está guardada y no tengo ninguna información al respecto.



Está ahí. He abierto "toda la historia" y es visible en esta versión.
 

Como continuación del tema "OrderSelect no encontró un pedido por número de ticket".

Esta mañana se ha producido el mismo error en el mismo Asesor Experto en otro par. La orden pendiente t2=#119899844 fue colocada con éxito, luego fue eliminada con éxito también, después de lo cual la orden pendiente t3=#119903758 fue colocada, y después de eso t2 no fue encontrado por la función OrderSelect.

Entre el error de ayer y el de hoy, el código dado en mi mensaje anterior en el Asesor Experto funcionó con éxito varias veces sin errores y las órdenes borradas se encontraron sin problemas.

Durante varios meses antes, el Asesor Experto había estado trabajando en la versión MT4 229. No se había observado nada parecido antes. El fin de semana de hace 4 días he cambiado a la versión 402. No sé si los errores están relacionados con la nueva versión. No puedo volver a la versión anterior, porque Alpari, donde opera este Asesor Experto, ha cambiado la zona horaria de las cotizaciones, y sólo la versión 402 refleja correctamente estos cambios (así lo afirma Alpari).

Las preguntas siguen abiertas:
¿Cómo puede suceder esto, por qué OrderSelect no ha encontrado el pedido en el historial, mientras que el historial se muestra en su totalidad, el pedido perdido es visible en él? ¿Es un fallo de MT o me he perdido algo en el código?

Лог эксперта:
10:15:33 CheMurom v3.4.real EURCHF,H1: --------------------------------------------------
10:15:33 CheMurom v3.4.real EURCHF,H1: Deleting order #119899844; attempt number: 1
10:15:34 CheMurom v3.4.real EURCHF,H1: delete #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735 ok
10:15:34 CheMurom v3.4.real EURCHF,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.21745, slip=3, sl=1.22845, tp=1.20015; attempt number: 1
10:15:36 CheMurom v3.4.real EURCHF,H1: open #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015 ok
10:15:36 CheMurom v3.4.real EURCHF,H1: ERROR: Unknown t2 in step 1

Лог терминала:
10:15:35 '2871084': delete pending order #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735
10:15:35 '2871084': request was accepted by server
10:15:35 '2871084': request in process
10:15:36 '2871084': pending order #119899844 was deleted
10:15:36 '2871084': pending order sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
10:15:36 '2871084': request was accepted by server
10:15:36 '2871084': request in process
10:15:37 '2871084': order was opened : #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
 
Describí el problema a Renate con una captura de pantalla, en la build 399 lo eliminaron, pero en la 401 y 402 volvió a aparecer este fallo, tuve que volver a la build 399
 

Hay una DLL escrita en Delphi7. Sólo tiene una función: comprobar si hay un archivo en la ruta especificada.

Este es su código.

library FileGDV;

uses
  SysUtils,
  Classes;

//{$R *.res}

function FileExists(s:pchar):boolean; StdCall;
begin
   result:=sysutils.fileexists(s);
end;

exports FileExists;

begin
end.

Nada complicado, nada especial, sólo una función.

Aquí está el código del Asesor Experto que utiliza esta función:

if (FileExists(s))
      {
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE|FILE_READ);
         
      }
      else
      {
         Alert("File not found   "+s);         
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE);
         s="Time;;M1;M5;M15;M30;H1;H4;D1\n";
         FileWriteString(handleM,s,StringLen(s));
      } 

y aquí está el código del archivo de cabecera

#import "FileGDV.dll"


bool FileExists(string s);

 
#import


Aquí está el código del archivo de cabecera. Si sólo hay un Asesor Experto en el terminal, todo funciona como un reloj.

Si tengo dos de ellos en el terminal en diferentes ventanas y llaman a esta función, entonces cada pocas horas, ambos EAs dejan de funcionar y aparecen mensajes en el diario

2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: expert stopped
2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: function 'FileExists' call from dll 'FileGDV.dll' critical error