还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
一个神经网络的EA的示例含源码——Combo_Right.mq4软件简介去年年底结束的国际大赛的第一名为Better所夺得他采用的就是神经网络原理的EA这使得用神经网络方法做EA成为不少人__的焦点这里翻译一篇采用神经网络做EA的不错的示例文章当然附有源码是吸引人的地方不过也许__提出了研究神经网络EA的一些思考更为值得注意__提出了∶1“如果有飞机,___还要教人类去飞?”意思是研究是经网络不必从零起步MT4里已有了不错的“遗传算法”文中介绍了如何利用MT4已有的“遗传算法”2大家都说做单子最重要的是“顺势而为”,但更需要解决的是∶“一个基于趋势的交易系统是不能成功交易在盘整sidewaystrends,也不能识别市场的回调setbacks和逆转reversals.反向走势!”这可是抓到不少人心中的“痒处”,有多少人不是到了该逆势时没转向而产生亏损呢?3训练神经网络需要用多长的历史数据,提出了并不是用的历史数据越长越好,另外也不是训练的间隔越短越好,文中提出了什么情况下有需再训练它等等下面是译文和__的源码Theproblemisstatedforthisauto__tedtradingsystemATSasfollows:ATS自动的智能的,采用神经网络的交易系统的问题表述如下 Letsconsiderweh__eabasictradingsystem-BTS.Itisne__ssarytocreateandteachaneuralnetworkinorderittodothingsthatcannotbedonewiththeBTS.ThismustresultincreationofatradingsystemconsistingoftwocombinedandmutuallycomplementaryBTSandNNneuralnetwork. 如果我们有一个BTSbasictradingsystem,同时需要用创建一个神经网络系统并教会它做BTS所不能做的事,按这个思路就是要创建这样一个交易系统∶它由互相补充配合的两部分组成,BTS和NN神经网络OrtheEnglishofthisis:Thereisnoneedtodiscoverthecontinentsagaintheywerealldiscovered.Whytoteachsomebodytorunfastifweh__eacarortoflyifweh__eaplane 呃,英语说,我们不需要再去发现“新大陆”,它们是已经存在的东西!进一步说,如果我们已经有了汽车,那___还要教人如何跑得快?如果有飞机,___还要教人类去飞?On__weh__eatrend-followingATSwejusth__etoteachtheneuralnetworkincountertrendstrategy.Thisisne__ssarybecauseasystemintendedfortrend-basedtradingcannottradeonsidewaystrendsorrecognize__rketsetbacksorreversals.YoucanofcoursetaketwoATSes-atrend-followingoneandacountertrendone-andattachthemtothesamechart.Ontheotherhandyoucanteachaneuralnetworktocomplementyourexistingtradingsystem. 一旦有一个趋势交易系统的ATS,我们仅需要教会这个神经网络如何逆势反趋势交易的策略这一点是非常必要的,因为一个基于趋势的交易系统是不能成功交易在盘整sidewaystrends,也不能识别市场的回调setbacks和逆转reversals.反向走势!当然,你可以采用两个ATS,一个基于“趋势”,一个基于“反趋势”逆向,然后把它们挂到同一图表上另一个办法是,你能教会神经网络如何与你现有的系统“互补地”协调工作!Forthispurposewedesignedatwo-layerneuralnetworkconsistingoftwoper__ptronsinthelowerlayerandoneper__ptronintheupperlayer.为实现这个目标,我们设计了一个两层的神经网络,下层有两个感知机per__ptrons上层有一个感知机 Theoutputoftheneuralnetworkcanbeinoneofthesethreestates:这个神经网络的能输出下列三种状态之一Enteringthe__rketwithalongpositionEntering市场是处在多向仓Enteringthe__rketwithashortpositionEntering市场是处在空向仓Indeterminatestate不确定的不明确的模糊的状态ActuallythethirdstateisthestateofpassingcontrolovertotheBTSwhereasinthefirsttwostatesthetradesignalsaregivenbytheneuralnetwork. 实际上,第三种状态是就把控制权交给BTS,反之前两种状态是交易__由神经网络给出Theteachingoftheneuralnetworkisdividedintothreestageseachstageforteachingoneper__ptron.AtanystagetheoptimizedBTSmustbepresentforper__ptronstoknowwhatitcando. 神经网络的“教育”分成三步骤,每一步骤“教育”一个感知机,在任何一步骤,这个优化了的BTS必须存在为的是“感知机们”知道它自己能做什么Theseparateteachingofper__ptronsbyageneticalgorithmisdeterminedbythelackofthisalgorithmnamely:Theamountofinputssearchedinwiththehelpofsuchalgorithmislimited.Howevereachteachingstageiscoherentandtheneuralnetworkisnottoolargesothewholeoptimizationdoesnottaketoomuchtime. 感知机们分别的“教育”由遗传算法来承担,由于这样的算法的缺乏,换句话说,搜索到的这样的算法有限,限制了“输入”参数变量的数量借助这样算法得到的参数变量的值,然而,每一步骤的“教育”是密切配合补充的因此效果还是不错,这样这个神经网络不会太大,整个的优化也不会耗费太多的时间Theveryfirststagepre__dingtheteachingofanNNconsistsinoptimizationoftheBTS. 在“教育”NN之前的一步是对BTS进行优化InordernottoloseourselveswewillrecordthestagenumberintheinputoftheATSidentifiedaspass.Identifiersofinputscorrespondingwiththestagenumberwillandinthenumberequaltothisstagenumber. 为了不使我们自己也被搞糊涂了,我们将已经测试通过的ATS的输入(参数变量)记录上”通过”pass的步骤号stagenumber.,输入s(参数变量)的标识符将和stagenumber步骤号一致等同ThusletsstartpreparationsforoptimizationandteachingtheNN.Letssettheinitialdepositas$_____00inordernottocreateanartificial__rgincallduringoptimizationandtheinputtobeoptimizedasBalan__inExpertAdvisorpropertiesonthetabofTestingintheStrategyTesterandstartgeneticalgorithm. 这样,我们开始对这个NN进行优化和“教育”的准备存入初始保证金为$100万以便于在优化期间不产生人为的补充保证金___Input参数变量是按“余额”进行优化,设置EA的StrategyTester的测试的属性tab为Testing开始运行遗传算法LetsgototheInputstaboftheEAspropertiesandspecifythevolumeofpositionstobeopenedbyassigningthevalue1totheidentifierlots. 在这个EA的开仓量lots.的值设为1lotOptimizationwillbeperformedaccordingtothemodel:Openpri__sonlyfastestmethodto____yzethebarjustcompletedonlyforEAsthatexplicitlycontrolbaropeningsin__thismethodis__ailableintheATSalgorithm. 从这个ATS算法明确地有效开始,实施优化,所采用复盘模型是∶“仅用__价以最快速的方法分析刚形成的柱线”Stage1ofoptimization.OptimizationoftheBTS: 优化步骤1,BTS的优化Setthevalue1fortheinputpass. 设置为1为这input(参数变量)“为通过”theinputpassWewilloptimizeonlyinputsthatcorrespondwiththefirststagei.e.thatendin
1.Thuswecheckonlytheseinputsforoptimizationanduncheckallothers. 我们仅仅优化步骤1相关的那些inputs(参数变量),即,尾标为1的参数变量,于是,我们仅仅测试优化有关的inputs而不测试其他的变量参数tp1-TakeProfitoftheBTS.Itisoptimizedwiththevalueswithintherangeof10to100step1 tp1,BTS的所取的止盈值(TakeProfit)在step1,优化的值的范围在10到100,sl1-StopLossoftheBTS.Itisoptimizedwiththevalueswithintherangeof10to100step1 sl1,BTS的所取的止损值(StopLoss)在step1,优化的值的范围在10到100p1-periodofCCIusedintheBTS.Itisoptimizedwiththevalueswithintherangeof3to100step1 p1,用于BTS的CCI的周期值在step1,优化的值的范围在3到100BelowaretheresultsoftheBTSoptimization: 下面是BTS优化的结果Stage
2.Teachingtheper__ptronresponsibleforshortpositions: 步骤2,“教育负责管“开空仓”shortpositions的感知机Setthevalue2accordingtothestagenumberfortheinputpass. 根据步骤的步骤号,设置input,参数变量的pass的值为2Unchecktheinputscheckedforoptimizationinthepreviousstage.Justincases__einafiletheinputsobtainedatthepreviousstage. 不测试那些已经测试过的优化了的以前步骤的inputs.(变量参数)以防万一,保存以前步骤获得的inputs(变量参数值)到一个文件中去Checktheinputsforoptimizationaccordingtoourrule:theiridentifiersmustendin2: 根据我们的规则,必须是测试那些是在尾标为2的inputs(变量参数)x12x22x32x42-weightnumbersoftheper__ptronthatrecognizesshortpositions.Itisoptimizedwiththevalueswithintherangeof0to200step1 x12x22x32x42是识别并开空仓的感知机的权重,它们的值在step1时被优化在范围0to200tp2-TakeProfitofpositionsopenedbytheper__ptron.Itisoptimizedwiththevalueswithintherangeof10to100step1 tp2 TakeProfit是感知机所开的仓的止盈值,它们的值在step1时被优化在范围10to100sl2-StopLossofpositionsopenedbytheper__ptron.Itisoptimizedwiththevalueswithintherangeof10to100step1 sl2StopLos在step1它是感知机所开的仓的止损值,被优化值的范围在10to100 p2-theperiodofthevaluesofpri__differen__tobe____yzedbytheper__ptron.Itisoptimizedwiththevalueswithintherangeof3to100step
1. p2感知机所分析的__差的周期值iiCCI函数的一个参数∶period-__eragingperiodforcalculation,在step1它的值所优化的范围在3to100Letsstartteachingitusingoptimizationwithageneticalgorithm.Theobtainedresultsaregivenbelow: 现在,开始用遗传算法来优化“教育”NN(让它“学习”市场),获得的结果如下∶ Stage
3.Teachingtheper__ptronresponsibleforlongpositions: 步骤3“教育”负责开多仓的感知机(“学习”市场)Setthevalue3accordingtothestagenumberfortheinputpass. 设置值3根据步骤的步骤号说明这些input变量参数已经“通过”theinputpass Unchecktheinputscheckedforoptimizationinthepreviousstage.Justincases__einafiletheinputsobtainedatthepreviousstage. 同样,不测试,那些已经测试过的优化了的,以前步骤的inputs.变量参数值,以防万一,保存以前步骤获得的inputs.变量参数值到一个文件中去Checktheinputsforoptimizationaccordingtoourrule:theiridentifiersmustendin3: 根据我们的规则,优化测试的inputs变量参数值必须是尾标为3的那些变量参数 x13x23x33x43-weightnumbersoftheper__ptronthatrecognizeslongpositions.Itisoptimizedwiththevalueswithintherangeof0to200step
1. x13x23x33x43是识别多仓的感知机的权重,它们的值在step1时被优化时得到的范围在0to200tp3-TakeProfitofpositionsopenedbytheper__ptron.Itisoptimizedwiththevalueswithintherangeof10to100step1 tp3 TakeProfit是感知机所开的仓的“止盈值”,它的值在step1时被优化时的范围是在10to100sl3-StopLossofpositionsopenedbytheper__ptron.Itisoptimizedwiththevalueswithintherangeof10to100step1 sl3StopLoss是感知机所开的仓的“止盈值”,它们的值在step1时被优化为范围是10to100p3-theperiodofthevaluesofpri__differen__tobe____yzedbytheper__ptron.Itisoptimizedwiththevalueswithintherangeof3to100step
1. p3--感知机所分析的价差的周期值它在步骤1优化时得到的值的范围是3to100Letsstartteachingitusingoptimizationwithageneticalgorithm.Theobtainedresultsaregivenbelow: 启动采用遗传算法的优化来“教育”NN,所获得的结果如下∶Stage4final.Teachingthefirstlayeri.e.teachingtheper__ptronthatisintheupperlayer: 步骤4最终步骤“教育”第一层,即“教育”在上层的感知机Setthevalue4accordingtothestagenumberfortheinputpass. 根据步骤的步骤号,设置值4为输入通过fortheinputpass Unchecktheinputscheckedforoptimizationinthepreviousstage.Justincases__einafiletheinputsobtainedatthepreviousstage. 不测试那些在之前步骤已经测试过的优化了的“输入”inputs(意思是∶已经在之前步骤优化过的变量的参数值就不再优化它们了以防万一,将之前步骤获得的这些变量的参数值存到一个文件中去Checktheinputsforoptimizationaccordingtoourrule:theiridentifiersmustendin4: 根据我们的规则,只测试优化标识符最后位是4的那些inputs变量的参数值x14x24x34x44-weightnumbersoftheper__ptronofthefirstlayer.Itisoptimizedwiththevalueswithintherangeof0to200step
1. x14x24x34x44是第一层感知机参数的权重值在步骤1时它们被优化的值的范围在0to200p4-theperiodofthevaluesofpri__differen__tobe____yzedbytheper__ptron.Itisoptimizedwiththevalueswithintherangeof3to100step
1. p4被感知机分析的价差的值的周期在步骤1它的值的范围被优化在3to100Letsstartteachingitusingoptimizationwithageneticalgorithm.Theobtainedresultsaregivenbelow:采用遗传算法来优化,启动“教育”来教它“学习”所获得结果如下∶Thatsalltheneuralnetworkhasbeentaught. 这就是全部,神经网络已经被“教育”了TheATShasonemorenon-optimizableinputmn-__gicNumber.Itistheidentifierofpositionsforatradingsystemnottomixitsorderswiththeordersopened__nuallyorbyotherATSes.Thevalueofthe__gicnumbermustbeuniqueandnotcoincidewiththe__gicnumbersofpositionsthath__enotbeenopenedbythisspecificExpertAdvisor. 这个ATS有一个不能被优化的input参数mn--__gicNumber.魔法号它是一个交易系统它所开的仓位的识别符,为的是不和手动开仓或其他ATSes开的仓位混淆这个__gicNumber的值必须是唯一的并且和这个特别的ea尚未开仓的__gicnumbers不一致P.S. Thesizeoftheinitialdepositisfoundasthedoubledabsolutedrawdowni.e.weconsidersomesafetyresour__sforit. 出于保证有一些安全保险的考虑,初始保证金的金额设置是考虑为绝对最大回落的两倍TheEAgiveninthesour__codesisnotoptimized. 这个ea的源代码没有优化Ifyouneedtorepla__thebuilt-inBTSwiththealgorithmofanothertradingsystemyoumustmodifythecontentsofthefunctionbasicTradingSystem.如果你需要置换嵌入另一个交易系统算法的BTS,你必须修改BTS功能的内部Inordernottoentertheinitialandthefinalvaluesandthevaluesofstepsforoptimizationyoucantakethereadyfilecombo.setpla__itinthefolder\testerMT4anduploadtotheEAspropertiesinTester.以便于不输入优化时的初值,终值和步长,你可采用已备好的combo.set文件,把它放置到MT4的\tester目录并加载这个ea的属性properties到StrategyTesterRe-optimizationoftheEAistobeperformedataweekendi.e.onSaturdayoronSundaybutonlyiftheresultsofthepre__dingweekwereunprofitable.Thepresen__oflossesmeansthatthe__rkethaschangedandthere-optimizationisne__ssary.Thepresen__ofprofitsmeansthattheATSdoesnotneedanyre-optimizationandrecognizes__rketpatternsquitewell.这个ea的再优化可在周末进行,即周六和周日,但仅在前面一周的结果是不盈利的亏损的出现意味着市场已经改变,于是需要重新优化,若是仍然获利意味着这个ATS不需要重新优化,它对市场目前的模型的识别继续有效!附源代码//+------------------------------------------------------------------+//|Combo_Right.mq4|//|Copyright2008YuryV.Reshetov|//|http://bigforex.biz/load/2-1-0-171|//+------------------------------------------------------------------+#propertycopyrightCopyright2008YuryV.Reshetov#propertylinkhttp://bigforex.biz/load/2-1-0-171//----inputparametersexterndoubletp1=50;externdoublesl1=50;externintp1=10;externintx12=100;externintx22=100;externintx32=100;externintx42=100;externdoubletp2=50;externdoublesl2=50;externintp2=20;externintx13=100;externintx23=100;externintx33=100;externintx43=100;externdoubletp3=50;externdoublesl3=50;externintp3=20;externintx14=100;externintx24=100;externintx34=100;externintx44=100;externintp4=20;externintpass=1;externdoublelots=
0.01;externintmn=888;staticintprevtime=0;staticdoublesl=10;staticdoubletp=10;//+------------------------------------------------------------------+//|expertstartfunction|//+------------------------------------------------------------------+intstart{ifTime
[0]==prevtimereturn0;prevtime=Time
[0];if!IsTradeAllowed{again;return0;}//----inttotal=OrdersTotal;forinti=0;itotal;i++{OrderSelectiSELECT_BY_POSMODE_TRADES;ifOrderSymbol==SymbolOrder__gicNumber==mn{return0;}}sl=sl1;tp=tp1;intticket=-1;RefreshRates;ifSupervisor0{ticket=OrderSendSymbolOP_BUYlotsAsk1Bid-sl*PointBid+tp*PointWindowExpertNamemn0Blue;ifticket0{again;}}else{ticket=OrderSendSymbolOP_SELLlotsBid1Ask+sl*PointAsk-tp*PointWindowExpertNamemn0Red;ifticket0{again;}}//--Exit--return0;}//+---------------------------getLots----------------------------------+doubleSupervisor{ifpass==4{ifper__ptron30{ifper__ptron20{sl=sl3;tp=tp3;return1;}}else{ifper__ptron10{sl=sl2;tp=tp2;return-1;}}returnbasicTradingSystem;}ifpass==3{ifper__ptron20{sl=sl3;tp=tp3;return1;}else{returnbasicTradingSystem;}}ifpass==2{ifper__ptron10{sl=sl2;tp=tp2;return-1;}else{returnbasicTradingSystem;}}returnbasicTradingSystem;}doubleper__ptron1{doublew1=x12-100;doublew2=x22-100;doublew3=x32-100;doublew4=x42-100;doublea1=Close
[0]-Open[p2];doublea2=Open[p2]-Open[p2*2];doublea3=Open[p2*2]-Open[p2*3];doublea4=Open[p2*3]-Open[p2*4];returnw1*a1+w2*a2+w3*a3+w4*a4;}doubleper__ptron2{doublew1=x13-100;doublew2=x23-100;doublew3=x33-100;doublew4=x43-100;doublea1=Close
[0]-Open[p3];doublea2=Open[p3]-Open[p3*2];doublea3=Open[p3*2]-Open[p3*3];doublea4=Open[p3*3]-Open[p3*4];returnw1*a1+w2*a2+w3*a3+w4*a4;}doubleper__ptron3{doublew1=x14-100;doublew2=x24-100;doublew3=x34-100;doublew4=x44-100;doublea1=Close
[0]-Open[p4];doublea2=Open[p4]-Open[p4*2];doublea3=Open[p4*2]-Open[p4*3];doublea4=Open[p4*3]-Open[p4*4];returnw1*a1+w2*a2+w3*a3+w4*a4;}doublebasicTradingSystem{returniCCISymbol0p1PRI___OPEN0;}voidagain{prevtime=Time
[1];Sleep30000;}。