打字猴:1.700510737e+09
1700510737 数据科学家养成手册 [:1700503689]
1700510738 18.1.10 科学分析
1700510739
1700510740 1.导入数据
1700510741
1700510742 如果你会使用MT4平台的MQL语言做开发,就可以将MQL作为分析工具。MQL是MT4平台的专用语言工具,对于生成K线图上的各种参考指标,提供了非常多的method。MT4平台使用的自动交易脚本工具EA(Expert Advisor)就是用MQL语言实现的。在这里,我们使用MySQL作为数据载体,使用Python作为分析语言进行数据处理。
1700510743
1700510744 首先,在CentOS平台上安装MySQL和Python,然后挑选一种货币对作为分析对象。从网上可以买到一些1M粒度的外汇交易历史数据,不过数据质量通常一般,中间会有一些丢失的数据点,所以只要在确认缺失比例不太高的情况下就可以使用。
1700510745
1700510746 接着,把数据导入MySQL数据库。以我们研究的EUR/USD数据为例,其格式如图18-10所示。其中,“TICKER”字段为货币对名称,“DTYYYYMMDD”字段为日期,“TIME”字段为时间,“OPEN”字段为开盘价,“HIGH”字段为高点价,“LOW”字段为低点价,“CLOSE”字段为收盘价,“VOL”字段为成交量(在这个文件里没有意义)。
1700510747
1700510748
1700510749
1700510750
1700510751 图18-10 EUR/USD历史数据
1700510752
1700510753 下面我们就编写一段Python代码,将这些输入导入数据库。
1700510754
1700510755 建立数据库。
1700510756
1700510757 mysql> CREATE DATABASE FOREX;
1700510758
1700510759 建立数据表。
1700510760
1700510761 mysql> USE FOREX;mysql> CREATE TABLE EURUSD_1M(DT DATETIME,OPEN DECIMAL(10,4),HIGH DECIMAL(10,4),LOW DECIMAL(10,4),CLOSE DECIMAL(10,4));
1700510762
1700510763 编写Python代码并导入数据,编辑insert.py文件。
1700510764
1700510765 #!/usr/bin/pythonimport os,sys,MySQLdbtry db=MySQLdb.connect(host=‘localhost’, user=‘root’, passwd=‘111111’, db=‘FOREX’)      cursor=db.cursor()  counter=0  input_file=open(‘/ml/EURUSD.txt’,‘r’)        cursor.execute(‘USE FOREX;’)        for line in input_file:    counter=counter + 1    date=line.split(‘,’)[1]    time=line.split(‘,’)[2]    open_value=line.split(‘,’)[3]    high_value=line.split(‘,’)[4]    low_value=line.split(‘,’)[5]    close_value=line.split(‘,’)[6]    if date !=’<DTYYYYMMDD>’:      datetime=date[0:4] + ‘-‘ + date[4:6] + ‘-‘ + date[6:8] + ‘ ‘ + time[0:2] + ‘:’ + time[2:4] + ‘:’ + time[4:6]      sql=‘INSERT INTO EURUSD_1M VALUES(‘ + ‘”’ + datetime + ‘”’ + ‘,’ + open_value + ‘,’ + high_value + ‘,’ + low_value + ‘,’ + close_value + ‘);’      cursor.execute(sql)    if counter%2000==0:      db.commit()  db.commit()except MySQLdb.Error,e print “Error %s” %(e.args[0])  exit(1)cursor.close()db.close()
1700510766
1700510767 调用insert.py文件。
1700510768
1700510769 python insert.py
1700510770
1700510771 这个部分需要多花一些时间。在这个文件中有超过544万条数据,建议将MySQL调整到AUTOCOMMIT=0的状态,然后每2000条提交一次。
1700510772
1700510773 wc-l /root/Desktop/EURUSD.txt5447761 /root/Desktop/EURUSD.txt
1700510774
1700510775 2.观察数据
1700510776
1700510777 数据完全导入后,可以用聚合函数来观察,看看这些数据在一天内的波动是如何分布的。
1700510778
1700510779 使用vim命令编辑query.py文件。
1700510780
1700510781 vim query.py
1700510782
1700510783 编写Python代码,对每天的振幅进行统计。
1700510784
1700510785 #!/usr/bin/pythonimport os,sys,MySQLdb    try db=MySQLdb.connect(host=‘localhost’, user=‘root’, passwd=‘111111’, db=‘FOREX’)      cursor=db.cursor()  #result_set=cursor.fetchall()  #print result_set  counter=0  input_file=open(‘/ml/EURUSD.txt’,‘r’)        cursor.execute(‘USE FOREX;’)  sql=‘SELECT PIPS, COUNT(*)DAYS FROM  (SELECT       DATE_FORMAT(DT,”%Y-%m-%d”)AS THE_DATE,(MAX(HIGH)-MIN(LOW))*10000 AS PIPS FROM EURUSD_1M GROUP BY DATE_FORMAT(DT,”%Y-%m-%d”))AS TEMP GROUP BY PIPS;’;  cursor.execute(sql);  result=cursor.fetchall()  for row in result:    print str(row[0])+ ‘,’ + str(row[1])except MySQLdb.Error,e print “Error %s” %(e.args[0])  exit(1)cursor.close()db.close()
1700510786
[ 上一页 ]  [ :1.700510737e+09 ]  [ 下一页 ]