아이디어 교환 - 페이지 9

 
FION :
전문가는 동시에 작업할 수 있습니다. 각각은 고유한 마법으로 시장 상태를 인식하고 따라서 각 전문가에서 재구성해야 합니다. 이 조건이 충족되지 않으면 시장 상태가 변경될 때 손실이 불가피합니다. 목표와 따라서 정류장은 flat 과 trend 가 달라야 합니다. 또한 중간 상태(작은 평면 또는 낮은 활동에서 "슬라이딩")를 고려해야 합니다. Expert Advisors의 수익성이 없는 포지션은 고정되어 있기 때문에 원칙적으로 수익성 있는 Expert Advisor의 집합이 최상의 결과를 보여야 합니다.

거의 모든 사람이 자신의 구현을 가지고 있습니다. 그러나 많은 사람들이 버그에 대한 작업을 수행하지 않습니다. 나는 확실히 아무것도 가지고 있지 않습니다. 표준을 수행하는 경우 제공되어야 합니다. 나는 또한 마술사에게 기호()를 추가할 것이지만 이것이 불필요할 수도 있습니다. 이론적으로 하나의 티켓으로 주문을 반복할 수는 없지만 모든 것이 가능합니다.
 

그렇지. 이것이 바로 내가 코드에서 한 일입니다. 우리는 또한 외부 매개변수에서 Magic _n을 설정했으며 고유한 매직이 있는 각 버전은 고유한 알고리즘에 따라 작동합니다.

 

추세에 따르면. ProtoType-IV Expert Advisor는 마지막 4개의 극값을 기반으로 추세를 결정하기 위한 다중 통화 Expert Advisor의 예를 제공합니다. 저는 이 코드를 꼼꼼히 조사하고 "유해하게" 선택했으며 이제 모든 Expert Advisor에 삽입할 수 있습니다. 필요하다면. 외부 매개변수에서 설정한 경우

 extern int     PeriodWPR = 8 ;
extern double  CriteriaWPR = 25 ;
extern int     ATRPeriod = 40 ; // период ATR для индикатора 
extern double  kATR = 0.5 ;
//-------------------------------------
int  LastUpArray [ 13 , 7 ] ;
int  PreLastUpArray [ 13 , 7 ] ;
int  LastDownArray [ 13 , 7 ] ;
int  PreLastDownArray [ 13 , 7 ] ;

다음은 "결정자" 자체입니다.

 /-------------------------------------------------------------------+
//| определение тренда по четырем последним экстремумам              |
//+------------------------------------------------------------------+
int TrendByWPR ( )
  {
//----
   int res = 0 ;
   int curPos , LastUpPos , PreLastUpPos , LastDownPos , PreLastDownPos , LastPeak , newPos ;
   bool FindUp = true , FindDown = true , SearchCompleted = false ;
   double CurWPR = iWPR ( NULL , 0 , PeriodWPR , 0 ) ;
//----
   //=======  определим - где мы находимся в данный момент
   if ( CurWPR <= CriteriaWPR - 100 )
      {
      FindDown = false ;
      LastPeak = 0 ;
      }   
   if ( CurWPR >=- CriteriaWPR )
      {
      FindUp = false ;
      LastPeak = 0 ;
      }   
   // ================   начианем поиск пичков-донышков
   while ( ! SearchCompleted && curPos < Bars )
      {
      if ( iWPR ( NULL , 0 , PeriodWPR , curPos ) >=- CriteriaWPR && LastPeak < 0 )
         {
         FindUp = false ;
         LastPeak = curPos ;
         curPos ++;
         continue ;
         }
         
      if ( iWPR ( NULL , 0 , PeriodWPR , curPos ) <= CriteriaWPR - 100 && LastPeak < 0 )
         {
         FindDown = false ;
         LastPeak = curPos ;
         curPos ++;
         continue ;
         }
         
      if ( iWPR ( NULL , 0 , PeriodWPR , curPos ) >=- CriteriaWPR && FindUp )
         { //искали верхушку и нашли
         newPos = curPos ; 
         while ( iWPR ( NULL , 0 , PeriodWPR , curPos ) > CriteriaWPR - 100 && curPos < Bars )
            { // теперь нужно найти донышко, чтобы между ними найти точный пичок
            curPos ++;
            }
         if ( LastUpPos == 0 ) 
            {
            LastUpPos = Highest ( NULL , 0 , MODE_HIGH , curPos - LastPeak , LastPeak ) ;   
            LastPeak = LastUpPos ;
            }
         else 
            {
            PreLastUpPos = Highest ( NULL , 0 , MODE_HIGH , curPos - LastPeak , LastPeak ) ;
            LastPeak = PreLastUpPos ;
            }
         curPos = newPos ;
         FindUp = false ;
         FindDown = true ;
         curPos ++;
         continue ;
         } //==============
 
      if ( iWPR ( NULL , 0 , PeriodWPR , curPos ) <= CriteriaWPR - 100 && FindDown )
         {
         newPos = curPos ; 
         while ( iWPR ( NULL , 0 , PeriodWPR , curPos ) <- CriteriaWPR && curPos < Bars )
            {
            curPos ++;
            }
         if ( LastDownPos == 0 ) 
            {
            LastDownPos = Lowest ( NULL , 0 , MODE_LOW , curPos - LastPeak , LastPeak ) ;
            LastPeak = LastDownPos ;
            }   
         else 
            {
            PreLastDownPos = Lowest ( NULL , 0 , MODE_LOW , curPos - LastPeak , LastPeak ) ;
            LastPeak = PreLastDownPos ;
            }
         curPos = newPos ;
         FindDown = false ;
         FindUp = true ;
         curPos ++;
         continue ;
         }
      if ( PreLastDownPos != 0 && PreLastUpPos != 0 ) SearchCompleted = true ;
      curPos ++;
      }
  /* if (Symbol()==StringSymbol && Period()==PeiodMinute)
      {
      Comment("LastUpPos=",LastUpPos,"  PreLastUpPos",PreLastUpPos,"  
 LastDownPos=",LastDownPos,"  PreLastDownPos=",PreLastDownPos,
" Время ",TimeToStr(CurTime()));
      SetUpArrows(LastUpPos,PreLastUpPos,LastDownPos,PreLastDownPos);*/
   LastUpArray [ NULL , 0 ] = LastUpPos ;   
   PreLastUpArray [ NULL , 0 ] = PreLastUpPos ;   
   LastDownArray [ NULL , 0 ] = LastDownPos ;   
   PreLastDownArray [ NULL , 0 ] = PreLastDownPos ;   
  if ( High [ LastUpPos ] - High [ PreLastUpPos ] >= kATR * iATR ( NULL , 0 , ATRPeriod , LastUpPos )
&& Low [ LastDownPos ] > Low [ PreLastDownPos ]) res = 1 ;     
  if ( Low [ PreLastDownPos ] - Low [ LastDownPos ] >= kATR * iATR ( NULL , 0 , ATRPeriod , LastDownPos )
&& High [ PreLastUpPos ] > High [ LastUpPos ]) res =- 1 ;    
   
   return ( res ) ;
  }

모퉁이에 있는 그래프는 함수=0, 또는 =1, 또는=-1을 보여줍니다.

 
제 생각에는 선형 회귀 를 사용하여 추세를 결정하는 것이 더 편리합니다. 표준 MT-4 키트의 선형 회귀 스크립트가 훌륭합니다. 이를 기반으로 지표를 만들고 싶습니다. 누군가 소스를 얻을 수 있는 곳을 알고 있습니까? 알려진 모든 구현은 가격 변화의 역학에서 잘 작동하지 않습니다. 그리고 새로운 막대가 나타날 때 재계산이 가능한 1에서 N 막대까지 지정된 길이의 채널이 필요하고 너비를 핍 단위로 출력하고 길이당 경사를 핍 단위로 버퍼에 출력하는 기능이 필요합니다. 그리고 주어진 편차가 있는 동일한 표준 편차 채널을 사용하는 것이 좋습니다. 처음부터 스크래치를 시작할 수 있지만 누군가가 MT의 소스를 가지고 있다면 훨씬 쉬울 것입니다.
 

하지만 트렌드를 판단하기 위해 코드를 게시한 것은 아닙니다. 또 다른 아이디어가 떠올랐다... (조금 후에 설명하겠다)

그리고 표시기는 다음과 같이 시작할 수 있습니다.

차트에서 iPeriod=20, MASoot=20

나는 그의 작품을 깊이 파고들지 않았다. 하지만 비주얼 모드에서 합창단을 볼 수 있습니다 - 그것이 어떻게 성취되는지 ...

파일:
 
Leonid님 감사합니다만 돌릴때 제대로 안돌아가서 오래전에 해봤습니다. 여기에 좋은 지표가 있지만 얼마나 낮은지에 따라 작동합니다. 아이디어는 동일하지만 선형 회귀 를 기반으로 합니다.
파일:
 
FION :
제 생각에는 선형 회귀를 사용하여 추세를 결정하는 것이 더 편리하고 표준 MT-4 키트의 선형 회귀 스크립트가 훌륭합니다. 이를 기반으로 지표를 만들고 싶습니다. 누군가 소스를 얻을 수 있는 곳을 알고 있습니까? 알려진 모든 구현은 가격 변동의 역학에서 잘 작동하지 않습니다. 그리고 새로운 막대가 나타날 때 재계산이 가능한 1에서 N 막대까지 지정된 길이의 채널이 필요하고 너비를 핍 단위로 출력하고 길이당 경사를 핍 단위로 버퍼에 출력하는 기능이 필요합니다. 그리고 주어진 편차가 있는 동일한 표준 편차 채널을 사용하는 것이 좋습니다. 처음부터 스크래치를 시작할 수 있지만 누군가가 MT의 소스를 가지고 있다면 훨씬 쉬울 것입니다.


이미 어딘가에 올렸습니다. 새 버전을 게시할 수 있습니다. 하나의 버그가 수정되었습니다.

그리고 여기 지표가 있습니다.

막대의 수가 화면에 표시되고 3시그마가 표시됩니다. 그리고 가격이 하나의 표준 편차 내에 있으면 모든 것이 허용 가능한 한도 내에 있기 때문에 재계산이 수행되지 않습니다. 깨지면 다시 계산됩니다.

파일:
 

Vinin, 귀하의 채널은 매우 훌륭하고 올바르게 구성되었습니다. 고맙습니다. 플랫용 필터에 대한 한 가지 아이디어를 공유하겠습니다. 우리 모두는 t를 기억합니다. 그의 퍼셉트론과 Reshetov. 기본적으로 퍼셉트론은 선형 필터입니다. 퍼셉트론으로 평면 필터링을 시도하고 싶습니다. 길이가 다른 2개의 선형 회귀 채널의 너비와 기울기, 볼린저 너비 및 가격 변동률을 입력합니다. 여기에서 최적화 기준 으로 무엇을 취해야 하는지 생각합니다. 75%를 목표로 볼린저 경계선을 안쪽으로 돌파하는 것이 가능합니다. 너비.

 
FION :

Vinin, 귀하의 채널은 매우 훌륭하고 올바르게 구성되었습니다. 고맙습니다. 플랫용 필터에 대한 한 가지 아이디어를 공유하겠습니다. 우리 모두는 t를 기억합니다. 그의 퍼셉트론과 Reshetov. 기본적으로 퍼셉트론은 선형 필터입니다. 퍼셉트론으로 평면 필터링을 시도하고 싶습니다. 길이가 다른 2개의 선형 회귀 채널의 너비와 기울기, 볼린저 너비 및 가격 변동률을 입력합니다. 여기에서 최적화 기준으로 무엇을 취해야 하는지 생각합니다. 75%를 목표로 볼린저 경계선을 안쪽으로 돌파하는 것이 가능합니다. 너비.


Reshetovsky 퍼셉트론이 작동하지 않습니다. 적어도 4-5개의 뉴런으로 코호넨 층을 만드는 것이 필요합니다. 그러나 한 가지 문제만 있을 것입니다. 모든 값은 같은 순서여야 합니다.
 
저는 새로운 주제인 양초의 신경 분석을 만들고 싶습니다. 나는 내 모든 업적을 나열 할 것입니다, 하나는 작업에 대처할 수 없습니다. 게다가, 나는 이미 대부분의 실수를 알고 있습니다.
사유: