EL INTERCAMBIO DE IDEAS - página 9

 
FION:
Los expertos pueden trabajar simultáneamente - cada uno con su propio asistente, y el reconocimiento de las condiciones del mercado y el reajuste debe estar en cada experto. Si esta condición no se cumple, cuando la situación del mercado cambia, las pérdidas son inevitables, porque los objetivos y las paradas deben ser diferentes en condiciones planas y de tendencia. Además, hay que tener en cuenta las condiciones intermedias: el piso bajo, o el "deslizamiento" con baja actividad. Básicamente, el conjunto de Asesores Expertos rentables debería mostrar los mejores resultados debido al bloqueo de las posiciones perdedoras del Asesor Experto.

Casi todos tienen su propia realización. Pero muchos EAs no tienen corrección de errores. Desde luego que no. Sólo trato de evitarlos. Si hacemos algo estándar, deberíamos permitirlo. Yo añadiría un símbolo() a mago, aunque puede ser innecesario. Teóricamente, un pedido con un billete no puede repetirse, aunque puede serlo.
 

Sí, por supuesto. Eso es exactamente lo que hice en el código. En los parámetros externos también ponemos Magic _n, y cada versión con su propio mago funcionará según su propio algoritmo.

 

En la detección de tendencias. El Asesor Experto ProtoType-IV proporciona un ejemplo para un Asesor Experto multidivisa que identifica una tendencia por cuatro últimos extremos. He penetrado escrupulosamente en él y he asignado "a medias" este trozo de código y ahora se puede insertar en cualquier Asesor Experto. Si es necesario. Si se establece en los parámetros externos

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];

Aquí está el "calificador" propiamente dicho:

/-------------------------------------------------------------------+
//| определение тренда по четырем последним экстремумам              |
//+------------------------------------------------------------------+
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);
  }

El gráfico de la esquina muestra la función=0,, o =1, o=-1

 
Creo que es más conveniente definir la tendencia con la ayuda de la regresión lineal, el script de regresión lineal del conjunto estándar de MT-4 es muy bueno, me gustaría hacer un indicador basado en él, ¿puede ser que alguien sepa dónde conseguir el código fuente? Todas las implementaciones conocidas funcionan mal en la dinámica de los cambios de precios.Necesito un canal de longitud fija de 1 a N barras con recálculo cuando aparezca una nueva barra y la posibilidad de emitir su ancho en pips y su pendiente en pips a la longitud.Podríamos empezar a investigar desde cero, pero si alguien tiene una fuente de MT sería mucho más fácil.
 

Sin embargo, no sólo he publicado el código para la detección de tendencias. Se me ocurrió otra idea...(la explicaré más adelante)

Tal vez este indicador funcione para empezar:

En el gráfico iPeriod=20, MASoot=20

No me he metido en su trabajo. Pero en modo visual es fácil ver cómo funciona...

Archivos adjuntos:
 
Gracias Leonid, pero no funciona correctamente para los retrocesos, lo probé hace tiempo. Aquí hay un buen indicador, pero funciona por How-low, la idea es la misma pero basada en la regresión lineal.
Archivos adjuntos:
 
FION:
En mi opinión, es más conveniente definir la tendencia utilizando la regresión lineal, el script de regresión lineal del conjunto estándar de MT-4 es muy bueno, me gustaría hacer un indicador basado en él, ¿puede ser que alguien sepa dónde conseguir el código fuente? Todas las implementaciones conocidas no funcionan bien con la tendencia de los precios. Necesito un canal de longitud fija de 1 a N barras con recálculo cuando aparezca una nueva barra y la posibilidad de emitir su ancho en pips y su pendiente en pips a la longitud. Sería bueno tener el mismo canal de desviación estándar con la desviación dada. Podríamos empezar desde cero, pero si alguien tiene una fuente de MT sería mucho más fácil.


Ya lo he publicado en alguna parte. Puedo publicar la nueva versión. Se ha corregido un error.

Y aquí está el indicador.

El número de barras se muestra en la pantalla. Se muestran 3 sigmas. Si el precio está dentro de un OCS, no se realiza el recálculo, ya que todo está dentro de los límites permitidos. Cuando el precio lo atraviese, se recalculará.

Archivos adjuntos:
 

Vinin , tu canal es muy decente y se ajusta correctamente. Gracias. Voy a compartir una idea sobre el filtro para el piso. Todos recordamos al Rev. Reshetov y sus perceptrones. En principio, un perceptrón es un filtro lineal. Quiero intentar filtrar fllet con un perceptrón. Quiero introducir la anchura y la pendiente de 2 canales de regresión lineal de diferente longitud, la anchura de Bolinger y la tasa de cambio de precios. Pienso en qué utilizar como criterio de optimización. Tal vez un rebote de los límites de Bollinger hacia el interior - con el objetivo del 75% de la anchura.

 
FION:

Vinin , tu canal es muy decente y se ajusta correctamente. Gracias, voy a compartir una idea sobre el filtro para el piso. Todos recordamos al Rev. Reshetov y sus perceptrones. En principio, un perceptrón es un filtro lineal. Quiero tratar de filtrar el vuelo por perceptrón. Quiero introducir la anchura y la pendiente de 2 canales de regresión lineal de diferente longitud, la anchura de Bolinger y la velocidad de cambio de precios. Pienso en qué utilizar como criterio de optimización. Tal vez un rebote de los límites de Bollinger hacia el interior - con el objetivo del 75% de la anchura.


El perceptrón de Reshetov no servirá. Deberíamos hacer una capa de Kohonen de al menos 4-5 no Roynes. Pero sólo habrá un problema: todos los valores deben ser del mismo orden.
 
Quiero crear un nuevo tema, Análisis neuronal de velas. Voy a publicar todo mi trabajo, no puedo hacerlo solo. Podré hacerlo todo yo solo.