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
1700510874
第1个字段是当前时间;第2个字段是未来60分钟内的高点减去当前这一分钟收盘价的值,也就是涨幅;第3个字段是当前这一分钟的收盘价的值减去未来60分钟内的低点值;第4个字段是第2个字段值和第3个字段值的商,这个值可以粗略地分为正值较大(如图18-17所示)、正值较小(如图18-18所示)、负值较大(如图18-19所示)和负值较小(如图18-20所示)4种情况。
1700510875
1700510876
1700510877
1700510878
1700510879
1700510880
图18-17 正值较大 图18-18 正值较小 图18-19 负值较大 图18-20 负值较小 从形态上来看,我们肯定希望找到那些涨势/跌势明显的点。正值很大,表示明显的涨势;正值为1以内非常小的值,表示非常明显的跌势。在负值较小的情况下越接近1,说明涨势越明显;在负值较大的情况下越接近1(最大就是1),说明跌势越明显。正值且接近1的情况就不太好了,说明涨跌幅度相近,这非常不利于交易。所以,显然是幅度越大且涨跌态势越明确(不震荡)的情形是最好的下单入场点。
[
上一页 ]
[ :1.700510831e+09 ]
[
下一页 ]