신경망, 마스터하는 방법, 어디서부터 시작해야 할까요? - 페이지 5

 
meta-trader2007 >> :

Reshetov가 사용하는 것과 유사한 단순한 선형 퍼셉트론을 의미합니다. Rosenblatt는 뇌의 모델로 퍼셉트론을 만들었습니다.), 이는 매우 원시적인 모델입니다...

Reshetov 씨가 사용하는 단순 선형 퍼셉트론은 40년이 넘었습니다.

신경망의 실제 역사는 활성화 기능이 있는 Rosenblatt 퍼셉트론과 함께 정확하게 시작되었습니다.

 
TheXpert >> :

Reshetov 씨가 사용하는 단순 선형 퍼셉트론은 40년이 넘었습니다.

신경망의 실제 역사는 활성화 기능이 있는 Rosenblatt 퍼셉트론과 함께 정확하게 시작되었습니다.

그러나 그의 퍼셉트론도 완벽하지 않습니다. 그리고 코스의 이동 방향을 예측하는 것은 적합하지 않습니다.

저것들. Rosenblatt의 2층 퍼셉트론(그가 먼저 생성)에서 첫 번째 은닉층이 활성화 함수의 역할을 했습니까?

 
meta-trader2007 >> :

그러나 그의 퍼셉트론도 완벽하지 않습니다. 그리고 코스의 이동 방향을 예측하는 것은 적합하지 않습니다.

저것들. Rosenblatt의 2층 퍼셉트론(그가 먼저 생성)에서 첫 번째 은닉층이 활성화 함수의 역할을 했습니까?

얘들 아, 주제에 대해 작성하십시오. 그렇지 않으면 주제를 추적하고 있으며 여기에서 더 높은 문제에 대해 이야기하고 있습니다. 우리는 최소한 간단한 것을 수행하는 방법을 알아낼 것입니다 ...


다음은 간단한 Expert Advisor의 알고리즘입니다.

예를 들어 손절매를 제공하고 마지막 프랙탈을 기반으로 이익 진입점을 취하는 간단한 알고리즘을 살펴보겠습니다.

업 프랙탈이 있는 경우 프랙탈을 깨기 위해 정지 매수 주문을 합니다. 정지 손실은 0에서 프랙탈이 형성된 막대 사이의 최소 가격 미만입니다. 이익실현은 손절매와 같습니다.


이 EA의 코드는 다음과 같습니다.

 extern double    Lot = 0.1 ;
extern int       Slippage = 3 ; // Проскальзывание
extern int       Magic = 1 ;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init ( )
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit ( )
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start ( )
  {
//----
 int i ;
 
// Фрактал вверх 
 int iUpFr ;   // Номер бара на котором образовался последний фрактал вверх
 double UpFr ; // Значение последнего фрактала вверх 

for ( i = 3 ; i < Bars ; i + + ) {
UpFr = iFractals ( NULL , 0 , MODE_UPPER , i ) ;
  if ( UpFr > 0 ) {
  iUpFr = i ;
  //Print ("UpFr = ", UpFr, ", ", " iUpFr = ", iUpFr);
  break ;
  }
}   
// Проверяем прорван-ли найденый фрактал, если он прорван, то по нему не имеет смысла выставлять ордер
bool OkUpFr ; // Если false, то прорван, если true, то не прорван
if ( UpFr > = High [ iHighest ( NULL , 0 , MODE_HIGH , iUpFr , 0 ) ] ) { OkUpFr = true ; }

double SellSl = High [ iHighest ( NULL , 0 , MODE_HIGH , iUpFr + 1 , 0 ) ] ; // Минимальное значение цены от нулевого бара до номера на котором сформировался последний фрактал вверх


// Фрактал вниз
 int iDnFr ;   // Номер бара на котором образовался последний фрактал вниз
 double DnFr ; // Значение последнего фрактала вниз
 
for ( i = 3 ; i < Bars ; i + + ) {
DnFr = iFractals ( NULL , 0 , MODE_LOWER , i ) ;
  if ( DnFr > 0 ) {
  iDnFr = i ;
  //Print ("DnFr = ", DnFr, ", ", " iDnFr = ", iDnFr);
  break ;
  }
} 
// Проверяем прорван-ли найденый фрактал, если он прорван, то по нему не имеет смысла выставлять ордер
bool OkDnFr ; // Если false, то прорван, если true, то не прорван
if ( DnFr < = Low [ iLowest ( NULL , 0 , MODE_LOW , iDnFr , 0 ) ] ) { OkDnFr = true ; }

double BuySl = Low [ iLowest ( NULL , 0 , MODE_LOW , iDnFr + 1 , 0 ) ] ; // Максимальное значение цены от нулевого бара до номера на котором сформировался последний фрактал вниз
 
 // Параметры ордеров
  double Tick = MarketInfo ( Symbol ( ) , MODE_TICKSIZE ) ;
  double spread = MarketInfo ( Symbol ( ) , MODE_SPREAD ) * Tick ;

  double B ;
  double Bsl ;
  double S ;
  double Ssl ;    
  double Btp ; 
  double Stp ; 
  B = NormalizeDouble ( UpFr + 1 * Tick + spread , Digits ) ;      // Цена для покупки
  Bsl = NormalizeDouble ( BuySl - 1 * Tick , Digits ) ;          // Стоп лосс для ордера на покупку
  Btp = NormalizeDouble ( B + ( B - Bsl ) , Digits ) ;             // Тейк профит для ордера на покупку
  S = NormalizeDouble ( DnFr - 1 * Tick , Digits ) ;             // Цена для продажи
  Ssl = NormalizeDouble ( SellSl + spread + 1 * Tick , Digits ) ;  // Стоп лосс для ордера на продажу
  Stp = NormalizeDouble ( S - ( Ssl - S ) , Digits ) ;             // Тейк профит для ордера на продажу
  
bool Buy ; // если Buy==true, значит появились условия для Buy stop
bool Sell ; // если Sell==true, значит появились условия для Sell stop

if ( OkUpFr = = true ) { Buy = true ; }
if ( OkDnFr = = true ) { Sell = true ; }
 
// Проверка открытых ордеров и выставленых ордеров
int total = OrdersTotal ( ) ; // Общее кол-во открытых и отложеных ордеров.
int Ticket = OrderTicket ( ) ; // Возвращает номер тикета для текущего выбранного ордера. 
bool PendingOrderBuy = false ;  
bool PendingOrderSell = false ;   
bool MarketOrderBuy = false ;
bool MarketOrderSell = false ;
if ( total > 0 ) {  
  for ( i = 0 ; i < = total ; i + + ) {
     if ( OrderSelect ( i , SELECT_BY_POS ) = = true ) {
        if ( OrderSymbol ( ) = = Symbol ( ) & & OrderMagicNumber ( ) = = Magic ) {
         double OpenPrice = NormalizeDouble ( OrderOpenPrice ( ) , Digits ) ;
         double StopLoss = NormalizeDouble ( OrderStopLoss ( ) , Digits ) ;
         double TakeProfit = NormalizeDouble ( OrderTakeProfit ( ) , Digits ) ;
         Ticket = OrderTicket ( ) ;
           if ( OrderType ( ) = = OP_BUY ) {
           MarketOrderBuy = true ;
           }
           if ( OrderType ( ) = = OP_SELL ) {
           MarketOrderSell = true ;
           }
           if ( OrderType ( ) = = OP_BUYSTOP ) {
           PendingOrderBuy = true ;
           if ( OpenPrice ! = B ) { OrderDelete ( Ticket , CLR_NONE ) ; } 
           if ( StopLoss ! = Bsl ) { OrderDelete ( Ticket , CLR_NONE ) ; }       
           }
           if ( OrderType ( ) = = OP_SELLSTOP ) {
           PendingOrderSell = true ;
           if ( OpenPrice ! = S ) { OrderDelete ( Ticket , CLR_NONE ) ; } 
           if ( StopLoss ! = Ssl ) { OrderDelete ( Ticket , CLR_NONE ) ; }    
           }  
        }
     }
  }
} 
// Выставление отложеных ордеров
if ( Buy = = true & & PendingOrderBuy = = false & & MarketOrderBuy = = false ) {
         Ticket = OrderSend ( Symbol ( ) , OP_BUYSTOP , Lot , B , Slippage , Bsl , Btp , NULL , Magic , 0 , CLR_NONE ) ;
         if ( Ticket < 0 )
         {
         Print ( "OrderSend failed with error #" , GetLastError ( ) ) ;
         return ( 0 ) ;
         }
}
if ( Sell = = true & & PendingOrderSell = = false & & MarketOrderSell = = false ) {
         Ticket = OrderSend ( Symbol ( ) , OP_SELLSTOP , Lot , S , Slippage , Ssl , Stp , NULL , Magic , 0 , CLR_NONE ) ;
         if ( Ticket < 0 )
         {
         Print ( "OrderSend failed with error #" , GetLastError ( ) ) ;
         return ( 0 ) ;
         }
}     
//----
   return ( 0 ) ;
  }

