지뢰밭에서의 시장예절 또는 예의범절 - 페이지 84

 

보낸 논문에 대한 Neutron 감사


주제와 건설적인 것에 감사드립니다

나는 그 순간에 SSAS를 사용하는 것과 비슷한 것을 구현할 수 있었습니다(불행하게도 오늘에서야 이 스레드와 논문을 모두 읽었습니다).

아마도 박사 이것을 활용하십시오:

1. 평균에 의한 여러 클러스터에 대한 Klassterem 일중 범위. H1 양초의 값은 이를 기반으로 하루를 시간 간격으로 나눕니다( VI )

(대부분 2개의 클러스터와 2개의 VI, 그러나 하나의 Jenn 쌍에서 4개의 클러스터와 7개의 VI가 나타남)

2. 각 도구 및 VI에 대해 모델이 생성됩니다.

- 두 개의 입력에 대해 개별적으로 위아래로 이전 움직임의 클러스터링. 매개변수: 가격 및 시간

- 두 개의 입력에 대해 별도로 위아래로 미래의 움직임을 클러스터링합니다. 매개변수: 가격 및 시간
(물론 이 모델은 훈련 단계의 데이터를 준비하는 데만 사용됩니다)

- 예측 모델:
-- 나이브 베이즈

-- 엉덩이. 규칙

-- 관계 규칙

-- NS

-- 의사결정 트리

3. 극한값과의 최소 편차를 기반으로 지그재그가 만들어집니다. 조각별 모노톤 함수와 그에 따라 N 세그먼트의 패턴을 얻습니다.

4. 해당 클러스터링 모델을 훈련하고 세그먼트를 분류합니다.

5. 패턴 또는 고정 길이의 일부로 패턴의 예후 지평선을 계산합니다. 길이 또는 패턴 길이의 가장 가까운 배수

6. "예측" 계산 및 분류

7. 예측 모델 학습

작업 과정에서 EA는 데이터를 MS SQL로 로드하고 주기적으로 지그재그 지점 및 예측을 결정하기 위한 요청을 발행합니다. 그것들을 받으면 지원 가치와 규칙의 신뢰성을 분석합니다. 비교를 바탕으로 그는 결정을 내립니다.


장점:

- 여러 DM 모델의 결과를 사용 및 비교 가능

- 모델 자체에서 다양한 방법 선택 가능

단점:

- 모델을 사용자 정의하기 위한 더 적은 수의 매개변수

- 자원 집약적 작업 MSSQ L

- 기초에 과학적 작업의 부족 (우리는 언급 된 논문의 결론을 포함하여 수정할 것입니다)


언급된 작업에서 과학성과 증거의 큰 그림자를 침해하지 않고,

이 스레드를 읽는 모든 사람들에게 질문하고 싶습니다.

조각별 모노톤을 클러스터링하기 위해 세그먼트를 사용하는 편리성에 대해 추가합니다. 거래량, 시장 델타 등과 같은 입력

아마도, 예를 들어 필터링 역할을 추가로 수행할 수 있습니다.


S. Privalov : 본질적으로 이 작업(논문)은 예측을 위한 패턴을 만드는 방법론을 정의합니다.

IMHO, 이것이 우리가 이야기한 것입니다. 예를 들어 acc에 대한 예측을 수신할 때입니다. 규칙에 따라 패턴 조각의 수 N을 설정하고 앞으로 다른 수의 예측 단계를 요청하고 다른 지원 및 신뢰로 이를 얻을 수 있습니다. 예측의 기초로 사용할 수 있는 모델을 얻습니다.

f.Kalman을 사용하는 아이디어를 그들에게 적용하는 것이 가능합니까/어떻게 생각합니까?

모델을 갖는 것은/-그리고 그들을 위해 그를 훈련시키는 것은 흥미로울 것입니다.


SSAS에서 모델이 보이는 방식입니다. 이 도구에 대해 3개의 VI가 식별되었습니다.

여기에 http://www.fxexpert.ru/forum/index.php?showtopic=656 mql 및 기타 유용한 것들을 포함한 그리드 라이브러리가 있습니다.

 

나는 숨겨진 뉴런의 최적 수를 결정하기 위해 여기에서 네트워크를 깊이 파고들기 시작했습니다. 나는 다른 사람들이 이미 오래전에 내린 다소 흥미로운 결론에 도달했습니다. 모든 것을 직관적으로 설명하려고 노력하겠습니다. 20개의 입력이 있는 은닉층 뉴런을 상상해 보십시오. 촉수와 같은 이러한 입력을 사용하여 입력 데이터를 탐색하고 탐색 과정에서 입력의 가중치가 네트워크의 예상 출력을 얻도록 최적화됩니다. 이제 우리는 다른 은닉 뉴런을 추가할 것입니다. 그 중 20개의 입력은 첫 번째 뉴런의 20개 입력에 연결되지만 가중치는 다릅니다. 두 번째 뉴런은 동일한 입력을 조사하기 때문에 본질적으로 새로운 정보를 제공하지 않습니다. 그렇다면 네트워크를 훈련하면 두 뉴런에 대해 동일한 입력 가중치가 생성됩니다. 두 뉴런의 출력에 해당 출력 뉴런의 가중치를 곱하고 합산하기 때문에 두 은닉 뉴런의 입력 가중치는 출력 뉴런의 가중치 비율과 동일한 요소로 진폭이 서로 다를 수 있습니다.

일반적으로 이러한 20-2-1 네트워크를 훈련한 후 두 개의 은닉 뉴런의 다음 입력 가중치를 얻습니다.

두 가중치 세트는 상수 승수를 제외하고 입력 수에 따라 동일하게 동작합니다. 즉, 두 뉴런 모두 출력 뉴런에 동일한 정보를 제공합니다. 아마도 두 번째 은닉 뉴런을 추가한 후에도 내 네트워크의 훈련 오류가 거의 개선되지 않는 이유일 것입니다. 다음은 숨겨진 뉴런 가중치의 또 다른 그림입니다. 여기서 그들은 부호가 다르지만 출력 뉴런의 가중치 부호도 다릅니다.


일반적으로 이러한 2계층 네트워크는 단순한 1계층 네트워크(AP 모델)와 같은 방식으로 동작합니다. 그 결론으로 나는 막다른 골목에 있다. 신경망 은 분류에만 적합합니다. 출력에 예 또는 아니오의 두 가지 값만 있는 경우. 네트워크를 가격 예측에 사용하려고 하면 입력 데이터가 -1 미만으로 정규화되더라도 뉴런의 출력이 포화되지 않고 비선형 활성화 함수가 작은 역할을 하기 때문에 AR 모델과 동일한 결과를 도출합니다. .+1. 나는 맥주를 마시러 갈 것입니다 - 아마도 새로운 생각이 나타날 것입니다(예를 들어, 네트워크 입력에 +1 및 -1을 적용하시겠습니까?)

 
M1kha1l писал(а) >>

나는 그 순간에 SSAS를 사용하는 것과 비슷한 것을 구현할 수 있었습니다(불행하게도 나는 이 스레드와 논문을 오늘에서야 읽었습니다).

여기에 http://www.fxexpert.ru/forum/index.php?showtopic=656 mql 및 기타 유용한 것들을 포함한 그리드 라이브러리가 있습니다.

M1kha1l님 , 좋은 말씀을 해주시고 지식을 공유하기로 결정해주셔서 감사합니다.

귀하의 게시물을 이해하는 데 시간이 걸립니다. 내가 읽고있다.

gpwr 작성 >>

나는 숨겨진 뉴런의 최적 수를 결정하기 위해 여기에서 네트워크를 깊이 파고들기 시작했습니다. 나는 다른 사람들이 이미 오래전에 내린 다소 흥미로운 결론에 도달했습니다. 모든 것을 직관적으로 설명하려고 노력하겠습니다. 20개의 입력이 있는 은닉층 뉴런을 상상해 보십시오. 촉수와 같은 이러한 입력을 사용하여 입력 데이터를 탐색하고 탐색 과정에서 입력의 가중치가 네트워크의 예상 출력을 얻도록 최적화됩니다. 이제 우리는 다른 은닉 뉴런을 추가할 것입니다. 그 중 20개의 입력은 첫 번째 뉴런의 20개 입력에 연결되지만 가중치는 다릅니다. 두 번째 뉴런은 동일한 입력을 조사하기 때문에 본질적으로 새로운 정보를 제공하지 않습니다. 그렇다면 네트워크를 훈련하면 두 뉴런에 대해 동일한 입력 가중치가 생성됩니다. 두 뉴런의 출력에 해당 출력 뉴런의 가중치를 곱하고 합산하기 때문에 두 은닉 뉴런의 입력 가중치는 출력 뉴런의 가중치 비율과 동일한 요소로 진폭이 서로 다를 수 있습니다.

잘했습니다, gpwr , 병렬 뉴런의 가중치를 볼 생각조차 해본 적이 없습니다!

학습 과정에서 다층 신경망에 대한 학습 오류(빨간색)와 일반화 오류(파란색)를 줄이는 과정을 살펴보겠습니다.

일반화 오류의 최소값(의사결정에서 통계적 이점을 제공함)이 일반화 오류의 최소값과 일치하지 않음을 알 수 있습니다. 역사는 항상 정확하게 반복되는 것이 아니라 대략적으로 반복되기 때문에 이것은 이해할 수 있습니다. 그리고 학습을 위한 전역 최소값이 하나만 있으면 일반화를 위한 로컬 최소값이 많이 있으며 가장 좋은 것을 선택할 수 있는 방법이 없습니다. 추측할 수 있을 뿐입니다. 그리고 여기서 통계는 은닉층에 있는 많은 뉴런의 형태로 전면에 나타납니다. 그들 모두는 약간의 훈련이 부족하고 지역 최소값에서 "구르다", 일부는 최고(일반화 오류 측면에서), 일부는 최악입니다. 이해하십니까? 일반적으로 그들의 솔루션은 출력 선형 뉴런에 의해 평균되며 이 추정치가 가장 좋습니다. 또한, 추정 오차는 은닉층의 뉴런 수의 제곱근에 해당합니다. 그렇기 때문에 신경망의 예측력은 은닉층에 있는 뉴런의 수에 따라 증가합니다.

당신이 인용한 데이터는 그리드의 재훈련과 결과적으로 은닉층에 있는 모든 뉴런의 동기 작동에 대해 말합니다. 다층 NS가 선형 퍼셉트론으로 변질되었습니다!

 
Neutron >> :

M1kha1l님 , 좋은 말씀을 해주시고 지식을 공유하기로 결정해주셔서 감사합니다.

귀하의 게시물을 이해하는 데 시간이 걸립니다. 내가 읽고있다.

잘했습니다, gpwr , 병렬 뉴런의 가중치를 볼 생각조차 해본 적이 없습니다!

학습 과정에서 다층 NN에 대한 학습 오류(빨간색)와 일반화 오류(파란색)를 줄이는 과정을 살펴보겠습니다.

일반화 오류의 최소값(의사결정에서 통계적 이점을 제공함)이 일반화 오류의 최소값과 일치하지 않음을 알 수 있습니다. 역사는 항상 정확하게 반복되는 것이 아니라 대략적으로 반복되기 때문에 이것은 이해할 수 있습니다. 그리고 학습을 위한 전역 최소값이 하나만 있으면 일반화를 위한 로컬 최소값이 많이 있으며 가장 좋은 것을 선택할 수 있는 방법이 없습니다. 추측할 수 있을 뿐입니다. 그리고 여기서 통계는 은닉층에 있는 많은 뉴런의 형태로 전면에 나타납니다. 그들 모두는 약간의 훈련이 부족하고 지역 최소값에서 "구르다", 일부는 최고(일반화 오류 측면에서), 일부는 최악입니다. 이해하십니까? 일반적으로 그들의 솔루션은 출력 선형 뉴런에 의해 평균되며 이 추정치가 가장 좋습니다. 또한, 추정 오차는 은닉층의 뉴런 수의 제곱근에 해당합니다. 그렇기 때문에 신경망의 예측력은 은닉층의 뉴런 수에 따라 증가합니다.

당신이 인용한 데이터는 그리드의 재훈련과 결과적으로 은닉층에 있는 모든 뉴런의 동기 작동에 대해 말합니다. 다층 NS가 선형 퍼셉트론으로 변질되었습니다!

내 네트워크에는 가중치 수가 45인 300개의 훈련 예제가 주어졌습니다. 문헌에는 훈련 예제의 수가 가중치 개수의 5배이면 네트워크가 95% 확률로 일반화된다는 의견이 있습니다. 저것들. 내 네트워크는 이론에 따라 좋은 일반화를 가져야 하지만 실제로는 그렇지 않습니다. 따라서 이를 확인하기 위해 예를 들어 설명했습니다. 여기서 요점은 더 많은 교육 사례를 취하지 않는 것입니다. 여기서 요점은 내가 네트워크에 강제로 해결해야 하는 작업의 특성입니다. 네트워크가 다음 가격 단계의 크기를 예측하도록 하면 훈련 중에 예측된 단계와 입력 과거 사이의 비례를 유지하기 위해 활성화 함수의 선형 영역에서 뉴런이 작동하는 가중치가 되는 경향이 있습니다. 단계. 즉, 작업 자체가 선형입니다. 이 상황에서 은닉 뉴런을 추가해도 아무 것도 개선되지 않습니다. 그리고 은닉층 자체가 불필요해집니다. 내 네트워크를 실험하여 단일 레이어가 이중 레이어와 마찬가지로 작동한다는 결론에 도달했습니다. 제 생각에는 이 스레드에 대한 귀하의 과거 게시물을 읽고 EURUSD에 대해서도 동일한 결론에 도달했습니다.

내 생각에 네트워크는 뉴런의 활성화 함수를 단계적으로 선택할 수 있는 고도로 비선형적인 작업(예: XOR 작업 또는 분류 작업)에 사용해야 합니다.

 

발견된 효과의 본질은 과도한 training epoch 수로 인한 NN의 overtraining으로 설명될 수 있으며, training epoch 수 Nopt 에 대한 최적이 있어야 한다는 점에 유의하고 싶습니다(위 그림 참조) . 학습률 계수에 따라 다릅니다. 나는 당신이 "... 더 많은 훈련 예를 들어야 합니다. "라고 말하지 않았습니다. 이것이 훈련 세트 Popt=w*w/d 의 최적 길이 문제의 본질입니다. 이론은 정확히 이것을 말하고 "... 훈련 예제의 수는 가중치 수의 5배입니다..."와 함께 그렇지 않습니다.

우리는 네트워크 오버트레이닝의 효과로 이어지는 다양한 이유에 대해 이야기하고 있습니다.

다음 막대의 부호와 진폭을 예측하는 작업은 대부분 선형이며 다른 것은 없다는 점에 동의합니다. 시장은 기본적으로 스크랩처럼 단순하고 일기 예보처럼 예측할 수 없습니다. 조금 후에 단일 레이어, 은닉층에 2개의 뉴런이 있는 2층 및 은닉층에 4개 뉴런이 있는 2층에 대한 시간당 막대의 예측 품질에 대한 비교 결과를 게시할 예정입니다. 이 모든 것은 NN의 입력 수 d 의 함수로 표시됩니다. 데이터는 50개의 독립적인 수치 실험을 통해 평균화됩니다.

 

그런데.. 말과 떨고 있는 암사슴을 한 수레에 실을 수 있는 방법은 없을까요? MT4와 MathCad를 의미합니다. Matkad에서 현재 시세를 즉시 수신하고 전체 분석을 수행하고 생성된 신호를 MT4로 전송합니다. 가장 먼저 떠오르는 것은 파일을 통하는 것이지만 두 프로그램은 항상 서로 다른 두 파일의 내용을 확인해야 합니다. 이것은 매우 편리하지 않습니다. 아마도 다른 것이 있습니까? MQL에 인터럽트 처리가 없는 것은 유감입니다. 얼마나 불편한 일인가! 이 빌어먹을 MT4... 그냥 받아라, C ++로 앉아라.


추신: 그리드에 대한 데이터를 수정하고 있습니다.

 

아니요, 하지만 스크랩용 MQL에서 분석 알고리즘을 완전히 구현하려면? 또는 무엇, 어려움이 어떻게 든 엄청난입니까?

추신 그리고 통계를 수집하고 있습니다 ...

 

예, MQL에는 매 턴마다 어려움이 있습니다. 예를 들어 다음은 견적을 일련의 거래로 분할하는 가장 간단한 코드(터키)입니다.

 #property indicator_chart_window
#property indicator_buffers 2

#property indicator_color1 Red
#property indicator_color2 MediumBlue

extern int step = 5 ;
extern int sp = 3 ;

double Trans [ ] , Kagi [ ] ;
int mn , mx , H , Cotir , Up , Dn ;
bool set_new = false , SetMax = false , SetMin = false ;

//******************************************************************************
int init ( ) 
{ 
SetIndexBuffer ( 0 , Trans ) ;
SetIndexBuffer ( 1 , Kagi ) ;

SetIndexEmptyValue ( 0 , 0.0 ) ;
SetIndexEmptyValue ( 1 , 0.0 ) ;

SetIndexStyle ( 0 , DRAW_ARROW ) ;
SetIndexStyle ( 1 , DRAW_ARROW ) ;

SetIndexArrow ( 0 , 119 ) ;
SetIndexArrow ( 1 , 162 ) ;

IndicatorShortName ( "Kagi++" ) ;
return ( 0 ) ; 
} 
//*******************************************************************************

int start ( ) 
{ 
int reset , MaxBar , MaxBarJ , counted_bars = IndicatorCounted ( ) , mx_j , mn_j ;

if ( counted_bars < 0 ) return ( - 1 ) ;
if ( counted_bars > 0 ) counted_bars - - ;
int limit = Bars - counted_bars - 1 ; MaxBar = Bars - 2 ; MaxBarJ = MaxBar - 30 ; 
if ( limit = = Bars - 1 ) limit = Bars - 2 ;

//----+ ОСНОВНОЙ ЦИКЛ ВЫЧИСЛЕНИЯ ИНДИКАТОРА 
for ( int i = limit ; i > = 0 ; i - - )
   {
     Cotir = Open [ i ] * MathPow ( 10.0 , Digits ) ;
          
     if ( ! set_new )
       {
        mx = Cotir ;
        mn = Cotir ;
        H = step * sp ;
        set_new = true ;
       }                
     if ( Cotir - mx > 0 )
       {
        mx = Cotir ;
        mx_j = i ;
       }   

     if ( Cotir - mn < 0 )
       {
        mn = Cotir ;
        mn_j = i ;
       }   

     if ( ! SetMax & & Cotir < = mx - H ) 
       {
         Trans [ i ] = Cotir / MathPow ( 10.0 , Digits ) ; 
         mn = Cotir ;            
         mn_j = i ;
         SetMax = true ;
         SetMin = false ;
         Kagi [ mx_j ] = mx / MathPow ( 10.0 , Digits ) ;
       } 
     if ( ! SetMin & & mn + H < = Cotir ) 
       {
         Trans [ i ] = Cotir / MathPow ( 10.0 , Digits ) ; 
         mx = Cotir ;        
         mx_j = i ;
         SetMax = false ;
         SetMin = true ;
         Kagi [ mn_j ] = mn / MathPow ( 10.0 , Digits ) ;
       } 

   }
return ( 0 ) ;   
}


작동하지만 차트 창에서 선으로 작업 결과를 그리는 것은 작동하지 않습니다. 기호(DRAW_ARROW)만 표시할 수 있습니다. 또한 분할을 위해 6개 미만의 스프레드를 사용하면 배열이 올바르게 형성되더라도 아무 것도 표시하지 않습니다. MQL에는 자체 개발 기술과 마찬가지로 완전히 예상치 못한 어려움(복식 비교 등 ..)과 문서화되지 않은 "특정 순간"이 많이 있습니다. 화났어, 전체적으로...

또한 MatKada에서 그리드를 확인하는 방법은 이해할 수 있지만 MQL에서 수행하는 방법 - 모르겠습니다. 어딘가에 버그가 있으면 어떻게 합니까?

 
paralocus писал(а) >>

예, MQL에는 매 턴마다 어려움이 있습니다. 예를 들어 다음은 견적을 일련의 거래로 분할하는 가장 간단한 코드(터키)입니다.

첨부 파일을 참조하십시오 - 그리기 - 기뻐하십시오

paralocus 작성 >>

또한 MatKada에서 그리드를 확인하는 방법은 이해할 수 있지만 MQL에서 수행하는 방법 - 모르겠습니다. 어딘가에 버그가 있으면 어떻게 합니까?

NeuroShell 또는 Statistics 사용을 고려하지 않는 이유는 무엇입니까? 여기에서 그리드를 만들고 라이브러리에 추가한 다음 MT에서 해당 매개변수를 훈련 및 모니터링할 수 있습니다.
파일:
 

내 PC에서 통계를 수집하는 것을 기다릴 수 없는 것 같습니다...

NN 입력 수에 대해 1단계로 예측의 정확성에 대한 데이터를 제시하는 아이디어를 포기해야 한다고 생각합니다. 예를 들어, 입력 수를 2의 배수로 취하여 문제를 단순화할 수 있습니다.