1700511004
1700511005
在这里,我们填充SLIDESHOW_15M表的逻辑和填充SLIDESHOW表的逻辑相同,只是向后看的周期调整到了15分钟,其他逻辑则没有没变化。
1700511006
1700511007
建立表EURUSD_TRAINING_15M。
1700511008
1700511009
CREATE TABLE EURUSD_TRAINING_15MSELECT EURUSD_1M.DT, OPEN, HIGH, LOW, CLOSE, RISE_PIP, FALL_PIP, PROPORTION FROM EURUSD_1MINNER JOIN SLIDEWINDOWONEURUSD_1M.DT=SLIDEWINDOW.DT;
1700511010
1700511011
F和R两个字段分别作为跌幅FALL和涨幅RISE的分类标记,后面很快会用到。
1700511012
1700511013
在进行分类标注之前,我们看一下这15分钟内的涨跌数据都在什么范围内集中。
1700511014
1700511015
mysql> SELECT COUNT(*), F, R FROM(SELECT FALL_PIP DIV 0.0010 AS F, RISE_PIP DIV 0.0010 AS R FROMEURUSD_TRAINING_15M)R GROUP BY F, R;+–––-+––+––+| COUNT(*)| F | R |+–––-+––+––+| 3920354 | 0 | 0 || 571240 | 0 | 1 || 112985 | 0 | 2 || 30347 | 0 | 3 || 10061 | 0 | 4 || 3834 | 0 | 5 || 1605 | 0 | 6 || 858 | 0 | 7 || 411 | 0 | 8 || 260 | 0 | 9 || 169 | 0 | 10 || ……| 6 | 16 | 0 || 3 | 16 | 1 || 14 | 17 | 0 || 1 | 17 | 1 || 2 | 18 | 0 || 2 | 19 | 1 || 1 | 20 | 0 || 1 | 20 | 1 || 1 | 21 | 0 || 1 | 21 | 1 || 1 | 22 | 0 || 1 | 22 | 7 || 1 | 23 | 2 |+–––-+––+––+179 rows in set(4.14 sec)
1700511016
1700511017
这是用10个点做分割的最小区间来做的,涨跌幅度看后面的F和R就知道了。例如,“| 3920354 | 0 | 0 |”这一条,表示涨跌都在10个点以内的振幅小且方向不确定的数据超过392万条,占全部样本的72%。不得不说,这个比例实在是太大了,相当于其他178个分类总共才占28%——这是一个非常“倾斜”的分类方式。
1700511018
1700511019
我们可以尝试再做一下细分,用5个点作为一个分档。
1700511020
1700511021
mysql> SELECT COUNT(*), F, R FROM(SELECT FALL_PIP DIV 0.0005 AS F, RISE_PIP DIV 0.0005 AS R FROMEURUSD_TRAINING_15M)R GROUP BY F, R;+–––-+––+––+| COUNT(*)| F | R |+–––-+––+––+| 1916865 | 0 | 0 || 895584 | 0 | 1 || 334411 | 0 | 2 || 134729 | 0 | 3 || 60612 | 0 | 4 || 29028 | 0 | 5 |……| 894166 | 1 | 0 || 213739 | 1 | 1 || 71067 | 1 | 2 || 31033 | 1 | 3 || 15198 | 1 | 4 |……| 4 | 34 | 0 || 1 | 34 | 1 || 1 | 34 | 3 || 9 | 35 | 0 || 1 | 37 | 0 || 1 | 37 | 1 || 1 | 38 | 2 || 1 | 38 | 3 || 1 | 40 | 0 || 1 | 40 | 2 || 1 | 42 | 1 || 1 | 42 | 3 || 1 | 44 | 0 || 1 | 44 | 14 || 1 | 46 | 4 |+–––-+––+––+513 rows in set(4.31 sec)
1700511022
1700511023
在这个划分中,虽然涨跌都在5个点的分类“| 1916865 | 0 | 0 |”仍然有191万条记录,但是占比已经下降到35%左右。
1700511024
1700511025
下面,我们用其他处理技巧作为辅助,继续这个熵减过程。
1700511026
1700511027
ALTER TABLE EURUSD_TRAINING_15M ADD COLUMN(F INT);ALTER TABLE EURUSD_TRAINING_15M ADD COLUMN(R INT);UPDATE EURUSD_TRAINING_15M SET R=RISE_PIP DIV 0.0005, F=FALL_PIP DIV 0.0005;COMMIT;
1700511028
1700511029
要想给EURUSD_TRAINING_15M这个表上加上标签,可以先画一个表,看看它们的分布是什么样子(如图18-21所示)。
1700511030
1700511031
1700511032
1700511033
1700511034
图18-21 分类分布
1700511035
1700511036
我是这样做的:把F和R两种数值在二维表格中画出来,在没有做任何分类之前,整个表格出现的都是“0”这个类别,即熵最大的情况;“1”是对角线的部分,就是F和R振幅相当的情况;右下侧的部分是振幅很大(虽然两侧振幅不相等,但是幅度很大)的分类,明显是震荡盘面,不适合下单;“2”和“3”是单边振幅明显较大的分类,“2”是上涨,“3”是下跌;“4”和“5”分别是涨幅6~10个点与跌幅0~5个点的分类、跌幅0~5个点与涨幅6~10个点的分类,仍属于单方面比较确定的方向,只不过是幅度很小的情况。
1700511037
1700511038
对其他分类,分别按照其R和F的标识即可进行标注。从理论上说,除了“0”和“1”两个分类以外,其他的分类都可以尝试入场。
1700511039
1700511040
用SQL做一下更新。
1700511041
1700511042
#WHITEUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=0;#YELLOWUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=1WHERE R>=10 AND F>=10;UPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=1WHERE ABS(R-F)<=1;#RED-RUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=2WHERE R>=F+10;#RED-FUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=3WHERE F>=R+10;#CYAN-RUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=4WHERE R=1 AND F=0;#CYAN-FUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=5WHERE R=0 AND F=1;#GREEN-RUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=6WHERE R=2 AND F=0;#GREEN-FUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=7WHERE R=0 AND F=2;#BLUE-RUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=8WHERE R=3 AND F=0;UPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=8WHERE R=2 AND F=1;#BLUE-FUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=9WHERE R=0 AND F=3;UPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=9WHERE R=1 AND F=2;#PURPLE-RUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=10WHERE R=4 AND F=0;UPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=10WHERE R=3 AND F=1;#PURPLE-FUPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=11WHERE R=0 AND F=4;UPDATE EURUSD_TRAINING_15MSET CLASSIFICATION=11WHERE R=1 AND F=3;
1700511043
1700511044
将这些训练样本导出为文本,编辑文件make_file_15m.py。
1700511045
1700511046
import os,sys,MySQLdbimport numpy as npdb=MySQLdb.connect(host=‘localhost’, user=‘root’, passwd=‘111111’, db=‘FOREX’)cursor=db.cursor()cursor.execute(‘USE FOREX;’)sql=‘SELECT * FROM EURUSD_TRAINING_15M;’cursor.execute(sql)result=cursor.fetchall()for i in range(cursor.rowcount): printstr(result[i][0])+’,’+str(result[i][1])+’,’+str(result[i][2])+’,’+str(result[i][3])+’,’+str(r esult[i][4])+’,’+str(result[i][5])+’,’+str(result[i][6])+’,’+str(result[i][7])+’,’+str(result[i][8])cursor.close()db.close()
1700511047
1700511048
在Shell下调用。
1700511049
1700511050
python make_file_15m.py >> record_15M.txt
1700511051
1700511052
截断文件,只保留最后的350万条记录。
1700511053
[
上一页 ]
[ :1.700511004e+09 ]
[
下一页 ]