Pequeño problema con stoploss

Foro para cuestiones generales sobre la plataforma MetaTrader 4.

Pequeño problema con stoploss

Notapor manuel82 » 27 Oct 2011, 15:40

Hola, tengo un problema con los decimales en Metatrader. Si hago un Print (Bid) me devuelve 4 decimales cuando el precio se especifica en 5 y claro al poner los sl y tp me dá error (invalid stoploss).
Si hago un DoubleToStr(Bid,5) me devuelve los 5 pero el OrderSend al tener que pasarselos como double no me lo acepta y me los asigna a cero, ni siquiera me dá ningun error. Si vuelvo a hacer la conversión a double pierdo el ultimo decimal y me quedo como al principio, con 4.

Seguro que es una tontería pero es que llevo un rato a vueltas y nada.

Salu2
manuel82
 
Mensajes: 46
Registrado: 05 Jun 2009, 16:06
Karma: 0

Re: Pequeño problema con stoploss

Notapor FXWizard » 27 Oct 2011, 20:49

Lo muevo aquí, más apropiado. Aunque no soy un programador experto, quizás si nos dices con qué broker te está pasando eso, podemos replicar el problema y buscar una solución ;)

Saludos,
FXWizard
Avatar de Usuario
FXWizard
 
Mensajes: 8493
Registrado: 12 Feb 2008, 15:17
Karma: 35

Re: Pequeño problema con stoploss

Notapor manuel82 » 28 Oct 2011, 09:14

Pues pone Servidor:Forex.com-Demo (R). Lo hize desde el propio metatrader donde pode Abrir una cuenta.

Salu2
manuel82
 
Mensajes: 46
Registrado: 05 Jun 2009, 16:06
Karma: 0

Re: Pequeño problema con stoploss

Notapor xere62 » 28 Oct 2011, 10:47

Hay una funcion llamada NormalizeDouble , en la que tú redondeas a los dígitos que quieres. También hay una variable del propio MT4 que se llama Digits y contiene el valor de los decimales que te está pasando el broker. Por tanto , si tu número original estaba en la variable MyBid, yo haría lo siguiente:

NewBid = NormalizeDouble(MyBid, Digits);

y usaría la variable NewBid para poner el StopLoss (los nombres son sólo un ejemplo).

Con eso debería funcionar independientemente del broker y los dígitos que te pase. Suerte.
xere62
 
Mensajes: 14
Registrado: 07 Oct 2010, 21:06
Karma: 0

Re: Pequeño problema con stoploss

Notapor manuel82 » 28 Oct 2011, 12:00

Print (Bid);-->1.4178
Print (Digits);-->5
double NewBid = NormalizeDouble(precio, Digits);
Print ("NewBid="+NewBid);1.41783000

Le estoy mandando que me redondee a 5 digitos, porque añade los ultimos 3 ceros??? La verdad es que este lenguaje me hace unas cosas raras... Como me cargo esos 3 últimos ceros??

Gracias por la ayuda¡¡¡
manuel82
 
Mensajes: 46
Registrado: 05 Jun 2009, 16:06
Karma: 0

Re: Pequeño problema con stoploss

Notapor xere62 » 28 Oct 2011, 16:11

A ver:
¿El valor NewBid lo acepta el SendOrder? Si es así, sólo tienes un pequeño problema al mostrar el valor, pero el broker lo acepta bien y funcionará. Si aún así, quieres imprimirlo bien en pantalla, entonces usas
Print("NewBid=", DoubleToStr(NewBid, Digits));
xere62
 
Mensajes: 14
Registrado: 07 Oct 2010, 21:06
Karma: 0

Re: Pequeño problema con stoploss

Notapor manuel82 » 28 Oct 2011, 17:26

Hola xere62, antes de nada gracias por la ayuda. He puesto como tu dices la variable en el sendorder pero luego al ejecutar el script me pone "invalid stoploss".
Si lo saco con un print como tu dices lo saca bien, pero el ordersend no acepta DoubletoStr. Es un poco raro, será del metatrader o del broker??
manuel82
 
Mensajes: 46
Registrado: 05 Jun 2009, 16:06
Karma: 0

Re: Pequeño problema con stoploss

Notapor xere62 » 01 Nov 2011, 02:05

ordersend debe aceptar normalizetodouble. Acaso el valor stoploss está demasiado cerca del precio? Muchos brokers tienen una mínima distancia entre el precio y el SL o el TP. Prueba a aumentar ese valor....
xere62
 
Mensajes: 14
Registrado: 07 Oct 2010, 21:06
Karma: 0


Volver a MetaTrader 4

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados