打字猴:1.700510824e+09
1700510824 在这里我们只尝试使用一种模型进行分析,主要目的是演示分析和建模的过程,以及给出评价模型质量的思路。其他的方式希望读者能触类旁通,自己尝试。
1700510825
1700510826 建立滑动窗口
1700510827
1700510828 建立一个滑动窗口,用这个窗口来捕捉那些在一定时间内涨幅或跌幅达到一定幅值的时间段。在这个环节,首先可以尝试找出在1小时内涨幅超过10点的“小涨”,涨幅超过20点的“大涨”,以及涨幅超过40点的“暴涨”,看看所有的数据中有多少能够满足这样的条件。重复一下:这种假说只是一种假设,肯定还有其他分类方法。
1700510829
1700510830 在字段DT上添加一个索引,以加快检索速度。
1700510831
1700510832 ALTER TABLE EURUSD_1M ADD INDEX IDX_DT(DT);
1700510833
1700510834 编写Python代码,实现滑动窗口。
1700510835
1700510836 #!/usr/bin/pythonimport os,sys,MySQLdb    try db=MySQLdb.connect(host=‘localhost’, user=‘root’, passwd=‘111111’, db=‘FOREX’)      cursor=db.cursor()  input_file=open(‘/ml/EURUSD.txt’,‘r’)      cursor.execute(‘USE FOREX;’)  sql=‘SELECT * FROM EURUSD_1M’  cursor.execute(sql);  result=cursor.fetchall()  for i in range(0, cursor.rowcount):    startdt=str(result[i][0])    startpip=str(result[i][4])    cursor1=db.cursor()    cursor1.execute(‘USE FOREX;’)    sql1=‘SELECT MAX(HIGH)-‘ + startpip + ‘ AS RISE_PIP, ‘ + startpip + ‘-MIN(LOW)AS FALL_PIP, CASE WHEN ‘+ startpip + ‘<>MIN(LOW)THEN(MAX(HIGH)-‘ + startpip + ‘)/(‘ + startpip + ‘-MIN(LOW))ELSE(MAX(HIGH)-‘ + startpip + ‘)/0.0001 END FROM EURUSD_1M WHERE DT BETWEEN ”’ + startdt + ’”AND DATE_ADD(”’ + startdt + ’”, INTERVAL 60 MINUTE)’    cursor1.execute(sql1)    result1=cursor1.fetchall()    if result1[0][0]>=0.0040:      output=‘RISE3’    elif result1[0][0]>=0.0020:      output=‘RISE2’    elif result1[0][0]>=0.0010:      output=‘RISE1’    elif result1[0][1]>-0.0010:      output=‘NONE’    elif result1[0][1]<=-0.0010:      output=‘FALL1’    elif result1[0][1]<=-0.0020:      output=‘FALL2’    elif result1[0][1]<=-0.0040:      output=‘FALL3’        output=startdt + ‘,’ + str(result1[0][0])+ ‘,’ + str(result1[0][1])+ ‘,’ + output + ‘,’ + str(result1[0][2])    print output    cursor1.close()except MySQLdb.Error,e print “Error %s” %(str(e.args[0])+’:’+str(e.args[1]))  exit(1)cursor.close()db.close()
1700510837
1700510838 这个滑动窗口实现的是:从数据中的第1分钟开始滑动,窗口大小为60分钟,每次滑动1分钟,每次滑动都要看向这一分钟后窗口内的波动情况,查看其中的HIGH和LOW与当前收盘价CLOSE的关系。这种关系大致上分3种情况。
1700510839
1700510840 第1种情况是CLOSE在HIGH与LOW之下,这是一种比较明显的涨势,如图18-13所示。
1700510841
1700510842
1700510843
1700510844
1700510845 图18-13 CLOSE在HIGH与LOW之下
1700510846
1700510847 第2种情况是CLOSE在HIGH与LOW之间,这是一种“震荡”的态势,如图18-14所示。
1700510848
1700510849
1700510850
1700510851
1700510852 图18-14 CLOSE在HIGH与LOW之间
1700510853
1700510854 第3种情况是CLOSE在HIGH与LOW之上,这是一种“下跌”的态势,如图18-15所示。
1700510855
1700510856
1700510857
1700510858
1700510859 图18-15 CLOSE在HIGH与LOW之上
1700510860
1700510861 通过滑动窗口把这3种情况在每一分钟“向后看”的过程中都找出来。在这里,为了给出一个相对清晰的分类,把态势分成了7种,分别是涨幅超过40个点(RISE3)、涨幅超过20个点(RISE2)、涨幅超过10个点(RISE1)、涨跌幅度在10个点以内(NONE)、跌幅超过10个点(FALL1)、跌幅超过20个点(FALL2)和跌幅超过40个点(FALL3)。
1700510862
1700510863 调用这个Python文件,把内容输出到一个名为slidewindow.csv的文件中去。
1700510864
1700510865 python slidewindow.py>slidewindow.csv
1700510866
1700510867 下载文件,如图18-16所示。
1700510868
1700510869
1700510870
1700510871
1700510872 图18-16 sIidewindow.csv文件内容
1700510873
[ 上一页 ]  [ :1.700510824e+09 ]  [ 下一页 ]