신경망에 대한 고문, 경험 공유. - 페이지 6 12345678910 새 코멘트 Aleksey Vyazmikin 2015.09.02 16:45 #51 흥미로운 주제. 아이디어가 있지만 더 간단합니다. 질문하면서 :) 진입점을 결정하는 방법은 분명합니다. 지그재그로 이동하지만 진입점을 예측하려면 해당 지점 이전에 무엇이 있었는지 알아야 합니다. 이전 데이터를 분석하는 데 사용되는 막대의 창은 무엇입니까? 입력 기능과 출력 기능을 분리해 보셨나요? 아니면 일반적으로 쿠데타가 사용됩니까? 반대 신호의 도착? 쿠데타가 아닌 다른 방식의 손익 고정 방식을 사용하면 결과가 어떻게 될까요? Anton Govorukhin 2015.09.02 20:44 #52 어제 데모에서 뉴런을 시작했습니다. https://www.mql5.com/ru/signals/129790 아직 아무것도 없는 것 같습니다. Maxim Dmitrievsky 2015.09.02 21:30 #53 -Aleks- : 흥미로운 주제. 아이디어가 있지만 더 간단합니다. 질문하면서 :) 진입점을 결정하는 방법은 분명합니다. 지그재그로 이동하지만 진입점을 예측하려면 해당 지점 이전에 무엇이 있었는지 알아야 합니다. 이전 데이터를 분석하는 데 사용되는 막대의 창은 무엇입니까? 입력 기능과 출력 기능을 분리해 보셨나요? 아니면 쿠데타가 일반적으로 사용됩니까? 반대 신호를 수신합니까? 쿠데타가 아닌 다른 방식의 손익 고정 방식을 사용하면 결과가 어떻게 될까요? 1바 앞으로, 즉 1바 뒤로 시프트하여 예측하려고 했습니다. 그런데 문제는 마지막 막대의 지그재그가 자체적으로 값을 채워야 하고 다시 그려지므로 모든 것이 명확하지 않다는 것입니다. 제대로 하는 방법을 알려주세요. Maxim Dmitrievsky 2015.09.02 21:31 #54 Anton Govorukhin : 어제 데모에서 뉴런을 시작했습니다. https://www.mql5.com/ru/signals/129790 아직 아무것도 없는 것 같습니다. 좋습니다. 관찰해 봅시다. 하지만 그 근거는 무엇입니까? Anton Govorukhin 2015.09.02 21:47 #55 막심 드미트리예프스키 : 좋습니다. 관찰해 봅시다. 하지만 그 근거는 무엇입니까? 거래량, 미결제약정, 시장의 힘의 균형. Maxim Dmitrievsky 2015.09.03 03: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 02:26 #57 여러분, 고문이 기초를 고려하지 않으면 손익 확률 = 50/50 - 퍼짐! 그리고 어드바이저의 어떤 뉴런도 자신이나 다른 사람을 돕지 않습니다. :) Vladimir Tkach 2015.09.14 05:49 #58 Rustam Karpunin : 여러분, 고문이 기초를 고려하지 않으면 손익 확률 = 50/50 - 퍼짐! 그리고 어드바이저의 어떤 뉴런도 자신이나 다른 사람을 돕지 않습니다. :) 누가 그걸 말했어? Maxim Dmitrievsky 2015.09.14 10:36 #59 Rustam Karpunin : 여러분, 고문이 기초를 고려하지 않으면 손익 확률 = 50/50 - 퍼짐! 그리고 어드바이저의 어떤 뉴런도 자신이나 다른 사람을 돕지 않습니다. :) NS는 매우 훌륭합니다. 저는 그들과 함께 작업하는 몇 가지 기능을 사용하기 시작했고 흥미로운 결과가 이미 나타나고 있습니다. 나중에 게시하겠습니다. 전략을 세우는 데만도 많은 시간이 걸립니다. Sergey Ponomarev 2015.09.14 11:03 #60 뭐라고요 신경망에 대한 고문? 12345678910 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
흥미로운 주제. 아이디어가 있지만 더 간단합니다. 질문하면서 :)
진입점을 결정하는 방법은 분명합니다. 지그재그로 이동하지만 진입점을 예측하려면 해당 지점 이전에 무엇이 있었는지 알아야 합니다. 이전 데이터를 분석하는 데 사용되는 막대의 창은 무엇입니까?
입력 기능과 출력 기능을 분리해 보셨나요? 아니면 일반적으로 쿠데타가 사용됩니까? 반대 신호의 도착? 쿠데타가 아닌 다른 방식의 손익 고정 방식을 사용하면 결과가 어떻게 될까요?
흥미로운 주제. 아이디어가 있지만 더 간단합니다. 질문하면서 :)
진입점을 결정하는 방법은 분명합니다. 지그재그로 이동하지만 진입점을 예측하려면 해당 지점 이전에 무엇이 있었는지 알아야 합니다. 이전 데이터를 분석하는 데 사용되는 막대의 창은 무엇입니까?
입력 기능과 출력 기능을 분리해 보셨나요? 아니면 쿠데타가 일반적으로 사용됩니까? 반대 신호를 수신합니까? 쿠데타가 아닌 다른 방식의 손익 고정 방식을 사용하면 결과가 어떻게 될까요?
어제 데모에서 뉴런을 시작했습니다. https://www.mql5.com/ru/signals/129790 아직 아무것도 없는 것 같습니다.
좋습니다. 관찰해 봅시다. 하지만 그 근거는 무엇입니까?
지금까지 흥미로운 일은 없었습니다. 코드와 논리에 오류가 있을 수 있습니다. 나는 단지 주제를 발전시키기 위해 글을 씁니다. 말하자면 누군가가 스스로 그것을 리메이크하거나 내 실수를 수정 할 것입니다.
코드의 요점을 주석 처리했습니다. 예측 막대 - 예측의 깊이, 앞으로 예상되는 막대의 수. 다음으로, 그리드 훈련을 위한 배열의 길이와 훈련 에포크의 수입니다. 30개의 뉴런은 코드에서 변경할 수 있습니다.
여러분, 고문이 기초를 고려하지 않으면 손익 확률 = 50/50 - 퍼짐! 그리고 어드바이저의 어떤 뉴런도 자신이나 다른 사람을 돕지 않습니다. :)
여러분, 고문이 기초를 고려하지 않으면 손익 확률 = 50/50 - 퍼짐! 그리고 어드바이저의 어떤 뉴런도 자신이나 다른 사람을 돕지 않습니다. :)