Publi |
Publi |
No gracias.Debemos tener en cuenta que cuando utilizamos la funcion MarketInfo estamos haciendo una llamada al broker para pedirle este dato, una llamada implica acceso telefonico (red, o adsl) y al broker le ocupas un tiempo y ordenadores en responder a una pregunta que no es necesaria.
te recomiendo que utilices simplemente Spread = Ask - Bid;
es mucho más rápido para todos, ten en cuenta que tu plataforma cuando hace una petición al broker se queda a la espera de que le conteste.
Un saludo.
Foro de Forex Trading United
Hasta donde yo he podido observar esta variable no esta definida en mt4, si me equivoco disculpas de antemano.
Esta tendrás que construirla tu mismo, algo muy importante a tomar en cuenta.margin-left:40px">Que tipo de broker tienes, Es MM o ECN, en que influye esto, pues en que en el ECN el Spread es cambiante y hay que sumarle la comisión a la variable. En un broker mm, pues normalmente los spread son fijos, últimamente hasta esos están cambiando.
Una ve definido estos conceptos, te propongo lo siguiente. Recuerda que en programación existen diferentes maneras de hacer las cosas y funcionan todo depende del gusto de programador.
- Definir una variable para el precio de compra, venta y comision si el broker es ECN. de ejemplo tomaremos el XMT-Scalper v. 2.4.1, como lo han definido aunque de manera muy explicado es un expert muy complejo para mi nivel de programación. Entonces.
extern double MaxSpread = 30.0; // Max allowed spread in points (1 / 10 pip)
extern double Commission = 0; // Some broker accounts charge commission in USD per 1.0 lot. Commission in points.
Estas dos variables son externas y almacenan el valor definido por el usuario.
double local_ask;
double local_bid;
Variables internas donde almacenaras el valor del bid y el ask.
local_ask = MarketInfo(Symbol(), MODE_ASK);
local_bid = MarketInfo(Symbol(), MODE_BID);
Le asignamos el valor del ask y el bid a nuestras variables.
ahora tenemos nuestras variables definidas y con sus valores. solo nos falta hacer la evaluacion que seria algo como esto
if(local_ask-Local_bid)<(MaxSpread+Comision)
Este ultima instrucción pienso que debe ir como condicionante antes de OrdenSend pero después de las evaluaciones técnicas para realizar la operación.
En caso de ser afirmativo se ejecutaria la operación, en caso contrario seria interesante que devuelva un error, para tener registro de cuantas operaciones no se realizan por este problema.
Saludos espero no haberte confundido.
Muchas gracias por el curro. Gente como usted hace que este foro sea grande.
Mi brooker es ECN. En el spread le he metido la comisión que equivale a 0.3 pips.
El código es el siguiente y lo que hace es que si hay un Spread superior al permitido no opera.
Es mucho más comodo porque como puede ver, hay una función que ya lo calcula.
Espero que sea de utilidad.
Código:extern double MaxSpread = 20.0; Definir variable local double Spread; En cada tick ejecuta lo siguiente Spread = MarketInfo(Symbol(), MODE_SPREAD); if(Spread >= MaxSpread * Point) { return(0);}Foro de Forex Trading United
Hasta donde yo he podido observar esta variable no esta definida en mt4, si me equivoco disculpas de antemano.Hola a todos.
Bueno pues me gustaría saber como poner en mi recién nacido EA la función para limitar el máximo spread permitido. Con una variable externa para poder modificarlo.
Por ejemplo, si el spread máximo lo pongo en 2, si el spread actual es 2.1 pues no entraría al mercado.
Espero que me entendais.
Saludos.
Esta tendrás que construirla tu mismo, algo muy importante a tomar en cuenta.
margin-left:40px">Que tipo de broker tienes, Es MM o ECN, en que influye esto, pues en que en el ECN el Spread es cambiante y hay que sumarle la comisión a la variable. En un broker mm, pues normalmente los spread son fijos, últimamente hasta esos están cambiando.
Una ve definido estos conceptos, te propongo lo siguiente. Recuerda que en programación existen diferentes maneras de hacer las cosas y funcionan todo depende del gusto de programador.
- Definir una variable para el precio de compra, venta y comision si el broker es ECN. de ejemplo tomaremos el XMT-Scalper v. 2.4.1, como lo han definido aunque de manera muy explicado es un expert muy complejo para mi nivel de programación. Entonces.
extern double MaxSpread = 30.0; // Max allowed spread in points (1 / 10 pip)
extern double Commission = 0; // Some broker accounts charge commission in USD per 1.0 lot. Commission in points.
Estas dos variables son externas y almacenan el valor definido por el usuario.
double local_ask;
double local_bid;
Variables internas donde almacenaras el valor del bid y el ask.
local_ask = MarketInfo(Symbol(), MODE_ASK);
local_bid = MarketInfo(Symbol(), MODE_BID);
Le asignamos el valor del ask y el bid a nuestras variables.
ahora tenemos nuestras variables definidas y con sus valores. solo nos falta hacer la evaluacion que seria algo como esto
if(local_ask-Local_bid)<(MaxSpread+Comision)
Este ultima instrucción pienso que debe ir como condicionante antes de OrdenSend pero después de las evaluaciones técnicas para realizar la operación.
En caso de ser afirmativo se ejecutaria la operación, en caso contrario seria interesante que devuelva un error, para tener registro de cuantas operaciones no se realizan por este problema.
Saludos espero no haberte confundido.
Foro de Forex Trading United
Hola a todos.
Bueno pues me gustaría saber como poner en mi recién nacido EA la función para limitar el máximo spread permitido. Con una variable externa para poder modificarlo.
Por ejemplo, si el spread máximo lo pongo en 2, si el spread actual es 2.1 pues no entraría al mercado.
Espero que me entendais.
Saludos.Foro de Forex Trading United
Perfecto, yo no habia dado con la funcion.
Muchas gracias por el curro. Gente como usted hace que este foro sea grande.
Mi brooker es ECN. En el spread le he metido la comisión que equivale a 0.3 pips.
El código es el siguiente y lo que hace es que si hay un Spread superior al permitido no opera.
Es mucho más comodo porque como puede ver, hay una función que ya lo calcula.
Espero que sea de utilidad.
Código:extern double MaxSpread = 20.0; Definir variable local double Spread; En cada tick ejecuta lo siguiente Spread = MarketInfo(Symbol(), MODE_SPREAD); if(Spread >= MaxSpread * Point) { return(0);}
Lo que si te aconsejo es que le sumes el valor de la comision, ya que eso es parte del costo y no lo se contabiliza con el spread. si el spread sube a 19 puntos digamos, con la comision de .3 queda en 2.2 pips.
Por cierto la comision es solo de .3 pips por lote por toda la operación, bastante baja pero verifica que sea por toda la operación algunas veces el broker solo menciona que es .30 por abrir y .30 por cerrar en total el costo es de .60 pips.
Saludos y exitos.Foro de Forex Trading United
Debemos tener en cuenta que cuando utilizamos la funcion MarketInfo estamos haciendo una llamada al broker para pedirle este dato, una llamada implica acceso telefonico (red, o adsl) y al broker le ocupas un tiempo y ordenadores en responder a una pregunta que no es necesaria.
te recomiendo que utilices simplemente Spread = Ask - Bid;
es mucho más rápido para todos, ten en cuenta que tu plataforma cuando hace una petición al broker se queda a la espera de que le conteste.
Un saludo.
Foro de Forex Trading United
Aviso Legal Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal |