스크립트 형태의 신경망 - 페이지 4

 
rip :
유라즈 :

정규화가 항상 필요한 것은 아닙니다. 누가 네트워크가 0과 1에서만 작동할 수 있고 작동해야 한다고 말했습니까?


예를 들어 간단한 그리드를 첨부할 수 있습니다. (안타깝게도 지금은 수중에 있는 자료가 없습니다) - 나중에 첨부하겠습니다.

여기서 단순 NN은 정규화를 통한 사전 데이터 준비 없이 이 문제를 해결합니다.

불행히도 이것은 원본이 아닙니다


그러나 내가 드린 예! 그것은 이미 정상화되었습니다

두 가지 범위가 있는 조건


1 0-100

2 10-30


한 범위에서 위치 비율을 찾으면 됩니다.

기본적으로 스케일링입니다.

정규화는 거의 항상 필요합니다. 데이터는 활성화 기능의 범위 내에 있어야 합니다.

스크립트에서 sigmoid는 [-1; +1]입니다. 예를 들어 지수로 바꾸면 ... 또는 제곱근입니다.


http://www.statsoft.ru/home/portal/applications/NeuralNetworksAdvisor/Adv-new/ActivationFunctions.htm








http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


다음은 네트워크를 생성하는 예입니다 ... 입력은 LOW입니다. 즉, 정규화가 없습니다.

 
YuraZ :

http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


다음은 네트워크를 생성하는 예입니다 ... 입력은 LOW입니다. 즉, 정규화가 없습니다.


비정규화 데이터를 사용하는 것은 때때로 매우 유용합니다. 변환 과정에서 손실될 수 있는 정보 콘텐츠를 잃지 않습니다.

그리고 훈련 샘플의 정보성을 결정하기 위한 공식화된 메커니즘이 없습니다...


그건 그렇고, 어떤 활성화 기능이 사용되는지 기사에는 어디에도 표시되지 않습니다. 분명히 범위가 [-inf;+inf] 또는 [0;+inf] ...

 

프로그램을 약간 변경했습니다!

화면의 출력 형식을 약간 변경했습니다.


이제 SCRIPT는 높은 정확도로 출력 데이터를 계산하기 위해 부채를 고려합니다.

물론 이 프로그램은 이미 보편적인 것은 아니지만 입력 및 출력 수에 따라 예리해졌습니다.

하지만 은닉층의 크기! 학습 과정에서 선택한



다음 릴리스 - 입력 및 출력 수 측면에서 유연하게 만들려고 노력할 것입니다.

작동 하면 유전자 알고리즘 과 함께 추가하겠습니다.

목표는 많은 오류로 NEURONS를 죽이는 것입니다.

그리고 적은 수의 오류로 뉴런의 곱셈!

즉, 실제로 오류 수가 가장 적은 뉴런의 배열을 검색하고 이를 대체할 자손을 생성합니다.

저조한 성능을 보이는 그 뉴런들...


1 학습률이 현재 낮습니다.

2차 변경 - 은닉 1차 레벨의 뉴런 수는 논리 없이 랜덤

3 입력 및 출력 데이터 샘플에서 높은 정확도를 얻으면 훈련 중지

파일:
 

사용 방법? 나는 차트에 스크립트를 넣었고 많은 숫자가 일치하기 시작했습니다 ...이 숫자는 무엇을 말합니까?

 
Blast :

사용 방법? 나는 차트에 스크립트를 넣었고 많은 숫자가 일치하기 시작했습니다 ...이 숫자는 무엇을 말합니까?

왜 네가? GA용 네트워크 교육 알고리즘을 가지고 있는 저는 코드를 이해하는 데 어려움을 겪었습니다. 코드에 시간을 할애하고, 입력을 밀어넣을 위치, 이 출력에서 철회하는 방법, 매수 매도 및 매수 매도 및 전혀 가능합니까? 아니면 성배 를 타러 오셨습니까?

 
Loknar :
폭발 :

사용 방법? 나는 차트에 스크립트를 넣었고 많은 숫자가 일치하기 시작했습니다 ...이 숫자는 무엇을 말합니까?

왜 네가? GA용 네트워크 교육 알고리즘을 가지고 있는 저는 코드를 이해하는 데 어려움을 겪었습니다. 코드에 시간을 할애하고, 입력을 밀어넣을 위치, 이 출력에서 철회하는 방법, 매수 매도 및 매수 매도 및 전혀 가능합니까? 아니면 성배를 타러 오셨습니까?

폭발 , 여기에서 고문이나 지표를 찾지 마십시오. 이것은 아직 멀었습니다.


그것은 오히려 MQL4에서 신경망 의 작동 원리에 대한 연구입니다.

---

일반적으로 MT 또는 빠른 다른 언어를 사용하는 경우 C++로 DLL로 작성하는 것이 합리적입니다.


Loknar는 더 정확한 출력 데이터를 얻으려는 시도로 처음에 게시된 스크립트를 수정한 것입니다.

--

그건 그렇고 레이어를 추가하려고 시도했습니다 :-) 출력 입력은 말할 것도없고 ... 학습 파이프 알고리즘은 순간에 죽습니다 ...


---

나는 같은 것을 시도하고 싶다

3번 출구

출력은 어리석게도 0 또는 1 또는 -1 0 +1이 아니라 특정 범위입니다.

x 0 0 - 안녕을 잡고 안녕

0 x 0 플랫(매수 또는 매도 종료)

0 0 x 매도 보류 매도

여기서 x는 0 또는 1이 아니지만 일부 범위(예: -1.000 0.000 +1.000)에 약간의 편차가 있습니다.

즉, 0.1122 또는 -0.012와 같은 값을 취할 수 있습니다.


경계 교차에 대해 3개의 출력 조합이 분석됩니다.


각 TF에 9개의 입력 - M1 M5 M15 M30 H1 H4 총 54개 입력

각 TF에 대해 평균 3 5 8 13 21 34 55 89 144 233의 차이를 제공합니다.

총 3-5 5-8 8-13 13-21 21-34 34-55 55-89 89-144 144-233 각 TF에 총 9

그리드 보기에서 FAN OF AVERAGES와 같은 것을 얻습니다... :-) 매트릭스에서

패턴 2 3 4 5 6 7 8 9 10 11 팬이 완전히 열렸을 때

패턴이 있을 때 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 팬이 완전히 열린 상태 - BY

더 큰 TF에는 조건부 숫자와 같은 패턴이 있습니다. -1 -3 -7 - 10 -15 -20 -30 -40 -80



---

일종의 훈련 세트


1 2 1 0 -3 2 3 0 4 M1

-1 2 -1 0 1 2 3 0 -4 M5

...

........................... H4

 

훈련을 위한 데이터 준비





 #property copyright " Copyright © 2005, MetaQuotes Software Corp. "
#property link        " http://www.metaquotes.net/ "
 
static int hWR ;
 
static double      ma [ 9 ][ 233 ] ;
static datetime    SaveTime [ 9 ] ;
static int        indx [ 8 ] = { 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 } ;
static    int iFW = 0 ;
 
int init ()
   {
   hWR = FileOpen ( " MA.CSV " , FILE_BIN | FILE_WRITE ) ; 
   string strPut = " DATETIM            | " +
   " m100035|m010058|m010813|m011321|m012134|m013455|m015589| " +
   " m500035|m050058|m050813|m051321|m052134|m053455|m055589| " +
   " m150035|m150058|m150813|m151321|m152134|m153455|m155589| " +
   " m300035|m300058|m300813|m301321|m302134|m303455|m305589| " +
   " h010035|h010058|h010813|h011321|h012134|h013455|h015589| " ;
 
 
 
// "-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|
   FileWrite ( hWR , strPut ) ;
   return ( 0 ) ;
   }
int deinit ()
   {
   FileClose ( hWR ) ;
   }
 
int start ()
{
   iFW = 0 ;
   getMA ( PERIOD_M1 , 1 ) ;
   getMA ( PERIOD_M5 , 2 ) ;
   getMA ( PERIOD_M15 , 3 ) ;
   getMA ( PERIOD_M30 , 4 ) ;
   getMA ( PERIOD_H1 , 5 ) ;
   getMA ( PERIOD_H4 , 6 ) ;
   if ( iFW == 1 )
   {
       PutFile ( ) ;
   }
   return ( 0 ) ;
}
void getMA ( int TF , int iTF )
{
 if ( SaveTime [ iTF ] != iTime ( Symbol () , TF , 0 ) )
 {
 SaveTime [ iTF ] = iTime ( Symbol () , TF , 0 ) ;
 ma [ iTF ][ 89 ] =   iMA ( Symbol () , TF , 89 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 55 ] =   iMA ( Symbol () , TF , 55 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 34 ] =   iMA ( Symbol () , TF , 34 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 21 ] =   iMA ( Symbol () , TF , 21 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 13 ] =   iMA ( Symbol () , TF , 13 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 8 ] =   iMA ( Symbol () , TF , 8 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 5 ] =   iMA ( Symbol () , TF , 5 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 ma [ iTF ][ 3 ] =   iMA ( Symbol () , TF , 3 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) ;
 iFW = 1 ;
 }
}
void    PutFile ( )
{
 string strPut ;
 strPut = TimeToStr ( SaveTime [ 1 ] , TIME_DATE | TIME_MINUTES | TIME_SECONDS ) ;
 for ( int iiTF = 1 ; iiTF <= 6 ; iiTF ++ )
 {
   for ( int jM = 0 ; jM <= 6 ; jM ++ )
   {
       int nMA = indx [ jM ] ;
       int nMA_N = indx [ jM + 1 ] ;
       double nn = NormalizeDouble ( ( ma [ iiTF ][ nMA ] - ma [ iiTF ][ nMA_N ]) / Point , 0 ) ;
       string sss = DoubleToStr ( nn , 0 ) ;
       if ( nn >= 0 )
         sss = " " + sss ;
       if ( MathAbs ( nn )   <= 9 )
         sss = " " + sss ;
       
         
       // strPut = strPut+DoubleToStr( ma[iiTF][ nMA] , 4)+"|";
       strPut = strPut + " | " + sss ;
   }
 }
 FileWrite ( hWR , strPut ) ;
}
 
Loknar :
폭발 :

사용 방법? 나는 차트에 스크립트를 넣었고 많은 숫자가 일치하기 시작했습니다 ...이 숫자는 무엇을 말합니까?

왜 네가? GA용 네트워크 교육 알고리즘을 가지고 있는 저는 코드를 이해하는 데 어려움을 겪었습니다. 코드에 시간을 할애하고, 입력을 밀어넣을 위치, 이 출력에서 철회하는 방법, 매수 매도 및 매수 매도 및 전혀 가능합니까? 아니면 성배를 타러 오셨습니까?

처음에는 신경망 이라는 아이디어가 마음에 들었습니다. 1000 포인트가 있으면 네트워크가 어떻게 든 한 포인트로 수렴된다는 것을 알고 있습니다 ... 그리고 자동 거래는 네트워크 알고리즘을 기반으로 한 어드바이저와 함께 이겼습니다. 나는 그러한 네트워크의 내 자신의 버전을 만들 계획이 있지만 이 단계에서는 mql4나 신경망에서 아무것도 이해하지 못합니다.

따라서 mql4를 배우기 위해 먼저 Expert Advisor에 내 전략을 작성합니다. 그러면 그들은 네트워크에 대해 생각할 것입니다.

관심을 끌기 위해 변형이 다운로드되었습니다. 이런 일들은 처음입니다. 나는 이러한 네트워크가 어떻게 작동하는지 이해하지 못합니다. 따라서 그러한 질문이 제기되었습니다.

그건 그렇고, 귀하의 의견으로는 관심을 가질만한 유사한 주제에 대한 모든 링크에 기쁠 것입니다!

 

이 네트워크

YuraZ :

프로그램을 약간 변경했습니다!

화면의 출력 형식을 약간 변경했습니다.

이제 SCRIPT는 높은 정확도로 출력 데이터를 계산하기 위해 부채를 고려합니다.

물론 이 프로그램은 이미 보편적인 것은 아니지만 입력 및 출력 수에 따라 예리해졌습니다.

하지만 은닉층의 크기! 학습 과정에서 선택한



다음 릴리스 - 입력 및 출력 수 측면에서 유연하게 만들려고 노력할 것입니다.

작동하면 유전자 알고리즘과 함께 추가하겠습니다.

목표는 많은 오류로 NEURONS를 죽이는 것입니다.

그리고 적은 수의 오류로 뉴런의 곱셈!

즉, 실제로 오류 수가 가장 적은 뉴런의 배열을 검색하고 이를 대체할 자손을 생성합니다.

저조한 성능을 보이는 그 뉴런들...


1 학습률이 현재 낮습니다.

2차 변경 - 은닉 1차 레벨의 뉴런 수는 논리 없이 랜덤

3 입력 및 출력 데이터 샘플에서 높은 정확도를 얻으면 훈련 중지


동일한 그리드이지만 Microsoft Visual C++ 6.0으로 작성됨

작업 속도는 MQL4보다 훨씬 빠릅니다.

알고리즘이 변경되지 않았으며 MQL4에서 C++로의 전송은 객체(클래스)를 사용하지 않고 가능한 한 직접적입니다.

파일:
yzpnn.zip  63 kb
 

MQL이 아닌 다른 옵션


M1에서 작업하려고 하면 현재 추세 방향을 보여줍니다.

3일에 나가면 이론상 발사 시 훈련할 수 없지만 기성품 웨이트를 즉시 섭취하십시오. 사전에 훈련하십시오.


---

이동의 정규화된 차이 제공되는 9개의 입력

---

출력 1 출력 2 출력 3 출력

0.9 0.01 0.01 추세 상승

0.01 0.9 0.01 플랫

0.01 0.01 0.9 추세 하락



---

3~4시간 추가해서 바로 계산할 예정입니다!

이미 가중치를 수행한 경우 PNN은 매우 빠르게 작동합니다.

---


테스트 코드 실험 - 걷어차지 마십시오






파일: