duda programación EA Metatrader

Foro dedicado a todo lo relacionado con la versión 4 de la plataforma de Metaquotes.
Responder
Avatar de Usuario
jineteradiactivo
Mensajes: 32
Registrado: 11 Ago 2014 17:17

duda programación EA Metatrader

Mensaje por jineteradiactivo »

Buenas,
estoy haciendo mis primeros pinitos en programación y me ha surgido una duda.. ¿Es posible decirle al programa que actúe cuando tal o cual indicador cambie de color, sin necesidad de hacer referencia a valores numéricos o a comparaciones lógicas?
En concreto, estoy intentando programar usando un indicador llamado TrendMagic, y me gustaría saber si es posible que ponga una orden de compra cuando se pone azul y una de venta cuando se vuelve rojo, sin más.

También me gustaría saber si usáis algún tipo de software para realizar los sistemas, sin necesidad de programarlos, o como base para retocarlos a posteriori. He visto que los hay de pago y alguno gratuito, pero estoy pez en el asunto. Cualquier consejo sería de gran ayuda.

Gracias de antemano
Saludos
MARTINGALA
Mensajes: 189
Registrado: 10 Mar 2011 17:52

Re: duda programación EA Metatrader

Mensaje por MARTINGALA »

El manejar indicadores personalizados es bastante complicado y mas para las personas sin conocimientos de programacion.
MT4 tiene una funcion para ello: ICustom(), en la red encontraras informacion mas detallada o en el Help de MT4.
Asi como dices tu de manejar colores es excepcional el indi los maneje como tal, la MT4 siempre maneja datos numericos y en algunos casos les asigna una definicion como constante (una variable con valor predefinido). Esos colores que tu mencionas son valores numericos que son almacenados en Buffers que estan numerados desde el 0 al 7 y en cada uno de ellos se almacena los valores de esos objetos que aparecen dibujados por los indis sobre el garfico de velas.

Hay herramientas graficas denominadas Builder como este https://fxdreema.com/ que te permite desarrollar EAs y demas en pocos minutos y mas si no se tiene conocimientos de MQL4 e incluso programcion en general.
Avatar de Usuario
jineteradiactivo
Mensajes: 32
Registrado: 11 Ago 2014 17:17

Re: duda programación EA Metatrader

Mensaje por jineteradiactivo »

Buenas!
he conseguido manejar los buffer para identificar los colores. Ahora me encuentro con un nuevo problema a resolver.. Coloco órdenes pendientes y éstas, o se acaban ejecutando, o se borran cuando llega una órden en sentido contrario. Lo que me gustaría es también borrarlas pasadas X barras sin que se hayan ejecutado. Lo he mirado e intentado, pero no lo consigo. ¿Alguna ayuda?.
Martingala, gracias por la respuesta anterior. Acabo de registrarme en fxdreema, a simple vista parece bastante útil.

Gracias y saludos
MARTINGALA
Mensajes: 189
Registrado: 10 Mar 2011 17:52

Re: duda programación EA Metatrader

Mensaje por MARTINGALA »

Hola Jinete

Sin mas datos y sin parte del codigo que hace eso no se que puede ocurrir, pero si dices que si se borran cuando entra una orden contraria, supongo que el fallo esta en la parte de codigo que condiciona el borrar la orden pendiente pasado esas X velas... es posible tambien que entre en un bucle sin fin que una parte del codigo borra la orden pendiente y otra parte del codigo la vuelve a enviar, ....
Avatar de Usuario
jineteradiactivo
Mensajes: 32
Registrado: 11 Ago 2014 17:17

Re: duda programación EA Metatrader

Mensaje por jineteradiactivo »

hola martingala,
creo que lo expresé mal, el problema no es que se borren cuando entre una orden contraria, si no que me gustaría que también lo hicieran una vez pasadas x barras desde su colocación si no se han ejecutado. Imagino que haya de alguna manera que contar las barras, pero he sido incapaz de hacerlo...
Para borrar las órdenes pendientes cuando se coloca otra opuesta he puesto esto:
// Delete Order
else if(OrderCloseTime() == 0 && SellTicket > 0 && OrderType() == OP_SELLSTOP)
{
bool Deleted = OrderDelete(SellTicket,Red);
}

las borra correctamente según he comprobado.. ¿Cómo podría hacer para contar las barras desde la colocación de la orden?

MARTINGALA
Mensajes: 189
Registrado: 10 Mar 2011 17:52

Re: duda programación EA Metatrader

Mensaje por MARTINGALA »

Hay diversas maneras de hacerlo, la primera y mas simple que se me ocurre es guardar en una variable el numero de velas que hay en el grafico en ese preciso momento despues de haber enviado la orden programada
por ejemplo

int nroVelas = Bars();

despues ya tendras que poner en una parte del codigo principal una condicion de test para borrar la orden
por emplo

if ( Bars() >= nroVelas + xVelas) BorrarOrden();

donde xVelas son las velas que dices tu ( 3,4 ....) y BorrarOrden() la funcion o la parte de codigo que tu pongas para borrar la orden
aunam
Mensajes: 14
Registrado: 07 Jul 2014 10:55

Re: duda programación EA Metatrader

Mensaje por aunam »

Hola jineteradiactivo,

Si no te sales con lo de contar barras como dice martingala, supongo que podrás fijar el tiempo de espiración de la orden pendiente cuando haces el ordensend:

-----------------
-----------------
int OrderSend(
string symbol, // symbol
int cmd, // operation
double volume, // volume
double price, // price
int slippage, // slippage
double stoploss, // stop loss
double takeprofit, // take profit
string comment=NULL, // comment
int magic=0, // magic number
datetime expiration=0, // pending order expiration
color arrow_color=clrNONE // color
);
-----------------
-----------------

El expiration time se cuenta en segundos, con lo que para una espiración de la orden pasados diez minutos deberías poner: TimeCurrent()+600 (60 segundos x 10 minutos)...

Supongo que con esto también te saldría...

Un saludo.
Avatar de Usuario
jineteradiactivo
Mensajes: 32
Registrado: 11 Ago 2014 17:17

Re: duda programación EA Metatrader

Mensaje por jineteradiactivo »

Gracias por las respuestas,

- he colocado hora en la expiration data del ordersend y funciona, sin problema.
- pero se me atraganta contar las barras desde que se ha colocado la orden pendiente. He probado con iBarShift, pero me da errores que no sé solucionar, con respecto al tiempo:

OrderSelect(BuyTicket,SELECT_BY_TICKET)
datetime horacompra = OrderOpenTime();
int buybar = iBarShift(NULL,0,horacompra);
if(Bars-buybar>=3) bool borrarorden = OrderDelete(BuyTicket,Red);

No sé si la lógica es correcta, espero que sí. Me he metido en esto sin ser programador, pero a veces el MQL4 me parece un lenguaje demasiado enrrevesado, como si le faltaran una serie de comandos (tipo en este caso "desde... hasta...") que hacen que tengas que dar mil vueltas para llegar al punto que quieres, en fin....

Gracias de nuevo por vuestra colaboración
Saludos
Avatar de Usuario
jineteradiactivo
Mensajes: 32
Registrado: 11 Ago 2014 17:17

Re: duda programación EA Metatrader

Mensaje por jineteradiactivo »

Buenas,
estoy intentando colocar una orden de recogida parcial de beneficios en un robot y de momento lo que he programado funciona, peeeeeero una vez que entra la orden de cerrar una parte del lotaje también cambia el número de la orden dada a mercado, con lo que el resto del lote sigue en mercado con un número distinto y el trailing stop deja de funcionar. Entiendo que es un problema de selección de órdenes, pero por más vueltas que le doy no soy capaz de solucionarlo. ¿Alguna idea?
La línea que le he puesto al TP parcial es:

if(BuyTicket>0&&OrderCloseTime()==0&&Bid>=OrderOpenPrice()+MinProfit)
bool TP1=OrderClose(BuyTicket,OrderLots()/2,Bid,UseSlippage,Red);

donde buyticket es la compra y minprofit los puntos que debe recorrer antes de recoger beneficios parciales
La idea es que si la orden tiene una parte cerrada, OrderCloseTime dejará de ser 0 y no lo realiza más veces, pero como cambia el número de órden....

