Ayuda con expert advisor

Espacio para compartir y debatir sobre Asesores Expertos de MetaTrader

Ayuda con expert advisor

Notapor macmercurio » 23 Ene 2011, 00:32

Hola primero gracias por solo leer, he buscado en el foro, por google y demas, he estudiado bastante pero me cuesta todabia mucho ya que soy nuevo en todo esto, estoy queriendo hacer un EA que me abra una operacion a partir de las 5 am, solo la abra si el valor mas alto o mas bajo de la vela de las 4:30 am es superado por 5 pips mas de cada valor, es decir supongamos que el valor mas alto de la vela de las 4:30 es 1,3325 y a las 5:30 la moneda llega 1,3330 entonces abra una operacion de compra y si la moneda por el contrario baja y es 1,3320 abra una operacion de venta, alguien conoce algun expert advisor que me sirva para esta estrategia o como puedo armarlo, desde ya muchas gracias.

Entiendo de programar experts pero no soy experto.
macmercurio
 
Mensajes: 20
Registrado: 23 Ene 2011, 00:15
Karma: 0

Re: Ayuda con expert advisor

Notapor Pablunk » 25 Ene 2011, 03:20

Mira, me pillas relajao y con algo de tiempo, lo vamos a hacer por partes a ver si te ayudo, si tienes dudas me preguntas.

Nuestras condiciones:

Necesitamos que nos abra una operación a una hora determinada.
Necesitamos que mire la vela anterior, y determine, si abrir la operación, y si esta debe ser de compra o de venta.
No definimos a que hora cierran las operaciones.
No definimos los SL ni los TP, les asignaremos 0.
Definiremos externamente los Lotes
Definirremos externamente el numero de operaciones.

OK

Nos quitamos los lotes y el máximo de operaciones de encima,

extern string noteLotes="Numero de lotes"
extern double Lotes=0.01;
extern string notemaxop="Máximo de operaciones"
extern int maxop=4;//por ejemplo



Para la hora de apertura, pondremos una variable externa, de forma que podamos elegir a que hora se abrirá, y cambiarlo cuando nos venga en gusto.

extern string horanote="Escribe aquí a que hora quieres que se abra"; // este comentario se verá desde fuera para ubicarnos.
extern string hora="00:00"; //aquí escribiremos la hora.


Convertimos el string, en un datetime.
El maravilloso StrtoTime:

datetime horaconv=StrtoTime(hora);

Ahora la variable horaconv, tiene el valor que escribimos en un principio.Más adelante extraeremos los valores que necesitamos.



Por otra parte, diremos, que necesitamos que haya movimiento de 5 pips en la dirección que sea para tomar una decisión.

Tirao

No se si conoces los arrays timeseries de MQL4, son básicamente, lo que ves en pantalla, antes de convertirse en un gráfico.

Usaremos High, para las operaciones de compra, y Low, para las operaciones de venta.

Primero definiremos externamente, una vez mas, la diferencia de pips. Por si más adelante queremos cambiarla.

extern string notepips="Escribe aqui el numero de pips que actuarán de gatillo";//por ejemplo
extern int pips=5;//inicializamos con el valor 5 por que eso es lo que me pides



Cabe destacar que tendremos que convertir los valores que tenemos en pips, cosa que metatrader no hace automáticamente, pero, no pasa nada, tenemos la variable de sistema DIGITIS!

entonces decimos:

double digconv;// creamos una variable

switch (Digits)// y les asignamos un valor dependiendo de Digits
{
case 0: digconv=0.1;break;
case 1: digconv=1;break;
case 1: digconv=10;break;
case 1: digconv=100;break;
case 1: digconv=1000;break;
case 1: digconv=10000;break;
case 1: digconv=100000;break;//no conozco monedas con tantos dígitos, pero mira, pecaremos de cautos
default;break;
}


con esto hemos conseguido un número por el que convertir nuestros pips.
lo ponemos en una variable pa que se vea mas clarito.

double pipsconv= pips/digconv;



y ahora creamos una variable para saber si nuestra condicion se cumple,

[i]duoble valorparacomprar=High[1]+pipsconv;
duoble valorparavender=Low[1]-pipsconv;[/i]

ya tenemos los valores dinámicos que decidirán cuando comprar y cuando vender.

Ahora nuestra Lógica:

if (Ask>valorparacomprar&&TimeHour(TimeLocal())==TimeHour(horaconv)&&TimeMinute(TimeLocal())==TimeMinute(horaconv))
{Set=1}
else
if (Bid<valorparavender&&TimeHour(TimeLocal())==TimeHour(horaconv)&&TimeMinute(TimeLocal())==TimeMinute(horaconv)
){Set=2}
else {Set=0};


