📄 bp神经网络预测公式源代码.txt
字号:
{三层网络:输入层节点数=4,输出层节点数=1,隐含层节点数=隐含层
Sigmoid,Purelin,Trainlm}
INPUT: 数据类型(4,1,4,1),隐含层(3,2,20,1),学习次数(2,1,100,1);
VARIABLE: 样本数=100, 首K线=DATACOUNT-样本数-3;
IF 首K线 < 1 THEN BEGIN
DRAWTEXTEX(ISLASTBAR,0,10,20,'股票上市时间太短,Κ线数量不足');
EXIT; {数据不足,直接退出}
END;
VARIABLE: 数据=IF(数据类型=4,C,IF(数据类型=2,H,IF(数据类型=3,L,O))), 最大=HHV(数据,样本数+3);
VARIABLE: 预测[4]=0, 权值学习率=0.2, 阀值学习率=0.02, EPOCH=0, POS=0, I=0, J=0;
VARIABLE: 权值1[隐含层*4]=RAND(10000)/10000-0.5, 权值2[隐含层]=RAND(10000)/10000-0.5;
VARIABLE: 输出2[隐含层]=0, 阀值2[隐含层]=RAND(10000)/10000-0.5, 德特2[隐含层]=0;
VARIABLE: 输出3[样本数]=0, 阀值3=RAND(10000)/10000-0.5, 德特3=0, 误差=0, 要求误差=0.2;
数据:=数据/最大*2-1; {数据归一化}
FOR EPOCH=1 TO 学习次数*10 DO BEGIN {网络学习}
误差:=0;
FOR POS=1 TO 样本数 DO BEGIN
FOR J=1 TO 隐含层 DO BEGIN
输出2[J]:=0;
FOR I=1 TO 4 DO 输出2[J]:=输出2[J]+数据[首K线+POS+I-2]*权值1[(J-1)*隐含层+I];
输出2[J]:=1/(1+EXP(-输出2[J]-阀值2[J])); {隐含层输出}
END;
输出3[POS]:=0;
FOR J=1 TO 隐含层 DO 输出3[POS]:=输出3[POS]+输出2[J]*权值2[J];
输出3[POS]:=输出3[POS]-阀值3; {学习结果,输出层输出}
德特3:=数据[首K线+POS+3]-输出3[POS];
误差:=误差+德特3*德特3; {计算误差}
FOR J=1 TO 隐含层 DO BEGIN
权值2[J]:=权值2[J]+权值学习率*德特3*输出2[J]; {调整权值}
德特2[J]:=德特3*权值2[J]*输出2[J]*(1-输出2[J]);
FOR I=1 TO 4 DO 权值1[(J-1)*隐含层+I]:=权值1[(J-1)*隐含层+I]+权值学习率*德特2[J]*数据[首K线+POS+I-2];
END;
阀值3:=阀值3+阀值学习率*德特3; {调整阀值}
FOR J=1 TO 隐含层 DO 阀值2[J]:=阀值2[J]+阀值学习率*德特2[J];
END;
误差:=误差/2;
IF 误差<=要求误差 THEN BREAK; {误差达到要求就退出,避免过度学习}
END;
FOR POS=1 TO 4 DO 预测[POS]:=数据[首K线+样本数-1+POS]; {取预测数据}
FOR POS=1 TO 样本数 DO 数据[首K线+POS+3]:=输出3[POS]; {返回学习结果}
FOR POS=1 TO 5 DO BEGIN {进行预测,共5个结果}
FOR J=1 TO 隐含层 DO BEGIN
输出2[J]:=0;
FOR I=1 TO 4 DO 输出2[J]:=输出2[J]+预测[I]*权值1[(J-1)*隐含层+I];
输出2[J]:=1/(1+EXP(-输出2[J]-阀值2[J]));
END;
输出3[POS]:=0;
FOR J=1 TO 隐含层 DO 输出3[POS]:=输出3[POS]+输出2[J]*权值2[J];
输出3[POS]:=输出3[POS]-阀值3;
FOR I=1 TO 3 DO 预测[I]:=预测[I+1]; {更换预测数据,提供下一次simulate}
预测[I]:=输出3[POS];
END;
BPNN: (数据+1)/2*最大,COLORYELLOW; {学习结果}
{MABP: MA((数据+1)/2*最大,5);} {也可以做适当的平均}
误差值: 误差,COLORGRAY,LINETHICK0; {误差,要求不要过大或者过小;下面是预测结果}
DRAWTEXT(ISLASTBAR,(输出3[1]+1)/2*最大,'·'),ALIGN0,SHIFT1,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,(输出3[2]+1)/2*最大,'·'),ALIGN0,SHIFT2,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,(输出3[3]+1)/2*最大,'·'),ALIGN0,SHIFT3,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,(输出3[4]+1)/2*最大,'·'),ALIGN0,SHIFT4,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,(输出3[5]+1)/2*最大,'·'),ALIGN0,SHIFT5,COLORMAGENTA,PXUP8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -