EL INTERCAMBIO DE IDEAS - página 35

 
OnGoing:
Sea lo que sea, no hay suficientes operaciones para sacar conclusiones.
puede aumentar las operaciones muchas veces - la escalera de la equidad será mln y frecuente, pero el FS disminuirá.
 
alex12:
puede aumentar las operaciones muchas veces - la escalera de la equidad será pequeña y frecuente, pero el FS disminuirá.
Que sea así, el resultado seguirá siendo más fiable.
 

Ayer me encontré por casualidad con un resultado interesante.

La idea es rastrear rápidamente cómo se comporta una moneda en relación con la otra.

Descargamos este Asesor Experto, también está en la base de código de este foro: ReverseSystemBEST

Prueba un instrumento usando datos históricos de un archivo - probamos USD/Franc desde el año 2000 y al final del

de laprueba abra el gráfico y vea la siguiente imagen:

Además, lo guardamos como plantilla. Abra el gráfico diario de eurobucks y abra la plantilla guardada

En este gráfico. A continuación, 2 veces haga clic en el ratón sobre los iconos y el botón derecho seleccione eliminar todos los iconos.

Como resultado, verá una imagen como la siguiente.

Es decir, se puede ver que el dólar/franco y el eurobaco son instrumentos monetarios absolutamente especulares.





 
alex12:

Ayer me encontré por casualidad con un resultado interesante.

La idea es rastrear rápidamente cómo se comporta una moneda en relación con la otra.

Descargamos este Asesor Experto, también está en la base de código de este foro: ReverseSystemBEST

Prueba un instrumento utilizando datos históricos de un archivo - probamos USD/Frank a partir del año 2000 y al final del

de laprueba abra el gráfico y vea la siguiente imagen:

Además, lo guardamos como plantilla. Abra el gráfico diario de eurobucks y abra la plantilla guardada

En este gráfico. A continuación, 2 veces haga clic en el ratón sobre los iconos y el botón derecho seleccione eliminar todos los iconos.

Como resultado, verá una imagen como la siguiente.

Es decir, se puede ver que el dólar/franco y el eurobaco son instrumentos monetarios absolutamente especulares.






Oh, cuántos descubrimientos maravillosos para nosotros ......
 
La idea es crear un indicador.

Originalmente se me ocurrió esta idea con los ticks, pero resulta que no hay historial de ticks en el probador
así que lo trasladé a las barras.
La idea es una combinación de barras. Las configuraciones pueden ser:

Arriba - Compra:

Osos = 0, Valor
Osos = 0, Valor
Color
Grosor de la línea

Abajo - Venta:

Osos = 0, Valor
Osos = 0, Valor
Color
Grosor de la línea

Por ejemplo una barra 1 arriba y 2 abajo, 1 arriba y 3 abajo, luego 1/4, 1/5, !/6, 1/7 etc. para la Venta.
Para Bai - 1 compás de bajada y 2 de subida, 1 de bajada y 3 de subida, luego 1/4, 1/5, etc.

Por ejemplo, tomemos una combinación de 3 barras al alza y 7 barras a la baja (3/7 para abreviar) para la venta. Tomamos el valor
del precio más alto de la 3ª barra y el precio más bajo de la 7ª barra = calculamos el precio medio y dibujamos una línea
sobre el precio medio de esta combinación de barras. También me gustaría que esta combinación se perfilara con un círculo
utilizando el mismo indicador.
A continuación puede escribir un EA utilizando este indicador y comprobar el resultado.

Si alguien escribe un indicador y/o asesor, que lo publique aquí si no le importa.

--------------------------------------------------------------------------------------------------------------+

Por cierto - se puede hacer con puntos - sólo el comercio directamente en línea.
No por tiempo, como en el WOC EA, sino exactamente por combinaciones de puntos y resultará
que el Asesor Experto no operará por historia, sino por la situación actual. Pero es así,
es probablemente demasiado superficial e inverosímil - aunque no puedo saberlo con seguridad
.
 

leonid553:

Existe un indicador de Sobres, y se conocen las tácticas clásicas de trabajo con él. Pero debido a su estructura es demasiado "sensible", o con un gran periodo - se retrasa muchas señales. Sin embargo, si suavizamos este indicador, la situación cambiará inmediatamente. Seleccionamos la desviación de los bordes de manera que los bordes cubran sólo las puntas de las velas y entramos por estos cruces siguiendo estrictamente la tendencia. - establecerla (la tendencia) de forma programada mediante el ángulo de inclinación (por ejemplo) de estos bordes.

Una versión funciona en buy. La otra versión funciona para vender. Al mismo tiempo, ¡sorprendentemente perdemos operaciones perdedoras en los cambios de tendencia! - ¡No hay ironía! Y además durante un pinchazo - ¡no hay tratos! (¡porque la tendencia la marca el ángulo de inclinación!)

Este es un gráfico del indicador suavizado - los puntos de entrada se muestran con flechas.

Un truco más. Puede utilizarlo como un filtro o como una versión independiente. Estocástico. No debe usarse según las reglas clásicas, sino un poco al margen de las normas. Tome un período largo y entre en el cruce no de fuera a dentro de las zonas de sobrecompra/sobreventa, ¡sino al revés! - He mostrado las entradas con flechas en la ventana estocástica.

Ya he realizado Asesores Expertos primitivos utilizando los dos métodos descritos. Los resultados son satisfactorios hasta ahora...

A petición del moderador Granit77 el post original fue borrado y la discusión del Asesor Experto en estocásticos filtrados se trasladó aquí https://www.mql5.com/ru/forum/112887/page15#518639

 
alex12:
La idea es crear un indicador.

Esta idea la inventé originalmente con las garrapatas, pero resulta que no hay historial de garrapatas en el probador
Así que lo cambié a bares.
La esencia es una combinación de barras. Los ajustes pueden ser los siguientes:

Subir - Comprar:

Alcista = 0, Valor.
Osos = 0, Significado
Color
Espesor de la línea

Bajar - Vender:

Osos = 0, Valor
Alcista = 0, Valor
Color
Espesor de la línea

Por ejemplo, 1 compás de subida y 2 de bajada, 1 compás de subida y 3 de bajada, luego 1/4, 1/5, !/6, 1/7, etc. para la venta.
Para Bai - 1 compás de bajada y 2 de subida, 1 de bajada y 3 de subida, luego 1/4, 1/5, etc.

Por ejemplo, tomemos una combinación de 3 barras al alza y 7 barras a la baja (3/7 para abreviar) para la venta. Tomamos el valor
el precio más alto de la 3ª barra y el precio más bajo de la 7ª barra = calcular el precio medio y trazar una línea
También me gustaría que esta combinación de barras se dibujara como un círculo
utilizando el mismo indicador.
A continuación, puede escribir un EA utilizando este indicador y comprobar el resultado.

Si alguien escribe un indicador y/o asesor, que lo publique aquí si no le importa.

--------------------------------------------------------------------------------------------------------------+

Por cierto - se puede hacer con puntos - sólo se necesita el comercio en línea.
No por tiempo, como en el WOC-advisor, sino precisamente por combinaciones de puntos.
que el Asesor Experto no operará basándose en el historial, sino en la situación actual. Pero es así,
aunque no lo sé con seguridad.
Aunque yo mismo no lo sé exactamente.

Hice un indicador personalizado como el descrito anteriormente. Bastante interesante - porque = Preciso ( Identifica inequívocamente los Patrones Fractales dados ).


Aquí está el código en sí:

//+------------------------------------------------------------------+
//|                             Copyright © 2010, Trishkin Artyom A. |
//|                                           support@goldsuccess.ru |
//|                                           Skype: Artmedia70      |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Trishkin Artyom A."
#property link      "support@goldsuccess.ru"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Gold
#property indicator_color2 LightBlue
//---- input parameters
extern int        BarsBefore=2;        // Баров до...
extern int        BarsAfter=2;         // Баров после
extern int        Width=2;             // Размер значка
extern int        BarsToProcess=100;   // Количество баров для поиска
//---- buffers
double FractUpBuffer1[];
double FractDnBuffer2[];
string sy, Prefix, NameIND;
int    tf;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
   SetIndexStyle(0,DRAW_ARROW,EMPTY,0);
   SetIndexBuffer(0,FractUpBuffer1);
   SetIndexArrow(0,119);
   SetIndexLabel(0,"Fractal Up");
   SetIndexEmptyValue(0,0.0);
   
   SetIndexStyle(1,DRAW_ARROW,EMPTY,0);
   SetIndexBuffer(1,FractDnBuffer2);
   SetIndexArrow(1,119);
   SetIndexLabel(1,"Fractal Dn");
   SetIndexEmptyValue(1,0.0);
//----
   NameIND="Pattern_v1_01";
   IndicatorShortName(NameIND+"_"+GetNameTF(Period()));
   Prefix=NameIND+"_"+GetNameTF(Period());    // Префикс для имён объектов
   sy=Symbol();
   tf=Period();
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
// -------- Блок удаления всех объектов, построенных на графике --------
   string Name_Del[1]; 
   int Quant_Del=0;                    
   int Quant_Objects=ObjectsTotal();   
   int LenPref=StringLen(Prefix);
   ArrayResize(Name_Del,Quant_Objects);
   for(int k=0; k<Quant_Objects; k++) {
      string Obj_Name=ObjectName(k);   
      string Head=StringSubstr(Obj_Name,0,LenPref);
      if (Head==Prefix) {                              
         Quant_Del+=1;        
         Name_Del[Quant_Del-1]=Obj_Name;
         }
     }
   for(int i=0; i<Quant_Del; i++)    
      ObjectDelete(Name_Del[i]); 
// ----- Конец блока удаления всех объектов, построенных на графике -----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int   counted_bars=IndicatorCounted();
   int   i, k, j, limit;
//----
   if(counted_bars>0)      counted_bars--;
   limit=Bars-counted_bars;
   if(limit>BarsToProcess) limit=BarsToProcess;
   
//   if (limit>0) 
      FindUpFractals(BarsBefore, BarsAfter);
      FindDnFractals(BarsBefore, BarsAfter);
   
//----
   return(0);
}
//==============================================================================
// --------------------------------- Функции ----------------------------------+
//==============================================================================
int FindDnFractals(int nl, int nr) {
   int      i, k, nb;
   double   fractal;
   datetime tm;
   string   nm;
   bool     fl, fr;
   int delta=SetDistance(Period());
   for (i=BarsToProcess; i>0; i--) {
      fl=false;
      FractDnBuffer2[i]=0;
      if (Open[i]<Close[i]) {                   
         for (k=1; k<=nl; k++) {
            if (Open[i+k]>Close[i+k]) fl=true;
            else { fl=false; break; }
            }
         if (!fl || Open[i+nl+1]>Close[i+nl+1]) continue;
         fr=false;
         for (k=0; k<nr; k++) {
            if (Open[i-k]<Close[i-k]) fr=true;
            else { fr=false; break; }
            }
         if (!fr || Open[i-nr]<Close[i-nr] || iBarShift(sy,tf,Time[i-nr])==0) continue;
         if (Low[i]<Low[i+1]) { fractal=Low[i]; nb=i; tm=Time[i];}
         else { fractal=Low[i+1]; nb=i+1; tm=Time[i+1]; }
         FractDnBuffer2[nb]=fractal;
         nm=Prefix+"_Down_Fractal_"+nl+"/"+nr+"_"+TimeToStr(tm);
         fractal=MathMin(Low[i], Low[i+1]);
         SetArrow(218, LightBlue, nm, tm, fractal-delta*Point, Width);
         WindowRedraw();
         }
      }
   return(0);
}   
//+----------------------------------------------------------------------------+
int FindUpFractals(int nl, int nr) {
   int      i, k, nb;
   double   fractal;
   datetime tm;
   string   nm;
   bool     fl, fr;
   int delta=SetDistance(Period());
   for (i=BarsToProcess; i>0; i--) {
      fl=false;
      FractUpBuffer1[i]=0;
      if (Open[i]>Close[i]) {                   
         for (k=1; k<=nl; k++) {
            if (Open[i+k]<Close[i+k]) fl=true;
            else { fl=false; break; }
            }
         if (!fl || Open[i+nl+1]<Close[i+nl+1]) continue;
         fr=false;
         for (k=0; k<nr; k++) {
            if (Open[i-k]>Close[i-k]) fr=true;
            else { fr=false; break; }
            }
         if (!fr || Open[i-nr]>Close[i-nr] || iBarShift(sy,tf,Time[i-nr])==0) continue;
         if (High[i]>High[i+1]) { fractal=High[i]; nb=i; tm=Time[i];}
         else { fractal=High[i+1]; nb=i+1; tm=Time[i+1]; }
         FractUpBuffer1[nb]=fractal;
         nm=Prefix+"_Up_Fractal_"+nl+"/"+nr+"_"+TimeToStr(tm);
         fractal=MathMax(High[i], High[i+1]);
         SetArrow(217, PaleGoldenrod, nm, tm, fractal+4*delta*Point, Width);
         WindowRedraw();
         }
      }
   return(0);
}   
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
   switch (TimeFrame) {
      case PERIOD_M1:  return("M1");
      case PERIOD_M5:  return("M5");
      case PERIOD_M15: return("M15");
      case PERIOD_M30: return("M30");
      case PERIOD_H1:  return("H1");
      case PERIOD_H4:  return("H4");
      case PERIOD_D1:  return("Daily");
      case PERIOD_W1:  return("Weekly");
      case PERIOD_MN1: return("Monthly");
      default:         return("UnknownPeriod");
      }
}
//+----------------------------------------------------------------------------+
int SetDistance(int TimeFrame) {
   switch (TimeFrame) {
      case PERIOD_M1:  return(1);
      case PERIOD_M5:  return(1);
      case PERIOD_M15: return(2);
      case PERIOD_M30: return(3);
      case PERIOD_H1:  return(4);
      case PERIOD_H4:  return(4);
      case PERIOD_D1:  return(4);
      case PERIOD_W1:  return(4);
      case PERIOD_MN1: return(4);
      default:         return(0);
      }
}
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl, string nm, datetime t1=0, double p1=0, int sz=0) {
   if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0, 0);
   ObjectSet(nm, OBJPROP_TIME1    , t1);
   ObjectSet(nm, OBJPROP_PRICE1   , p1);
   ObjectSet(nm, OBJPROP_ARROWCODE, cd);
   ObjectSet(nm, OBJPROP_COLOR    , cl);
   ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
//+----------------------------------------------------------------------------+
Archivos adjuntos:
 
alex12:

Aquí hay un pavo hecho a medida basado en la descripción anterior. Bastante interesante - porque = Preciso (detecta correctamente los patrones fractales).


Aquí está el código en sí:

Gracias por el código. Por alguna razón sólo se muestra en el horario, no en las otras mitades.
 

То есть видно что доллар/франк и евробакс – абсолютно зеркальные валютные инструменты.

Tal vez deberíamos ser un poco más cuidadosos con la palabra "absolutamente".

Paralos que están en el tanque Comentario a la imagen: La media se tomó para X= 10, 20, 100 y 250 candelas. El marco temporal de la izquierda es M30, el de la derecha - D1. Todo lo que se acerque a cero significa la ausencia de cualquier "reflejo" durante las últimas X velas [en promedio].

Así, los instrumentos se mueven de forma similar, a veces en la misma dirección, lo que se confirma con correlaciones periódicas. Pero ni siquiera está cointegrada, lo que se demuestra con el gráfico del EURCHF no estacionario (aunque no puedo confirmarlo inequívocamente, no lo he probado, creo que no tiene sentido).

 
alex12:

Aquí hay un pavo hecho a medida basado en la descripción anterior. Bastante interesante - porque = Preciso (detecta correctamente los patrones fractales).

Aquí está el código en sí:


Gracias. ¡Interesante idea!

Se muestra en todos los TFs. Pero algo falla en el fractal amarillo. Se dibuja en todos los TF a diferentes distancias y no es igual que en el azul.

Por favor, compruébelo.

SetArrow(217, PaleGoldenrod, nm, tm, fractal+4*delta*Point, Width);//?????
Razón de la queja: