神经网络的顾问,分享经验。 - 页 6 12345678910 新评论 Aleksey Vyazmikin 2015.09.02 14:45 #51 这是一个有趣的话题。我有一个想法,但更简单。我暂时先问一下问题 :)如何确定进入点是很清楚的--我们采取Z字形,但我们需要知道该点之前的情况来预测进入。条形图中的哪个窗口是用来分析前面的数据的?你有没有试着把输入和输出功能分开?或者是反转--通常使用相反的信号的到来?如果采用不同的盈亏固定方式,而不是退出翻牌,结果会是怎样? Anton Govorukhin 2015.09.02 18:44 #52 昨天开始在演示中使用神经元https://www.mql5.com/ru/signals/129790,到目前为止似乎还不错。 Maxim Dmitrievsky 2015.09.02 19:30 #53 -Aleks-:这是一个有趣的话题。我有一个想法,但更简单。我暂时先问一下问题 :)如何确定进入点是很清楚的--我们采取Z字形,但我们需要知道该点之前的情况来预测进入。条形图中的哪个窗口是用来分析前面的数据的?你有没有试着把输入和输出功能分开?还是通常使用反转--相反信号的到来?如果采用不同的盈亏固定方式,而不是退出翻牌,结果会是怎样? 我试着向前预测了1个柱子,也就是向后移了1个柱子。但问题是,最后几根柱子上的之字形需要用数值来填充,而它被透支了,所以一切都不是那么清晰......我还在用反转信号开仓/复仓,或者说我在和马丁搞鬼......但研究领域非常大,很难说怎么做才对...... Maxim Dmitrievsky 2015.09.02 19:31 #54 Anton Govorukhin: 昨天启动了演示中的神经元https://www.mql5.com/ru/signals/129790,到目前为止似乎还不错。 酷,让我看看......它的基础是什么? Anton Govorukhin 2015.09.02 19:47 #55 Maxim Dmitrievsky: Прикольно, понаблюдаемс.. а что в основу заложено? Объемы, открытый интерес, баланс сил на рынке. Maxim Dmitrievsky 2015.09.03 01:40 #56 到目前为止,还没有什么有趣的消息传出。代码和逻辑中可能存在错误。我写作只是为了发展这个话题,可以说,也许有人会为了自己而改变它,或者纠正我的错误。我已经在代码中修正了主要的时刻。预测条数 - 预测深度,向前看多少条。然后是用于网格训练的阵列长度和训练历时数。30个神经元,你可以在代码中改变它。//+------------------------------------------------------------------+ //| zzNeuro.mq5 | //| max dmitrievsky | //| https://www.mql5.com/ru/users/dmitrievsky | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #include <Trade\Trade.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\AccountInfo.mqh> #include "class_mlp.mqh" CTrade m_Trade; CPositionInfo m_Position; CNetMLP *net; input double MaximumRisk=0.01; input int ZZperiod = 300; input int PrognozBars = 30; input int vectorLength = 1000; input int epoch = 10000; int zz_handle, RSI_handle, MA1_handle, MA2_handle; //хендлы индикаторов double a1[],a2[],a3[],a4[],a5[],ma1[],ma2[],MAbuff[],zzH[],zzL[]; //массивы индикаторов double inputs[], outputs[]; //массивы для нейросети bool learn; double in[6],out[1]; //количество входов и выходов нейросети int snn[]={70,1}; // параметры нейросети double min,max, minMA, maxMA; //переменные для нормировки данных входящих векторов //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- инициализируем хендлы индикаторов learn=false; zz_handle=iCustom(Symbol(),0,"zz",ZZperiod); RSI_handle=iRSI(Symbol(),0,14,PRICE_CLOSE); MA1_handle=iMA(Symbol(),0,200,0,MODE_SMA,PRICE_CLOSE); MA2_handle=iMA(Symbol(),0,20,0,MODE_SMA,PRICE_CLOSE); //--- return(INIT_SUCCEEDED); } void FillZZarray(double &a[]) //заполняем массив выходов для нейросети с индикатора зигзаг. Присваиваем значения зигзага каждому бару. { //1 растущий, -1 падающий. ArrayResize(a,vectorLength); int lastcountbar = 0; for(int i=0;i<vectorLength;i++) { if(zzH[i]>0) { a[i]=1; lastcountbar = 1; } if(zzL[i]>0) { a[i]=-1; lastcountbar = -1; } if(zzH[i]==0 && zzL[i]==0) a[i] = lastcountbar; } } void NormalizeArrays(double &a[]) //нормируем входные данные для рси { double d1=-1.0; double d2=1.0; double x_min=a[ArrayMinimum(a)]; double x_max=a[ArrayMaximum(a)]; min = x_min; max=x_max; for(int i=0;i<ArraySize(a);i++) { a[i]=(((a[i]-x_min)*(d2-d1))/(x_max-x_min))+d1; } } void NormalizeArraysMA(double &a[]) //нормируем входные данные для МА { double d1=-1.0; double d2=1.0; double x_min=a[ArrayMinimum(a)]; double x_max=a[ArrayMaximum(a)]; minMA = x_min; maxMA=x_max; for(int i=0;i<ArraySize(a);i++) { a[i]=(((a[i]-x_min)*(d2-d1))/(x_max-x_min))+d1; } } void NormalizeArrays2(double &a[]) //нормируем для рси на каждом новом баре { double d1=-1.0; double d2=1.0; for(int i=0;i<ArraySize(a);i++) { a[i]=(((a[i]-min)*(d2-d1))/(max-min))+d1; } } void NormalizeArrays2MA(double &a[]) //нормируем для МА на каждом новом баре { double d1=-1.0; double d2=1.0; for(int i=0;i<ArraySize(a);i++) { a[i]=(((a[i]-minMA)*(d2-d1))/(maxMA-minMA))+d1; } } void learnWeb() { CopyBuffer(zz_handle,0,PrognozBars,vectorLength,zzH); CopyBuffer(zz_handle,1,PrognozBars,vectorLength,zzL); FillZZarray(outputs); //заполняем массив выходов, предварительно скопировав хай и лоу зигзага. CopyBuffer(RSI_handle,0,PrognozBars*2+1,vectorLength,a1); CopyBuffer(RSI_handle,0,PrognozBars*2+5,vectorLength,a2); CopyBuffer(RSI_handle,0,PrognozBars*2+10,vectorLength,a3); CopyBuffer(RSI_handle,0,PrognozBars*2+15,vectorLength,a4); CopyBuffer(RSI_handle,0,PrognozBars*2+20,vectorLength,a5); CopyBuffer(MA1_handle,0,PrognozBars*2+1,vectorLength,ma1); CopyBuffer(MA2_handle,0,PrognozBars*2+1,vectorLength,ma2); ArrayResize(MAbuff,vectorLength); for(int i=0;i<ArraySize(ma1);i++) //вычисляем разницу между двумя МА { MAbuff[i]=ma1[i]-ma2[i]; } NormalizeArrays(a1); NormalizeArrays(a2); NormalizeArrays(a3); NormalizeArrays(a4); NormalizeArrays(a5); NormalizeArraysMA(MAbuff); //нормируем все входы int j = 0; for(int i=0;i<vectorLength*6;i=i+6) //компануем массив входов для нейросети { ArrayCopy(inputs,MAbuff,i,j,1); ArrayCopy(inputs,a5,i+1,j,1); ArrayCopy(inputs,a4,i+2,j,1); ArrayCopy(inputs,a3,i+3,j,1); ArrayCopy(inputs,a2,i+4,j,1); ArrayCopy(inputs,a1,i+5,j,1); j++; } ArraySetAsSeries(inputs,true); ArraySetAsSeries(outputs,true); //+------------------------------------------------------------------+ //| Neuro Learn | //+------------------------------------------------------------------+ net=new CNetMLP(ArraySize(snn),snn,ArraySize(in),1); net.Learn(vectorLength,inputs,outputs,epoch,1.0 e-8); Print("MSE=",net.mse," Epoch=",net.epoch); //--- сохранение сети в файл и удаление сети int h=FileOpen("test.net",FILE_BIN|FILE_WRITE); net.Save(h); FileClose(h); learn=true; } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- delete net; FileDelete("test.net"); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(learn==false) learnWeb(); //--- if(fn_NEW_BAR()) //запускаем сеть на каждом новом баре, получаем выходы. Торгуем. { ArrayResize(a1,1); ArrayResize(a2,1); ArrayResize(a3,1); ArrayResize(a4,1); ArrayResize(a5,1); ArrayResize(ma1,1); ArrayResize(ma2,1); ArrayResize(MAbuff,1); CopyBuffer(RSI_handle,0,1,1,a1); CopyBuffer(RSI_handle,0,5,1,a2); CopyBuffer(RSI_handle,0,10,1,a3); CopyBuffer(RSI_handle,0,15,1,a4); CopyBuffer(RSI_handle,0,20,1,a5); CopyBuffer(MA1_handle,0,1,1,ma1); CopyBuffer(MA2_handle,0,1,1,ma2); for(int i=0;i<ArraySize(ma1);i++) { MAbuff[i]=ma1[i]-ma2[i]; } NormalizeArrays2(a1); NormalizeArrays2(a2); NormalizeArrays2(a3); NormalizeArrays2(a4); NormalizeArrays2(a5); NormalizeArrays2MA(MAbuff); in[0] = MAbuff[0]; in[1] = a5[0]; in[2] = a4[0]; in[3] = a3[0]; in[4] = a2[0]; in[5] = a1[0]; net.Calculate(in,out); //подаем на вход данные индикаторов на текущем баре, получаем результат на выходе. //+------------------------------------------------------------------+ //| Expert trade function | //+------------------------------------------------------------------+ if(out[0]>0.9) //если на выходе больше этого значения, то покупаем { double Lot=LotsOptimized(); double priceBuy=SymbolInfoDouble(Symbol(),SYMBOL_ASK); if(m_Position.Select(Symbol())) { if(m_Position.PositionType()==POSITION_TYPE_SELL) m_Trade.PositionClose(Symbol()); } if(CountPosBuy()==0) m_Trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,Lot,priceBuy,0,0,NULL); } if(out[0]<-0.9) //если ниже, то продаем { double Lot=LotsOptimized(); double priceSell=SymbolInfoDouble(Symbol(),SYMBOL_BID); if(m_Position.Select(Symbol())) { if(m_Position.PositionType()==POSITION_TYPE_BUY) m_Trade.PositionClose(Symbol()); } if(CountPosSell()==0) m_Trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,Lot,priceSell,0,0,NULL); } } } //+------------------------------------------------------------------+ //| Custom Functions | //+------------------------------------------------------------------+ bool fn_NEW_BAR() { static int nBars=0; if(nBars!=Bars(Symbol(),0)) { nBars=Bars(Symbol(),0); return(true); } return(false); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized() { CAccountInfo myaccount; double lot; //---- select lot size lot=NormalizeDouble(myaccount.FreeMargin()*MaximumRisk/1000.0,1); //---- return lot size if(lot<0.01) lot=0.01; if(lot>50) lot=50; return(lot); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountPosBuy() { CPositionInfo myposition; int result=0; for(int k=0; k<PositionsTotal(); k++) { if(myposition.Select(_Symbol)==true) { if(myposition.PositionType()==POSITION_TYPE_BUY) {result++;} else {} } } return(result); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountPosSell() { CPositionInfo myposition; int result=0; for(int k=0; k<PositionsTotal(); k++) { if(myposition.Select(_Symbol)==true) { if(myposition.PositionType()==POSITION_TYPE_SELL) {result++;} else {} } } return(result); } Rustam Karpunin 2015.09.14 00:26 #57 先生们,如果你们的专家顾问不考虑基本面,那么盈利/亏损的概率=50/50--传播!而专家顾问中的任何神经都不会有帮助,无论是自己的还是别人的:) Vladimir Tkach 2015.09.14 03:49 #58 Rustam Karpunin: 先生们,如果你们的专家顾问没有考虑到基础,那么盈利/亏损的概率=50/50--价差!而专家顾问中的任何神经元都不会有帮助,无论是自己的还是别人的:) 谁说的? Maxim Dmitrievsky 2015.09.14 08:36 #59 Rustam Karpunin: 先生们,如果你们的专家顾问不学习基本原理,盈利/亏损的概率=50/50--传播!而且专家顾问中的任何神经元都不会有帮助,无论是自己的还是别人的:) 这非常酷,我已经开始购买一些与之合作的功能,我已经得到了有趣的结果,我稍后会公布。我只是需要花大量的时间来思考出一个策略。 Sergey Ponomarev 2015.09.14 09:03 #60 什么事神经网络的顾问? 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这是一个有趣的话题。我有一个想法,但更简单。我暂时先问一下问题 :)
如何确定进入点是很清楚的--我们采取Z字形,但我们需要知道该点之前的情况来预测进入。条形图中的哪个窗口是用来分析前面的数据的?
你有没有试着把输入和输出功能分开?或者是反转--通常使用相反的信号的到来?如果采用不同的盈亏固定方式,而不是退出翻牌,结果会是怎样?
这是一个有趣的话题。我有一个想法,但更简单。我暂时先问一下问题 :)
如何确定进入点是很清楚的--我们采取Z字形,但我们需要知道该点之前的情况来预测进入。条形图中的哪个窗口是用来分析前面的数据的?
你有没有试着把输入和输出功能分开?还是通常使用反转--相反信号的到来?如果采用不同的盈亏固定方式,而不是退出翻牌,结果会是怎样?
昨天启动了演示中的神经元https://www.mql5.com/ru/signals/129790,到目前为止似乎还不错。
Прикольно, понаблюдаемс.. а что в основу заложено?
到目前为止,还没有什么有趣的消息传出。代码和逻辑中可能存在错误。我写作只是为了发展这个话题,可以说,也许有人会为了自己而改变它,或者纠正我的错误。
我已经在代码中修正了主要的时刻。预测条数 - 预测深度,向前看多少条。然后是用于网格训练的阵列长度和训练历时数。30个神经元,你可以在代码中改变它。
先生们,如果你们的专家顾问没有考虑到基础,那么盈利/亏损的概率=50/50--价差!而专家顾问中的任何神经元都不会有帮助,无论是自己的还是别人的:)
先生们,如果你们的专家顾问不学习基本原理,盈利/亏损的概率=50/50--传播!而且专家顾问中的任何神经元都不会有帮助,无论是自己的还是别人的:)