Página 1 de 1

Programando en mt5

Publicado: 25 Feb 2017 21:45
por Gamelu
Sabeis como se utiliza el iClose en mt5? me da error un código que intentaba pasar a este lenguaje.

en mt4 lo tengo asi:
if(iClose(0,0,0)- iOpen(0,0,0)>0)


No se si tengo que utilizar el CopyClose en mt5.

A ver si alguien me hecha un cable, saludos.

Re: iclose en mt5

Publicado: 26 Feb 2017 16:24
por Gamelu

Código: Seleccionar todo

double CurrentClose, PreviousClose1, PreviousClose2;
double myClose;
CopyClose(_Symbol, _Period, 0, 10, myClose); 
ArraySetAsSeries(myClose,true);
CurrentClose = myClose[0]; // current bar close.
PreviousClose1 = myClose[1]; // equals bar close 1 bar back from current bar.
PreviousClose2 = myClose[2]; // equals bar close 2 bars back from current bar.

Código: Seleccionar todo

MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),Period(),0,Bars(Symbol(),Period()),rates); // Copied all datas
   double pr0_close= rates[0].close;
   double pr1_close= rates[1].close;        // rates[1].high,rates[1].open for high
   datetime t1 = rates[1].time;


Re: iclose en mt5

Publicado: 26 Feb 2017 16:32
por Gamelu

Re: iclose en mt5

Publicado: 26 Feb 2017 19:56
por X-Trader
Ya veo, pues sí que lo han complicado con respecto a MQL4 ¿no?

Saludos,
X-Trader

Re: iclose en mt5

Publicado: 27 Feb 2017 09:00
por Gamelu
Pues si, aun no lo he probado pero hay que pasarle todo el array de precios, con lo fácil que era antes, no se por que habran cambiado tanto la forma de hacerlo.

Hasta para hacer un Hour() me las estoy viendo.


Saludos.

Re: iclose en mt5

Publicado: 28 Feb 2017 10:31
por Gamelu
Una curiosidad es que los arrays de precios se copian a la inversa por defecto:

Close[5]=",myClose[0],
Close[4]=",myClose[1],
Close[3]=",myClose[2],
Close[2]=",myClose[3],
Close[1]=",myClose[4],
Close[0]=",myClose[5]

Para corregir esto se utiliza la función:

ArraySetAsSeries(myClose,true);

//quedaría asi:

Close[5]=",myClose[5],
Close[4]=",myClose[4],
Close[3]=",myClose[3],
Close[2]=",myClose[2],
Close[1]=",myClose[1],
Close[0]=",myClose[0]

Re: Programando en mt5

Publicado: 28 Feb 2017 10:59
por Gamelu
Manejo del tiempo, horas, mes,año etc
Información adquirida de https://www.mql5.com/es/articles/599

Código: Seleccionar todo

datetime    tm=TimeCurrent();
MqlDateTime stm;
TimeToStruct(tm,stm);
//--- mostrar componentes de la fecha
Alert("Año: "        +(string)stm.year);
Alert("Mes: "      +(string)stm.mon);
Alert("Día: "      +(string)stm.day);
Alert("Hora: "        +(string)stm.hour);
Alert("Minuto: "     +(string)stm.min);
Alert("Segundo: "    +(string)stm.sec);
Alert("Día de la semana: "+(string)stm.day_of_week);
Alert("Día del año: "  +(string)stm.day_of_year);

Re: Programando en mt5

Publicado: 01 Mar 2017 15:26
por Gamelu
Para hacer una bars, lo mas simple que se me ha ocurrido:


Código: Seleccionar todo

MqlRates rates[];
   ArraySetAsSeries(rates,true);
   CopyRates(Symbol(),Period(),0,Bars(Symbol(),Period()),rates); // Copied all datas
int bars;
bars= ArraySize(rates); 
Comment("Barras:",bars);
:lol:

Re: Programando en mt5

Publicado: 01 Mar 2017 15:27
por X-Trader
Joder, pues me parece que le van a dar por saco al Metatrader 5! :twisted:

Saludos,
X-Trader

Re: Programando en mt5

Publicado: 01 Mar 2017 15:28
por Gamelu
Es como si hubieran hecho un downgrade de mql4 a mql5 acojonante.

Re: iclose en mt5

Publicado: 01 Mar 2017 22:17
por OscarLA
Gamelu escribió:Una curiosidad es que los arrays de precios se copian a la inversa por defecto:

Close[5]=",myClose[0],
Close[4]=",myClose[1],
Close[3]=",myClose[2],
Close[2]=",myClose[3],
Close[1]=",myClose[4],
Close[0]=",myClose[5]

Para corregir esto se utiliza la función:

ArraySetAsSeries(myClose,true);

//quedaría asi:

Close[5]=",myClose[5],
Close[4]=",myClose[4],
Close[3]=",myClose[3],
Close[2]=",myClose[2],
Close[1]=",myClose[1],
Close[0]=",myClose[0]

¿Pero no se había de utilizar el CopyClose ???

Re: Programando en mt5

Publicado: 01 Mar 2017 22:36
por Gamelu
Si hay que utilizar el CopyClose , pero los datos de este se pasan a un Array, en este caso pasamos 10 barras.
double myClose[];
CopyClose(_Symbol, _Period, 0, 10, myClose);


Una vez los tienes en el array, en este caso le hemos llamado myClose, los puedes consultar por ejemplo, myClose[1] .