NeuroPro 的程序早在 1998 由一家俄国研究院编写,至今仍有现实意义。
它可以有效地运行在 Windows XP, Vista 和 Windows 7。我无法告知它在以后的 Windows 版本里如何工作,因为我没有测试它。
图例. 1. 关于 NeuroPro
版本 0.25 是免费的,且可以在许多互联网的网站上找到。NeuroPro 可以创建 带有 S 形曲线激活函数的多层神经网络。如果您刚开始学习神经网络,在此阶段您无需更多功能。应该牢记的是 NeuroPro 的接口使用俄语,且并没有被翻译成其它语言。
神经网络可以在一个数据阵列上训练,然后用另外一个测试。对于交易者,它的基本特点是可以快速了解所选网络结构是否易于过渡匹配,且它是否可以在历史数据之外稳定交易,如,在实盘账户上。
那些喜欢深度挖掘的人,有机会看到神经网络的潜力,以及网络输入对最重要操作结果的影响。初学者不需要这一点,他们可以跳过程序部分。对于有经验的交易者,这些信息有助于他们寻找圣杯,因为这让他们设想什么样的形态可由神经网络识别,并且看看何处他们能继续自己的探索。
此外,除了各种设置以及类似网络结构的有用工具,在 NeuroPro 里没有显著特点。这些菜单并非强制使用,所以新手无须复杂设置,使用省缺设置就可以了。
从一名交易者的角度来看,NeuroPro 只有一个缺点 - 缺乏与 MetaTrader 5 的集成。实际上,这篇文章专注于从 MetaTrader 5 加载市场和指标数据至 NeuroPro,然后把接收到的神经网络转化为一个 MQL5 的 EA。
话题继续推进, 我可以说我们将要利用 NeuroPro 创建的神经网络, 将转换所有神经元权重至一个 MQL5 脚本 (不像任何其它神经网络程序,系统包含 DLL)。它将确保高速工作以及使用最小的电脑资源。这是使用 NeuroPro 的一个明显优势。它可以用于创建任何交易策略,甚至那些需要即刻作出决定的剥头皮 EA。
在本文中,我们不准备讨论剥头皮,因为创建、训练和测试剥头皮 EA 的过程涉及很多特殊性,这超出了本文内容。
出于教学目的,我们将创建一个简单的 EA,目标货币对 EURUSD,H1 时间帧。所以, 我们的 EA 分析最后 24 根柱线, 即最后一天的市场行为, 预测随后数小时的价格走势方向, 之后基于此信息进行交易。
支持的数据格式
NeuroPro 仅读取 DBMS 格式 (Paradox 的 DBMS 数据表) 和 DBF (FoxPro 和 dBase 的 DBMS 数据表) 的数据。DBF 是世界上最常见的格式,如果您是一个有经验的程序员,您一定已经与它相遇过多次。我们也将使用这种格式。
在 NeuroPro 中数据传送的算法如下所示:
从 MetaTrader 加载数据
在写加载数据的脚本时,一些细节应考虑:
以下的现成脚本用于测试我们的策略 (它也附加在本文之中):
#property script_show_inputs //+------------------------------------------------------------------+ input string Export_FileName = "NeuroPro\\data.csv"; // EA 文件 (在 "MQL5/Files" 文件夹) input int Export_Bars_Skip = 0; // EA 之前要跳过的历史柱线数量 input int Export_Bars = 5000; // EA 的柱线数 //+------------------------------------------------------------------+ const int inputlen=24; // 交易策略分析的过去柱线数量 //+------------------------------------------------------------------+ void OnStart() { //--- 创建文件 int file=FileOpen(Export_FileName,FILE_WRITE|FILE_CSV|FILE_ANSI,','); if(file!=INVALID_HANDLE) { //--- 写数据头部 string row="date"; for(int i=0; i<=inputlen; i++) { if(StringLen(row)) row+=","; //======================================================== // 注意! // 在 EA 里用 [] 替代下划线 // DBase 格式的字段名不能超过 11 个字符。截断至 10。 // DBase 格式的最大字段数量是 128-512, 依据版本。 //======================================================== StringConcatenate(row,row,"Bar___",i,"__"); } FileWrite(file,row); //--- 从历史中复制所需数据 MqlRates rates[],rate; int count=Export_Bars+inputlen; if(CopyRates(Symbol(),Period(),1+Export_Bars_Skip,count,rates)<count) { Print("Error!Insufficient historical data for exporting required data."); return; } ArraySetAsSeries(rates,true); //--- 写数据 for(int bar=0; bar<Export_Bars; bar++) { row=""; //--- 第一根柱线的收盘价格将作为其它柱线归一化的零级 double zlevel=rates[bar+1].close; for(int i=0; i<=inputlen; i++) { if(StringLen(row)) row+=","; rate=rates[bar+i]; if(i==0) row+=TimeToString(rate.time,TIME_DATE || TIME_MINUTES)+","; row+=DoubleToString(rate.close-zlevel,Digits()); } FileWrite(file,row); } FileClose(file); Print("Data export successfully completed."); } else Print("Error!Failed to create a file for data export. ",GetLastError()); }
现在让我们在终端里启动它。成功完成后,它将在 EA 的日志里写一条相应消息。
由脚本生成的数据文件中大概包含以下。
在第一个字符串里是数据表的字段名称; 然后按照这些字段的值用逗号分割字符串:
从 CSV 转换到 DBF
有许多方式能够这样做。
上述所有方法都很直观,应该很容易使用。
我将用列出的方法之一进行转换。我将用最后一个,因为 NeuroPro 是一款免费程序,且隐藏在免费的 Calc 背后的想法最接近它。您可以从官网下载 OpenOffice - http://www.openoffice.org/。
转换过程。
此处的另一要点是整数和数字的小数部分分隔符。按我电脑上的配置 ("开始" > "控制板" > "语言和区域标准"), 圆点作为分隔符。在我们的 CSV 文件里我们也用圆点。为了 Calc 能够正确读取数字, 分隔符也必须指定。这可以通过在转换向导的设置里选择所需的语言来完成。选择英语的变种之一,因为圆点在其中是一个标准的分隔符。
正确的向导的设置显示在屏幕截图:
图例. 2. 从 CSV 文件导入向导的设置
提示: 跳过每次 CSV 文件转换时的语言选择, 它可以在 Calc 设置里设为省缺语言: 菜单 "工具" > "选项", 之后如截图里绿色加亮部分:
图例. 3. 在 Calc 中的所在地设置
4)所以, CSV 文件已经上载,数据自动填入各列:
图例. 4. 成功打开 CSV 文件
5)为确保数据正确按照 DBF 格式写入,它们的类型和精度也要指定。
为此,在截图里所有的数字列以绿色加亮并分配相应属性:
图例. 5. 设置数字列
6)保存 DBF: 菜单 "文件" > "保存为"。在对话窗口里选择文件类型 "dBase (*.dbf)":
图例. 6. 按照 DBF 格式保存文件的对话框
之后按下 "保存"。
7)Calc 将提问并确认选择的格式:
图例. 7. Calc 建议用标准的 ODF 格式替代 DBF 来保存文件。
确认我们的选择,只需按下 "保留当前格式" 按钮。
8)Calc 会询问在 DBF 文件中采用什么编码保存文本数据。由于在我们的例子中没有此类数据,且神经网络无论如何不可能使用文本数据,您可以任意指定:
图例. 8. 选择文件文本的编码
现在,我们有了神经网络所需的,包含来自 MetaTrader 数据的 DBF 扩展文件。
1)开启 NeuroPro。
2)创建一个工程项目: 菜单 "文件" > "创建":
图例. 9. 空项目已创建
3)在项目窗口里按下 "打开数据文件" 按钮并在出现的对话框里打开 DBF 文件:
图例. 10. 打开进一步神经网络要用到的 DBF 文件
4)在项目窗口里点击 "新网络"。在打开的窗口里有两栏。我们要首先填充 "输入和输出" 栏。
在 "Bar___0__" 字段里指定它作为该网络的输出神经元。其余的字段 "Bar___N__" 将指定为输入:
图例. 11. 神经网络的输入输出配置
我们也可以指定输出神经元所要求的精度。在外汇中它是 1 点,即我们案例中的 0.0001。
5)现在我们移至 "网络结构" 栏。此处是中间层的数量 (排除输入和输出层) 并可以为它们指定神经元数量。在这个特殊的学习例子里,我们要创建 3 层,每层包含 20 个神经元:
图例. 12. 神经网络层的配置
6)按下 "创建" 按钮,网络准备就绪:
图例. 13. 一个新造并设置好的神经网络出现在项目里
7)进入 "神经网络" 菜单 > "测试", 来看看一个新的未经训练的网络如何利用产生的价格预测进行拷贝。
测试结果表明, 未经训练的神经网络以指定的精度 (误差不超过 1 点) 预测价格, 低于 5% 的情况。平均, 一次价格预测误差在 10 点上下:
图例. 14. 未经训练的神经网络预测精度统计
8)现在我们就来基于我们的数据训练网络。
再次进入项目窗口并在菜单按下: "神经网络" > "训练"。一个学习进度指示器将会出现。等待过程结束:
图例. 15. 神经网络的学习进度指示器
9)回到项目窗口并进入 "神经网络" > "测试"。
网络已经显著改善: 它的价格预测在 16% 的情况下准确, 平均预测误差为 4 点:
图例. 16. 训练的神经网络预测精度统计
网络已经学到了一些事情。我们将它转移到 MetaTrader。
NeuroPro 对 MetaTrader 5 一无所知,且不能直接为其传送神经网络。我已经制定出一种半自动方式来将神经网络转换到 MQL5 代码片断。
不像许多其它的神经网络的程序, NeuroPro 能够以文本的形式显示神经网络结构。它是一组公式,顺序描述从输入那一刻直到离开网络的所有数据变换。公式包括每一层, 每一个神经元, 每一个替换 (已训练) 的连接权值。
要查看它, 进入"神经网络" > "语言表达" 菜单。在我们的案例中,该公式如下:
图例. 17. 经训练的神经网络的工作确定公式
实际上,这组公式可以被认为是用一种抽象的编程语言编写的程序源代码。所有我们需要做的就是修改这个代码,让它的语法匹配 MQL5。这些修改可以在任何文本编辑器中进行。为了部分自动化这个过程中,我建议使用能够执行大规模词组替换的编辑器。它可以用这些完成: Word, 它是免费版的写字板 (来自 OpenOffice 套装), Excel, Calc 和 Windows 里的记事本。
我相信您可自行将这些公式改写为 MQL5 代码, 不过我可以分享我的一些经验来优化这个过程, 您可以更快地做到这一点。
在我的例子中,我将使用 Windows 7 里的记事本。
1)因此,我们在 NeuroPro 里有一个打开的项目和经过训练的神经网络。我们进入 "神经网络" > "语言表达", 打开的公式窗口 (参看上面的截图)。
2)保存这个窗口的内容: 菜单 "文件" > "保存为"。
3)现在,用记事本打开这个文件。
4)调用语句替换功能: 菜单 "编辑" > "替换"。
替换列表完成:
替换什么 | 替换为 | 注释 |
---|---|---|
___ | [ | 三重下划线 |
__ | ] | 双重下划线 |
-- | - - | 两个减号 (扣除公式中负数) 用空格分开, 因为在 MQL 里双减号 (其它语言如 C 也一样) 有双重含义, 这会导致编译错误。 |
Sigmoid | Sigmoid | 翻译函数名至拉丁文 (提醒您, 程序是俄语。尽管没必要, 因为 MetaEditor 也支持西里尔) |
Syndrom | Syndrome | 翻译变量名为拉丁文 (再次, 这一点不重要, 因为 MetaEditor 也支持西里尔) |
图例. 18. 用方括弧替换三重下划线
使用 "替换所有" 按钮来执行替换。
现在您应该理解我命名价格字段为 "BAR___N__" 以便快速用方括弧来替换下划线, 即所有网络输入表示为数组。
这比用一些独立的变量数字更容易声明数组,以及用价格序列数据填充它。
5)正如我前面提到的,所有输入和输出枚举必须要改为数组声明:
之前 | 之后 |
---|---|
数据基本字段 (初期特征): BAR[1] BAR[2] BAR[3] BAR[4] BAR[5] BAR[6] BAR[7] BAR[8] BAR[9] BAR[10] BAR[11] BAR[12] BAR[13] BAR[14] BAR[15] BAR[16] BAR[17] BAR[18] BAR[19] BAR[20] BAR[21] BAR[22] BAR[23] BAR[24]
数据基本字段 (终极特征): BAR[0] | double BAR [25]; |
6)神经元的激活函数,必须像 MQL5 的程序函数:
之前 | 之后 |
---|---|
Sigmoid1(A)=A/(0.1+|A|) Sigmoid2(A)=A/(0.1+|A|) Sigmoid3(A)=A/(0.1+|A|) |
double Sigmoid1 (double A) { return A/(0.1 + MathAbs(A)); } double Sigmoid2 (double A) { return A/(0.1 + MathAbs(A)); } double Sigmoid3 (double A) { return A/(0.1 + MathAbs(A)); } |
7)根据 MQL5 规则,分号必须放在所有公式的末端,注释必须正确地书写(或删除),而且所有初始化的变量要添加类型声明。
在我们的例子中,仅在中间层的神经元名称未声明类型。我们将再次使用大量文字替代,而不是手动输入 "double" 60 次。我们需要加亮神经元名字的开头 (字符串前的空白也要加亮, 因为单词 "double" 不需要插入这里):
图例. 19. 用于替换的加亮文本
复制文本的加亮部分,将其插入文本替换对话框,请用相同的文字和单词 "double" 添加它:
图例. 20. 添加 类型名 到变量名
不要忘记按下 "替换所有" 按钮。
8)NeuroPro 有一个小问题。如果您输入一个常量到神经网络,则按照文本格式,此输入的归一化公式将包含除零。在我们的例子中 "BAR___1__" 是此类输入。它总为零, 因为它是我们的柱线归一化的参考点。
理想中, "BAR___1__" 不应作为神经网络输入, 因为输入常量毕竟无法影响预测。但是,如果该值是输入,由 NeuroPro 产生的公式必须要调整。为了避免来自编译器的出错消息, "BAR___1__" 必须要替换为永久输入此处的值。在我们的例子中,它是零:
之前 | 之后 |
---|---|
BAR[1]=(BAR[1]-0)/0; | BAR[1]=0; |
9)还有另外一个很不明显的问题 (NeuroPro 的开发者没考虑到神经网络的文本描述将会用于程序代码, 因此没有仔细检查)。
在结束前的最后公式里有一个额外的右括号。此错误是非常小的,但它迷惑了 MetaEditor 编译器。它不会指向该字符串中的额外括号,但也不会从程序的其它部分得到大括号。请记住这一点,以便您可以遇到时纠正。
之前 | 之后 |
---|---|
BAR[0]=((BAR[0]*0.0180000001564622)+0.000599999912083149)/2); | BAR[0]=((BAR[0]*0.0180000001564622)+0.000599999912083149)/2; |
如果经常练习, 在本节中描述的操作只需要几分钟的时间。没有必要记住列表的字母。在随后 MetaEditor 编译时将指向代码的不正确部分提示出错。
最后, 将所有公式转为 MQL5 格式之后, 所有我们要做的就是, 将生成的代码从记事本转移到 MetaEditor 里, 并添加所需 EA 代码的其余部分。当然,如果您经常使用 NeuroPro 创建神经网络,这个步骤会很容易。您可以简单地在已有的 EA 中将以前的神经网络用记事本里的新 MQL5 代码替换。从字面上看只需一分钟。
EA 的最终代码, 完全准备好在 MetaTrader 5 里工作 (您也可以从本的应用里下载此代码):
input double Lots = 0.1; // 交易量 input double MinPrognosis = 0; // 预测比当下更有利可图开单 //+------------------------------------------------------------------+ const int inputlen=24; // 交易策略分析以往柱线的数量 //+------------------------------------------------------------------+ double Sigmoid1(double A) { return A/(0.1 + MathAbs(A)); } //+------------------------------------------------------------------+ double Sigmoid2(double A) { return A/(0.1 + MathAbs(A)); } //+------------------------------------------------------------------+ double Sigmoid3(double A) { return A/(0.1 + MathAbs(A)); } //+------------------------------------------------------------------+ double CalcNeuroNet() { //--- 得到用于神经网络的报价 MqlRates rates[],rate; CopyRates(Symbol(),Period(),0,inputlen+1,rates); ArraySetAsSeries(rates,true); //--- 神经网络输入 double BAR[512]; // 512 - DBF 格式的最大许可字段数量 //--- 填充神经网络输入数据的数组 //--- 第一根柱线收盘价作为其它柱线归一化的零级 double zlevel=rates[1].close; for(int bar=0; bar<=inputlen; bar++) { rate=rates[bar]; BAR[bar]=rate.close-zlevel; } //============================================== // 利用 NeuroPro 公式计算神经网络 //============================================== //--- 准备用于训练网络的输入字段数据: BAR[1]=0;//(BAR[1]-0)/0; BAR[2]=(BAR[2]- -0.0003)/0.009; BAR[3]=(BAR[3]-4.999992E-5)/0.01045; BAR[4]=(BAR[4]-0.0011)/0.011; BAR[5]=(BAR[5]-0.00285)/0.01335; BAR[6]=(BAR[6]-0.004050001)/0.01625; BAR[7]=(BAR[7]-0.00495)/0.01695; BAR[8]=(BAR[8]-0.0049)/0.0172; BAR[9]=(BAR[9]-0.0046)/0.0171; BAR[10]=(BAR[10]-0.00395)/0.01755; BAR[11]=(BAR[11]-0.0037)/0.0184; BAR[12]=(BAR[12]-0.0034)/0.0188; BAR[13]=(BAR[13]-0.0029)/0.0194; BAR[14]=(BAR[14]-0.002499999)/0.0196; BAR[15]=(BAR[15]-0.00245)/0.01935; BAR[16]=(BAR[16]-0.00275)/0.01925; BAR[17]=(BAR[17]-0.0028)/0.0194; BAR[18]=(BAR[18]-0.002950001)/0.01965; BAR[19]=(BAR[19]-0.002649999)/0.01965; BAR[20]=(BAR[20]-0.002699999)/0.0197; BAR[21]=(BAR[21]-0.00275)/0.01945; BAR[22]=(BAR[22]-0.00225)/0.01955; BAR[23]=(BAR[23]-0.0019)/0.0195; BAR[24]=(BAR[24]-0.00225)/0.01935; //--- 第一级征候: double Syndrome1_1=Sigmoid1( 0.07165167*BAR[1]-0.08914512*BAR[2]+0.160242*BAR[3]-0.1136391*BAR[4]+0.01358515*BAR[5]+0.3755009*BAR[6]-0.1433693*BAR[7]+0.224411*BAR[8]+0.03298632*BAR[9]-0.2551045*BAR[10]-0.1418581*BAR[11]+0.007130164*BAR[12]-0.08727393*BAR[13]-0.2567087*BAR[14]+0.1118081*BAR[15]+0.73848*BAR[16]+0.05880548*BAR[17]-0.1544689*BAR[18]+0.192913*BAR[19]-0.1743894*BAR[20]-0.2184512*BAR[21]-0.2290305*BAR[22]+0.3946579*BAR[23]-0.02947071*BAR[24]-0.08091708 ); double Syndrome1_2=Sigmoid1( -0.08248464*BAR[1]+0.3076621*BAR[2]-0.0500868*BAR[3]-0.6526818*BAR[4]+0.04266862*BAR[5]+0.581119*BAR[6]-0.0356447*BAR[7]+0.0292943*BAR[8]-0.3660156*BAR[9]-0.3244759*BAR[10]+0.05519342*BAR[11]+0.2419113*BAR[12]-0.2178954*BAR[13]+0.4037299*BAR[14]-0.1593139*BAR[15]+0.3567515*BAR[16]+0.08094382*BAR[17]-0.01788837*BAR[18]-0.379636*BAR[19]+0.6658992*BAR[20]-0.1899142*BAR[21]+0.02259956*BAR[22]+0.767949*BAR[23]-0.5380562*BAR[24]-0.06307755 ); double Syndrome1_3=Sigmoid1( -0.08426282*BAR[1]-0.172721*BAR[2]+0.1749717*BAR[3]-0.07916483*BAR[4]-0.0523758*BAR[5]+0.1935233*BAR[6]+0.01627235*BAR[7]+0.1254414*BAR[8]-0.1101555*BAR[9]-0.02285305*BAR[10]-0.14389*BAR[11]+0.1788775*BAR[12]-0.007144043*BAR[13]+0.1925385*BAR[14]-0.08001231*BAR[15]-0.2021703*BAR[16]+0.08694438*BAR[17]+0.3090158*BAR[18]-0.3330302*BAR[19]+0.2519112*BAR[20]-0.2170611*BAR[21]-0.2216277*BAR[22]+0.09618518*BAR[23]+0.049888*BAR[24]-0.06465426 ); double Syndrome1_4=Sigmoid1( 0.02806905*BAR[1]+0.07787746*BAR[2]+0.1972721*BAR[3]-0.247464*BAR[4]-0.008635854*BAR[5]-0.1975036*BAR[6]-0.0652089*BAR[7]-0.1276176*BAR[8]-0.3386112*BAR[9]-0.103951*BAR[10]+0.08352495*BAR[11]-0.1821419*BAR[12]-0.05604611*BAR[13]-0.05922695*BAR[14]-0.1670811*BAR[15]+0.002476109*BAR[16]-0.03657883*BAR[17]-0.09295338*BAR[18]+0.2500353*BAR[19]-0.03980102*BAR[20]+0.1059941*BAR[21]-0.4037244*BAR[22]-0.08735184*BAR[23]+0.1546644*BAR[24]+0.1966186 ); double Syndrome1_5=Sigmoid1( 0.03832016*BAR[1]-0.09065858*BAR[2]+0.2356484*BAR[3]-0.2436682*BAR[4]+0.09812659*BAR[5]+0.09220826*BAR[6]+0.434221*BAR[7]-0.005478878*BAR[8]-0.1657191*BAR[9]-0.2605299*BAR[10]+0.3523667*BAR[11]+0.3595579*BAR[12]+0.3402678*BAR[13]-0.3346431*BAR[14]+0.1215327*BAR[15]-0.1869196*BAR[16]+0.07256371*BAR[17]-0.09229603*BAR[18]-0.09961994*BAR[19]+0.2491707*BAR[20]+0.3703756*BAR[21]+0.1369175*BAR[22]+0.0560869*BAR[23]-0.007567503*BAR[24]-0.01722363 ); double Syndrome1_6=Sigmoid1( -0.06897662*BAR[1]-0.4182717*BAR[2]+0.200378*BAR[3]-0.4152234*BAR[4]-0.2081593*BAR[5]+0.3120443*BAR[6]-0.1582431*BAR[7]+0.1900958*BAR[8]+0.002503331*BAR[9]+0.02297609*BAR[10]+0.03145982*BAR[11]+0.1816629*BAR[12]+0.1854629*BAR[13]-0.1660063*BAR[14]+0.3112128*BAR[15]-0.4799304*BAR[16]-0.100519*BAR[17]-0.1523588*BAR[18]+0.07141552*BAR[19]+0.2336634*BAR[20]+0.01279082*BAR[21]-0.2179644*BAR[22]+0.4898897*BAR[23]-0.1818153*BAR[24]-0.1783737 ); double Syndrome1_7=Sigmoid1( -0.003986856*BAR[1]-0.3409385*BAR[2]-0.3122248*BAR[3]+0.5656545*BAR[4]+0.07564658*BAR[5]+0.07956024*BAR[6]+0.1820322*BAR[7]-0.05595554*BAR[8]+0.1027963*BAR[9]+0.2596273*BAR[10]+0.1156801*BAR[11]+0.04490443*BAR[12]+0.1426405*BAR[13]+0.06763341*BAR[14]-0.03249188*BAR[15]-0.1912978*BAR[16]-0.2003477*BAR[17]-0.2413947*BAR[18]+0.3188735*BAR[19]-0.2899658*BAR[20]+0.06846272*BAR[21]+0.08726751*BAR[22]-0.2134383*BAR[23]-0.436768*BAR[24]+0.08075105 ); double Syndrome1_8=Sigmoid1( 0.05597013*BAR[1]+0.3358757*BAR[2]+0.1041476*BAR[3]-0.334706*BAR[4]-0.07069201*BAR[5]+0.06152828*BAR[6]+0.1577689*BAR[7]+0.1737777*BAR[8]-0.7711719*BAR[9]-0.2970988*BAR[10]+0.06691784*BAR[11]+0.0528774*BAR[12]+0.06260363*BAR[13]+0.2449201*BAR[14]-0.3098814*BAR[15]+0.06859511*BAR[16]+0.1355444*BAR[17]-0.15844*BAR[18]+0.2791151*BAR[19]-0.412524*BAR[20]+0.228981*BAR[21]-0.4042732*BAR[22]+0.197847*BAR[23]+0.477078*BAR[24]-0.2478239 ); double Syndrome1_9=Sigmoid1( 0.02181781*BAR[1]-0.1042198*BAR[2]-0.02412975*BAR[3]+0.1485616*BAR[4]+0.07645424*BAR[5]-0.02779776*BAR[6]-0.1519209*BAR[7]-0.1878287*BAR[8]+0.1637603*BAR[9]+0.248636*BAR[10]+0.2032469*BAR[11]-0.03869069*BAR[12]+0.02014448*BAR[13]-0.2079489*BAR[14]+0.08846121*BAR[15]+0.1025348*BAR[16]+0.01593455*BAR[17]-0.4964754*BAR[18]+0.1635097*BAR[19]-0.04561989*BAR[20]-0.0662128*BAR[21]-0.2423395*BAR[22]+0.2898602*BAR[23]+0.03824728*BAR[24]-0.07471437 ); double Syndrome1_10=Sigmoid1( -0.02918137*BAR[1]+0.06085975*BAR[2]-0.3056079*BAR[3]-0.5144019*BAR[4]-0.1966296*BAR[5]+0.04413594*BAR[6]+0.03249943*BAR[7]+0.08405613*BAR[8]-0.08797813*BAR[9]+0.06621616*BAR[10]-0.2226632*BAR[11]-0.1000158*BAR[12]+0.0106046*BAR[13]-0.1383344*BAR[14]+0.05141285*BAR[15]-0.1009147*BAR[16]-0.1503479*BAR[17]+0.2877283*BAR[18]-0.2209365*BAR[19]+0.1310906*BAR[20]-0.1188305*BAR[21]-0.002668453*BAR[22]+0.1106755*BAR[23]+0.3884961*BAR[24]+0.0006983803 ); double Syndrome1_11=Sigmoid1( -0.04872056*BAR[1]-0.5066758*BAR[2]+0.08158222*BAR[3]+0.2647052*BAR[4]+0.3632542*BAR[5]+0.4538754*BAR[6]-0.1346472*BAR[7]+0.16742*BAR[8]+0.2974689*BAR[9]+0.3446769*BAR[10]-0.2784187*BAR[11]+0.2461497*BAR[12]-0.166853*BAR[13]-0.4296628*BAR[14]+0.7343794*BAR[15]+0.2154892*BAR[16]-0.4086125*BAR[17]-0.6446049*BAR[18]-0.5614476*BAR[19]-0.593914*BAR[20]+0.5039462*BAR[21]+0.113933*BAR[22]+0.3599374*BAR[23]-0.5517*BAR[24]+0.1249064 ); double Syndrome1_12=Sigmoid1( -0.09035824*BAR[1]-0.2619464*BAR[2]+0.5151641*BAR[3]+0.08415102*BAR[4]+0.007849894*BAR[5]-0.3585253*BAR[6]-0.3458216*BAR[7]-0.006490127*BAR[8]+0.1933572*BAR[9]+0.1655464*BAR[10]-0.2591909*BAR[11]+0.2810482*BAR[12]-0.3552095*BAR[13]+0.1032239*BAR[14]-0.2380441*BAR[15]-0.6082169*BAR[16]-0.3652177*BAR[17]+0.4065064*BAR[18]-0.1538232*BAR[19]-0.03332642*BAR[20]+0.06235149*BAR[21]-0.08935639*BAR[22]-0.2274701*BAR[23]+0.2350571*BAR[24]-0.1009272 ); double Syndrome1_13=Sigmoid1( -0.05370994*BAR[1]+0.2999545*BAR[2]-0.2855853*BAR[3]+0.1123754*BAR[4]+0.2561198*BAR[5]-0.2846766*BAR[6]+0.008345681*BAR[7]+0.1896221*BAR[8]-0.1973753*BAR[9]+0.3510076*BAR[10]+0.4492245*BAR[11]-0.09004608*BAR[12]+0.002758034*BAR[13]+0.03157447*BAR[14]+0.02175433*BAR[15]-0.399723*BAR[16]-0.2736914*BAR[17]+0.1198452*BAR[18]+0.2808644*BAR[19]-0.06968442*BAR[20]-0.5771574*BAR[21]+0.3748633*BAR[22]-0.2721373*BAR[23]-0.2329663*BAR[24]+0.07683773 ); double Syndrome1_14=Sigmoid1( 0.094418*BAR[1]+0.2155959*BAR[2]-0.4787674*BAR[3]+0.3605456*BAR[4]+0.06799955*BAR[5]+0.607367*BAR[6]-0.3518007*BAR[7]+0.1633829*BAR[8]+0.3040094*BAR[9]+0.3707297*BAR[10]+0.02556368*BAR[11]-0.0885786*BAR[12]-0.3713907*BAR[13]-0.2014098*BAR[14]-0.289242*BAR[15]-0.09950806*BAR[16]-0.5361071*BAR[17]+0.4154459*BAR[18]+0.02827369*BAR[19]-0.04972957*BAR[20]-0.1700879*BAR[21]+0.2973098*BAR[22]-0.2097459*BAR[23]-0.0422597*BAR[24]+0.2318914 ); double Syndrome1_15=Sigmoid1( 0.02161242*BAR[1]+0.5484816*BAR[2]+0.002152426*BAR[3]-0.3017516*BAR[4]+0.02010602*BAR[5]-0.8008425*BAR[6]-0.2985114*BAR[7]+0.5151479*BAR[8]+0.1572166*BAR[9]-0.04494689*BAR[10]+0.2529401*BAR[11]-0.02046412*BAR[12]-0.05892481*BAR[13]-0.1359019*BAR[14]-0.2005993*BAR[15]+0.03077302*BAR[16]+0.745619*BAR[17]-0.4197147*BAR[18]-0.1354882*BAR[19]-0.6034228*BAR[20]-0.04950687*BAR[21]-0.1093793*BAR[22]-0.46851*BAR[23]+0.2340346*BAR[24]-0.1910115 ); double Syndrome1_16=Sigmoid1( 0.06201033*BAR[1]+0.2311719*BAR[2]-0.6587076*BAR[3]-0.1937433*BAR[4]-0.3063492*BAR[5]+0.0458253*BAR[6]+0.2621455*BAR[7]-0.3292437*BAR[8]-0.07124191*BAR[9]+0.03962434*BAR[10]-0.03539502*BAR[11]+0.1602975*BAR[12]+0.1252141*BAR[13]-0.1939677*BAR[14]-0.3524359*BAR[15]-0.02675135*BAR[16]-0.1550312*BAR[17]+0.2015329*BAR[18]-0.1383009*BAR[19]+0.3079963*BAR[20]+0.06971535*BAR[21]-0.2415089*BAR[22]-0.03791533*BAR[23]+0.01494107*BAR[24]+0.01395546 ); double Syndrome1_17=Sigmoid1( -0.03211073*BAR[1]-0.2057187*BAR[2]-0.2208917*BAR[3]+0.1034868*BAR[4]+0.003785761*BAR[5]-0.1510143*BAR[6]-0.04637882*BAR[7]-0.01963908*BAR[8]-0.3622932*BAR[9]+0.03135398*BAR[10]-0.1296021*BAR[11]-0.2571803*BAR[12]+0.02485986*BAR[13]-0.05831699*BAR[14]+0.2441404*BAR[15]+0.4313999*BAR[16]-0.05117986*BAR[17]-0.06832605*BAR[18]-0.01433043*BAR[19]-0.3331767*BAR[20]-0.09270683*BAR[21]+0.1077102*BAR[22]+0.0517161*BAR[23]+0.1463209*BAR[24]+0.08033083 ); double Syndrome1_18=Sigmoid1( -0.01044874*BAR[1]+0.8255618*BAR[2]-0.3581862*BAR[3]+0.2379437*BAR[4]-0.05247816*BAR[5]+0.3858318*BAR[6]-0.04216846*BAR[7]+0.2305764*BAR[8]-0.2754549*BAR[9]+0.1255125*BAR[10]-0.1954638*BAR[11]+0.04934186*BAR[12]-0.08713531*BAR[13]+0.08193728*BAR[14]-0.01578137*BAR[15]+0.04301662*BAR[16]-0.01941852*BAR[17]+0.0321704*BAR[18]-0.4490997*BAR[19]-0.2165072*BAR[20]+0.5094138*BAR[21]-0.08077756*BAR[22]-0.1167052*BAR[23]+0.008337143*BAR[24]-0.1847742 ); double Syndrome1_19=Sigmoid1( 0.07863438*BAR[1]+0.6541001*BAR[2]-0.0287532*BAR[3]-0.07992863*BAR[4]-0.1936443*BAR[5]+0.2021953*BAR[6]+0.5814793*BAR[7]+0.1076662*BAR[8]-0.2505759*BAR[9]-0.1958519*BAR[10]+0.2982949*BAR[11]-0.130183*BAR[12]-0.2418064*BAR[13]-0.03213368*BAR[14]-0.1050228*BAR[15]-0.04116086*BAR[16]+0.1059578*BAR[17]-0.09407587*BAR[18]+0.2511382*BAR[19]+0.03090675*BAR[20]-0.2050715*BAR[21]+0.07968493*BAR[22]-0.1085312*BAR[23]-0.3073632*BAR[24]+0.1479857 ); double Syndrome1_20=Sigmoid1( 0.01779699*BAR[1]+0.1517631*BAR[2]+0.1832252*BAR[3]+0.4329565*BAR[4]-0.1528609*BAR[5]-0.2424133*BAR[6]+0.1942621*BAR[7]+0.1390828*BAR[8]-0.3387062*BAR[9]+0.3891163*BAR[10]+0.3485644*BAR[11]+0.06489421*BAR[12]-0.01458877*BAR[13]-0.1127466*BAR[14]+0.1122861*BAR[15]-0.1973242*BAR[16]+0.4340822*BAR[17]-0.633949*BAR[18]+0.1276167*BAR[19]+0.2476585*BAR[20]-0.4445719*BAR[21]+0.6248969*BAR[22]-0.2169943*BAR[23]-0.501359*BAR[24]-0.1358235 ); //--- 第二级征候: double Syndrome2_1=Sigmoid2( 0.2332734*Syndrome1_1-0.2002641*Syndrome1_2-0.03174414*Syndrome1_3-0.3868614*Syndrome1_4-0.1933812*Syndrome1_5-0.2366997*Syndrome1_6+0.3920829*Syndrome1_7+0.1015497*Syndrome1_8-0.1333193*Syndrome1_9+0.05584235*Syndrome1_10-0.2983295*Syndrome1_11+0.1034668*Syndrome1_12-0.4040487*Syndrome1_13-0.2103508*Syndrome1_14-0.2480657*Syndrome1_15-0.1906435*Syndrome1_16+0.2692898*Syndrome1_17+0.2760854*Syndrome1_18-0.1738693*Syndrome1_19-0.1861307*Syndrome1_20-0.07152162 ); double Syndrome2_2=Sigmoid2( -0.1242675*Syndrome1_1+0.05587832*Syndrome1_2+0.1567961*Syndrome1_3+0.1077346*Syndrome1_4-0.2112047*Syndrome1_5+0.04008683*Syndrome1_6-0.1716478*Syndrome1_7+0.3083204*Syndrome1_8-0.1864694*Syndrome1_9+0.08867304*Syndrome1_10-0.06801239*Syndrome1_11-0.1810985*Syndrome1_12-0.05133555*Syndrome1_13+0.2981661*Syndrome1_14-0.01543425*Syndrome1_15-0.1859617*Syndrome1_16+0.027973*Syndrome1_17-0.1715439*Syndrome1_18-0.1249511*Syndrome1_19+0.5925598*Syndrome1_20-0.279602 ); double Syndrome2_3=Sigmoid2( -0.4745722*Syndrome1_1-0.1248492*Syndrome1_2-0.1128288*Syndrome1_3+0.1485692*Syndrome1_4-0.3948999*Syndrome1_5+0.2633227*Syndrome1_6-0.2046695*Syndrome1_7-0.03632757*Syndrome1_8+0.259578*Syndrome1_9-0.07442582*Syndrome1_10+0.06552354*Syndrome1_11-0.2452848*Syndrome1_12-0.1599011*Syndrome1_13+0.1749917*Syndrome1_14-0.07113215*Syndrome1_15-0.1524421*Syndrome1_16+0.3606906*Syndrome1_17+0.3524929*Syndrome1_18+0.1315838*Syndrome1_19+0.1981817*Syndrome1_20+0.0126604 ); double Syndrome2_4=Sigmoid2( -0.3605324*Syndrome1_1+0.2803221*Syndrome1_2+0.07412126*Syndrome1_3+0.2101911*Syndrome1_4-0.1933928*Syndrome1_5-0.2068641*Syndrome1_6+0.1302721*Syndrome1_7+0.04962961*Syndrome1_8+0.2879501*Syndrome1_9-0.04214102*Syndrome1_10-0.02194729*Syndrome1_11-0.0501424*Syndrome1_12+0.007969459*Syndrome1_13+0.1151657*Syndrome1_14+0.04063402*Syndrome1_15+0.1461606*Syndrome1_16-0.07482237*Syndrome1_17-0.3319329*Syndrome1_18+0.2494595*Syndrome1_19-0.09345333*Syndrome1_20-0.1831799 ); double Syndrome2_5=Sigmoid2( -0.03081687*Syndrome1_1-0.419345*Syndrome1_2-0.01301429*Syndrome1_3+0.008855551*Syndrome1_4+0.2869771*Syndrome1_5+0.06881366*Syndrome1_6-0.1612982*Syndrome1_7-0.491662*Syndrome1_8+0.04266098*Syndrome1_9-0.7546657*Syndrome1_10+0.0472151*Syndrome1_11-0.5099863*Syndrome1_12+0.1196823*Syndrome1_13+0.2611973*Syndrome1_14-0.0241531*Syndrome1_15-0.5843646*Syndrome1_16+0.08374172*Syndrome1_17+0.041931*Syndrome1_18-0.181801*Syndrome1_19+0.6314354*Syndrome1_20+0.2967799 ); double Syndrome2_6=Sigmoid2( 0.2783457*Syndrome1_1+0.05858535*Syndrome1_2+0.03348543*Syndrome1_3-0.09202126*Syndrome1_4+0.09466362*Syndrome1_5-0.01946918*Syndrome1_6-0.008507644*Syndrome1_7+0.1967683*Syndrome1_8-0.1593684*Syndrome1_9+0.2202749*Syndrome1_10-0.2754305*Syndrome1_11-0.08108314*Syndrome1_12+0.1606592*Syndrome1_13+0.03723634*Syndrome1_14+0.3494412*Syndrome1_15-0.139782*Syndrome1_16+0.03641316*Syndrome1_17-0.1216527*Syndrome1_18-0.2194063*Syndrome1_19+0.3015033*Syndrome1_20-0.1307777 ); double Syndrome2_7=Sigmoid2( -0.1451617*Syndrome1_1-0.1851998*Syndrome1_2-0.2149245*Syndrome1_3-0.05804037*Syndrome1_4-0.03970402*Syndrome1_5+2.506166E-6*Syndrome1_6+0.223578*Syndrome1_7-0.1718342*Syndrome1_8+0.001228896*Syndrome1_9-0.03911417*Syndrome1_10+0.3167912*Syndrome1_11+0.2213001*Syndrome1_12-0.3518667*Syndrome1_13-0.6146168*Syndrome1_14-0.1061097*Syndrome1_15-0.3044312*Syndrome1_16-0.04269538*Syndrome1_17-0.1753355*Syndrome1_18+0.1989161*Syndrome1_19-0.3667244*Syndrome1_20+0.2514035 ); double Syndrome2_8=Sigmoid2( -0.1430153*Syndrome1_1-Syndrome1_2+0.02704678*Syndrome1_3+0.09941091*Syndrome1_4+0.07057924*Syndrome1_5-0.3370984*Syndrome1_6+0.1565579*Syndrome1_7-0.6226992*Syndrome1_8-0.4750121*Syndrome1_9+0.0914355*Syndrome1_10+0.7518402*Syndrome1_11-0.3350138*Syndrome1_12-0.3099903*Syndrome1_13+0.01266479*Syndrome1_14-0.7965527*Syndrome1_15-0.1753905*Syndrome1_16-0.1435609*Syndrome1_17+0.1683903*Syndrome1_18+0.1800467*Syndrome1_19+0.02699256*Syndrome1_20+0.3138063 ); double Syndrome2_9=Sigmoid2( -0.2611458*Syndrome1_1-0.03994129*Syndrome1_2-0.2299157*Syndrome1_3+0.3549923*Syndrome1_4-0.001759748*Syndrome1_5-0.1117837*Syndrome1_6+0.03037107*Syndrome1_7+0.2023677*Syndrome1_8+0.2628252*Syndrome1_9+0.09683131*Syndrome1_10+0.2576693*Syndrome1_11-0.06357097*Syndrome1_12-0.2162403*Syndrome1_13-0.2190126*Syndrome1_14-0.1675369*Syndrome1_15-0.2458067*Syndrome1_16-0.06660707*Syndrome1_17-0.2096998*Syndrome1_18+0.2432118*Syndrome1_19+0.06210691*Syndrome1_20+0.1555794 ); double Syndrome2_10=Sigmoid2( 0.1120118*Syndrome1_1-0.09789048*Syndrome1_2-0.1146162*Syndrome1_3-0.02268722*Syndrome1_4-0.4754501*Syndrome1_5+0.1567527*Syndrome1_6+0.4281512*Syndrome1_7+0.1428995*Syndrome1_8+0.4317052*Syndrome1_9-0.1987304*Syndrome1_10-0.3471439*Syndrome1_11-0.2485701*Syndrome1_12+0.2200699*Syndrome1_13-0.1804247*Syndrome1_14+0.5553524*Syndrome1_15+0.004284344*Syndrome1_16-0.5408193*Syndrome1_17-0.2304406*Syndrome1_18+0.2462995*Syndrome1_19+0.1687378*Syndrome1_20+0.480715 ); double Syndrome2_11=Sigmoid2( 0.2892572*Syndrome1_1+0.2819389*Syndrome1_2-0.2116477*Syndrome1_3-0.1031269*Syndrome1_4-0.2198152*Syndrome1_5-0.2882532*Syndrome1_6-0.7462316*Syndrome1_7+0.7820893*Syndrome1_8-0.05574411*Syndrome1_9-0.1144354*Syndrome1_10-0.1073154*Syndrome1_11+0.5092962*Syndrome1_12-0.07017706*Syndrome1_13-0.5550667*Syndrome1_14-0.5170746*Syndrome1_15-0.1299864*Syndrome1_16+0.03325708*Syndrome1_17-0.5107772*Syndrome1_18+0.04024922*Syndrome1_19+0.1836878*Syndrome1_20+0.0346345 ); double Syndrome2_12=Sigmoid2( -0.10614*Syndrome1_1+0.06027444*Syndrome1_2+0.08108542*Syndrome1_3-0.1568731*Syndrome1_4+0.1509192*Syndrome1_5-0.1630516*Syndrome1_6+0.01426157*Syndrome1_7+0.02186926*Syndrome1_8+0.1099893*Syndrome1_9-0.02269597*Syndrome1_10-0.04576464*Syndrome1_11-0.161096*Syndrome1_12-0.1901706*Syndrome1_13-0.02513908*Syndrome1_14+0.1317106*Syndrome1_15-0.06866668*Syndrome1_16+0.1083753*Syndrome1_17+0.1449683*Syndrome1_18+0.006118122*Syndrome1_19+0.1255394*Syndrome1_20-0.3822223 ); double Syndrome2_13=Sigmoid2( -0.01638931*Syndrome1_1+0.1172011*Syndrome1_2-0.1022018*Syndrome1_3+0.1098846*Syndrome1_4+0.3456185*Syndrome1_5-0.276273*Syndrome1_6-0.1697723*Syndrome1_7-0.1394644*Syndrome1_8+0.0530486*Syndrome1_9+0.04139024*Syndrome1_10-0.02131393*Syndrome1_11+0.1144992*Syndrome1_12-0.1791101*Syndrome1_13+0.124498*Syndrome1_14+0.2169005*Syndrome1_15+0.06764794*Syndrome1_16+0.3542189*Syndrome1_17+0.0647957*Syndrome1_18+0.01778502*Syndrome1_19-0.0183728*Syndrome1_20-0.09863564 ); double Syndrome2_14=Sigmoid2( 0.1046498*Syndrome1_1+0.1199886*Syndrome1_2-0.3787079*Syndrome1_3+0.568437*Syndrome1_4-0.09216721*Syndrome1_5-0.07998162*Syndrome1_6-0.1422648*Syndrome1_7-0.220407*Syndrome1_8+0.00417607*Syndrome1_9+0.2042087*Syndrome1_10+0.2614584*Syndrome1_11+0.04491196*Syndrome1_12+0.1860093*Syndrome1_13-0.1642074*Syndrome1_14+0.3918036*Syndrome1_15+0.05427575*Syndrome1_16-0.0002294437*Syndrome1_17+0.008295977*Syndrome1_18-0.2818146*Syndrome1_19-0.3877438*Syndrome1_20+0.03536745 ); double Syndrome2_15=Sigmoid2( -0.1754033*Syndrome1_1-0.0528489*Syndrome1_2-0.1744897*Syndrome1_3+0.1113354*Syndrome1_4+0.1185713*Syndrome1_5-0.0231303*Syndrome1_6+0.006316248*Syndrome1_7-0.08525342*Syndrome1_8+0.1568578*Syndrome1_9+0.2965699*Syndrome1_10+0.2781587*Syndrome1_11+0.2391527*Syndrome1_12-0.08555941*Syndrome1_13-0.2362186*Syndrome1_14+0.1128907*Syndrome1_15-0.04770778*Syndrome1_16-0.0139725*Syndrome1_17+0.1079882*Syndrome1_18-0.09141354*Syndrome1_19+0.3320866*Syndrome1_20-0.3015116 ); double Syndrome2_16=Sigmoid2( 0.1962015*Syndrome1_1+0.0192374*Syndrome1_2-0.1578716*Syndrome1_3+0.03360523*Syndrome1_4+0.04818176*Syndrome1_5+0.2462966*Syndrome1_6-0.2103649*Syndrome1_7+0.01318523*Syndrome1_8-0.09349868*Syndrome1_9+0.08476428*Syndrome1_10-0.06272572*Syndrome1_11+0.2246324*Syndrome1_12+0.2539908*Syndrome1_13-0.2059217*Syndrome1_14-0.08641216*Syndrome1_15-0.09780023*Syndrome1_16+0.0005770256*Syndrome1_17-0.2842666*Syndrome1_18-0.05383059*Syndrome1_19-0.2822465*Syndrome1_20+0.2277268 ); double Syndrome2_17=Sigmoid2( 0.5981864*Syndrome1_1+0.5172131*Syndrome1_2-0.2310352*Syndrome1_3-0.1814138*Syndrome1_4-0.2148922*Syndrome1_5+0.562911*Syndrome1_6+0.5865576*Syndrome1_7-0.2790301*Syndrome1_8-0.3841165*Syndrome1_9+0.3223535*Syndrome1_10+0.2096305*Syndrome1_11+0.08284206*Syndrome1_12+0.7050048*Syndrome1_13+0.4129859*Syndrome1_14+0.2116682*Syndrome1_15+0.2213966*Syndrome1_16-0.1637594*Syndrome1_17+0.1191863*Syndrome1_18-0.6626714*Syndrome1_19-0.9127383*Syndrome1_20-0.1505798 ); double Syndrome2_18=Sigmoid2( -0.008298698*Syndrome1_1-0.1847953*Syndrome1_2-0.1930849*Syndrome1_3-0.1005524*Syndrome1_4+0.0737519*Syndrome1_5+0.04218475*Syndrome1_6-0.422835*Syndrome1_7+0.06019862*Syndrome1_8-0.2056148*Syndrome1_9+0.3398327*Syndrome1_10-0.2526269*Syndrome1_11-0.06098709*Syndrome1_12-0.1447722*Syndrome1_13-0.05216306*Syndrome1_14-0.09496115*Syndrome1_15+0.2071376*Syndrome1_16+0.03088453*Syndrome1_17-0.521363*Syndrome1_18-0.06449924*Syndrome1_19-0.4105364*Syndrome1_20+0.3204305 ); double Syndrome2_19=Sigmoid2( -0.1376712*Syndrome1_1-0.0153131*Syndrome1_2+0.04377801*Syndrome1_3+0.08896239*Syndrome1_4+0.03197494*Syndrome1_5-0.02259021*Syndrome1_6+0.008662836*Syndrome1_7-0.1961185*Syndrome1_8-0.0720102*Syndrome1_9+0.05738823*Syndrome1_10-0.004060962*Syndrome1_11-0.3752605*Syndrome1_12+0.02065136*Syndrome1_13+0.1263955*Syndrome1_14-0.05906902*Syndrome1_15+0.4029721*Syndrome1_16-0.159444*Syndrome1_17-0.1619136*Syndrome1_18+0.3338208*Syndrome1_19-0.0656369*Syndrome1_20+0.1602566 ); double Syndrome2_20=Sigmoid2( -0.003900121*Syndrome1_1+0.3159288*Syndrome1_2+0.2550703*Syndrome1_3+0.05409481*Syndrome1_4+0.06660215*Syndrome1_5-0.1948439*Syndrome1_6-0.370153*Syndrome1_7+0.5337713*Syndrome1_8-0.06716464*Syndrome1_9+0.550526*Syndrome1_10+0.4723933*Syndrome1_11+0.09457724*Syndrome1_12+0.5613732*Syndrome1_13+0.3709611*Syndrome1_14-0.07680532*Syndrome1_15-0.5097623*Syndrome1_16+0.4023384*Syndrome1_17+0.2330064*Syndrome1_18-0.09448317*Syndrome1_19+0.2668969*Syndrome1_20-0.2110061 ); //--- 第三级征候: double Syndrome3_1=Sigmoid3( -0.05101856*Syndrome2_1-0.04933448*Syndrome2_2+0.03248681*Syndrome2_3-0.05835526*Syndrome2_4-0.01888579*Syndrome2_5-0.07940733*Syndrome2_6-0.04341835*Syndrome2_7-0.07906266*Syndrome2_8+0.2054683*Syndrome2_9+0.1553352*Syndrome2_10-0.07296721*Syndrome2_11-0.01849408*Syndrome2_12-0.07505544*Syndrome2_13+0.08666297*Syndrome2_14-0.2001411*Syndrome2_15+0.07931387*Syndrome2_16+0.1598745*Syndrome2_17+0.01308129*Syndrome2_18+0.159161*Syndrome2_19+0.1903208*Syndrome2_20+0.0190388 ); double Syndrome3_2=Sigmoid3( 0.0643296*Syndrome2_1+0.3451192*Syndrome2_2-0.1247545*Syndrome2_3+0.03276825*Syndrome2_4+0.303136*Syndrome2_5+0.03152885*Syndrome2_6+0.1118743*Syndrome2_7-0.3860323*Syndrome2_8-0.08593427*Syndrome2_9-0.2664599*Syndrome2_10+0.213205*Syndrome2_11-0.0977626*Syndrome2_12-0.2923501*Syndrome2_13-0.3133417*Syndrome2_14-0.1915279*Syndrome2_15+0.4333939*Syndrome2_16+0.02110274*Syndrome2_17+0.5802879*Syndrome2_18+0.03386912*Syndrome2_19+0.08908307*Syndrome2_20+0.06071822 ); double Syndrome3_3=Sigmoid3( -0.08613513*Syndrome2_1+0.1200513*Syndrome2_2+0.3818525*Syndrome2_3-0.09603316*Syndrome2_4-0.2353039*Syndrome2_5-0.1816488*Syndrome2_6+0.002517342*Syndrome2_7-0.2414117*Syndrome2_8+0.2011739*Syndrome2_9-0.3057347*Syndrome2_10-0.4593749*Syndrome2_11-0.2228307*Syndrome2_12+0.03512295*Syndrome2_13+0.4402955*Syndrome2_14-0.1967632*Syndrome2_15+0.07873345*Syndrome2_16+0.1981131*Syndrome2_17-0.2677957*Syndrome2_18+0.1719814*Syndrome2_19-0.474854*Syndrome2_20+0.01101439 ); double Syndrome3_4=Sigmoid3( 0.02534361*Syndrome2_1+0.1845266*Syndrome2_2+0.149674*Syndrome2_3-0.1454014*Syndrome2_4+0.00701888*Syndrome2_5+0.08219463*Syndrome2_6+0.05163066*Syndrome2_7-0.1836077*Syndrome2_8+0.1429968*Syndrome2_9+0.518382*Syndrome2_10-0.00966637*Syndrome2_11-0.1674386*Syndrome2_12+0.1387497*Syndrome2_13+0.1385897*Syndrome2_14-0.01148864*Syndrome2_15+0.3751494*Syndrome2_16-0.08906862*Syndrome2_17-0.06286599*Syndrome2_18+0.2061662*Syndrome2_19-0.07524439*Syndrome2_20-0.08077133 ); double Syndrome3_5=Sigmoid3( 0.3856083*Syndrome2_1-0.01700347*Syndrome2_2-0.1044575*Syndrome2_3+0.111998*Syndrome2_4-0.5157402*Syndrome2_5-0.05508286*Syndrome2_6-0.3101066*Syndrome2_7-0.5261913*Syndrome2_8-0.05983765*Syndrome2_9+0.1723307*Syndrome2_10-0.2564277*Syndrome2_11+0.06385356*Syndrome2_12-0.07245655*Syndrome2_13+0.1154206*Syndrome2_14-0.3492871*Syndrome2_15+0.136372*Syndrome2_16+0.3627071*Syndrome2_17-0.3074959*Syndrome2_18+0.4425845*Syndrome2_19-0.9329191*Syndrome2_20+0.01476912 ); double Syndrome3_6=Sigmoid3( 0.5246867*Syndrome2_1-0.2347829*Syndrome2_2+0.01062111*Syndrome2_3+0.2374777*Syndrome2_4-0.02361662*Syndrome2_5+0.1804156*Syndrome2_6+0.07669501*Syndrome2_7-0.142881*Syndrome2_8+0.2566245*Syndrome2_9+0.1024709*Syndrome2_10-0.04695484*Syndrome2_11-0.004103919*Syndrome2_12+0.3340242*Syndrome2_13-0.3702791*Syndrome2_14+0.1852374*Syndrome2_15+0.02175477*Syndrome2_16+0.09901489*Syndrome2_17-0.1502062*Syndrome2_18+0.3814779*Syndrome2_19-0.06319473*Syndrome2_20+0.2657273 ); double Syndrome3_7=Sigmoid3( 0.1613003*Syndrome2_1-0.2738772*Syndrome2_2-0.03304096*Syndrome2_3+0.3934855*Syndrome2_4+0.3955218*Syndrome2_5-0.3004892*Syndrome2_6+0.1339742*Syndrome2_7+0.09475601*Syndrome2_8+0.03064043*Syndrome2_9-0.7264652*Syndrome2_10-0.4579849*Syndrome2_11-0.1183059*Syndrome2_12+0.2197721*Syndrome2_13-0.08493897*Syndrome2_14+0.2115426*Syndrome2_15-0.07834542*Syndrome2_16-0.3884689*Syndrome2_17-0.101394*Syndrome2_18+0.1002519*Syndrome2_19-0.07787764*Syndrome2_20+0.3529212 ); double Syndrome3_8=Sigmoid3( -0.3544801*Syndrome2_1+0.03471621*Syndrome2_2-0.2373467*Syndrome2_3-0.2836286*Syndrome2_4+0.01646966*Syndrome2_5+0.06978795*Syndrome2_6-0.03310004*Syndrome2_7+0.01844743*Syndrome2_8+0.05259214*Syndrome2_9-0.05343668*Syndrome2_10+0.3971725*Syndrome2_11-0.08770485*Syndrome2_12-0.2040168*Syndrome2_13+0.1109144*Syndrome2_14-0.06249888*Syndrome2_15-0.5860764*Syndrome2_16+0.1217078*Syndrome2_17+0.2471277*Syndrome2_18-0.03716509*Syndrome2_19-0.1908655*Syndrome2_20+0.03838157 ); double Syndrome3_9=Sigmoid3( 0.1542789*Syndrome2_1+0.3505224*Syndrome2_2+0.06042741*Syndrome2_3+0.08956298*Syndrome2_4-0.03655836*Syndrome2_5-0.3083843*Syndrome2_6+0.2483124*Syndrome2_7-0.1132483*Syndrome2_8-0.3571556*Syndrome2_9-0.04335312*Syndrome2_10+0.005499069*Syndrome2_11+0.371572*Syndrome2_12-0.1199554*Syndrome2_13+0.1160574*Syndrome2_14-0.01656827*Syndrome2_15+0.09481092*Syndrome2_16-0.07926448*Syndrome2_17+0.3847227*Syndrome2_18+0.1039986*Syndrome2_19-0.02874756*Syndrome2_20-0.2311832 ); double Syndrome3_10=Sigmoid3( -0.5099882*Syndrome2_1-0.2619184*Syndrome2_2+0.2441412*Syndrome2_3-0.02311796*Syndrome2_4+0.004243354*Syndrome2_5-0.04681544*Syndrome2_6+0.1402575*Syndrome2_7-0.03166823*Syndrome2_8-0.2629028*Syndrome2_9-0.03275445*Syndrome2_10-0.311464*Syndrome2_11+0.3158014*Syndrome2_12-0.04689252*Syndrome2_13+0.1556217*Syndrome2_14-0.02266529*Syndrome2_15-0.15192*Syndrome2_16+0.02253294*Syndrome2_17+0.04638374*Syndrome2_18-0.4847055*Syndrome2_19-0.0543578*Syndrome2_20-0.4383866 ); double Syndrome3_11=Sigmoid3( 0.09181526*Syndrome2_1-0.009475656*Syndrome2_2+0.08283823*Syndrome2_3+0.06638021*Syndrome2_4-0.04110251*Syndrome2_5+0.03041244*Syndrome2_6-0.2266526*Syndrome2_7+0.3537511*Syndrome2_8+0.2091044*Syndrome2_9-0.2312607*Syndrome2_10-0.01409533*Syndrome2_11-0.06294888*Syndrome2_12+0.1980267*Syndrome2_13+0.07864135*Syndrome2_14-0.01312789*Syndrome2_15+0.02964603*Syndrome2_16-0.1720168*Syndrome2_17-0.01523064*Syndrome2_18+0.07354444*Syndrome2_19+0.1534344*Syndrome2_20+0.04784121 ); double Syndrome3_12=Sigmoid3( -0.01962976*Syndrome2_1-0.1254692*Syndrome2_2+0.01237085*Syndrome2_3-0.006583595*Syndrome2_4-0.06446695*Syndrome2_5-0.1581757*Syndrome2_6-0.01416831*Syndrome2_7+0.08909909*Syndrome2_8+0.02427519*Syndrome2_9+0.06101634*Syndrome2_10-0.07296847*Syndrome2_11-0.02960677*Syndrome2_12+0.1195403*Syndrome2_13+0.007260199*Syndrome2_14-0.005008513*Syndrome2_15+0.07686368*Syndrome2_16-0.1097991*Syndrome2_17+0.02348211*Syndrome2_18-0.01508969*Syndrome2_19+0.06078456*Syndrome2_20+0.1424098 ); double Syndrome3_13=Sigmoid3( -0.1845686*Syndrome2_1-0.1120369*Syndrome2_2+0.1346949*Syndrome2_3+0.2425685*Syndrome2_4+0.1310953*Syndrome2_5-0.1957272*Syndrome2_6+0.2163845*Syndrome2_7+0.04189415*Syndrome2_8+0.05685329*Syndrome2_9-0.1108158*Syndrome2_10-0.04702755*Syndrome2_11-0.2698838*Syndrome2_12+0.05045844*Syndrome2_13+0.1487544*Syndrome2_14+7.648221E-5*Syndrome2_15-0.04902162*Syndrome2_16+0.3119571*Syndrome2_17-0.2076546*Syndrome2_18+0.1465537*Syndrome2_19+0.2386554*Syndrome2_20+0.09121808 ); double Syndrome3_14=Sigmoid3( 0.015057*Syndrome2_1-0.07630379*Syndrome2_2+0.10373*Syndrome2_3-0.01276504*Syndrome2_4+0.01637872*Syndrome2_5+0.1570177*Syndrome2_6+0.02290879*Syndrome2_7+0.1426407*Syndrome2_8-0.3037595*Syndrome2_9-0.1183627*Syndrome2_10-0.05010238*Syndrome2_11-0.06874149*Syndrome2_12+0.0325584*Syndrome2_13-0.1127614*Syndrome2_14+0.1010367*Syndrome2_15+0.2743505*Syndrome2_16+0.02752565*Syndrome2_17-0.01011515*Syndrome2_18-0.1072115*Syndrome2_19-0.1723324*Syndrome2_20-0.1862434 ); double Syndrome3_15=Sigmoid3( -0.0602835*Syndrome2_1+0.1044827*Syndrome2_2-0.03398157*Syndrome2_3+0.1103081*Syndrome2_4-0.2517793*Syndrome2_5-0.1388755*Syndrome2_6+0.1680355*Syndrome2_7+0.08541053*Syndrome2_8+0.2264198*Syndrome2_9+0.1319854*Syndrome2_10+0.2397746*Syndrome2_11+0.04893836*Syndrome2_12+0.07067535*Syndrome2_13+0.03666123*Syndrome2_14-0.2249698*Syndrome2_15+0.1039975*Syndrome2_16+0.03130547*Syndrome2_17+0.1295152*Syndrome2_18-0.1380298*Syndrome2_19-0.2716908*Syndrome2_20+0.3049682 ); double Syndrome3_16=Sigmoid3( 0.006898584*Syndrome2_1+0.172121*Syndrome2_2+0.08287619*Syndrome2_3-0.2843233*Syndrome2_4+0.3360839*Syndrome2_5-0.06360124*Syndrome2_6+0.08605669*Syndrome2_7+0.1303328*Syndrome2_8+0.176666*Syndrome2_9+0.3064248*Syndrome2_10+0.03492442*Syndrome2_11-0.1337793*Syndrome2_12+0.2166045*Syndrome2_13+0.1651906*Syndrome2_14-0.2159452*Syndrome2_15-0.02087162*Syndrome2_16-0.1321865*Syndrome2_17+0.02330898*Syndrome2_18-0.1607926*Syndrome2_19+0.100959*Syndrome2_20+0.3113509 ); double Syndrome3_17=Sigmoid3( 0.2484581*Syndrome2_1+0.07501616*Syndrome2_2-0.2955785*Syndrome2_3-0.06893355*Syndrome2_4-0.110545*Syndrome2_5+0.009258383*Syndrome2_6-0.04150206*Syndrome2_7-0.1581711*Syndrome2_8-0.1503464*Syndrome2_9-0.1641756*Syndrome2_10+0.2800875*Syndrome2_11+0.1470316*Syndrome2_12+0.08529772*Syndrome2_13-0.07939056*Syndrome2_14+0.1105667*Syndrome2_15-0.003909521*Syndrome2_16-0.1663841*Syndrome2_17+0.1384012*Syndrome2_18-0.2260507*Syndrome2_19-0.1310463*Syndrome2_20+0.03011392 ); double Syndrome3_18=Sigmoid3( 0.2167049*Syndrome2_1+0.1083723*Syndrome2_2+0.03713056*Syndrome2_3-0.07394339*Syndrome2_4-0.08689396*Syndrome2_5+0.1893489*Syndrome2_6-0.004869457*Syndrome2_7+0.06987588*Syndrome2_8-0.1505099*Syndrome2_9+0.1717843*Syndrome2_10+0.07792218*Syndrome2_11+0.02835098*Syndrome2_12+0.03617713*Syndrome2_13+0.1599271*Syndrome2_14-0.1617647*Syndrome2_15-0.04720658*Syndrome2_16+0.004165665*Syndrome2_17-0.1073883*Syndrome2_18+0.06164433*Syndrome2_19+0.01017194*Syndrome2_20-0.1073146 ); double Syndrome3_19=Sigmoid3( 0.1966043*Syndrome2_1-0.06785608*Syndrome2_2-0.02568222*Syndrome2_3+0.2323583*Syndrome2_4-0.1949882*Syndrome2_5-0.0180097*Syndrome2_6-0.1995831*Syndrome2_7-0.3007537*Syndrome2_8+0.03133066*Syndrome2_9-0.3836962*Syndrome2_10+0.8646971*Syndrome2_11-0.04459784*Syndrome2_12+0.1127359*Syndrome2_13+0.3645059*Syndrome2_14+0.3924035*Syndrome2_15+0.2070317*Syndrome2_16-0.1975317*Syndrome2_17+0.249992*Syndrome2_18-0.1090982*Syndrome2_19+0.9234442*Syndrome2_20+0.0260936 ); double Syndrome3_20=Sigmoid3( -0.1054238*Syndrome2_1+0.01094678*Syndrome2_2+0.1854347*Syndrome2_3-0.03105933*Syndrome2_4-0.1428708*Syndrome2_5+0.1660853*Syndrome2_6-0.0540761*Syndrome2_7+0.08364562*Syndrome2_8+0.01462638*Syndrome2_9+0.05958234*Syndrome2_10+0.05540805*Syndrome2_11+0.1415959*Syndrome2_12-0.2088391*Syndrome2_13-0.02437577*Syndrome2_14+0.03789431*Syndrome2_15+0.1342704*Syndrome2_16+0.02136465*Syndrome2_17+0.1529594*Syndrome2_18-0.2515772*Syndrome2_19-0.009984408*Syndrome2_20-0.02554057 ); //--- 终级征候: BAR[0]=0.377357*Syndrome3_1-0.1995524*Syndrome3_2+0.44664*Syndrome3_3-0.2634062*Syndrome3_4-0.1150927*Syndrome3_5-0.3349093*Syndrome3_6-0.3639574*Syndrome3_7+0.2705039*Syndrome3_8+0.5313437*Syndrome3_9+0.2664694*Syndrome3_10+0.1713557*Syndrome3_11+0.1208919*Syndrome3_12-0.4120659*Syndrome3_13+0.3021899*Syndrome3_14+0.4149051*Syndrome3_15+0.7103375*Syndrome3_16+0.1180793*Syndrome3_17-0.2354599*Syndrome3_18-0.1013937*Syndrome3_19+0.3054902*Syndrome3_20+0.03919306; //--- 终级征候的后期处理: BAR[0]=((BAR[0]*0.0180000001564622)+0.000599999912083149)/2; return (BAR[0]); } //+------------------------------------------------------------------+ double Prognosis; //+------------------------------------------------------------------+ #include <Trade\Trade.mqh> //+------------------------------------------------------------------+ void OnTick() { //--- 从神经网络接收价格预测 Prognosis=CalcNeuroNet(); //--- 执行必要的交易动作 Trade(); } //+------------------------------------------------------------------+ void Trade() { //--- 如果与预测不符,平仓 if(PositionSelect(_Symbol)) { long type=PositionGetInteger(POSITION_TYPE); bool close=false; if((type == POSITION_TYPE_BUY) && (Prognosis <= 0)) close = true; if((type == POSITION_TYPE_SELL) && (Prognosis >= 0)) close = true; if(close) { CTrade trade; trade.PositionClose(_Symbol); } } //--- 如果无持仓,根据预测开仓 if((Prognosis!=0) && (!PositionSelect(_Symbol))) { CTrade trade; if(Prognosis > MinPrognosis) trade.Buy (Lots); if(Prognosis < -MinPrognosis) trade.Sell(Lots); } }
测试
以训练神经网络时提供数据的相同时间帧启动 EA。我提醒此 EA 针对 EURUSD, H1 (学习时间接近 10 个月) 编写。
当预期盈利与点差相比,没有入场交易点。EA 针对此情况有内置的过滤器。设置输入参数 MinPrognosis 为 0.0005。
交易量常数为 0.1 手。
我们得到以下结果:
图例. 21. 在 MetaTester 里的 EA 测试统计
图例. 22. 在 MetaTester里 EA 经测试后的净值图表
持续增长的净值表明开发神经网络 EA 的所有阶段都正确实现。
应该牢记的是, EA 经某个时段的训练并能盈利, 但不保证在此时段之外也能盈利。创建真正可盈利的神经网络 EA 需要深入了解神经网络工作原理,并有深厚的交易经验。在本文中,我演示了如何使用神经网络工具,现在将由您来令其行之有效。
NeuroPro 是一款独特的程序。我们有机会看到,只需工具在手, 分分钟从 NeuroPro 移植一个神经网络到 MetaTrader 5 的 EA。
很多其它的神经网络程序不具有此优势。这就是为什么强烈推荐 NeuroPro。
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程