Ésto, al igual que el trailing y el BE, están seleccionados con:

OrderSelect(BuyTicket,SELECT_BY_TICKET)

Estoy atascado, alguna ayuda sería bienvenida.

Gracias y un saludo
Avatar de Usuario
jineteradiactivo
Mensajes: 32
Registrado: 11 Ago 2014 17:17

Re: duda programación EA Metatrader

Mensaje por jineteradiactivo »

¿Algún cable respecto al mensaje anterior?
Saludos
Avatar de Usuario
X-Trader
Administrador
Mensajes: 12793
Registrado: 06 Sep 2004 10:18
Contactar:

Re: duda programación EA Metatrader

Mensaje por X-Trader »

Hola jineteradiactivo, alguno de estos tres EAs deberían servirte, uno de ellos está decompilado y te puede dar pistas en el código, dime a ver cuál te va mejor.

Saludos,
X-Trader

PD: Si lo necesitas, puedo mirar de decompilarte los otros dos.
Adjuntos
THV CaveManager v1.41.ex4
(63.29 KiB) Descargado 194 veces
Quik_Trailing.ex4
(19.09 KiB) Descargado 186 veces
Multi purpose trade manager.mq4
(105.56 KiB) Descargado 205 veces
"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."
Avatar de Usuario
jineteradiactivo
Mensajes: 32
Registrado: 11 Ago 2014 17:17

Re: duda programación EA Metatrader

Mensaje por jineteradiactivo »

Gracias! les echaré un vistazo
enavi
Mensajes: 4
Registrado: 08 Jun 2015 01:49

Re: duda programación EA Metatrader

Mensaje por enavi »

jineteradiactivo escribió:Gracias por las respuestas,

- he colocado hora en la expiration data del ordersend y funciona, sin problema.
- pero se me atraganta contar las barras desde que se ha colocado la orden pendiente. He probado con iBarShift, pero me da errores que no sé solucionar, con respecto al tiempo:

OrderSelect(BuyTicket,SELECT_BY_TICKET)
datetime horacompra = OrderOpenTime();
int buybar = iBarShift(NULL,0,horacompra);
if(Bars-buybar>=3) bool borrarorden = OrderDelete(BuyTicket,Red);

No sé si la lógica es correcta, espero que sí. Me he metido en esto sin ser programador, pero a veces el MQL4 me parece un lenguaje demasiado enrrevesado, como si le faltaran una serie de comandos (tipo en este caso "desde... hasta...") que hacen que tengas que dar mil vueltas para llegar al punto que quieres, en fin....

Gracias de nuevo por vuestra colaboración
Saludos
¿Qué tal, JineteRadiactivo?

¿Conseguiste resolver este enigma?

Yo estoy tratando de hacer algo muy similar y yo tampoco estoy muy ducho en programación, por lo que la solución a tu problema me vendria a las mil maravillas.

Un saludo y gracias
Avatar de Usuario
jineteradiactivo
Mensajes: 32
Registrado: 11 Ago 2014 17:17

Re: duda programación EA Metatrader

Mensaje por jineteradiactivo »

Hola enavi,
no, no conseguí contar barras. tampoco insistí demasiado ya que sólo lo utilizo para programar backtest, no para dejar correr la estrategia automatizada. Unos mensajes atrás aunam dió una solución que sí funciona, es sencilla y se basa en dejar que la orden expire pasado cierto tiempo.

Ya contarás si consigues contar barras.
Saudos!
Avatar de Usuario
Gamelu
Mensajes: 787
Registrado: 21 May 2009 16:49

Re: duda programación EA Metatrader

Mensaje por Gamelu »

Cuando no puedes trabajar con icustom por que quizás el indicador esta compilado, yo lo que hago es leer el valor del objeto, sobre el grafico una vez cargado el indicador pues darle a botón derecho y ver el nombre del objeto, lo puedes leer desde el EA y utilizar su variación.


Par el tema de contar barras te doy una idea:

int numerobarra =0;

void OnTick(void)
{
if (orderstotal==0)numerobarra=bars();
if((Bars-numero de barra)>10) Print("Mayor a 10");
}
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Metatrader 4”