Le acabamos de decir al programa, si el valor para comprar, es mayor que el máximo de la vela anterior, y nuestros pips,y es la hora que queremos pon Set a 1, y si es menor que el mínimo de la vela anterior, y nuestros pips,y es la hora que queremos entonces pon Set a 2, que no pasa nada de esto, pon Set a 0.

Podríamos haber convertido anteriormente las horas, para que el if no fuese tan complejo, es cuestión de gustos y organización personal.

Ahora le diremos que depende como este Set, compre o venda.

switch (Set)
{
case 0:break;
case 1:if(OrdersTotal()<maxop){Ordersend(Symbol(),OP_BUY,Lotes,Ask,3,0,0,NULL,0,0,Green);}break;
case 2:if(OrdersTotal()<maxop){Ordersend(Symbol(),OP_SELL,Lotes,Bid,3,0,0,NULL,0,0,Red);}break;
default:break;
}


Incluí el if para que no abra operaciones eternamente, si no que mire cuántas operaciones abriremos.

Y ya está! tenemos nuestro EA! A que ha sido tan difícil? :)

Evidentemente hay que organizarlo todo correctamente.

Las variables externas deben ir fuera de las funciones Start()...

Venga, pruebalo a ver si funciona y me dices.

Lo cuelgo compilado y con un par de añadiduras, como son comentarios para saber hora y valores,
y que te vaya dibujando unas flechas para saber donde están los limites.

Saludos!
Adjuntos
Hora y Soportes.mq4
(2.79 KiB) 723 veces
Pablunk
 
Mensajes: 27
Registrado: 21 Dic 2010, 00:38
Karma: 0

Re: Ayuda con expert advisor

Notapor macmercurio » 26 Ene 2011, 15:41

Hola Pablo muchas gracias lo chequeare y lo comparare con el que cree yo, que es algo similar los funcionare y sacare los análisis haber si logro la estrategia, muchas gracias por la ayuda he leído montón pero todavía soy muy novato en este tema,saludos.


Pablunk escribió:Mira, me pillas relajao y con algo de tiempo, lo vamos a hacer por partes a ver si te ayudo, si tienes dudas me preguntas.

Nuestras condiciones:

Necesitamos que nos abra una operación a una hora determinada.
Necesitamos que mire la vela anterior, y determine, si abrir la operación, y si esta debe ser de compra o de venta.
No definimos a que hora cierran las operaciones.
No definimos los SL ni los TP, les asignaremos 0.
Definiremos externamente los Lotes
Definirremos externamente el numero de operaciones.

OK

Nos quitamos los lotes y el máximo de operaciones de encima,

extern string noteLotes="Numero de lotes"
extern double Lotes=0.01;
extern string notemaxop="Máximo de operaciones"
extern int maxop=4;//por ejemplo



Para la hora de apertura, pondremos una variable externa, de forma que podamos elegir a que hora se abrirá, y cambiarlo cuando nos venga en gusto.

extern string horanote="Escribe aquí a que hora quieres que se abra"; // este comentario se verá desde fuera para ubicarnos.
extern string hora="00:00"; //aquí escribiremos la hora.


Convertimos el string, en un datetime.
El maravilloso StrtoTime:

datetime horaconv=StrtoTime(hora);

Ahora la variable horaconv, tiene el valor que escribimos en un principio.Más adelante extraeremos los valores que necesitamos.



Por otra parte, diremos, que necesitamos que haya movimiento de 5 pips en la dirección que sea para tomar una decisión.

Tirao

No se si conoces los arrays timeseries de MQL4, son básicamente, lo que ves en pantalla, antes de convertirse en un gráfico.

Usaremos High, para las operaciones de compra, y Low, para las operaciones de venta.

Primero definiremos externamente, una vez mas, la diferencia de pips. Por si más adelante queremos cambiarla.

extern string notepips="Escribe aqui el numero de pips que actuarán de gatillo";//por ejemplo
extern int pips=5;//inicializamos con el valor 5 por que eso es lo que me pides



Cabe destacar que tendremos que convertir los valores que tenemos en pips, cosa que metatrader no hace automáticamente, pero, no pasa nada, tenemos la variable de sistema DIGITIS!

entonces decimos:

double digconv;// creamos una variable

switch (Digits)// y les asignamos un valor dependiendo de Digits
{
case 0: digconv=0.1;break;
case 1: digconv=1;break;
case 1: digconv=10;break;
case 1: digconv=100;break;
case 1: digconv=1000;break;
case 1: digconv=10000;break;
case 1: digconv=100000;break;//no conozco monedas con tantos dígitos, pero mira, pecaremos de cautos
default;break;
}


con esto hemos conseguido un número por el que convertir nuestros pips.
lo ponemos en una variable pa que se vea mas clarito.

double pipsconv= pips/digconv;



y ahora creamos una variable para saber si nuestra condicion se cumple,

[i]duoble valorparacomprar=High[1]+pipsconv;
duoble valorparavender=Low[1]-pipsconv;[/i]

ya tenemos los valores dinámicos que decidirán cuando comprar y cuando vender.

Ahora nuestra Lógica:

if (Ask>valorparacomprar&&TimeHour(TimeLocal())==TimeHour(horaconv)&&TimeMinute(TimeLocal())==TimeMinute(horaconv))
{Set=1}
else
if (Bid<valorparavender&&TimeHour(TimeLocal())==TimeHour(horaconv)&&TimeMinute(TimeLocal())==TimeMinute(horaconv)
){Set=2}
else {Set=0};


Le acabamos de decir al programa, si el valor para comprar, es mayor que el máximo de la vela anterior, y nuestros pips,y es la hora que queremos pon Set a 1, y si es menor que el mínimo de la vela anterior, y nuestros pips,y es la hora que queremos entonces pon Set a 2, que no pasa nada de esto, pon Set a 0.

Podríamos haber convertido anteriormente las horas, para que el if no fuese tan complejo, es cuestión de gustos y organización personal.

Ahora le diremos que depende como este Set, compre o venda.

switch (Set)
{
case 0:break;
case 1:if(OrdersTotal()<maxop){Ordersend(Symbol(),OP_BUY,Lotes,Ask,3,0,0,NULL,0,0,Green);}break;
case 2:if(OrdersTotal()<maxop){Ordersend(Symbol(),OP_SELL,Lotes,Bid,3,0,0,NULL,0,0,Red);}break;
default:break;
}


Incluí el if para que no abra operaciones eternamente, si no que mire cuántas operaciones abriremos.

Y ya está! tenemos nuestro EA! A que ha sido tan difícil? :)

Evidentemente hay que organizarlo todo correctamente.

Las variables externas deben ir fuera de las funciones Start()...

Venga, pruebalo a ver si funciona y me dices.

Lo cuelgo compilado y con un par de añadiduras, como son comentarios para saber hora y valores,
y que te vaya dibujando unas flechas para saber donde están los limites.

Saludos!
macmercurio
 
Mensajes: 20
Registrado: 23 Ene 2011, 00:15
Karma: 0

Re: Ayuda con expert ageneradvisor

Notapor macmercurio » 26 Ene 2011, 18:13

Hola Pablo estuve mirando lo expuesto, el problema que tengo es que si se cierra el metatrader ya no tengo hora de apertura por eso queria saber como obtener los valores del centro de historiales o como contar las barras del dia para que abra a la hora que abra el metatrader sepa cuales son los valores del dia, ya que con mi trabajo no tengo mucho tiempo, entonces la idea esta genial pero seria bueno que abra cuando abra tenga los valores de una barra de una determinada hora, gracias por la ayuda.

La estrategia basica es obtener en cualquier momento el valor high y low de una barra determinada no la anterio sino por ejemplo abro a una hora determinada cualquiera sea me diga el valor de la barra de las 14 horas del dia actual por ejemplo se entiende, gracias.
macmercurio
 
Mensajes: 20
Registrado: 23 Ene 2011, 00:15
Karma: 0

Re: Ayuda con expert advisor

Notapor Pablunk » 30 Ene 2011, 22:41

Hola macmercurio, en el otro hilo que abriste he dejado un EA que busca una vela en una hora y extrae la info de ella. Espero que te sirva.
Pablunk
 
Mensajes: 27
Registrado: 21 Dic 2010, 00:38
Karma: 0

Re: Ayuda con expert advisor

Notapor cesarz18 » 31 Ene 2011, 21:34

Buenas tardes a todo, yo estoy buscando agregar un filtro de 5 pip a este EA, que se basa en soporte y resistencia entre la apertura de frankfurt y london, el EA es bueno pero necesto implementar esos 5 pip de mas al momento de abrir en compra y venta, les dejo el link del EA haber si me dan la manito, gracias

http://www.forexfactory.com/showthread.php?t=247220
cesarz18
 
Mensajes: 6
Registrado: 22 Oct 2010, 04:45
Karma: 0


Volver a Expert Advisors

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron