English Русский 中文 Deutsch 日本語 Português
Patrones disponibles al comerciar con cestas de divisas. Parte II

Patrones disponibles al comerciar con cestas de divisas. Parte II

MetaTrader 5Trading | 2 mayo 2017, 10:04
1 434 0
Andrei Novichkov
Andrei Novichkov

Introducción

En el artículo anterior sobre patrones que surgen al comerciar con cestas de divisas, la atención se centró en los indicadores combinados basados en osciladores. Hemos tomado como ejemplo el indicador combinado Williams’Percent Range.  Al final hemos obtenido varios patrones, hemos analizado sus ventajas y desventajas, y hemos sacado conclusiones sobre la aplciación de cada uno de ellos en el comercio real.

Sin embargo, el trabajo realizado no es suficiente. Los indicadores combinados sobre la base de un oscilador no pueden cubrir las necesidades de todos los tráders en el análisis técnico de una situación de la cesta de divisas. El conjunto del tráder  se debe completar con indicadores de tendencia, que tienen sus propios patrones. Solo tras investigarlos podremos decir que hemos analizado todos los tipos principales de patrones y no hemos dejado pasar ninguno.  Esto deberá cerrar el conjunto de recursos técnicos por completo.

Para resolver la tarea expuesta, hemos creado un indicador de prueba. Ya hemos realizado esta tarea, por lo que podemos usar el código del artículo anterior con cambios mínimos. Pero no estará de más recordar ciertas peculiaridades especiales de los indicadores de tendencia combinados. Aquí y en lo sucesivo utilizaremos la terminología que el lector ya conoce de los otros artículos.


Características de los indicadores de tendencia combinados

Los indicadores de tendencia combinados no pueden construirse sobre la base de cualquier indicador de tendencia padre. Existen limitaciones para ello.

Limitación № 1. Los indicadores combinados deberán encontrarse en una ventana individual. Realmente, no tendrá sentido la representación de tal indicador en una ventana con gráfico. Esto se demuestra mediante el principio de promediación conforme al que se construyen los indicadores combinados: no se sabe en absoluto qué van a representar en este caso. También surge un problema con las unidades de medición: se diferenciarán de aquellas que hay en el gráfico. De todo esto se deduce que como indicador padre no pueden actuar ni medias móviles, ni franjas de Bollinger, ni otros gráficos on chart.

Limitación № 2.  El indicador combinado mostrará el estado de solo una divisa; por consiguiente, para representar el estado de una pareja de divisas, necesitaremos dos indicadores combinados. Puesto que cada uno de ellos se ubica en una ventana individual, necesitaremos dos ventanas adicionales. El motivo de esta división es la diferencia en la escala. Si bien los indicadores combinados basados en osciladores siempre cambian dentro de unos límites conocidos de antemano, con los de tendencia no sucede lo mismo. No conocemos de antemano ni los valores mínimos, ni los máximos. Esto significa que el enfoque descrito con aplicación de una media móvil a la diferencia entre las lecturas de los indicadores combinados pierde todo sentido. Este tipo de cálculos conjuntos no convienen en el caso de indicadores de tendencia combinados.

Las limitaciones en la lista de indicadores reducen las posibilidades de uso de indicadores de tendencia combinados. Por ejemplo, de toda la lista de indicadores de tendencia, en el menú MetaTrader 5 a usted solo le convendrán ADX y StdDev.

Pero esto no es excusa para renunciar a la solución de la tarea propuesta. Trabajaremos con las herramientas disponibles, comenzando por nuestro ya conocido indicador combinado de tendencia, por el índice de la divisa de la cesta.


Índice de la divisa de la cesta con media móvil

Escribiremos el indicador de prueba testIndexMA.mq5, análogo al descrito en este articulo. Le añadiremos directamente una media móvil:

//+------------------------------------------------------------------+
//|                                                 testDistance.mq5 |
//|                                   2016 MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window

#property indicator_buffers 2
#property indicator_plots   2


input color   clr= clrGreen;
input color   clrMA = clrMagenta;
input int maperiod  = 10; //Period MA

double ind[],ma[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
//int h,h1;
int OnInit()
  {
//--- indicator buffers mapping
   ArraySetAsSeries(ind,true);
   SetIndexBuffer(0,ind);        
  
   IndicatorSetString(INDICATOR_SHORTNAME,"testdistance");
   IndicatorSetInteger(INDICATOR_DIGITS,2);
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,2);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clr);
   PlotIndexSetString(0,PLOT_LABEL,"_tstdistance_");    

   ArraySetAsSeries(ma,true);  
   SetIndexBuffer(1,ma);
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_LINE           );
   PlotIndexSetInteger(1, PLOT_LINE_STYLE, STYLE_SOLID            );
   PlotIndexSetInteger(1, PLOT_LINE_WIDTH, 1            );
   PlotIndexSetInteger(1, PLOT_LINE_COLOR, clrMA            );
   PlotIndexSetString (1, PLOT_LABEL, "_tstdistance_MA" );        
//---
   return(INIT_SUCCEEDED);
  }
  
string pair[]={"EURUSD","GBPUSD","AUDUSD","NZDUSD","USDCAD","USDCHF","USDJPY"};
bool bDirect[]={false,false,false,false,true,true,true};
int iCount=7;
  
double GetValue(int shift)
  {
   double res=1.0,t;
   double dBuf[1];
   for(int i=0; i<iCount; i++)
     {
      t=CopyClose(pair[i],PERIOD_CURRENT,shift,1,dBuf);
      if(!bDirect[i]) dBuf[0]=1/dBuf[0];
      res*=dBuf[0];
     }//end for (int i = 0; i < iCount; i++)
   return (NormalizeDouble(MathPow (res, 1/(double)iCount), _Digits) );  
  }  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(prev_calculated==0 || rates_total>prev_calculated+1)
     {
      int rt=rates_total;
      for(int i=1; i<rt; i++)
        {
         ind[i]= GetValue(i);
        }
         rt -= maperiod;  
         for (int i = 1; i< rt; i++)
           {
            ma[i] = GetMA(ind, i, maperiod, _Digits);
           }        
     }
   else
     {
         ind[0]= GetValue(0);
          ma[0] = GetMA(ind, 0, maperiod, _Digits);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
void OnDeinit(const int reason)
  {
   string text;
   switch(reason)
     {
      case REASON_PROGRAM:
         text="Indicator terminated its operation by calling the ExpertRemove() function";break;
      case REASON_INITFAILED:
         text="This value means that OnInit() handler "+__FILE__+" has returned a nonzero value";break;
      case REASON_CLOSE:
         text="Terminal has been closed"; break;
      case REASON_ACCOUNT:
         text="Account was changed";break;
      case REASON_CHARTCHANGE:
         text="Symbol or timeframe was changed";break;
      case REASON_CHARTCLOSE:
         text="Chart was closed";break;
      case REASON_PARAMETERS:
         text="Input-parameter was changed";break;
      case REASON_RECOMPILE:
         text="Program "+__FILE__+" was recompiled";break;
      case REASON_REMOVE:
         text="Program "+__FILE__+" was removed from chart";break;
      case REASON_TEMPLATE:
         text="New template was applied to chart";break;
      default:text="Another reason";
     }
   PrintFormat("%s",text);
  }
//+------------------------------------------------------------------+

double GetMA(const double& arr[], int index , int period, int digit) {
   double m = 0;
   for (int j = 0; j < period; j++)  m += arr[index + j];
   m /= period;
   return (NormalizeDouble(m,digit));
}
Según este paquete de datos fuente, el indicador dibujará el índice del dólar con una media móvil rápida. Cambiamos las líneas 49 y 50 por las siguientes:

string pair[]={"EURUSD", "EURJPY", "EURCHF", "EURGBP", "EURNZD", "EURCAD", "EURAUD"};
bool bDirect[]={true,true,true,true,true,true,true};
Repetimos la compilación con el nombre testIndexMA2.mq5. Como resultado, obtendremos el mismo indicador, pero este mostrará el índice del euro. Lo colocamos en EURUSD H1:





Los valores absolutos del indicador por el momento no nos interesan. Vamos a considerar los puntos de cruce del gráfico del indicador con la MA como puntos de potencial entrada en el mercado. De acuerdo con los artículos anteriores, estos puntos se deben fijar en el cierre de la vela, que es precisamente lo que hemos hecho. Vamos a destacar las entradas encontradas con líneas verticales: con líneas azules, las de compra, con rojas, las de venta. Como podemos ver, resulta obvio que el resultado es positivo. Sin embargo, el beneficio es pequeño, y está claro que tampoco es muy estable, por eso debemos pensar ahora en aumentar los beneficios. Para comenzar, recordaremos la segunda divisa de la pareja y añadiremos al gráfico el indicador del índice del dólar en una subventana aparte:


Marcaremos el cruce de la МА y el gráfico del índice del dólar con líneas. Vamos a analizar la imagen obtenida.

  • El cruce del gráfico del índice de una de las divisas y la МА señaliza el posible cambio en la tendencia con una probilidad bastante alta, si observamos este cruce pero en dirección opuesta con la segunda pareja de divisas. Por ejemplo, en la pareja EURUSD, si el gráfico del índice USD cruza la МА de abajo hacia arriba, el gráfico del índice de EUR deberá cruzar la МА de arriba hacia abajo. La situación señaliza el fortalecimiento de la divisa y el debilitamiento simultáneo de la otra.
  • Si los puntos de cruce existen en el gráfico del índice de ambas divisas, pero están en la misma dirección, entonces será conveniente renunciar a la entrada en el mercado. Esta situación indica una alta probabilidad de movimiento lateral.
  • Los puntos de intersección deberán ser obvios, visibles. Esta cuestión la hemos analizado en el artículo anterior.

De lo anteriormente expuesto, podemos sacar la siguiente conclusión: hay que entrar en el mercado teniendo en cuenta el índice de ambas divisas. Pero lo mejor es hacer esto cuando una de las divisas se refuerza y la otra se debilita. El primer "marcador" del surgimiento de una situación semejante es el cruce del gráfico del índice de una de las divisas de la pareja y la МА. Pero no debemos entrar en este mercado: primero hay que esperar el movimiento de la segunda divisa en dirección contraria.

Continúa abierta la cuestión del retraso: ¿a qué distancia máxima posible pueden encontrase uno con respecto a otro los puntos de cruce del gráfico del índice y la MA para ambas divisas de la pareja? Obviamente, la distancia mínima (e ideal) será cero. En cuanto al retraso máximo, es complicado dar una respuesta única. Aunque es obvio que esa distancia debe existir. Es peligroso entrar en el mercado si el debilitamiento de una de las divisas y el fortalecimiento de la otra están dispersos en el tiempo. En este caso, toparemos con una divergencia, y en consecuencia, con un debilitamiento de la tendencia.

Bien, ya hemos visto las cuestiones concernientes a la entrada en el mercado usando los datos del indicador de tendencia combinado. Para valorar con mayor precisión la calidad del supuesto punto de entrada, vamos a pasar a los valores absolutos del indicador. Un poco más arriba, los habíamos dejado "para después", y ahora ha llegado el momento de recurrir a ellos. 


Análisis exprés con la ayuda de ZigZag

Para el trabajo sucesivo, vamos a usar uno de los indicadores basados en ZigZag de este artículo, creado por mi querido colega Dmitry Fedoseev. Colocamos el indicador iUniZigZagPriceSW.mq5 directamente en el gráfico del índice USD:




Aquí el gráfico ZigZag se representa con una gruesa línea azul. Nuestro objetivo es analizar y sistematizar la longitud de los segmentos de ZigZag. No se puede descartar que de esta forma obtengamos la "amplitud de los vaivenes" del índice del dólar.

Vamos a modificar un poco el código del indicador:

//+------------------------------------------------------------------+
//|                                                 iUniZigZagSW.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   3
//--- plot High
#property indicator_label1  "High"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Low
#property indicator_label2  "Low"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrGreen
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot ZigZag
#property indicator_label3  "ZigZag"
#property indicator_type3   DRAW_SECTION
#property indicator_color3  clrRed
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- plot Direction
#property indicator_label4  "Direction"
#property indicator_type4   DRAW_LINE
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1
//--- plot LastHighBar
#property indicator_label5  "LastHighBar"
#property indicator_type5   DRAW_LINE
#property indicator_style5  STYLE_SOLID
#property indicator_width5  1
//--- plot LastLowBar
#property indicator_label6  "LastLowBar"
#property indicator_type6   DRAW_LINE
#property indicator_style6  STYLE_SOLID
#property indicator_width6  1

#include <ZigZag\CSorceData.mqh>
#include <ZigZag\CZZDirection.mqh>
#include <ZigZag\CZZDraw.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum EDirection
  {
   Dir_NBars=0,
   Dir_CCI=1
  };
//--- input parameters
input EDirection  DirSelect=Dir_NBars;
input int                  CCIPeriod   =  14;
input ENUM_APPLIED_PRICE   CCIPrice    =  PRICE_TYPICAL;
input int                  ZZPeriod=14;
input string               name="index-usd-zz.txt";

CZZDirection*dir;
CZZDraw*zz;

//--- indicator buffers
double         HighBuffer[];
double         LowBuffer[];
double         ZigZagBuffer[];
double         DirectionBuffer[];
double         LastHighBarBuffer[];
double         LastLowBarBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int h;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   switch(DirSelect)
     {
      case Dir_NBars:
         dir=new CNBars(ZZPeriod);
         break;
      case Dir_CCI:
         dir=new CCCIDir(CCIPeriod,CCIPrice);
         break;
     }
   if(!dir.CheckHandle())
     {
      Alert("Error al cargar el indicador 2");
      return(INIT_FAILED);
     }
   zz=new CSimpleDraw();
//--- indicator buffers mapping
   SetIndexBuffer(0,HighBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,LowBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ZigZagBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,DirectionBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(4,LastHighBarBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(5,LastLowBarBuffer,INDICATOR_CALCULATIONS);
   h=FileOpen(name,FILE_CSV|FILE_WRITE|FILE_ANSI,',');
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

   if(CheckPointer(dir)==POINTER_DYNAMIC)
     {
      delete(dir);
     }
   if(CheckPointer(zz)==POINTER_DYNAMIC)
     {
      delete(zz);
     }
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int ind=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]
                )
  {
   int start;

   if(prev_calculated==0)
     {
      start=0;
     }
   else
     {
      start=prev_calculated-1;
     }

   for(int i=start;i<rates_total;i++)
     {
      HighBuffer[i]=price[i];
      LowBuffer[i]=price[i];
     }

   int rv;
   rv=dir.Calculate(rates_total,
                    prev_calculated,
                    HighBuffer,
                    LowBuffer,
                    DirectionBuffer);
   if(rv==0)return(0);
   zz.Calculate(rates_total,
                prev_calculated,
                HighBuffer,
                LowBuffer,
                DirectionBuffer,
                LastHighBarBuffer,
                LastLowBarBuffer,
                ZigZagBuffer);

   if(ind<= 10) ind++;
   if(ind == 10)
     {
      double mx=0,mn=1000000;
      double lg;
      for(int i=0;i<rates_total;i++)
        {
         if(ZigZagBuffer[i]==0 || ZigZagBuffer[i]==EMPTY_VALUE) continue;
         if(ZigZagBuffer[i] > mx) mx = ZigZagBuffer[i];
         if(ZigZagBuffer[i] < mn) mn = ZigZagBuffer[i];
        }
      lg=mx-mn;
      PrintFormat("Min index: %.05f Max index: %.05f Length: %.05f",mn,mx,lg);
      lg/=100;
      double levels[100];
      int    count[100];
      ArrayInitialize(count,0);
      for(int i=1; i<101; i++) levels[i-1]=NormalizeDouble(lg*i,_Digits);
      mn=0;
      for(int i=0;i<rates_total;i++)
        {
         if(ZigZagBuffer[i]==0 || ZigZagBuffer[i]==EMPTY_VALUE) continue;
         if(mn==0) mn=ZigZagBuffer[i];
         else
           {
            lg=MathAbs(mn-ZigZagBuffer[i]);
            for(int j=0; j<100; j++)
              {
               if(lg<levels[j])
                 {
                  count[j]++;
                  break;
                 }
              }
            mn=ZigZagBuffer[i];
           }
        }
      for(int i=0; i<100; i++)
        {
         PrintFormat("%d level: %.05f count: %d",i,levels[i],count[i]);
         FileWrite(h,i,levels[i],count[i]);
        }
      FileClose(h);
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
El indicador comienza a funcionar, y en el décimo tick define el tamaño máximo posible del segmento de ZigZag. Tomando este tamaño como el 100%, calculamos una magnitud de un uno por ciento, después ordenamos todas las magnitudes semejantes de los segmentos ZigZag. Como resultado, tenemos una matriz con el número de segmentos de ZigZag, con una magnitud del 1% al 100% del máximo. Los resultados se muestran en un archivo y un diagrama para Libre Office Calc (usted podrá familiarizarse con ellos con más detalle cargándolos desde el archivo ZZdata.zip). Vamos a reproducir aquí el comienzo del archivo y el segmento correspondiente del diagrama:


Número ordinal Magnitud de la longitud de los segmentos
Número de segmentos
0
0.01193 2975
1
0.02387
850
2
0.0358
197
3
0.04773
54
4
0.05967
17
Otras áreas del diagrama ya no son tan interesantes, porque en se encuentran llenas de ceros. Podemos continuar y matizar esta investigación si disminuiomos el salto, pero nos detendremos en los resultados obtenidos. La principal conclusión práctica que podemos sacar es:
  • Debemos entrar con precaución en el mercado según la tendencia, cuando la magnitud del segmento de ZigZag aplicado al indicador combinado del índice de la divisa de la cesta supere una magnitud determinada. Aquí adoptamos como magnitud del segmento la longitud de la proyección del segmento del indicador ZigZag en el eje de precio (es decir, en el eje Y).

Obviamente, surge la cuestión de la magnitud de este segmento "crítico". Se lo puede definir aplicando métodos estadísticos a los datos mostrados más arriba. Si así lo desea, puede realizar este análisis de forma independiente, guiándose por su propio concepto de riesgo asumible. En lo que respecta a mí, he decidido que la magnitud del segmento "crítico" debe ser de 0.03.

En este ejemplo hemos analizado todo el periodo de la historia disponible. Sin embargo, para abarcar los últimos movimientos del mercado, será más correcto trabajar con periodos menores (año, trimestre, mes).

Un análisis semejante se puede realizar para todas las divisas de las cestas y para muchos marcos temporales. Sería interesante observar cómo van a cambiar en este caso los diagramas para los diferentes conjuntos "divisa - marco temporal". El desarrollador notará de inmediarto que, en caso necesario, el algoritmo se puede reproducir fácilmente como código. Pero en este caso, conviene no olvidar una pequeña verdad: no debemos orientarnos solo por la señal, debemos buscar la confirmación. La metodología demostrada se puede aplicar también a muchos indicadores de tendencia habituales. En el caso de los osciladores, no tiene sentido en absoluto y no dará resultado alguno. 

Bien, ya hemos completado el siguiente paso en la mejora de las entradas en el mercado usando indicadores combinados. Puesto que se ha mencionado la necesidad de buscar la confirmación con las señales de un indicador, vamos a ocuparnos precisamente de esto en lo sucesivo.


Uso conjunto de diversos indicadores combinados

Recordemos que disponemos de un indicador combinado ya construido sobre la base de WPR. En el anterior artículo ya estudiamos con suficiente detalle el propio indicador, así como su código y sus patrones disponibles. En esta ocasión, vamos a intentar aplicarlo en pareja con el indicador combinado de índice. La estructura obtenida deberá ser totalmente operativa, puesto que muchos sistemas comerciales se construyen precisamente de esta forma: indicador de tendencia + oscilador.

Bien, tomamos los indicadores testDistance.mq5, testWPR.mq5 y testWPRjpy.mq5 del artículo anterior y los colocamos en el gráfico junto con el indicador combinado del índice EUR testDistance.mq5. En el artículo anterior hemos analizado el gráfico de EURJPY, por eso el indicador testWPRjpy se debe reescribir para trabajar con USD. Guardamos el nombre del indicador para no tener que rehacer el indicador testDistance.mq5. Todos los indicadores de este apartado se pueden encontrar en el archivo wpr.zip.

El indicador del WPR combinado nos dibujará la diferencia entre las divisas WPR combinadas que entran en nuestra pareja de divisas (todo ello se ha descrito con suficiente detalle en el artículo original). Nuestro objetivo será detectar los patrones anteriormente mencionados en un indicador usando otro como filtro:





En la imagen se han marcado los posibles lugares de entrada en el mercado (no todos). Consideraremos más fiables aquellas antradas donde el indicador situado en la ventana superior (es el WPR superior) o en la inferior (se trata del índice unificado del euro) nos muestren patrones dirigidos en la misma dirección. Estas entradas se han marcado aquí con los números  1 y 6. Se trata de los puntos de cruce de los gráficos del indicador con la media móvil.

Es interesante la entrada № 2, puesto que el WPR combinado nos da un patrón simplemente académico con cruce de la línea de sobreventa. Semejantes entradas no nos demuestran suficiente nivel de confirmación. Y aunque la entrada real en el mercado en los lugares restantes no provocaría pérdidas, arriesgar de esta forma no es algo que yo haría en el comercio real.

¿Cómo de correcto es usar un indicador combinado que dibuje la diferencia entre los WPR combinados que entren en la cesta de divisas? ¿No sería más adecuado usar en pareja con el índice combinado del euro un WPR combinado para el euro? Vamos a probar a hacer esto sustituyendo testDistance.mq5 por testWPR.mq5:


Bien, en esta figura en la ventana inferior podemos ver el indicador del WPR combinado para el euro. ¿Está justificada su colocación? En este caso, salta a la vista que sí. Este indicador ha corregido nuestra entrada en los puntos №№ 2 y 6 en una vela (la dirección se muestra con flechas). La entrada en el punto № 1 no se ha confirmado con demasiada seguridad. La entrada en los puntos № 5 y № 3 no es recomendable. El indicador ha corregido el punto №4 y ha señalado el № 7.

Podría parecer que estos resultados nos llevan a la conclusión de que es mejor utilizar un indicador combinado WPR de la divisa de la cesta, en lugar del mismo indicador de diferencia entre los WPR combinados para las dos divisas de la pareja de divisas. Pero esto es cierto solo para este caso particular. Para el uso "diario" no excluiría la utilización de ambas formas del indicador combinado hasta que no se acumule una estadística significativa.


Ustedes podrían objetarme: "¿y qué tiene eso de especial? El uso conjunto de varios indicadores no es una novedad, ¿para qué hablar especialmente de ello en el artículo? Además, los patrones aquí no tienen nada que ver."

Sin embargo, el objetivo de este artículo era responder a tres preguntas:

  • ¿De qué forma es más correcto utilizar los osciladores en este caso?
  • ¿Existen prohibiciones claras en la aplicación de alguna de las formas?
  • ¿Cómo de correcta es la identificación y confirmación de los patrones al usar las diferentes formas de los osciladores?

Hemos respondido a estas preguntas dentro de nuestras posibilidades. Además, se ha aclarado el método de prueba de las conclusiones conseguidas.


Conclusión

Con esto terminamos la descripción de los patrones más sencillos que surgen al comerciar con cestas de divisas. Pero, ¿debemos poner punto final con ello a todo el tema? En absoluto. Tenemos muchas posibilidades interesantes por delante.

Como conclusión, repetiremos una obviedad: ¡Los indicadores anexos al artículo no están destinados al comercio real! Solo sirven para demostrar esta u otra situación, haciendo más visible algún hecho. Aún les falta mucho para lograr un funcionamiento estable.

Programas usados en el artículo:

 # Nombre
Tipo
 Descripción
1 testIndexMA.mq5 Indicador Indicador de prueba unificado del dólar con media móvil.
2 testIndexMA2.mq5 Indicador Indicador de prueba unificado del euro con media móvil.
3 testIndexZig-Zag1.mq5 Indicador Indicador de prueba ZigZag con posibilidad de medir  y registrar la longitud de segmentos individuales.
4 testWPR.mq5 Indicador Indicador de prueba WPR combinado para el euro
5 testWPRjpy.mq5 Indicador Indicador de prueba WPR combinado para el dólar
6 testDistance.mq5 Indicador Indicador de prueba combinado que dibuja la diferencia entre otros dos, en este caso, entre testWPR.mq5 y testWPRjpy.mq5 (entre el euro y el dólar)

Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/2960

Archivos adjuntos |
testIndexMA.mq5 (4.82 KB)
testIndexMA2.mq5 (4.96 KB)
ZZdata.zip (37.28 KB)
wpr.zip (45.32 KB)
Los Asesores Expertos desde el Asistente MQL5 funcionan en MetaTrader 4 Los Asesores Expertos desde el Asistente MQL5 funcionan en MetaTrader 4
En este artículo se ofrece un emulador simple del entorno comercial de MetaTrader 5 para MetaTrader 4. Este emulador permite realizar el traspaso y adaptación de las clases de trading de la librería estándar. Como resultado, los Asesores Expertos generados en el Asistente para MetaTrader 5, pueden ser compilados y ejecutados en MetaTrader 4.
Análisis comparativo de 10 estrategias tendenciales Análisis comparativo de 10 estrategias tendenciales
En este artículo se presenta el resumen breve de 10 estrategias de tendencia, incluyendo su testeo y el análisis comparativo. A base de los resultados obtenidos, se han deducido conclusiones generales sobre la conveniencia, ventajas y desventajas del trading siguiendo una tendencia.
Sistema secuencial de Tom DeMark (TD SEQUENTIAL) con uso de inteligencia artificial Sistema secuencial de Tom DeMark (TD SEQUENTIAL) con uso de inteligencia artificial
En este artículo voy a contar sobre cómo se puede tradear con éxito aplicando la «hibridación» de una estrategia muy famosa y una red neuronal. Se trata de la estrategia de Tom DeMark «Sistema secuencial» (TD Sequential), con aplicación de la inteligencia artificial. Nosotros vamos a trabajar SÓLO con la primera parte de la estrategia, usando las señales «Disposición» y «Intersección».
Recetas MQL5 - Señales comerciales de pivotes Recetas MQL5 - Señales comerciales de pivotes
En este artículo se demuestra el proceso del desarrollo e implementación de la clase de señales a base de los pivote, niveles de reversa. A base de esta clase, se construye la estrategia con el uso de la librería estándar. Se consideran las posibilidades del desarrollo de la estrategia de pivotes mediante la adición de los filtros.