Python, Yahoo finance, Metatrader

Foro dedicado a todo lo relacionado con la versión 4 de la plataforma de Metaquotes.
Responder
joselopezde
Mensajes: 460
Registrado: 20 Feb 2012 11:11

Python, Yahoo finance, Metatrader

Mensaje por joselopezde »

Hola a todos!!! habeis utilzado Python?? http://www.python.org/download/releases/2.7.3/
soy muy pero que muy novato en esto, pero sabéis si podría importar datos de Yahoo finance (vdax por ejemplo) a Metatrader?
mirad esto: http://goldb.org/ystockquote.html en teoría se puede, no? pero como?
saludos!
Avatar de Usuario
wenomeno
Mensajes: 125
Registrado: 27 Mar 2009 01:57

Re: Python, Yahoo finance, Metatrader

Mensaje por wenomeno »

no tengo ni #@#!%# idea de lo que preguntas, pero si te interesa en Coursera están dando cursos de programación en python, yo me he apuntado en uno que empezó hace dos semanas, pero el mes que viene empieza otro que da una universidad diferente, también habrá algún curso sobre programación e inversión
Pensar es el trabajo más duro que existe, por eso hay tan poca gente que lo hace.
Avatar de Usuario
cu6yu4
Mensajes: 632
Registrado: 10 Oct 2009 15:31
Ubicación: Barcelona

Re: Python, Yahoo finance, Metatrader

Mensaje por cu6yu4 »

Si tu fin último es importar a metatrader no te puedo ayudar mucho, pues los .hst donde se guardan los historiales del metatrader no sé manipularlos muy bien. Pero si buscas encontrarás algo ya hecho: en un googleazo he visto esto http://www.mql5.com/en/code/780 habrá más por ahí. Lo malo es que para estas coasa hay que saber algo de programación(muy elemental); porque a veces hay que tocar una coma, y si no sabes donde... PAra eso está la documentación en mql4.com y mql5.com... y no hay tantas funciones... En mql4 tienes FileOpenHistory y en mql5 no sé... quizás fileopen.

Por lo que recuerdo puede construirse un historial OFFLINE siguiendo el esquema del indicador que adjunté en http://www.forex.es/metatrader-herramie ... 95-80.html que solo lleva 1 dato, pero podrías añadir más. La cosa creo que está en el encabezado; que debe tener un largo específico(si cambias lo de cu6yu4 dentro puede que no te funciones(habría que corregir la diferencia de largo en espacios). No tengo el mt4 instalado, perdona la imprecisión.


Lo de python... encontrarás cosas hechas con el google (busca api yahoo python [la de google finance ha muerto]), en github.con, en code.google.com y en pypi.python.com(aquí se encuentran la mayoría de apquetes importante de python).

Si vas a utilizar python para calcular mejor bajarse un todo en uno del rollo anaconda (http://www.continuum.io/downloads.html) o pythonxy. Por que ya traen los paquetes que se usan para calcular. Creo que lo más complicado de python es saber cuales son los añadidos que buscar para cada cosa. numpy para trabajar eficientemente con arrays(como listas), h5py para la base de datos hdf5... y poca cosa más. Y s i acaso necesitas de gran poder de cálculo ya numexpr o numba cuando lo mejoren(en semanas)...el cython es algo más complejo.

Como manual creo que basta con "python para todos" y luego es meterse. Como ide lo más simple y directo es ninja ide o pyscripter. Yo uso el komodo edit; al que hay que hacerle un pequeño ajuste para que ejecute los scripts.
Uno es esclavo de sus palabras y dueño de sus silencios (José María García).
Avatar de Usuario
cu6yu4
Mensajes: 632
Registrado: 10 Oct 2009 15:31
Ubicación: Barcelona

Re: Python, Yahoo finance, Metatrader

Mensaje por cu6yu4 »

Esto... python está muy bien y es la mejor forma de hacerte tus manipulaciones y experimentos... pero para el caso presente, teniendo en cuenta que no sé como inyectar desde python los archivos .hst(que están comprimidos; no son texto plano) no sabría hacerlo sin lo del FileOpenHistory.

Por tanto es cuestión de bajarse el csv del periodo determinado(puede hacerse manualmente desde la web y con el pseudo-api [http://ichart.finance.yahoo.com/table.c ... .....sigue, buscar] . Vas a http://finance.yahoo.com/q/hp?s=YHOO le das bajar a csv y esa url del csv ya te indica como obtener lo que quieras cambiando el periodo, etc.

Ya con el .csv segur oque encuentras algo para pasarlo a historial offline. Por seguir con lo que adjunté... y ol o que haría es algo como(viendo la página http://forum.mql4.com/22834):

###########primero habro el csv y lo referencio(es algo raro esto de darle a un int, pero bueno)
ref = FileOpen("esecsvenelmismodirectorioqueelmql4.csv",FILE_CSV|FILE_READ,';');

#######leeremos cada linea del csv, que normalmente se separa por ese";".... normalmente...

##############abro ciclo que no parará mientras el puntero no esté en el final.
while(!FileIsEnding(ref))

################leemos una linea(el puntero pasará a la siguiente).
liniax = FileReadString(ref);

################como cada linia no tiene un ancho establecido hay que ir a por la posición de las comas..
pos1 = StringFind(",", liniax, 0);

################para averiguar la siguiente coma no puedo empezar otra vez por 0...
pos2 = StringFind(",", liniax, (pos1+1));

################vamos a extraer(obtener texto[string]) hasta la primera coma(ejemplo; hasta la posición 10[la excluye])
texto1 = StringSubstr(liniax, 0, pos1);

#################ahora de la primera coma a la segunda
texto2 = StringSubstr(liniax, (pos1+1), (pos2-pos1));

################### todo esto siguiendo los comandos en http://docs.mql4.com

dentro de cada vuelta del ciclo debemos obtener cada valor(open,close,high...) leidos desde el csv... y entonces debemos insertarlo en el en historial .hst con FileWriteInteger o FileWriteDouble. copio del citado mql4...

//---- variables
int ExtHandle,XVersion,XPeriod,XDigits,XUnused[13],XTime,XOpen,XLow,XHigh,XClose,XVolume;
string XCopyright,XSymbol;

//---- header
XVersion=400;
XCopyright="cu6yu4";
XSymbol="MARKET";
XPeriod=1;
XDigits=1;

ExtHandle=FileOpenHistory("MARKET1.hst",FILE_BIN|FILE_WRITE);

FileWriteInteger(ExtHandle,XVersion,LONG_VALUE);
FileWriteString(ExtHandle, XCopyright,64);
FileWriteString(ExtHandle,XSymbol,12);
FileWriteInteger(ExtHandle,XPeriod,LONG_VALUE);
FileWriteInteger(ExtHandle,XDigits,LONG_VALUE);
FileWriteInteger(ExtHandle,0,LONG_VALUE);
FileWriteInteger(ExtHandle,0,LONG_VALUE);
FileWriteArray(ExtHandle,XUnused,0,13);


Esto solo se escribe 1 vez y por tanto irá antes del citado ciclo while. Pero aquí tenemos para 1MIN y yahoo da cada 1440 minutos... SUPONGO que habrá que poner XPeriod=1440; pero eso también cambiará el largo de la cabecera... ahora no sé...

En todo caso debemos repetir (osea, dentro el ciclo):

//---- data
XTime=StrToTime("2020.01.01 00:00");
XOpen=1;
XLow=1;
XHigh=1;
XClose=1;
XVolume=1;

FileWriteInteger(ExtHandle,XTime,LONG_VALUE);
FileWriteDouble(ExtHandle,XOpen,DOUBLE_VALUE);
FileWriteDouble(ExtHandle,XLow,DOUBLE_VALUE);
FileWriteDouble(ExtHandle,XHigh,DOUBLE_VALUE);
FileWriteDouble(ExtHandle,XClose,DOUBLE_VALUE);
FileWriteDouble(ExtHandle,XVolume,DOUBLE_VALUE);


###########entendiendo que XOpen, XLow... etc los conseguiriamos leyendo el csv. teniendo tambie´n en cuentas que antes tendremos que pasar del formato texto tipo "2012-03-08" a un integer(natural) que indica el tiempo... los segundos desde el 1 de enero del 1970(creo recordar). Esto se consigue con la función StrToTime (http://docs.mql4.com/convert/StrToTime).

Vemos que http://docs.mql4.com/convert/StrToTime demanda una entrada en el formato "yyyy.mm.dd" cuando lo nuestro sería seguramente "yyyy-mm-dd". Por suerte las posiciones(de 2-2) en yahoo(csv)no cambian con lo que...

###########repetimos... con cada tramo de la fecha...
year = StringSubstr(texto1, 0, 4);

############luego toca formar ya un texto con puntos...
date_string = StringConcatenate(year, ".", month, ".", day)

############Y con esto ya obtenemos la fecha en segundos
date_int = StrToTime("date_string")

############siempre que luego nos acepten meses y dias que empiezen por 0. si no antes...
if (StringSubstr(month, 0, 1) == 0) {month = StringSubstr(month, 1, 2)

.............
.................

Y si tod ova bien por ahí iría la cosa. Esta es la solución que ahora mismo se me ocurre, pero probablemente encuentres por ahí un producto ya hecho... de .csv a .hst
Uno es esclavo de sus palabras y dueño de sus silencios (José María García).
Avatar de Usuario
yokinfx
Mensajes: 22
Registrado: 14 Nov 2012 18:02

Re: Python, Yahoo finance, Metatrader

Mensaje por yokinfx »

Tambien puede que te interese esto:

https://sites.google.com/site/prof7bit/ ... ntegration

Pero no entiendo muy bien por que quieres hacer esto. ¿Es porque los historicos que te provee MetaTrader 4 son incorrectos, tienen agujeros, o similar? ¿O es por otro motivo?

Imagino que sera posible hacer lo que quieres hacer, puesto que hay en Internet articulos sobre como importar historicos de, por ejemplo, Dukascopy (en este mismo Foro puedes buscar por Birt o por historicos al 99%), pero es una tarea de investigacion en la que no me he metido. Creo que el script de Birt para convertir los historiales es un buen punto de partida para investigarlo.

Saludos!

joselopezde
Mensajes: 460
Registrado: 20 Feb 2012 11:11

Re: Python, Yahoo finance, Metatrader

Mensaje por joselopezde »

quiero meter históricos de un activo que no tiene Metatrader
Avatar de Usuario
agmageton
Mensajes: 3578
Registrado: 30 Ene 2008 11:32

Re: Python, Yahoo finance, Metatrader

Mensaje por agmageton »

Si es del yahooo fianance este archivo te baja directamente los historicos en archivo de texto para el metatrader y otras plataformas.(no se si tienes contratado el tiempo real del yahoo finance, sino te los baja en barras diarias)


Tienes que poner la fecha quieres que te baje desde ....

y luego en la otra pagina, poner el ticker que quieres bajar por ejemplo indice nasdaq 100= ^NDX

luego poner procesar y te baja todos los tickers que tu quieras a un archivo de texto.

saludos
Adjuntos
historicaldatadownloader.xls
(80 KiB) Descargado 231 veces
La entrada te da la probabilidad y la salida la rentabilidad...
joselopezde
Mensajes: 460
Registrado: 20 Feb 2012 11:11

Re: Python, Yahoo finance, Metatrader

Mensaje por joselopezde »

agmageton escribió:Si es del yahooo fianance este archivo te baja directamente los historicos en archivo de texto para el metatrader y otras plataformas.(no se si tienes contratado el tiempo real del yahoo finance, sino te los baja en barras diarias)


Tienes que poner la fecha quieres que te baje desde ....

y luego en la otra pagina, poner el ticker que quieres bajar por ejemplo indice nasdaq 100= ^NDX

luego poner procesar y te baja todos los tickers que tu quieras a un archivo de texto.

saludos
pero es que lo que quiero es meterlo dentro de Metatrader, eso es posible? o hacer un indicador o EA a partir de él...
Avatar de Usuario
yokinfx
Mensajes: 22
Registrado: 14 Nov 2012 18:02

Re: Python, Yahoo finance, Metatrader

Mensaje por yokinfx »

joselopezde escribió:quiero meter históricos de un activo que no tiene Metatrader
Es bastante interesante lo que quieres hacer. No se si es posible. Lo que para mi resulta evidente es que no te va a bastar simplemente con descargarte el historico. Si tu MT4 no tiene ese instrumento financiero, vas a tener que tocar otros ficheros de configuracion de la plataforma para que te aparezca que te puedes suscribir a el y que puedes correr backtests sobre ese instrumento.

Veo tu tarea de investigacion bastante laboriosa, hazme saber si sigues adelante con ella y consigues algo (bueno, ya estare atento yo de este hilo del foro).

Si ves que es demasiado trabajo, ¿te has planteado usar una plataforma distinta de mt4 que SI que tenga ese valor? ¿Conoces la web de Quantopian? Ahi va: https://www.quantopian.com/

Como quizas puedes suponer a partir de lo que he dicho, no me gusta la palabra "imposible". Lo que pretendes no creo que sea imposible. Simplemente, es dificil. Creo que hay otros metodos mas faciles para hacer lo que pretendes, como usar quantopian o cualquier otra plataforma que si que disponga de ese valor.
Avatar de Usuario
X-Trader
Administrador
Mensajes: 12781
Registrado: 06 Sep 2004 10:18
Contactar:

Re: Python, Yahoo finance, Metatrader

Mensaje por X-Trader »

joselopezde escribió:quiero meter históricos de un activo que no tiene Metatrader
Has echado un vistazo a este artículo?

https://www.x-trader.net/articulos/soft ... rader.html

Saludos,
X-Trader
"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
cu6yu4
Mensajes: 632
Registrado: 10 Oct 2009 15:31
Ubicación: Barcelona

Re: Python, Yahoo finance, Metatrader

Mensaje por cu6yu4 »

Viendo los creadores de quantopian, lo más fácil es creer que le pega 1000 patadas al metatrader. Lo que pasa es que está en beta y aún no incorpora los históricos de forex y demás; habrá que ver.

No me lo he mirado... y es posible que al ser online no tenga muchas opciones de interacción; y utilizará(presupongo) una versión recortada y sin posibilidad de plugins del python. Pero es que los creadores son mis ídolos en cuanto a la manipulación de series de datos... y el metatrader es un caca de la vaca.
Uno es esclavo de sus palabras y dueño de sus silencios (José María García).
joselopezde
Mensajes: 460
Registrado: 20 Feb 2012 11:11

Re: Python, Yahoo finance, Metatrader

Mensaje por joselopezde »

X-Trader escribió:
joselopezde escribió:quiero meter históricos de un activo que no tiene Metatrader
Has echado un vistazo a este artículo?

https://www.x-trader.net/articulos/soft ... rader.html

Saludos,
X-Trader
Sí, pero eso serviría solo para trabajar con históricos no? lo suyo es que se actualice en tiempo real...aunque sea en timeframe diarios
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Metatrader 4”