이 알고리즘에서는 프랙탈 모델이 측정되는 기준에 따라 여러 기준점을 구별할 수 있습니다.


가중치로 사용할 수 있는 매개변수:

구매:
iUpFr
iUpFr-iSellSl
UpFr-SellSl
(UpFr-SellSl)/(iUpFr-iSellSl)
(UpFr-SellSl)/(iUpFr)

판매:
아이디
iDnFr-iBuySl
Sl-DnFr 구매
(BuySl-DnFr)/(iDnFr-iBuySl)
(BuySl-DnFr)/(iDnFr)


신경망을 생성하는 다음 단계는 이러한 속성과 비교할 변수를 도입하는 것임을 올바르게 이해하고 있습니까?

그리고 최적화 과정에서 비교가 이루어지나요?

내가 틀렸다면 이 Expert Advisor에 간단한 신경망을 연결하기 위해 어떤 실용적인 단계를 더 거쳐야 합니까?



 

신경망의 수학은 그렇게 복잡하지 않습니다. 네트워크 예측의 성공을 위해서는 입력 매개변수의 선택이 훨씬 더 중요합니다. 여기서 질문은 다음과 같습니다. 어떤 지표와 매개변수가 시장의 현재 상태와 그 역사를 완전히 설명합니까? 통화의 최근 가격을 몇 개만 아는 것만으로는 네트워크의 레이어 수에 관계없이 미래 가격을 예측하기에 충분하지 않습니다. 따라서 과거 가격을 많이 선택하거나 다른 기간의 지표를 선택해야 합니다. 대다수가 지표를 사용하기 때문에 과거 가격과 관련하여 마지막 가격의 위치를 보다 효과적으로 설명할 수 있습니다. 토론을 입력 매개변수 선택으로 전환할 수 있습니다. 다른 기간의 움직임의 마지막 값의 상호 관계가 네트워크에 좋은 입력이 될 수 있다고 생각합니다. 누가 다른 의견을 가지고 있습니까? 동일한 네트워크의 입력에서 MACD, RSI, AC, Stoch 등과 같은 다양한 유형의 지표를 혼합할 수 있습니까?

 
gpwr >> :

동일한 네트워크의 입력에서 MACD, RSI, AC, Stoch 등과 같은 다양한 유형의 지표를 혼합할 수 있습니까?

일련의 지표가 좋은 시장 진입을 제공한다면 가능하다고 생각합니다. 추구하면서 또 다른 덜 어려운 질문이 발생합니다. 훈련 중에 네트워크 출력에 무엇을 공급해야합니까? 우리는 무엇을 원하는가? 패턴을 인식합니까? 다음 촛불의 색을 예측하시겠습니까? 아니면 하나가 아니라 여러 개일까요? 아니면 움직임의 크기를 예측할 수 있습니까? )))

이러한 질문에 대한 답을 찾고 싶습니다.

아마도 실무자들이 자신의 네트워크를 훈련하는 내용을 알려줄 것입니까? :))

 

포럼 참가자 여러분, 이 스레드의 주제는 신경망 입니다. 이를 마스터하는 방법, 어디서부터 시작해야 할까요?

본론으로 들어가자....

 

얘들 아, 신경망에 관한 것이 아니라 신경망이 사용되는 방식에 관한 것입니다 ......

 
Andrey4-min писал(а) >>

포럼 참가자 여러분, 이 스레드의 주제는 신경망 입니다. 이를 마스터하는 방법, 어디서부터 시작해야 할까요?

본론으로 들어가자....

다음은 이 주제가 나올 때 가끔 인용하는 순방향 네트워크에 대한 간략한 설명입니다. 그래서 우리는 가장 단순한 순방향 네트워크를 만듭니다.

1단계: 입력 데이터를 선택합니다. 예를 들어,

x1 = 1당 WPR

x2 = WPR Per2

x3 = WPR당 3

2단계: 은닉층의 뉴런 수를 선택합니다(예: 두 개의 뉴런, y1 및 y2). 출력 수준에서 뉴런 수를 선택합니다(예: 두 개의 뉴런, z1 및 z2). 그래서 우리는 3-2-2 네트워크를 만들었습니다. z1과 z2는 우리의 출력입니다.

3단계: 의사 결정 논리를 설정합니다. 예를 들어 z1>=u 매수, z1<=-u 매도, z2<=-v 마감 매수, z2>=v 마감 매도(여기서 |u|<=1 및 |v|<=1).

4단계: 숨겨진 뉴런 y1=F(x1,x2,x3) 및 y2=F(x1,x2,x3) 설명:

y1 = F(a0+a1*x1+a2*x2+a3*x3)

y2 = F(b0+b1*x1+b2*x2+b3*x3)

여기서 F()는 비선형 함수(활성화 함수)입니다. 예를 들어, F(x)=tanh(x)=(exp(x)-exp(-x))/(exp(x)+exp(-x)). exp()를 계산할 때 오류를 피하기 위해 더 간단한 함수를 선호합니다.

F(x) = x<=-1이면 -1, -1<x<1이면 x, x>=1이면 1입니다.

5단계: 출력 뉴런 z1=F(y1,y2) 및 z2=F(y1,y2) 설명:

z1 = F(c0+c1*y1+c2*y2)

z2 = F(d0+d1*y1+d2*y2)

여기서 F()는 동일한 뉴런 활성화 함수입니다.

따라서 네트워크가 생성되고 설명됩니다. Williamps-Percent-Range(WPR)에 대해 Per1, Per2 및 Per3 기간을 설정하고 메타드래프트 bactester a0, a1, a2, a3, b0, b1, b2, b3, c0, c1, c2, d0, d1, d2를 통해 최적화합니다. , - 1<=u<=+1, -1<=v<=+1. Per1, Per2 및 Per3을 최적화할 수도 있습니다. 다양한 입력을 가지고 놀 수 있습니다. 예를 들어, WPR 대신 MACD 또는 다른 표시기를 사용해 보십시오. 개방 위치에 대해 하나의 출력 뉴런으로 자신을 제한할 수 있습니다: z(y1,y2)>=u buy, z(y1,y2)<=-u Sell. 그리고 손절매, 후행 정지 또는 이익 실현에 가깝습니다.

또한 각 거래 결정에 해당하는 출력 뉴런이 할당되는 보다 복잡한 네트워크를 만드는 것도 가능합니다. 예를 들어, 동일한 입력 데이터와 은닉 뉴런이 주어지면 4개의 출력 뉴런을 생성합니다.

z1(y1,y2)>u1 - 오픈 롱

z2(y1,y2)>u2 - 오픈 쇼트

z3(y1,y2)>u3 - 롱 닫기

z4(y1,y2)>u4 - 단락 닫기

이 경우 최적화된 계수의 수가 크게 증가합니다. 일반적으로 u1=u2=u3=u4=0.9입니다.

강력한 컴퓨터가 있으면 숨겨진 레이어와 뉴런의 수를 늘릴 수 있습니다.

 
Andrey4-min писал(а) >>

포럼 참가자 여러분, 이 스레드의 주제는 신경망 입니다. 이를 마스터하는 방법, 어디서부터 시작해야 할까요?

본론으로 들어가자....

스스로 신경망 프로그래밍을 귀찮게하지 마십시오. 기성 프로그램이 있습니다. 러시아어로 된 책이 있는 유일한 프로그램은 Statistica Neural Networks이고, 게다가 이 책은 정말 신경망 전문가가 쓴 것 같은 인상을 주고, 신경망 작업 방법에 대한 꽤 괜찮은 소개와 개요를 가지고 있습니다. 및 기존 유형의 신경망. 이 프로그램을 사용하면 훈련된 네트워크를 dll 형식으로 내보낼 수 있으며 이는 MT의 어드바이저에서 사용할 수 있습니다(아직 직접 시도하지는 않았지만 문제가 발생하면 죄송합니다). 네트워크가 아닌 전문 거래 프로그램을 MT에 묶는 것은 그리 쉬운 일이 아니며, 가능하면 비뚤어지거나 비스듬히 또는 매우 비쌉니다. 메타스톡 파일로 데이터 내보내기를 제공하는 터미널이 있는 DC가 있습니다. 전! 글쎄, MT 개발자는 불필요한 백업 없이 다른 기술 분석 프로그램을 사용할 수 있도록 데이터를 내보내는 기능을 제공하지 않는 이유가 무엇입니까?

 

처음에는 IMHO가 가장 좋은 프로그램인 NeuroShell -2이며 러시아어 도움말과 러시아어 예제가 있습니다. 또한 NS 2의 신경망은 MT4의 Expert Advisors 및 지표에 쉽게 연결할 수 있습니다.

여기에서 읽을 수 있습니다: http://www.fxreal.ru/forums/forums.php?forum=3