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
1700510787
调用query.py文件。
1700510788
1700510789
python query.py>amp_group.csv
1700510790
1700510791
下载该文件并使用Excel打开。如图18-11所示,在这个Excel文件中,A列是每天的波动幅度(单位是“点”,即“pip”),B列是在这4848个交易日中有多少天有对应的波动幅度。
1700510792
1700510793
1700510794
1700510795
1700510796
图18-11 波幅统计表
1700510797
1700510798
如果感觉这样不够直观,那就画幅柱状图来看看。如图18-12所示,横坐标是波动的点数,纵坐标是波动点数对应的天数。这个图形中间凸起的部分看上去有点像正态分布,中点在80左右(平均值不是80,实际的平均值比80要大),极高波幅日的出现是小概率事件,绝大部分交易日的波幅都在225个点以内。大部分日子的波幅比较小,就是左侧的这个高点,中点在9附近。
1700510799
[
上一页 ]
[ :1.70051075e+09 ]
[
下一页 ]