Meta proyecto COT - nuevos horizontes para el análisis del informe CFTC en MetaTrader 4

Vasiliy Sokolov | 8 febrero, 2016

Introducción

El movimiento de los precios de mercado no están causados por la subjetivas ondas de Elliott, líneas de Gann y niveles de Fibonacci o por los indicadores técnicos. Nada de ello contiene nuevos bits de información en comparación con el gráfico de precios en formato OHLCV. El movimiento del precio se determina por la ley fundamental de la oferta y la demanda. No importa lo trivial que puede parecer, pero la oferta y la demanda determinan el precio.

El precio es el resultado de la interacción entre compradores y vendedores. Muchos comerciantes lo conocen, pero pocos lo utilizan. La aplicación práctica de esta ley general de integral puede ser extremadamente útil para cualquier persona que alguna vez ha tomado un desafío de predecir precios futuros. Este artículo es una especie de "conductor" de postulados teóricos de la economía para aplicarlo en el trading de mercados futuros y materias primas.

Los estados de la teoría económica sobre la posibilidad de la existencia de fases de "sobrecompra" y "sobreventa" del mercado. Estas fases son esenciales del mercado. Cada vez es más difícil el movimiento de precio al alza en zona de "sobrecompra" debido a la creciente competencia de la oferta. Además el movimiento a la baja de los precios en la zona de "sobreventa" también resulta cada vez más difícil, debido a la creciente presión de la demanda. En ambos casos, el mercado está cerca de su inversión a largo plazo. Estas afirmaciones pueden parecer simples y muy inútil, debido al hecho de que la teoría económica no ha propuesto ningún método para determinar estas fases de mercado. Sin embargo, estos métodos existen y, como suele suceder, fueron desarrollados hace mucho tiempo por los traders de éxito.

Este artículo es un puente entre la teoría y la práctica, introduce al lector en los métodos de la determinación de la fase del mercado, basada en indicadores sencillos, descritos en el libro "acciones y materias primas con los iniciados: secretos del Informe COT sobre el comercio", escrito por el famoso trader Larry Williams. Sin embargo, el libro no llegó a ser muy popular, y el material no llegó a ser ampliamente utilizado.. Una de las principales razones de este hecho es que todos los conceptos presentados en el libro, han permanecido en la teórica.

Después de más de dos años desde la traducción al ruso del libro, allí no ha propuesto ningún software universal, útil y abierto para el uso del concepto en MetaTrader4, la plataforma más popular en Rusia. Este artículo llena este vacío. Ahora cualquier persona puede probar y utilizar la teoría de Larry Williams en la práctica con su propia terminal de cliente MetaTrader 4.

El método de análisis de mercado actual usando los compromisos del informe de los traders puede considerarse como un análisis fundamental. El análisis fundamental en sí mismo no ha encontrado una amplia aplicación para los traders. No es ningún secreto que la mayoría de los traders utilizan el análisis técnico para el comercio real. Esto es debido a que el análisis fundamental está conectado a menudo al comunicado de prensa económico y es imposible predecir la reacción del mercado con las noticias.

En segundo lugar, este análisis no se parametriza, y así es muy subjetivo.

El tercer lugar, el análisis fundamental es potencialmente interminable. Significa que usted puede analizar sólo una cierta parte de los efectos económicos que pueden afectar al mercado, y la otra parte no siempre es considerada por el operador, pero es considerado por el mercado. El uso de los informes CFTC elimina automáticamente todas las debilidades del análisis fundamental, y el método de Larry Williams para el análisis de estos informes provee las mejores características de análisis técnico a la tecnología. Esto significa que en primer lugar, todos los efectos económicos significativos pueden considerarse indirectamente a través de la observación de las acciones de los tres grupos de participantes en el mercado.

En segundo lugar, todas estas observaciones se pueden reducir al simples indicadores técnicos, con la reducción de la subjetividad y la ambigüedad.

Es posible crear un Asesor Experto que utilize las reglas del análisis simple fundamental para el trading. Uno de estos desarrollos se presenta aquí. Creo que puede ser útil para cualquier persona, que decide utilizar el informe CFTC para el trading.

La primera parte del artículo trata de la teoría económica de la oferta y la demanda. Utilizando ejemplos sencillos, el modelo de mercado se describe, se demuestra la posible existencia de las fases de mercado diferentes. La segunda parte es sobre métodos de análisis de datos, que son necesarios para determinar la fase de mercado actual. Incluye la descripción de un conjunto de indicadores necesarios para analizar la interacción de compradores y vendedores. Sobre todo se basa en el libro de Larry Williams, en el que el uso práctico de estos indicadores se ha demostrado en detalle. La tercera parte trata de la ejecución técnica del proyecto Meta COT. Contiene toda la información sobre el uso del EA, el uso de indicadores y scripts que se incluyen en el proyecto y cómo descargar la información necesaria. La cuarta parte es el final.

Examinaremos el EA y la efectividad del concepto presentado en el artículo. Se presentan las conclusiones finales, y se proponen algunas sugerencias constructivas.


1. El mercado como una función de equilibrio de precios

1.1 La ley de oferta y demanda

El mercado es una institución o mecanismo que reúne a compradores ("demanda") y vendedores ("proveedores") de bienes en particular, servicios o recursos. [3]

Hay no más precisa definición del mercado, que la dada anteriormente. De hecho, la tarea principal de cualquier mercado abierto reúne a compradores y vendedores. La relación entre compradores y vendedores están regulados por la ley de oferta y demanda. Esta ley fundamental hace que los precios de las acciones suban o bajen, que a su vez permite a los operadores tener ganancias o pérdidas por la diferencia de precio entre el futuro y los precios actuales. Los traders deben saber el mecanismo de equilibrio cambiante entre la oferta y la demanda, así que vamos a tener en cuenta la siguiente tabla [3]:


Total oferta

Precio por bushel (Estados Unidos)

Demanda total por semana

Superávit (+) o escasez (-)

12.000

5

2.000

+10.000

10.000

4

4.000

+6.000

7.000

3

7.000

0

4.000

2

11,000

-7.000

1.000

1

16.000

-15.000


Tabla 1-1. LA oferta y demanda del mercado de maíz (en miles de quintales)

Aquí está la conexión entre el vendedores y compradores de maíz, expresados en términos de su volumen, precio y entrega. Los vendedores desean vender sus productos tan caros como sea posible, y los compradores desean comprar tan barato como sea posible. En este caso, hay muchos vendedores que quieren vender al coste de 5 dólares por bushel de maíz. La oferta total será de 12.000 bushels. Pero el problema del vendedor es que no hay tantos compradores que están dispuestos a comprar a un precio tan alto. Hay compradores que están dispuestos a comprar solamente 2.000 bushels a un precio tan alto. Las otra de 10.000 bushels (12.000-2.000 = 10.000) permanecen incumplidas, causando exceso de mercancías de vendedores y la escasez de productos de los compradores. Este precio es incapaz de permanecer en el mercado. Muchos vendedores reducirán sus precios para deshacerse del exceso de mercancías y conseguir menor dinero, pero vivo. Se unirán a otros vendedores que deseen adelantarse a sus compañeros competidores. Comienza la competencia entre vendedores, que hará disminuir los precios [3].

Ahora vamos a considerar el caso contrario. En este momento asumimos que el precio del maíz es muy bajo - 1 dólar por bushel. Dicho precio del maíz será muy atractivo para los compradores, hay muchos compradores que desean comprar. Su demanda total es de 16.000 bushels. Pero hay muchos menos vendedores que quieren vender a ese precio. La cantidad de suministro total (ventas) es a 1.000 bushels, que puede causar otra vez escasez de productos entre los compradores en la cantidad de 15000 bushels más excedentes de los vendedores. Una vez más, este precio no es capaz de permanecer en el mercado. Algunos de los compradores compran maíz a un precio superior, para obtener los bienes que necesitan. Estos compradores se unirán a sus colegas y anticiparán un mayor crecimiento de los precios porque quiere estar entre los primeros que comprarán relativamente barato. Comienza la competencia entre los compradores, que aumentará el precio [3].

Para que quede claro vamos a dibujar las funciones de demanda y suministro en el gráfico:

Figura 1-2. Oferta y la demanda como función del precio

Figura 1-2. Oferta y la demanda como función del precio

Hemos considerado sólo los casos extremos de la distribución entre la oferta y demanda. En el primer caso, el precio caerá, en el segundo caso, el precio subirá. En ambos casos habrá cierto punto de equilibrio en el que la demanda será igual. En este punto habrá escasez de productos entre los compradores o exceso de vendedores. En nuestra tabla tal punto se encuentra a 3 dólares. A ese precio, la oferta total y la demanda total será de 7.000 bushels, a este precio habrá cambio de equilibrio entre los compradores y vendedores sin ninguna mercancía para vender a la izquierda o que aparecieron sin déficit.

En la vida real, la oferta y la demanda están cambiando bajo la influencia de muchos factores, que van desde razones fundamentales a sucesos aleatorios. En cualquier caso, habrá un único punto de cruce entre oferta y demanda. Este punto será el precio de mercado actual.

Consideremos un ejemplo cuando la oferta se incrementa en una demanda constante (punto A-B en la figura 1-3, a). En este caso el precio caerá (p1<p2), puesto que los bienes serán más baratos y empezará la competencia entre los vendedores. Por otra parte, será más la cantidad de compradores que quieren comprar productos a un mejor precio (q3>q2).

Ahora considere el caso cuando la oferta disminuye (puntos de A a C de la figura 1-3a). Esto hará los precios más altos, porque habrá menos productos y empezará la competencia entre los compradores (p3>p2). Sin duda serán menos los compradores que quieren comprar a los precios más altos.


Figura 1-3a. Cambio de fuente en una demanda constante

Lo mismo vale para la demanda - cuando aumenta (puntos A y B en la figura 1-3b), el precio comienza a elevarse, y muchos quieren vender a un precio superior, lo que se traduce en un aumento de la oferta total (q3>q2). Por el contrario, cuando la demanda empieza a caer, el precio bajara, y por lo tanto serán menos los vendedores que quieran vender a un precio bajo, y disminuirá el número de ofertas (q1<q2).


Figura 1-3b. Cambio de demanda a oferta constante

Ahora consideremos el caso donde la oferta y la demanda cambian simultáneamente. Está claro que hay sólo cuatro casos así [3]:

1. La demanda disminuye, aumenta la oferta. Por separado cada uno de estos factores conduce a precios más bajos y, en consecuencia, la disminución del precio total será incluso mayor que el causado por cada uno de los factores por separado.


2. Mientras aumenta la demanda, aumenta la oferta. Estos factores se están compensando mutuamente, ya que el crecimiento de la demanda conduce a un aumento de los precios y el crecimiento de la oferta conduce a una disminución del precio. Generalmente, el movimiento de precio va a depender el factor más fuerte.

3. Cuando disminuye la demanda, disminuye la oferta. Como en el caso anterior, el resultado es incierto. Con la disminución de la demanda el precio se reduce, mientras que la disminución de la oferta conduce al aumento de los precios. Generalmente, el movimiento de precio va a depender el factor más fuerte.

4. Aumenta la demanda, disminuye la oferta. El aumento de la demanda conduce a un aumento de los precios, exactamente como la disminución de la oferta conduce al aumento de los precios. Como resultado, el aumento de precio total será incluso mayor que el causado por cada uno de los factores por separado.

En el mercado real de la oferta y la demanda cambian cada segundo, y todos estos cuatro casos se reflejan en el valor del precio actual de mercado. Así, el punto de cruce entre oferta y demanda "pasean" en la gráfica de precios y volumen, en diferentes períodos de tiempo, en diferentes ubicaciones (ver figura 1-4):


Figure 1-4. Dinámica de oferta y demanda

Sin embargo lo más importante, el punto de cruce entre oferta y demanda no puede tener grandes volúmenes a bajo costo (es decir, situado en el cuadrante superior izquierdo de la gráfica), así como no puede tener un precio alto para volúmenes bajos (es decir, situado en el barrio de la parte inferior derecha del gráfico). Para mayor claridad, pasemos a la figura 1-5:


Figura 1-5. Las fases del mercado

Como se ha señalado anteriormente, los proveedores se niegan a ofrecer un gran volumen a precios bajos (para vender mucho y barato), y los compradores se niegan a proporcionar una alta demanda a altos precios (para comprar mucho y caro). Por lo tanto, es posible construir un modelo de cualquier mercado. La figura 1.5 muestra el modelo. La línea punteada muestra el cruce promedio de la oferta y la demanda. El ciclo completo de mercado puede dividirse en tres períodos o fases:

1. Fase de precios bajos. Se caracteriza por bajos volúmenes a bajo precio. En la realidad, La demanda del mercado no realizado de los compreadores será alta, mientras que la oferta del mercado será limitada. Hay una escasez de productos entre los compradores y el excedente de bienes no realizados por los vendedores. Hará que los compradores compitan, lo que conducirá en última instancia al aumento de precio.

2. Fase de Media de los Precios. En esta fase hay precios aceptables en un volumen lo suficientemente alto. No hay ninguna escasez de compradores para ambos y no hay excedente de vendedores. Aquí está el punto de equilibrio para precio y el volumen [3]. En la figura 1.5 se presenta por puntos.

3. La fase de los precios altos. Se caracteriza por los altos precios (P) con volumen alto (Q). El suministro real de los productores de bienes será alto, mientras que la demanda de los compradores será limitada. La resistencia de los compradores a comprar productos caros y el deseo de los productores a vender productos caros hará competencia ente los productores, que conducirá en última instancia a la disminución de los precios.

En otras palabras, la ley de oferta y demanda determina el movimiento retorno y tendencias del mercado. En el medio plazo (su escala de tiempo es aproximadamente 1-1,5 años aproximadamente) el mercado pasará de la fase de precios bajos a la fase de precios altos, o viceversa, por lo tanto habrá una tendencia. En el largo plazo (de un año o más), el mercado irá a la fase de precios altos o a la fase de precios bajos, reunión de compradores o vendedores resistentes y bajo su acción se voltea hacia atrás, por lo que sevolvera plano. El movimiento del mercado puede compararse con la respiración. Después de una espiración completa es muy difícil de encontrar un poco de aire en los pulmones, para continuar la exhalación.

Al contrario, la presión entre los pulmones y el diafragma se está convirtiendo en menos atmosférica y el aire llega a los pulmones fácilmente. Después de una respiración completa el volumen de los pulmones se utiliza completamente y no hay ninguna posibilidad de inhalarlo ni siquiera un poco. En este momento la presión entre el diafragma y los pulmones se convierte en más atmosférica, presión innecesaria que intenta expulsar aire de los pulmones. Este proceso se repite una y otra vez. Procesos similares se produce en el mercado. Los compradores que surgen compiten (la presión negativa) hacen que el mercado aumente los precios (para inhalar aire) mientras que los vendedores (la presión positiva) hacen que el mercado disminuya los precios (para exhalar aire).

Como hemos visto anteriormente, las situaciones de escasez y sobreoferta de bienes son posibles en el mercado. Pero también es cierto que la misma cantidad es comprada y vendida cada vez en el mercado. Por lo tanto, las conclusiones de algunos analistas técnicos en cuanto a que el mercado está dominado por los toros, cuando ven una tendencia alcista o un oso cuando ven una tendencia a la baja, son incorrectas. El mercado siempre tiene un número igual de contratos de toros (compradores) y osos (vendedores). Pero, a precios bajos, existe una cantidad limitada de bienes para la venta en el mercado. La mayoría de los propietarios de los bienes espera esos períodos.

En otras palabras, si es el trigo, se queda en el almacén y si es moneda se queda en el banco. Así, los compradores son incapaces de comprar mercancías en las cantidades que quieran. Utilizando la terminología estándar esta situación puede ser llamada como "sobrecompra". Caso contrario, donde los precios son altos y todos los excedentes de mercancías de los vendedores están en el mercado, puede ser llamado como "sobreventa". Además lo entenderemos para los casos de sobrecompra y sobreventa.


1.2 El precio es la primera variable en la ecuación de oferta y demanda

Para ilustrar los ejemplos de precios bajos y altos, vamos a considerar las barras de azúcar semanal:


Figura 1-6. Azúcar, barras semanales

Sabemos que a precios relativamente bajos habrán poco que querrán vender, y por lo tanto el volumen de bienes en el mercado también es relativamente pequeño. Por el contrario, con altos precios de mercado el volumen de mercancías aumenta. El precio sí puede decirnos acerca de la posibilidad del exceso de oferta o escasez de bienes. Sin embargo, este supuesto es a menudo rudo y estimado. Aunque el precio de las mercancías y el volumen están correlacionados entre sí, no es ninguna relación lineal directa entre ellos.

A precios relativamente altos puede haber un volumen relativamente pequeño de las mercancías, mientras que al mismo tiempo con un volumen relativamente alto puede haber precios relativamente baratos. Esto es debido a que las funciones de oferta y demanda son raramente lineares, casi siempre están sujetas a la elasticidad precio de la elasticidad de la demanda y el precio de oferta [5]. El segundo problema para determinar los volúmenes del mercado los precios es la "relatividad" de este planteamiento. ¿Cómo podemos determinar qué precios son altos y qué precios son bajos?

Sabemos cuando el mercado no está en tendencia a largo plazo, entonces ¿por qué no crear un indicador de estados de sobrecompra y sobreventa del mercado, y usarlo para abrir posiciones cortas en primer lugar, cuando el mercado alcanza los precios altos y abrir posiciones largas, cuando los precios son bajos? El beneficio se debe obtener con un uso simultáneo de todas las propiedades del mercado - cuando hay marcada una tendencia y cuando está en tendencia.

Muchos indicadores técnicos han sido desarrollados durante los últimos cincuenta años, que intentan determinar estados de sobrecompra y sobreventa del mercado. Pero todos ellos tienen un grave problema - son basados con una única variable de demanda y oferta, y esta variable es el precio. El cambio del precio es lo último que sucede en el mercado después del cambio de equilibrio entre oferta y demanda.

Por lo tanto, en el mejor de los casos, un trader, utilizando cualquier indicador basado en el precio o el precio en si mismo, será el último en continuar con el cambio de precio, pero nunca será capaz de adelantarse a él. Pruebas simples con un computador muestran la inconsistencia de este enfoque.

Aquí está una gráfica de beneficios de un sistema elemental basado en el indicador RSI:


Figura 1-7. La dinámica de ganancia del EA, basado en el indicador RSI. EURUSD, barras diarias, de 2000 a 2009.

El sistema es elemental. Si el período RSI 7 alcanza el 80 %, abre una posición de venta. Si el RSI alcanza el 20%, entonces se abre una posición de compra. El período costumizado ha optado por abrir más posiciones. El stop está a 100 puntos, y la existencia de la condición de la operación es de un profit de 200 puntos. Pruebas realizadas en EURUSD, de 2000 a 2009, utilizado las barras diarias. El Lote de las operaciones para todas las posiciones era constante e igual a 0,1.

Las conclusiones son claras: usando los datos de precios solamente no es suficiente para determinar la fase del mercado. Necesitamos una segunda variable en la ecuación de oferta y demanda - el volumen de mercado.


1.3 El interés abierto es la segunda variable de la ecuación entre oferta y demanda

Es sorprendente que para muchos mercados, es una oportunidadde conocer es volumen de un contrato, analizando los valores de interés abierto.

El Interés abierto es el número de contratos del mercado de futuros y opciones y no compensado por ofertas, entregas, etc.. El interés abierto es la suma de todas las posiciones largas o cortas [1]. Por ejemplo, si la suma de todas las posiciones largas en el mercado es igual a 1000 contratos, significa que la suma de todas las posiciones cortas en el mismo mercado, también es igual a 1000 contratos y el interés abierto de 1.000 contratos son los mismos. La fórmula para el interés abierto se presenta a continuación:

El comprador y el vendedor de un contrato de futuros para el trigo agregarán una unidad al Valor del Interés Abierto.

Es importante entender la diferencia entre el interés abierto y el volumen de mercado. Por ejemplo en un día pueden negociarse 1.000.000 de contratos, pero no significa que hay bienes para el 1.000.000 de contratos. Puede ser mucho menor, únicamente durante el día pasan de mano en mano, aumentando el volumen diario. Al final del día, no todas las posiciones se cierran, muchos de ellas son intereses rollover para el día siguiente. El número de contratos abiertos es el Indicador de Interés Abierto. Los productores de mercancías están buscando como cubrir sus riesgos mediante la compra de futuros largos, así darán un compromiso de la entrega real de los bienes. Se reflejan en los Valores del Interés Abierto. Así, en cierto sentido, el interés abierto podría ser una medida del volumen de mercancías en el mercado.

El interés abierto se calcula diariamente al final de cada sesión, en todos los mercados de futuros. Esta información es abierta y está generalmente disponible en los sitios web oficiales de las bolsas de futuros. Los mismos datos en interés abierto pueden obtenerse mediante la suscripción de señales de pagadas como por ejemplo las e-señal. Para los usuarios del MetaTrader, los datos del Interés Abierto para más de 40 mercados pueden obtenerse utilizando el indicador de «cuna del Meta: posición neta», que forma parte de la cuna de la Meta. proyecto presentado aquí. Para obtener más información sobre el uso, ver la tercera parte del artículo.

Desafortunadamente, la información en interés abierto (así como todos los otros tipos de datos descritos en este artículo) no está disponible en el mismo lugar y los mercados de valores, debido a su estructura y propiedades. Sin embargo, debido a la fuerte correlación entre el lugar y los mercados de futuros, es posible negociar sobre el terreno, guiada por la dinámica de la oferta y la demanda en el mismo mercado de futuros. Por ejemplo, puede analizar la dinámica del interés abierto para el futuro EURO, pero trading EURUSD en el acto. Sin embargo, para una representación más precisa utilizaremos solo la tabla de futuros.

Ahora echemos un vistazo a la dinámica del interés abierto del oro durante un largo periodo:


Figura 1-8. Gráfica de oro, semanal

En la figura 1-8 vemos el gráfico de precios (superior) y la tabla de interés abierto (inferior) para los futuros de oro desde 2003 a 2009. Uno puede ver que cuando los valores de interés abierto fueron relativamente altos en comparación con los valores anteriores, el mercado empezó a ir hacia abajo. Al mismo tiempo, cuando los valores de interés abierto eran bajos, el mercado comenzó a ir hacia arriba. No es visto en un gráfico semanal debido al periodo de tiempo, incluyendo una alta volatilidad reciente.

Lo que es cierto para el oro, es cierto para cualquier otra mercancía, la ley de la oferta y la demanda funciona en cualquier mercado:


Figura 1-9. Soja, gráfica semanal



Figura 1-10. Bonos del tesoro de Estados Unidos, gráfica semanal

Como se puede ver, los valores relativamente bajos del interés abierto indican el potencial del crecimiento del mercado, mientras que valores relativamente altos de interés abierto indican el potencial de la caída de los precios. El mercado no siempre reverso al interés abierto tiene valores mínimos o máximos, y los valores extremos de interés abierto no apuntan a una revocación inmediata del mercado. El interés abierto no es un mercado mágico "switcher", pero permite medir la segunda dimensión - el volumen de mercado y estimar la fase actual del mercado.

Esta es la primera regla, que puede ser formulada de la ley de oferta y demanda:

Cuando el Interés Abierto tiene niveles extremadamente altos, trate de abrir posiciones cortas.

Cuando el Interés Abierto tiene niveles extremadamente bajos, trate de abrir posiciones largas.


2. La estructura del mercado

Hemos encontrado que el mercado - es una institución o mecanismo que reúne a compradores y vendedores de determinados bienes y servicios. Ahora es el momento de considerar estos grupos en detalle.


2.1 Aseguradores y especuladores son partes de la estructura del mercado.

Por lo tanto, el mercado siempre encuentra el punto de cruce entre oferta y demanda. Este punto es el precio de consenso de las mercancías, es decir, el precio en que vendedores están dispuestos a vender un volumen determinado de bienes y los compradores están dispuestos a comprar este volumen de las mercancías. Cada vez la demanda y la oferta está cambiando bajo la influencia de los factores fundamentales, políticos, el azar y otros. Basado en la ley de la oferta y la demanda, el precio de las mercancías también está cambiando. Por consiguiente, existe cierta probabilidad de que el precio futuro será más o menos que el actual. Una vez que el precio puede cambiar con el tiempo, el precio tiene incertidumbre en el futuro. Esa incertidumbre del precio sobre el precio en el futuro se llama un riesgo [6].

Por lo tanto, cualquier propietario de bienes tiene el riesgo de los cambios de precios adversos en el futuro. Sin embargo, el cambio de precio puede ser hacia arriba y hacia abajo. Si los precios cambian hacia abajo significa pérdidas en la venta a un precio menor en el futuro en comparación con el precio de mercado. Contrariamente el aumento de los precios debe dar al propietario un beneficio adicional. Por lo general los dueños principales de productos son sus productores.

Si el producto es el trigo, su dueño puede ser la empresa General Mills, y si es oro - su dueño puede Barrick Gold Corp, etc. Mientras que el alto riesgo de los cambios de precio es alto, y la principal fuente de ingresos de estas empresas se obtiene de la diferencia entre el costo de sus productos y el precio de su venta, están interesados en reducir el riesgo que surge como consecuencia de las mercancías poseer. Para ello, los fabricantes utilizan las operaciones de cobertura en materias primas y los mercados financieros. De hecho, los fabricantes venden su riesgo a otras personas que quieren comprar. Adicionalmente al riesgo, sus compradores tienen la oportunidad de obtener un beneficio adicional (prima de riesgo) en el caso de los cambios de precio favorable.

Así, el intercambio no es sólo un lugar centralizado del mercado. El intercambio es también un lugar centralizado para compra y venta de riesgo y sus primas.

Los compradores de bienes y los riesgos asociados a ellos se llaman los especuladores. El objetivo principal de un especulador es obtener un beneficio por la diferencia entre los precios actuales y futuros. Los especuladores son como un "pegamento" entre el fabricante del producto y su consumidor final. Proporcionan una liquidez de mercado, con un suave cambio de precio [4].

Las operaciones de cobertura no son tanto la reducción del riesgo a cero, es una manera de encontrar el equilibrio razonable entre el riesgo y beneficio. Como se puede ver más lejos, la competente cobertura permite el uso de una oportunidad para la especulación. Mediante el control de posiciones de cobertura dinámica es posible unirse al grupo de inversión de las empresas de la fabricación a gran escala, que sabe casi todo sobre el mercado que trabajan.

De hecho, este punto de vista no es carente de significado. Estas empresas son proveedores directos, que cotizan en la bolsa. ¿Quién, si no es el fabricante, debe conocer todo lo que sucede en este campo del negocio? Estos chicos tienen información oculta de los partido de los ojos y oídos, ellos saben que nadie más lo sabe. O cómo explicar el hecho de que por muchas décadas, siguen siendo jugadores de éxito en la bolsa, realizando millones de transacciones diarias de dólares!

La vigilancia de los especuladores también no está desprovista de significado. Niveles de compras de los especuladores indica los momentos cuando el mercado está "sobrecalentado", es decir, tiene la tercera fase, o viceversa, los momentos cuando es fría (primera fase) (ver parte 1). Al final, los especuladores suelen ser los principales compradores de las mercancías, lo que significa que cuando acumulan sus posiciones largas al máximo, y ya no tienen la posibilidad de comprar, el mercado invierte en dirección hacia abajo.


2.2 Análisis de informes de la Comisión de Trading de futuros de productos básicos

Alguien tiene la oportunidad de observar las posiciones de los aseguradores y especuladores, gracias a la organización del gobierno estadounidense llamando «Comisión de comercio de futuros en productos básicos»-CFTC. El hecho es que toda persona privada o jurídica deberá presentar un informe sobre sus acuerdos comprometidos en intercambios de materias primas, si el volumen de estas operaciones asciende a o excede el nivel especificado por la Comisión. Una vez por semana, la Comisión informa sobre las posiciones combinadas de los traders.

Cada informe se publica en la web oficial: www.cftc.gov. El informe se genera para cada estado del martes y se publica el viernes noche, hora de Moscú. El propio informe se presenta en varias formas: table Excel, formato de archivo de texto CSV, así como texto tabular. También puede descargar los registros de la historia para un período de tiempo en los formatos Excel y CSV. Los informes se preparan para acuerdos futuros y ofertas de futuros y opciones. Los informes tienen una forma breve y prolongada. La forma extendida difiere de la breve por la existencia de estadísticas adicionales y datos sobre cultivos y los rendimientos de algunos cultivos. En la práctica, los archivos Excel o CSV se utilizan para el análisis del informe CFTC. Ahora echemos un vistazo a un breve informe sobre trigo para el 04 de agosto de 2009:


Tabla 2-1. El informe de trigo de 04.08.2009 (futuros solamente)

En la parte superior del informe hay el nombre del producto, en este caso, es el trigo que cotiza en el Chicago Board of Trade, el tipo de informe - sólo posiciones de futurosy la fecha - 04 de agosto de 2009. La matriz consta de cuatro columnas principales. Cada uno de ellas representa las posiciones combinadas cortas y largas de cada uno de los tres grupos de traders. El primer grupo de comerciantes incluye los principales especuladores. Los informes se denominan operadores no comerciales (no comercial). Podemos ver que en 04 de agosto de 2009 los grandes especuladores tenían 75 933 contratos, mientras que en el lado corto habían 97.574 contratos. Esto indica que su posición total o neta era en corto y era de -21.641 contratos. Por lo general, no es una situación típica para los especuladores.

En la mayoría, pero no todos los mercados son de compradores puros, es decir, las posiciones largas son siempre superiores a las cortas. Usando solamente un informe para el análisis es imposible determinar si esta situación es típica en este mercado o no. En cualquier caso, usted debe recordar que el parámetro más importante aquí es la posición neta del grupo, pero no la posición larga o corta por separado. Esta posición neta se utiliza en el cálculo de la mayoría de los indicadores del análisis de informes de proveedores. Así que, una vez más: la posición total o neta es igual a la diferencia entre las posiciones largas y cortas, pueden ser tanto positivas como negativas, su fórmula:

donde NetPosition es una posición neta pura o total de los traders, es la categoría de traders

El siguiente es el número de contratos importantes para los operadores no comerciales que se encuentran en los llamados diferenciales, o coberturas.

Larry Williams escribe sobre él lo siguiente: Si un trader no comercial celebra contratos de futuros sobre el euro y el dólar en 2.000 largo y en 1.500 corto, 500 contratos se incluirán en la categoría "Largo" y 1.500 los contratos seran de "Cobertura" [1]. Simplemente, la cobertura muestra el número de contratos cortos y largos.

Es importante tener en cuenta que no nos referimos a la fijación. Por ejemplo traders pueden mantener posiciones de una misma materia en contraposición en contratos de futuros de diferentes meses de entrega, o se han opuesto a posiciones de la misma materia en futuros y opciones. En el informe, que incluye posiciones en opciones, estos casos se toman en cuenta.

El segundo grupo refleja las posiciones de cobertura. También se llaman los operadores o traders comerciales (COMMERCIAL) Por lo general, pero no siempre, los operadores son vendedores puros, porque la mayoría de ellos son productores de productos básicos como trigo, oro o cerdos. Los operadores comerciales xon también fabricantes que utilizan productos como base para sus productos, por ejemplo, algodón, azúcar o un pan. Por lo general, pero no siempre, son vendedores, es decir, sus contratos están en el lado corto.

Generalmente, cuando los precios caen a un nivel bajo, los operadores están reduciendo sus ventas al mínimo, porque no es rentable vender barato sus productos. Al mismo tiempo, los operadores que están produciendo sus propios productos, por el contrario, aumentar su posición larga. Así, la posición neta de los operadores puede ser larga y los indicadores basados en la posición neta de los operadores se ubicará en la zona superior.


Vamos a considerar un caso específico utilizando el ejemplo de nuestro informe sobre el trigo. El lado largo de los operadores tienen 166.518 contratos, mientras que el lado corto tiene 130.979 contratos. Su posición neta es de 35.539 contratos, es decir, es larga. A menudo, esto significa que el precio de los productos esta en el nivel bajo, porque los operadores están vendiendo menos que comprando. En cualquier caso, para determinar la situación exacta es necesario utilizar un gráfico de su posición neta para un periodo de tiempo largo.

La columna «Total» contiene una serie de posicione largas y cortas para el combinado de traders comerciales y no comerciales. No es de ningún interés práctico.

La columna «Posiciones no Reportables» contiene una serie de posiciones largas y cortas de los incontables traders. De hecho, esta columna refleja la posición de los pequeños especuladores, cuyas posiciones son demasiado pequeñas como para entrar en el grupo de los especuladores. Estas posiciones se calculan mediante el cálculo sintético - se restasn a partir del valor del interés abierto (OI) de todas las posiciones largas y cortas de los traders reportados. En nuestro caso, el OI es de 322.431 contratos, mientras que el largo es de 279.239 contratos, esto significa que los 29.194 contratos son del lado largo de personas incontables (322.431-279.239). Se puede realizar el mismo cálculo para el lado corto: 322.431-279.339 = 43.092 contratos.

Aquí están los cambios en el número de contratos para cada grupo en comparación con el informe anterior. La siguiente es la proporción de cada categoría en el interés abierto y en la parte inferior del número de traders en cada categoría. Estos datos no se utilizan en la práctica.

Además del informe, como se mencionó anteriormente, existen informes que incluyen la posición de Opciones. Todas las posiciones de opciones se convierten en equivalentes de futuros y añadidas directamente a las posiciones de futuros. El mismo informe en trigo, mira como sigue, pero posiciones combinadas de opciones y futuros :


Tabla 2-2. Informe breve del trigo del 04.08.2009, futuros y opciones

A pesar de los números diferentes, ambos tipos de informes dará lugar a graficas similares de dinámica de cambios de posición. Sin embargo, es preferible utilizar los informes que incluyen información sobre posiciones de opciones, al considerar un volumen más completo del mercado. Echa un vistazo en el aumento de valor de la columna de "Spreads". Ahora los valores en estan en la fila son dominados por comparación con las posiciones largas y cortas para los operadores no comerciales. Esto es debido a que los operadores comerciales, sobre todo utilizan opciones para cubrir sus posiciones de futuros.

Ahora examinemos una forma extendida del informe, que incluye posiciones de futuros y opciones sobre el mismo trigo:


Figura 2-3. El informe de futuros y opciones de trigo completo de 04.08.2009

Como se puede ver, el informe incluye estadísticas adicionales sobre viejas posiciones para cada uno de los tres grupos de comerciantes. Puesto que todos estos informes son analizados en la dinámica durante un largo periodo, esta información no es de ningún interés.


2.3 Observando posiciones largas de hedgers (operadores cubridores)

Ahora, es tiempo para compilar estadísticas sobre las compras y las ventas de hedgers y supervisar sus acciones durante un período de tiempo. Por ejemplo, usaremos el gráfico de precios de trigo ya presentado, con el indicador que muestra las posiciones largas y cortas de los operadores. La tgráfica consiste en barras semanales y cubre el período desde mediados de 2001 a mediados de 2009:


Figura 2-4. Trigo, posiciones largas y cortas de operadores, barras semanales

La línea verde muestra una posición larga de los operadores, el rojo corresponde a las posiciones cortas de los operadores. Todas las posiciones se especifican en términos absolutos, no tienen un signo. Es necesario asumir que la línea roja representa la cantidad absoluta de posiciones cortas y la verde - la cantidad absoluta de las posiciones largas. En general, las posiciones cortas de los operadores dominan hasta la primavera de 2004 (línea roja sobre el verde), después de que los operadores tenían más compras que ventas (la línea verde sobre la roja). Dicha gráfica no muestra puntos de rotura clave. Ahora echemos un vistazo a esta misma gráfica, pero con un indicador de la posición neta total de los operadores:


MFigure 2-5. Posiciones netas totales para los operadores, barras semanales

Aquí puedes ver los momentos más interesantes. Tenga en cuenta que cuando la posición neta de los operadores es relativamente alta, después de algún tiempo el mercado va hacia arriba. Al mismo tiempo, cuando la posición neta de los operadores era relativamente baja, después de algún tiempo el mercado va hacia abajo. Por supuesto, no todas las predicciones del indicador se hacen realidad, pero incluso si sucedió al entrar en al menos un punto correcto, sería un beneficio enorme.

Vamos a prestar atención a la posición la neta muy alta de operadores en finales de 2005. Nunca antes o después, los operadores tenían estos altos valores de la posición neta. Y ahora mire lo que pasó con el mercado después de eso. Comenzó el inexorable movimiento hacia arriba, que continuó más de 2 años. Como resultado, el precio aumentado en más de 700 (!) USD. Hubo algunos momentos, que nos muestran una buena oportunidad para la especulación.

Por ejemplo, después de una fuerte caída del precio al final del 2007, muchos podrían pensar que terminaría la tendencia toro. Apparently, the operators didn't think so. Mientras que otros trataron de reducir sus posiciones largas (que sabemos de los informes de traders), los operadores compraron el mercado! El ascenso vino pronto. Se actualizó a un precio máximo, y luego comenzó el pánico. Durante estos cuatro meses, los precios aumentaron por otros 400$ ! Las señales de venta dadas por los operadores no fueron tan convincentes. Sin embargo, en muchos casos, el operador puede escapar del mercado seguro si utiliza unas simples técnicas de trailing stop. En cualquier caso, todas las pérdidas podrían ser compensadas por una buena cantidad.

Las palabras clave aquí son "poco después". No olvidar que este indicador no calcula utilizando el precio. Es totalmente independiente de él. Podríamos quitar el gráfico de precios, pero el indicador de posiciones netas de los operadores todavía mostrará los mismos valores. El precio es de los recientes cambios del mercado. El primer cambio es el equilibrio de las fuerzas de la oferta y la demanda e incluso antes de que cambien las mentes de los participantes del mercado principal. Observando lo que los operadores están haciendo, estamos asistiendo a la evolución del mercado en su etapa temprana, cuando el cambio del precio no ha aparecido todavía. Nos da una ventaja única que tendrá lugar en otro trailer medio vacío de la tendencia locomotora futura. Cuando el movimiento comience, muchos vendrán demasiado tarde, pero no los tracerss con los informes de Comisión!

Vamos a observar el oro y la plata a través del prisma de los operadores:


Figura 2-6. El oro y la posición neta de los operadores. Barras semanales

La tabla de precios del oro está llena de oportunidades favorables para la especulación. No todos ellos conducen a beneficios extraordinarios, pero muchos de ellos podrían generar un ingreso sustancial. Si un trader correlaciona sus puntos de entrada con la tendencia alcista principal que continua durante muchos años, éste podría ser un gran ganador. Permítanme recordarles, que estamos considerando los momentos cuando la posición neta de operadores es alta, estos puntos son puntos potenciales para la compra. Lo mismo se aplica a las ventas: estamos buscando niveles relativamente bajos de posición neta y tratando en corto, busca un momento oportuno para la venta.

Tenga en cuenta la locura que fue el oro a finales de 2008. Después de la fuerte caída que terminó a principios de septiembre, comenzó una subida inesperada. De hecho, durante un día el precio del oro ha aumentó en 90 dólares! Luego fue a un alto precio hasta finales de septiembre, pero no fue muy largo. Poco después hubo una nueva caída, y al final de octubre, el oro alcanzó su mínimo del año.

¿Podríamos predecir si se sacude al menos parcialmente? Sí que podríamos predecir utilizando los informes de posiciones de los traders. Presta atención que no mucho antes del toro del viernes (era el día cuando el precio del oro "de repente" aumentó en 90$), los operadores dejaron de vender oro.

Son los productores en este mercado, y en todos estos años no hubo una sola semana, en que la compra supera a la venta. De hecho, sus ventas negativas trajeron el pánico entre los toros del oro. Había una escasez de metales que subieron los precios.

Aunque los precios no permanecerán en tal Olimpo durante mucho tiempo, los operadores venden algunos de sus metalescon los toros de oro, donde el último responde al pico de precio. Además ha comenzado la caída del precio del Oro hoy, después de lo cual los operadores redujeron sus ventas de oro a un mínimo de cuatro años (su posición neta mayor (ver gráfico)). Más lejos vimos el efecto de la competencia de los vendedores. <la escasez de productos comenzó a hacer subir de precio, y esto podría ser una buena idea para ganar dinero.

Ahora volvamos a la gráfica de la plata:


Figura 2-7. La plata y la posición neta de los operadores. Barras semanales

Y otra vez, aquí vemos el mismo que con el oro. Cuando la posición neta alcanza un máximo relativo, el precio de la plata hace un nuevo salto al sol. Los niveles relativamente bajos fueron indicando la recesión en la tendencia alcista de la plata.

La conclusión es la siguiente. Los mercados de metales preciosos en gran parte están controlados por un pequeño grupo de profesionales. Y cualquier trader que desee estar en comercio rentable de estos mercados debe tomar en cuenta la influencia de estas fuerzas.


2.4 Índice de una posición neta

Pero ¿cómo sabemos cuál es "relativamente" la posición neta del alto, y cual la del bajo? Según lo observado por Larry Williams, el suelo de uno es el techo de otro. Por lo tanto es necesario utilizar el indicador normalizado, que sería claramente permanece sobre las fases de nuestra posición. Este indicador existe, se llama el índice de la cuna (COT Index). El índice es un Stochastics generalmente calculado para los valores de nuestras posiciones.

Permite la recuperación de la fórmula [1]:


El precio actual es comparado con el precio máximo de tres años. El índice puede calcularse para cualquier período de tiempo, no sólo para tres años. Es mejor utilizar un período de no menos de 26 semanas, es decir, índice de medio año. En las operaciones a largo plazo se utiliza un índice de 156-week(3 años). El índice muestra la intensidad actual relativa en porcentajes, en comparación con el período seleccionado.


Aquí está un ejemplo del cálculo del índice para los operadores enumerados a continuación, los dígitos a la derecha indican el número de contratos [1]:


Valor de la semana actual

350

Valor mínimo de 3 años

-150

Diferencia

200

El valor máximo de 3 años

750

El valor mínimo de 3 años

-150

Diferencia

600

Índice = (200/600)x100=0,33x100=33%;

En este caso los operadores son más bajistaS que alcistaS. Si el índice alcanza niveles extremadamente bajos, que es decir, se encuentra en el rango del 20% inferior, el mercado tiende a caer. Si el índice alcanza niveles extremadamente altos, es decir, situados en la gama superior de 80%, el mercado tiende a la reversión hacia arriba.

Para comprobar esto, vamos a ver en la misma gráfica de plata, pero con Ïndice de Operadores de 156 semanas:


Figura 2-8. Plata con Índice de Operadores de 156 semanas, barras semanales

Puede utilizar otros niveles, por ejemplo 75% y 25%. El significado será sin cambios, el indicador mostrará zonas potenciales de condiciones de sobrecompra y sobreventa.

Por extraño que parezca, el período del índice no cambia la dinámica de las posiciones vigiladas. Este es un ejemplo de varios índices con diferentes promedios de períodos de la plata:


Figura 2-9. Gráfica de la plata con diferentes períodos para el índice de los operadores de plata, barras semanales

Aquí hemos utilizado (de arriba a abajo) 156 semanas, 104-semana, 52 semanas y 26 semanas con un promedio de los índices de los operadores. Índice de sólo 26 semanas muestra una amplitud de movimiento más frecuente. Los otros períodos de promediación son casi similares y no cambian la forma del indicador. El promedio de período utilizado depende de las preferencias personales. Por ejemplo se puede utilizar el período promedio de 156 semanas, muestra la dinámica en el cambio de posiciones bastante ampliamente, y al mismo tiempo da un resultado de claro interés para posiciones alcistas.

El índice de cuna se usa para controlar no sólo los operadores alcistas, sino también para traders no comerciales, así como los pequeños especuladores.


2.5 Estructura de Interés Abierto

En la primera parte hemos analizado ejemplos de la influencia del volumen de materias primas en su precio. Para medir el volumen de mercancías en el mercado, el uso del interés abierto (OI) es muy eficaz. La teoría económica predice que el mercado que se caracteriza por niveles relativamente altos de interés abierto es el que más tiende a la baja inversión. La misma regla vale para el mercado con los valores relativamente pequeños del interés abierto. En este caso, el precio más probable que mover hacia arriba.

Ahora es el momento para investigar su estructura. De los informes de los traders tratados sabemos que los principales actores en los mercados de futuros son hedgers (cubridores), también conocidos como operadores y como "traders no-comerciales" - que representan a fondos de materias primas en su mayoría grandes. También hay un tercer grupo de traders de menor importancia, - scalpers, también llamados "muchedumbre". Debido a los volúmenes de negocio pequeños realizados por ellos, no son capaces de influir en los precios de mercado. El volumen de operaciones de esa categoría se calcula indirectamente y representa la diferencia entre el interés abierto y el importe total de posiciones abiertas por operadores y traders no comerciales.

Los valores semanales de interés abierto se presentan en los informes de la CFTC. Dado que la OI es el número acumulado de posiciones abiertas cortas y largas, que siempre lo es, su nivel puede calcularse de dos maneras, contando las posiciones largas totales, o contando las posiciones totales cortas.

Aquí están las fórmulas:

OI = operadores no comerciantes en largo + operadores no comerciales con Spread + Operadores en largo + No reportables en largo;
OI = operadores no comerciantes en corto + operadores no comerciales con Spread + operadores corto + No reportables en corto;

Pasemos ahora al informe de futuros del euro del 04 de agosto de 2009 y calcule el interés abierto para este mercado por medio de estas dos fórmulas:


Grafica 2-10. Informe de futuros del Euro del 04 de agosto de 2009

OI = 61 443 + 946 + 22 984 + 52 864 = 138 237;
OI = 34 337 + 946 + 72 454 + 30 500 = 138 237;

Independientemente del cálculo de la fórmula del interés abierto, el resultado es el mismo. Sin embargo, como se puede ver, las posiciones largas se llevan a cabo en su mayoría por grandes traders no comerciales (61.337 contratos), mientras que los operadores prefieren posiciones cortas (52.864 contratos). El cálculo de la participación de cada uno de estos tres grupos de interés abierto sería una continuación lógica del análisis de la estructura de interés abierto. Por ejemplo, la proporción de las declaraciones de posicines corta a favor del período ascendió a 52,4% de interés abierto (78.454 / 138.237 x 100%). Por ejemplo, la proporción de posiciones cortas del operador para el período actual ha hecho el 52,4% de los intereses abiertos (78.454 / 138.237 x 100%). Su valor se presenta en la sección «Porcentaje de interés abierto para cada categoría de los traders».

Sin embargo es interesante considerar la dinámica de cambio de parte de cada uno de tres grupos de traders. Si recogemos esta información para un periodo largo de tiempo podemos construir la grafica correspondiente. El indicador de «cuna de la Meta: posición % en OI». Calcula estos datos para cada uno de los tres grupos de traders.

La figura 2-14 muestra el gráfico de largo plazo para los futuros del Yen Japonés. Cada vez cuando el porcentaje de posición corta de los operadores ha hecho 70% y mayor interés abierto, el Diez estaba cerca de la reversa hacia abajo. Casi cada vez que la proporción de los operadores con posiciones cortas era inferior al 30% de interés abierto, el mercado estaba cerca de su parte inferior y con frecuencia a partir de entonces comenzó su tendencia alcista a largo plazo en el movimiento. Estos casos están representados por la línea punteada roja. Lo mismo vale para la reversión hacia arriba. Cada vez cuando que el porcentaje de la posición corta era inferior al 30% del interés abierto, el Yen cierraen la reversion descendente. Cada vez que la proporción de posiciones cortas de los operadores sea inferior al 30% del interés abierto, el mercado esta cerca de su parte inferior y con frecuencia después de esto comenzó la tendencia del Toro (alcista) a largo plazo.



Figura 2-11. Compartir las posiciones cortas del operador con interés abierto. Yen Japonés, barras semanales

Larry Williams en su libro "Trade con acciones y Materias Primas con Ejecutivos: secretos del Informe COT (cuna)" [1] propone combinar los valores de interés abierto con la posición neta de los operadores en un indicador. De hecho, si la posición relativa de la red de operadores es bastante baja y al mismo tiempo, tienen una cuota de mercado significativa, se puede suponer que el mercado está cerca de su pico y pronto gire hacia abajo.

Este indicador se calcula mediante la fórmula:

Oscilador Estocástico (Operadores de Red / OI);

En otras palabras, la posición neta de los operadores se divide por el interés abierto, estos datos son recogidos durante un largo período de tiempo, el indicador Stochastics calcula con estos datos. Este indicador se denomina Índice comercial de Williams, o simplemente WILLCO. Larry Williams recomienda usar 26 semanas o un promedio de seis meses, pero se pueden utilizar los otros tipos de promedio, como la anual (52 semanas) o medias (156-semana) de tres años.

Su uso es el mismo que el índice CUT, siempre que su valor supera el 80% - esperar las vueltas del mercado, siempre que su valor es inferior al 20% - esperan la reversión del mercado para arriba. En la figura 2-15 se presenta el indicador WILLCO para el Yen Japonés. Las líneas punteadas rojas muestran los mismos niveles que eran esquemas por Larry Williams en esa misma gráfica [1]:


Figure 2-12. El promedio WILLCO (26 semanas) y el Yen Japonés, barras semanales

Como vemos, las nuevas recomendaciones de este indicador no fueron tan precisas. Sin embargo, si el periodo de tiempo aumenta elimina este problema. Echa un vistazo a la gráfica de los Estados Unidos Bonos del tesoro y el mismo indicador, pero con un período promedio de 156 semanas:


Figura 2-13. Promedio WILLCO (semana 156) y Estados Unidos. Bonos del tesoro, barras semanales

Ahora hemos marcado niveles bajos extremos como niveles extremos altos. La precisión del indicador es increíble, por el hecho de que sus datos no se basan en los datos del precio! Sin duda, los Estados Unidos. Las Notas del tesoro son muy sensibles a las acciones de los operadores.


2.6 Indicador Momentum (de impulso)

Este indicador fue propuesto por Stefan Brice, en su libro «Los compromisos de la Biblia de los traders». Su idea es simple, representa la diferencia entre el índice CUT actual y el mismo índice 6 períodos atrás, por lo que su fórmula es:

COT-Index (p) – COT-Index(p-n);

Donde p es el valor actual del índice, n es un período igual a 6.

El delta de índice puede ser cualquiera y no sólo 6 periodos. Además, el índice puede calcularse para todos los participantes en el mercado de futuros e incluso para el interés abierto en sí mismo. Este indicador se denomina Índice de movimiento. Se utiliza principalmente para confirmar la finalización de la corrección a las tendencias a largo plazo. Su interpretación es sencilla. Si el índice de movimiento se eleva por encima del 40% - el movimiento hacia abajo va hasta el final. Se espera que la subida de precios. Si el índice cae por debajo del 40% - el movimiento hacia arriba viene hasta el final. Se espera la disminución de precios.

Vamos a intentar aplicar este indicador para los futuros de euro:


Figura 2-14. Índice de movimiento para el futuro de EURO

En los últimos años el Euro tiene una constante tendencia al alza. Las flechas azules muestran los tiempos, donde ha cruzado la barrera del 40%. Mira la increíble precisión del indicador, cada vez ha cruzado el nivel de 40%, ha finalizado la corrección de los precios, y el euro ha continuado su ascenso. Las señales de venta del indicador no eran tan precisas. Sin embargo, a menudo la corrección ha comenzado después de que el índice de movimiento cruzó el límite inferior de -40%. Tal reacción del indicador debe tenerse en cuenta. Es una especie de barómetro de impulso CUT. Muestra claramente las turbulencias de los mercados. Su uso es particularmente útil para las agresivas y trades menos largoplacistas.

El siguiente indicador es experimental y no se ha descrito antes en cualquier lugar. En el noveno capítulo de su libro Larry Williams explora los cambios de interés abierto vía la acción de los operadores. No está claro exactamente cómo utilizar esta relación. Para algunos ejemplos, Larry Williams muestra la divergencia/convergencia. Para los otros ejemplos y concluye que el incremento de las ventas o de operador de compra también aumenta el nivel de interés abierto. La investigación del índice de movimiento ha llevado a la idea de que es posible monitorizar los cambios en las posiciones de los operadores a través de los cambios del nivel del interés abierto.

Los modelos de interacción más interesantes son los siguientes:

1. Nivel de interés abierto está cayendo - crece el nivel de la posición neta de los operadores.

2. Nivel de interés abierto crece - el nivel de operadores de red está cayendo.

En otras palabras, hay una cierta discrepancia entre las acciones de todos los participantes del mercado (interés abierto) y las acciones de los operadores. Tales cambios sería mejores observar basado en el índice de movimiento calculado en cuanto a interés abierto en cuanto al índice de los operadores. Comparando su diferencia, podemos determinar la divergencia de las acciones de hedgers y las acciones de los participantes del mercado del resto.

Este indicador fue denominado Índice de movimiento del spread, es su fórmula:

Índice de movimiento (operadores) – índice de movimiento (interés abierto);

En general se ve como simple índice de movimiento, así como WILLCO parece como índice CUT. Los valores aproximados de nivel crítico son 60% y el -60% respectivamente. Su análisis se lleva a cabo por las mismas reglas en cuanto al índice de movimiento normal.

Vamos a considerar el comportamiento del índice en el ejemplo del futuro de euro:


Figura 2-15. Índice de Movimiento de Spread del EURO

Uno puede ver que sus valores también indican los puntos de inflexión significativos y momentos de corrección completa. Sin embargo, este indicador debe utilizarse con precaución - no ha demostrado su eficacia .


2.7. Observando posiciones largas de cobertura de fondos

El principal objetivo de los fondos de materias primas en lasgo es el beneficio especulativo en los mercados de materias primas. Los métodos de trading se basan en la continuación de la tendencia general. Una vez que el precio supera un cierto alto n-semana, en algunos de los fondos se abre posición largas. Da un movimiento adicional de precios hacia arriba. Tal vez una de las razones principales de las tendencias del mercado en el medio plazo son las acciones de fondos de grandes materias primas.

Por algunas estimaciones los de fondos elegidos son frecuentementelos los altos/bajos de 26 semanas [1]. Los fondos están en el mercado poco a poco, mediante la técnica de los productos de contrucción, además de que muchos de los fondos usan más la estrategia a largo plazo para entrar. Los fondos entran en el mercado poco a poco, usando la técnica de adición para esas posiciones, además de que muchos fondos usan mas la estrategia de largo plazo para ntrar. Por ejemplo, si el precio alcanza su alto de 26 semanas, algunos de los fondos son para abrir posiciones largas. Entonces el precio se mueve más hacia arriba y llega a su alto de 52 semanas. Fondos más prudentes se unen al juego y abren posición largas, junto a ellos los fondos que ya han entrado en largo están añadiendose a su posición. Por último, el precio alcanza su alto de 156 semanas. En este punto, lo que quería comprar ya se ha comprado. Eso es todo. Ahora hay no hay compradores.

Las estrategias de la tendencia de todos los fondos están implicados al máximo. El mercado se convirtió en extremadamente tenso. Debido al hecho de que no hay más compradores, lo sabemos por los informes de los traders, el precio pronto debe bajar... y pronto lo hace. El precio comienza su movimiento hacia abajo. En este punto el mercado tiene un gran número de participantes (lo sabemos desde el nivel de interés abierto), en empieza a asustarse.

Primero, los compradores que han entrado al mercado más tarde que otros comienzan a cerrar sus posiciones largas. Ellos todavía no han logrado conseguir el nivel suficiente de beneficios necesario para la retención de la posición a largo plazo. Da una aceleración del precio adicional y empieza a caer más rápido. Pronto el pánico aumenta y cada vez son más los participantes que tratan de cerrar sus posiciones largas. Todo el mundo está tratando de meterse en una entrada. El pánico está creciendo tanto que el precio cae, durante un período de tiempo muy corto.

Después de que la multitud ha salido al mercado y el precio era en la parte inferior, justo después de que los operadores inician su juego y vienen al mercado otra vez, añadiendo sus posiciones largas. Su idea es simple: los operadores que utilizan las materias primas para la producción de sus bienes están interesados en comprar mercancías a precios baratos. Los operadores, por el contrario, reducen sus ventas a un mínimo, esto no es rentable para vender productos a precios bajos. Como resultado, la posición neta de los operadores será extremadamente alta. Por consiguiente los indicadores mostrarán este hecho. Se iniciará la competencia de la demanda y el precio se levantará otra vez. El círculo se cierra y la historia se repita otra vez.

Vamos a examinar las acciones de los grandes traders no comerciales sobre la base de los conceptos anteriores utilizando el índice de tres años aplicado a posiciones netas de un trader no comercial:


Figura 2-16. Precio de futuros de ganado y la posición neta total de los operadores no comerciales

Como vemos en el ejemplo de futuros de ganado, las acciones de los operadores no comerciales miran la actual tendencia de precios. Si el precio sube, los fondos se están comprando, si se cae, se venden, es simple. Notemos que cada vez que los fondos aumentan sus posiciones hasta valores máximos, el precio del ganado comienza su movimiento descendiente. Cuando la posición de fondos estaba cerca de sus valores mínimos, el precio ha comenzado a subir.

Creo que el éxito financiero de los inversionistas, que han decidido invertir su dinero a estos fondos están bajo la pregunta. Las acciones similares de los traders no comerciales son las mismas en otros mercados:


Figura 2-17. Grafica de algodón y promedio de posición neta de 156 semanas de los operadores no comerciales

Mientras que la parte superior del índice muestra claramente la reversión que viene del mercado, sus valores bajos, como regla general, son prematuros. En cualquier caso, este gráfico muestra que es mejor ir en corto cuando están comprando los "chicos grandes".


2.8 Observando las posiciones del pequeño especulador

Según la especificación de la CFTC, los pequeños especuladores - tienen posiciones demasiado pequeñas como para llegar a cualquiera de los dos grupos. Sus valores exactos se desconocen, aunque se puede suponer un número total bastante impresionante. Por ejemplo, puede aplicar a un breve informe CFTC del trigo en la Bolsa Mercantil de Chicago:


Tabla 2-18. La participación de los pequeños especuladores en el breve informe sobre el trigo

Como vemos en el informe el número total de participantes en los principales mercados es pequeño. En el lado corto - 286, en el largo - 304. 286 de los participantes del mercado tiene 91,8% de todas posiciones largas y 304 traders tienen 88.5% de todas las posiciones cortas. ¿Podemos calificar a estos participantes del mercado como multitud? Creo que no podemos. Pero muchos traders que no han sido contados en el informe de la Comisión son muy pequeños especuladores, creando una multitud de mercado.

En este caso, la multitud controla sólo 8.2% de posiciones largas y 11,5% de posiciones cortas. Sería bastante notable para observar la historia de las compras y las ventas de esta categoría de traders. Pasemos a la gráfica GBP durante un largo periodo, pero esta vez tenemos en cuenta el total de posiciones netas de los pequeños especuladores:


Figura 2-19. Posición neta total de pequeños especuladores en futuros GBP

Tenga en cuenta que cada vez cuando las posiciones netas totales de la multitud alcanzan sus valores relativamente altos, el precio de mercado apenas comienza su movimiento hacia abajo. Por el contrario, cuando la multitud quedó decepcionada en GBP y comienza a venderlo, el precio GBP comienza un rally. Especialmente notables fueron los dos puntos finales marcados por líneas rojas. Después de la gran caída de la libra, los pequeños especuladores han decidido que ha llegado a la parte inferior y la subida es inevitable. Dentro de una semana, pasaremos de vendedores netos a compradores netos. Sin embargo, el fondo todavía no ha llegado. La Libra continuó cayendo unos dos meses. Durante este tiempo ha cambiado el estado de ánimo de la multitud, y otra vez fue principalmente de la venta. Y la multitud estaba equivocada otra vez. Libra mostró una concentración decente.

La regla general para el análisis de las actividades comerciales de este grupo es simple. Intentar actuar contrariamente a la multitud. Si los operadores irresponsables aumentaron agudamente sus ventas - intentar comprar si son contrarios a comenzar a comprar - prueba ir en corto.


3. Solución técnica

3.1 El objetivo y la estructura del proyecto de MetaCOT

Así, hemos considerado todos los indicadores del proyecto, es el momento de examinar su estructura. Una comprensión clara de sus principios de trabajo le ayudará a evitar muchos problemas con la actualización de datos y su configuración.

El primero de todos permite considerar los principios del software, aquí están:

1. Transparencia. Todo el código fuente del proyecto está abierto y disponible a todo el mundo. Cualquiera puede descargar y compilar estas herramientas. Por otra parte, su principio de trabajo se describe en este artículo, por lo que será transparente y comprensible para cualquier persona.

2. Universalidad. El software incluye todas las herramientas de análisis de datos CFTC que se describe en el libro de Larry Williams, incluyendo su indicador WILLCO, que está ausente en otros proyectos. Además, el software incluye scripts especiales, que agrupan la información de una manera especial. ¡Como resultado, automáticamente pueden unirse las diferentes herramientas e incluso crear un nuevas! Además, la arquitectura del proyecto está diseñada para una fácil creación de los nuevos indicadores basados en el proyecto COT. Pueden obtenerse los datos básicos cot (para la fecha deseada) con una sola función. Y estos datos se pueden utilizar fácilmente para calcularlo en otro indicador.

3. Automatización. Los datos CFTC son extremadamente grandes. Contienen una información de cientos de mercados y la información de cada mercado se dispersa a través de los diferentes archivos y años. Usando los scripts COT del Meta ya no será un problema. Todo lo que necesitas hacer ahora es descargar (una vez por semana) el archivo actualizado de CFTC y ejecutAR el script. Todos los datos serán automáticamente extraídoS, agrupados y listos para su uso.

4. Simplicidad. Todos los indicadores y scripts fueron creados usando el lenguaje deprogramación MQL, sin ningún dll de terceros. Hemos utilizado los algoritmos más simples para la organización de los datos y sus cálculos. Hemos utilizado la separación de los problemas. Así se desarrollaron los programas basados en secuencias de comandos para el programa de grupo, para unir, para la salida y para la creación de nuevos datos. Y estos datos fueron utilizados para la construcción de indicadores.

5. Independencia. Uno de los factores más importantes en la obtención de información es el número de los "nodos" que transmite. Si la información se transmite directamente desde origen a destino, la posibilidad de su distorsión es mucho menos que si hay algunos mediadores adicionales entre el origen y destino. El proyecto se implementa de forma que la información necesaria se toma directamente de la fuente, sin terceros.

El proyecto incluye un conjunto de varios archivos de programa que no se compilan. Debe tener colocado y compilado un archivo de cada en un directorio específico. La tabla siguiente incluye una lista de archivos, breve descripción y la ubicación de instalación:

Nombre de archivo

Tipo

Destination

Descripción

Meta COT Script Build.mq4

Script

..\Meta Trader\experts\scripts\

Escritura principal independiente para la preparación de datos. Crea un conjunto de archivos de archivos CSV estándar disponibles en el servidor CFTC.gov. Cada nuevo archivo incluye una información sobre el instrumento. El nombre fo del archivo creado corresponde al nombre del instrumento.

Meta COT Script Concatenate.mq4

Script

..\Meta Trader\experts\scripts\

Script independiente. Une varios archivos en un archivo basado en el historico. Por ejemplo, el archivo "COT – AZÚCAR NO. 11 - JUNTA DE COMERCIO DE NUEVA YORK. CSV"(con datos para el período 2005.01.04-2007.08.28) y el archivo"COT – AZÚCAR NO. 11 - ICE FUTURES U.S. . CSV"(con datos para el período 2007.09.04-2009.09.01) se convertirá en un archivo"Azúcar concatenada", que incluye datos de 2005.01.04 a 2009.09.01.

Meta COT Script Agregation.mq4

Script

..\Meta Trader\experts\scripts\

Un script independiente . Une varios archivos en uno, basado en la suma de sus valores. Por ejemplo del archivo "COT - trigo - CHICAGO BOARD OF TRADE. CSV","COT - TRIGO - TABLERO DE TRADE DE KANSAS CITY. CSV","BOLSA DE GRANO CUT - TRIGO - MINNEAPOLIS. Se convertirá en un archivo "Agregación de trigo" que contiene la suma de los valores de los tres archivos CSV".

Meta COT Script Report.mq4

Script

..\Meta Trader\experts\scripts\

El script necesita la librería "cotlib.mq4". Crea un archivo CSV, incluyendo cálculos para todos los indicadores del informe. El promedio de períodos y nombre del instrumento se definen en la configuración de secuencia de comandos. Puede ser útil para el análisis de datos en otros programas.

Meta COT Absolute Position.mq4

Indicador

..\Meta Trader\experts\indicators\

El script necesita la librería "cotlib.mq4". Muestra posiciones de absolutas de los operadores en todas las categorías, incluyendo un interés abierto.

Meta COT Net Position.mq4

Indicador

..\Meta Trader\experts\indicators\

El script necesita la librería "cotlib.mq4". Muestra posiciones netas de los traders en todas las categorías, incluyendo un interés abierto.

Meta COT Index.mq4

Indicador

..\Meta Trader\experts\indicators\

El script necesita la librería "cotlib.mq4". Muestra índice CUT de todas las categorías de operadores, incluyendo el índice de interés abierto. El período para el cálculo se define en la configuración del script.

Meta Posicion porcentual del COT en OI.mq4

Indicador

... \Meta Traders\Expertos\Indicadores\

The script needs a library "cotlib.mq4". It shows result of division of net position by Open Interest for each category of traders.

Meta COT WILLCO.mq4

Indicador

..\Meta Trader\experts\indicators\

El script necesita la libreria "cotlib.mq4". Muestra el indice WILLCOpara todas las categorías de traders. El período para el cálculo se define en la configuración del script.

Meta Movimiento COT Index.mq4

Indicador

..\Meta Trader\experts\indicators\

El script necesita la librería "cotlib.mq4". It show the Movement Index and Open Interest for each traders category. Los períodos de promedio y el impulso se definen en la configuración del script.

Meta Spread Movement COT Index.mq4

Indicador

..\Meta Trader\experts\indicators\

El indicador necesita la libreria "cotlib.mq4" Muestra una división del índice de movimiento por interés abierto para cada categoría de traders.

Meta COT Experto .mq4

Asesor experto

..\Meta Trader\experts\

Un asesor experto necesita una Librería "cotlib.mq4". Está probando indicadores COT en los datos históricos.

cotlib.mq4

Librería

..\Meta Trader\experts\libraries\

Es el núcleo del sistema. Incluye datos del CUT y métodos para su procesamiento. Tiene un gran conjunto de matrices, definiciones y funciones para el cálculo de todos los indicadores utilizados.

ONCATENATE.ini

Archivo con la lista

..\Meta Trader\experts\files\

Es una lista de archivos, listas para combinar por tiempo.

COT - * CONCATENATE.ini

Listas de archivos

..\Meta Trader\experts\files\

Es un archivos con un archivo de listas para combinar por tiempo.

AGREGATION.ini

Archivo con la lista

..\Meta Trader\experts\files\

Es una lista de archivos, listas para combinar por suma.

COT - * AGREGATION.ini

Listas de archivos

..\Meta Trader\experts\files\

Es un archivo con ficheros de listas para combinar por suma.

Grafico 3-1. Archivos de proyecto meta COT con rutas de instalación

Necesita instalar estos archivos en los directorios adecuados, y luego compilar. Después de estos pasos, el terminal debe recibir el apropiado indicador personalizado MetaTrader, scripts y asesor.


3.2 Carga de datos y creación de informes

Como ustedes saben, todos los datos de los indicadores son proporcionados por una organización no comercial CFTC. Estos datos son publicados semanalmente en la web oficial del CTFC. Hay varios tipos de informes. El primer tipo se llama «informes de futuros solamente», incluye sólo datos de posiciones de futuros. El segundo tipo de informe se llama «informes combinados de Opciones y futuros», incluye los datos sobre futuros y opciones.

Proporciona información mucho más completa sobre el mercado. Es preferible utilizarlo. También es un tipo especial de informe, llamado «materias suplemento de índice de trader». Su principal diferencia es que está preparado para la gama limitada de los mercados agrícolas, y, lo más importante, incluye la cuarta categoría de traders, el llamado Commodity Index Traders (CIT).

Estos traders ocupan una posición intermedia. De un lado sus posiciones pertenecen a los hedgers, están incluidos en «informes de solo Futuros» y «opciones y futuros combinados», desde el otro lado - su comportamiento es similar al comportamiento de los grandes fondos de cobertura. Generalmente, son compradores netos, en contraste con clásicos hedgers, que son vendedores netos. Hay una opinión que esta categoría de traders está haciendo un pánico en el mercado. El sostenido cae y se levanta - son sobre todo sus acciones. Tienen una potencia suficiente para mover el mercado en cualquier dirección, al mismo tiempo, su principal objetivo - para obtener una ganancia especulativa. Los datos para esta categoría de comerciantes están disponibles desde 2007 en formato Exel y CSV. Debido al pequeño historial de sus acciones, el estudio de su comportamiento en una tarea para el futuro. En la actualidad este tipo de informe no es compatible con el proyecto.

Los informes se publican en varios formatos. En primer lugar, es en sí mismo el gráfico de trades. En este formato, no hay ningún informe «Commodity Index Trader Supplement», que está disponible sólo en archivos de Excel y CSV.

La forma de estas graficas es familiar a usted:

Figura 3-1. La parte del informe de CUT en formato Exсel

También, hay tablas de Excel comunes. Contienen los mismos datos que el Informe convencional, con la única diferencia que los datos recogidos durante un largo período de tiempo. Un fragmento de esta grafica se muestra en la figura 3-2:


Figura 3-2. Una parte del informe CUT en formato Exсel

La Comisión publica, sus informes en formato CSV. Este formato representa un archivo de texto con la extensión «txt», los datos están separados por comas. Este es el único formato, que utiliza Meta CUT, por lo que este formato se debe describir con más detalle. At figure 3.4 there is a part from this file:


Figura 3-4. Ejemplo de informe CUT en formato CSV

Su estructura puede parecer caótica, pero no lo es. El archivo consta de filas y columnas. El número de columnas es de 128, el número de filas depende del número de instrumentos y el período de informe. Típicamente, el archivo de un informe contiene datos para un año. Por ejemplo, el informe descargado en este formato en septiembre de 2009, contendrá los datos de enero de 2009 a septiembre de 2009 (la fecha de esta escritura). La primera línea consiste en 128 columnas, es un nombre de columna. Los archivos CSV son base para la construcción de los datos de proyecto.

Ahora vamos a crear un gráficos. Es conveniente considerar los datos CUT para un período de tiempo largo. Vamos a preparar los datos desde el año 2000 hasta la actualidad. Por lo tanto, vamos a ir a la dirección http://cftc.gov/marketreports/commitmentsoftraders/CFTC009781.html o a las secciones Inicio &amp;gt; informes de mercado &amp;gt; compromisos de los traders, en http://cftc.gov.

Vamos a ver la imagen de la siguiente manera:

Figura 3-5. Archivo de datos

Hay dos tipos de informes: informes sólo de futuros e informes que combinan opciones y futuros. Queremos utilizar los datos de 2000, es razonable utilizar un segundo tipo de informe sobre futuros y opciones (por cierto, los datos antes de 1995 sólo están disponibles para informes futuros). However, they have the same report formats, and you can use either of these two report types. Descargar todos los nueve archivos de texto de 2009 y terminando con el año 2000. Más tarde, también se puede descargar un solo archivo que incluye todos los datos de 1995 a 2008 y un archivo en el 2009, pero en tal caso, habrá un gran número de instrumentos. En la figura 3.5 una de las referencias esta en círculo por círculo rojo Los archivos descargados deben ser desempaquetados en el directorio... \ Meta Trader folder \ experts \ files \.

Todos los ficheros en los archivos tienen el mismo nombre annualof.txt, por lo que debe cambiar el nombre. El nombre del archivo no puede hacer nada, pero estos nombres de archivo deben figurar en names.ini, es un archivo de configuración especial del proyecto. Es muy simple y representa un simple listado de los archivos para ser procesados.

Por ejemplo, si tenemos el archivo llamado "2009_Futures y Options.txt" para 2009, «2008_Futures-y-Options.txt"para el año 2008 y así sucesivamente, la lista de ficheros procesados será como sigue:


Figura 3-6. Un ejemplo de lista de archivos procesados para proyecto CUT

Si cambia el nombre de los archivos descargados DE igual maneraque el ejemplo, entonces no tienes que editar el archivo names.ini , por defecto que el script funcionará con este conjunto de archivos. Si, por cualquier razón, usted necesita utilizar otros nombres, entonces especificar los nuevos nombres de archivo en names.ini, en lugar de los que se especifican de forma predeterminada.

Así, en el directorio \files debe tener 10 archivos, como se muestra en la figura 3-6:


Figura 3-7. El contenido de la carpeta MetaTrader\experts\files

El contenido de names.ini debe ser como en la figura 3-6. Tenga en cuenta que el orden de nombres de archivo en el archivo names.ini es importante. Los nombres de archivo deben aparecer en orden descendente. Por ejemplo, el primero debería ser un archivo de 2009 y el último para el año 2000.

Ahora, cuando los datos están preparados, es el momento de ejecutar el script Script Meta CUT construcción . Funciona en modo automático, y tiene una única opción - el nombre de la lista de archivos. En este caso, el nombre del archivo es "names.ini" pero puede ser cambiado. Es necesario para soluciones flexibles a algunos problemas.

Supongamos, por ejemplo, que para algunos de los instrumentos que desea analizar los datos futuros, sin datos de opciones. Al mismo tiempo para otros instrumentos va a utilizar un informe más completo sobre futuros y opciones. Puede descargar dos tipos de informes a tu ordenador y crear dos listas de archivos, por ejemplo names_option.ini y names_futures.ini.

En primer lugar, puede obtener datos sobre futuros mediante la ejecución de un script con parámetros "names_list" igual a "names_futures.ini". Después, estos datos deben guardarse en otra carpeta. Después, on los datos necesarios se han obtenido mediante la ejecución del script, pero esta vez con el parámetro "names_list" igual a "names_option.ini". Se generarán datos de futuros y opciones.

Poco después de ejecutar el script se generaran muchos archivos con informes en formato CSV en la carpeta "\files". Cada fichero tendrá una forma como "COT - nombre del mercado - nombre del intercambio. CSV".

Muchos de los archivos estarán incompletos. Los informes CUT sobre algunos mercados tienen una característica que aparece brevemente, entonces desaparecen para siempre. Sin embargo, existe un número suficiente de instrumentos, que tienen informes regulares. Más adelante consideraremos, los instrumentos del informe incluidos en más detalle, pero ahora prestemos nuestra atención en los archivos generados. Considerar uno de los formatos utilizandos: "COT - dólar de Nueva Zelanda - CHICAGO MERCANTILE EXCHANGE. CSV". Es fácil adivinar que contiene una información que necesitamos para el futuro del dólar de Nueva Zelanda.

Vamos a abrir en Bloc de notas y ver lo que hay dentro:


Figura 3-8. Dólar de Nueva Zelanda

Se puede ver, este archivo contiene las estadísticas para un período de tiempo en un instrumento, en este caso del dólar de Nueva Zelanda. La columna con nombres no esta, este archivo se utiliza para indicadores que no necesitan los nombres de columna. Sin embargo, para entender lo que significan estos números, permite buscar en cada columna:

I - nombre del instrumento;
II - fecha del informe;
III - interés de apertura;
IV - posiciones largas de los operadores no comerciales;
V - posiciones cortas de los operadores no comerciales;
VI - Spread (cobertura) de los operadores no comerciales;
VII - posición larga de los operadores;
VIII - posiciones cortas de los operadores;
IX - el número de posiciones largas de los informes de los traders;
X - la cantidad acumulada de posiciones cortas de los informes de los traders;
XI - posiciones largas de los comerciantes que no rinden;

XII - posiciones cortas de los comerciantes que no rinden.

Eso es todo lo que se necesita para construir los indicadores CUT.

En esta etapa la misma información de los mercados están en archivos diferentes. Esto es debido a que en primer lugar, los nombres de las bolsas de valores son cambiantes en el tiempo, y en segundo lugar, el nombre en sí mismo, la Comisión puede cambiar el nombre del instrumento en sí mismo, o incluso más posible solo un error en el título. El cambio de nombre del instrumento, incluso un personaje conduce a una diferencia significativa para el programa que extrae los datos.

Por ejemplo, los instrumentos "COT – AZUCAR NO. 11 - COMERCIO DE CAFÉ, AZUCAR Y COCOA "y" CUT – AZUCAR NO. 11 - COMERCIO DE COFFEESUGAR y COCOA "son completamente diferente al programa, y creará dos títulos diferentes para el archivo de los instrumentos. Echemos un vistazo en el ejemplo del azúcar. Después de ejecutar el script Contrucción del Script Meta COT tendrá EL directorio \files entre muchos archivos:

COT - AZÚCAR NO. 11 - COFFEE SUGAR AND COCOA EXCHANGE .csv
COT - AZÚCAR NO. 11 - COFFEESUGAR AND COCOA EXCHANGE .csv
COT - AZÚCAR NO. 11 - ICE FUTURES U.S. .csv
COT - AZÚCAR NO. 11 - NEW YORK BOARD OF TRADE .csv
COT - AZÚCAR NO. 14 - COFFEE SUGAR AND COCOA EXCHANGE .csv

El último archivo pertenece a otra clase de azúcar y contiene muy pocos datos, para que puedan ser usados, por lo que este archivo puede ser retirado. Como se puede ver en el nombre, son los archivos primeros y segundo - correspondeN al mismo instrumento, la Comisión creó en algún momento un informes en este instrumento con errores gramaticales, que influyeron en la segunda creación de archivo. Las posiciones tercera y cuarta contienen los archivos del mismo azúcar, pero en otros intercambios: "Futuros de hielo" y "NEW YORK BOARD OF TRADE".

Si abre estos archivos es posible identificar la cronología de las operaciones del azúcar:

Nombre de archivo de azúcar

Fecha del comienzo del Trade

Fecha de finalización del trade

COT - AZÚCAR NO. 11 - ICE FUTURES U.S. .csv

2007.09.04

2009.09.01

COT - AZÚCAR NO. 11 - NEW YORK BOARD OF TRADE .csv

2005.01.04

2007.08.28

COT - AZÚCAR NO. 11 - COFFEE SUGAR AND COCOA EXCHANGE .csv

2003.02.25

2004.12.28

COT - AZÚCAR NO. 11 - COFFEESUGAR y el intercambio de cacao .csv

2003.01.07

2003.02.14

Grafica 3-9. Archivos con informes sobre el azúcar

Visto desde la cronología de los trades, todos los archivos de datos describen el mismo producto, por lo tanto es lógico combinar todos estos archivos en un archivo de informe continuo. Para ello hay un script Meta cuna Script concatenado. El script necesita un archivo especial con las enumeraciones, por ejemplo azúcar CONCATENATE.ini. Todos los archivos de azúcar que hay que unir en una cronología única, deben ser en la lista. Por su trabajo con los archivos de azúcar para crear un archivo especial de las transferencias, como CONCATENATE.ini de azúcar. Deben listar todos los archivos del azúcar para combinar en una sola secuencia cronológica.

El nombre del archivo con la lista de archivos debe incluirse en la lista del archivo central CONCATENATE.ini. Este archivo contiene los nombres de todos los archivos, que con cronología es necesario combinar. El proyecto de MetaCOT tiene los archivos correspondientes, tienen el siguiente formato: COT - herramienta de nombre CONCATENATE.ini. Estos nombres aparecen en la lista de archivos CONCATENATE.ini.

Después de que se preparen todas las listas de archivos, se puede ejecutar el script Meta CUT Script concatenaDO. Después de su corto plazo crearánarchivos combinados con el mismo nombre que los archivos, pero con el formato SCV.

Para entender mejor la lógica de proceso, echar un vistazo a la Figura 3-10. La jerarquía de los archivos es CONCATENATE.ini, CONCATENATE.ini de azúcar y algunos otros se ve como:


Figura 3-10. Relación de los listados de archivos concatenate.ini.


3.3 Informes combinados como una nueva herramienta de análisis

Hay muchos artículos relacionados, que tiene informes de la CFTC. Por ejemplo, el precio de mercado del ganado de bobino de engorde y ganado vivo están fuertemente correlacionados. El trigo se cotiza en tres estados en Estados Unidos tres Los bolsas y sus precios están muy cerca uno del otro.

Es natural suponer que las acciones de todos los participantes en estos mercados también será aproximadamente el mismo. Así que ¿por qué no combinar los informes sobre estos mercados en el un informe combinado? Por ejemplo, si los operadores tienen 20.100 contratos en el mercado del ganado vivo y 15.200 contratos en el mercado de ganado de engorde, entonces la posición del mercado combinado del ganado se sitúa en los 35.300 contratos. Dicha adición puede hacerse para todos los participantes del mercado, tanto para cortas como para posiciones largas.

Podemos ir más lejos y combinan las acciones de todas las partes en los mercados con una variedad común. ¿Cómo va a combinar sus informes para todos los futuros de divisas en un informen y así obtener nuestra propia versión del índice del dólar? O podemos combinar los informes de todos los índices bursátiles del S&P 500 y Dow Jones 30. El instrumento resultante contendrá un volumen mucho mayor e incluirá las opiniones de los participantes en un mercado en particular, la industria en su conjunto!


Esta idea era increiblemente hermosa como para permanecer latente. Imaginad que, el proyecto de MetaCOT tiene una herramienta de este tipo. Se llama una Agragación del Scripts Meta CUT. Funciona como una Script Concatenado de Meta CUT, con la diferencia de algrorithm para los informes combinandos. Hay una lista especifica de instrumento para combinar, los nombres de estos instrumentos deben figurar en un solo archivo, debe añadirse el nombre del archivo en la lista de archivos con lista de todos los archivos similares.

Vamos a intentar crear un Indice Dólar. Lo primero que tenemos que crear es el archivo "Agregation.ini del índice del dólar" y llenar con los nombres de los informes sobre todo de los futuros de divisas:

COT - EURO FX CONCATENATE.csv
COT - BRITISH POUND STERLING CONCATENATE.csv
COT - JAPANESE YEN CONCATENETE.csv
COT - AUSTRALIAN DOLLAR CONCATENATE.csv
COT - CANADIAN DOLLAR CONCATENATE.csv
COT - SWISS FRANC CONCATENATE.csv

Tenga en cuenta que estos archivos se combinaron usando el script Script Concatenado de Meta CUTr. Una vez aparecen los nombres, puede guardar un archivo llamado "COT - DOLLAR INDEX AGREGATION.ini" en el directorio de archivos de expertos de MetaTrader. El nombre puede ser cualquier cosa, pero lo utilizaremos. Se debe crear un archivo AGREGATION.ini. Especifica el nombre de nuestra asociación: COT - DOLLAR INDEX AGREGATION.ini..

Ahora puede guardar el archivo y ejecutar el script Meta COT Script Agregatorr. El Script tiene un solo parámetro - es en realidad el nombre de la lista de archivos que necesita para continuar. Porque en nuestro caso los nombres de la lista de archivos como "AGREGATION.ini", su parámetro debe establecerse como el mismo nombre de archivo. El Script del resumen de valores de todos los instrumentos incluidos en la lista de archivos "COT - DOLLAR INDEX AGREGATION.ini", en nuestro caso, se utilizarán seis archivos con informes sobre todas las monedas y se creará un nuevo archivo con nombre "COT - DOLLAR INDEX AGREGATION.csv". Este archivo contendrá los valores resumidos de los informes de todos los futuros de divisas.

La lista de informes de archivos que pueden ser resumidas sólo está limitada por su imaginación. Usando esta poderosa herramienta, puede crear nuevos informes, una nueva clase de información! Lo útil es que todas las acciones se realizan automáticamente y no tienes que resumir los valores manualmente.

Sin embargo, algunos informes pueden contener datos durante un período determinado, en comparación con los otros informes pertenecientes a la lista de proceso general. En este caso el programa a identificar de tal espacio de tiempo, que le informará a usted con el mensaje como el siguiente: «--> tiempo ha encontrado: 21.04.2004.». No hay nada de malo, de hecho es típico y ocurre regularmente. En este escenario, el programa resume los datos de todos los demás instrumentos y crea un informe incluyendo la fecha 21.04.2004. Además de los datos para la fecha solicitada contendrá los datos para el período anterior más cercano. Se trata de la primera fecha para proceder. Por ejemplo, el informe combinado de 21/04/2004 contendrá unas datos para 14/04/2004 en el caso de la ausencia de datos para el 21 de abril.

Tenga cuidado al combinar informes. Un grupo de instrumentos puede tener los mismos precios del contrato, los otros grupos pueden ser diferentes. Ejemplo simple: el índice S&P500 y dos los contratos en él: E-mini S&P500 y el S&P500 completo. Un contrato futuro electrónico es igual al valor del valor del índice * 5$, el tamaño es igual al valor de índice * 25$. A pesar de que el gran mercado-twin concede al pequeño gemelo electrónico con respecto a la cantidad de contratos, su capitalización puede ser igual e incluso el mismo tamaño S&P500 puede ser capitalizado más. Se abre la pregunta sobre el competente además de los valores de los diferentes restos de los mercados, sin embargo ya hoy es la herramienta de adición de base y puede ser aplicada con precaución.


3.4 Indicadores

Todos los indicadores están dispuestos desde el principio y contienen el mismo núcleo. El núcleo del indicador carga todos los datos y calcula los valores de todos los indicadores de proyecto MetaCOT. Cada indicador muestra sólo los valores definidos por su tarea, pero realmente, dentro de su código contienen los valores de todos los posibles indicadores. Este enfoque ha demostrado ser muy exitoso, especialmente al diseñar el robot de trade. Debido a la librería cotlib.mq4 que calcula todos los posibles valores de los indicadores, que pueden ser especificados como parámetros para optimizar!

Esto significa que después de cada ejecución de un nuevo robot usará un nuevo indicador y su periodo de cálculo. Así de esta manera se determina el indicador mejor y la mejor periodo. Puede ser útil encontrar el indicador más adecuado y el grupo de traders.

Ahora, cuando todos los archivos necesarios del informe se han preparado, es necesario cargar los indicadores. Todos los indicadores son similares y tienen una estructura similar de sus parámetros.

Como ejemplo, consideremos el indicador de red Meta COT:

Tipo de variable

Nombre de la variable

Valor por defecto

Descripción

intperíodo de

156

Período para el cálculo del indicador. Se utiliza para los indicadores que necesita un período para el cálculo (índice COT, WILLCO etc.). Generalmente se utiliza un promedio de 156 semanas.

oolShowNoncomm

false

Si es "true", el indicador mostrará la posición neta total de los operadores no comerciales.

boolShowOperators

true

Si es true, el indicador mostrará la posición neta total de los operadores.

boolShowNonrep

false

Si es true, el indicador mostrará la posición neta total de los comerciantes no reportables.

boolShowOI

true

Si es true, el indicador mostrará el índice de interés abierto

boolload_cot_file

false

S es true, el indicador cargará el archivo de informe preparado con el nombre, que especifica cot_file variable.

stringcot_file

cot-sample.txt

La variable contiene el nombre de archivo de informe que es necesario cargar si la variable load_cot_file es true.

stringConfiguración

settings.txt

Un archivo de configuración para la correspondencia entre el indicador y el informe. El programa encuentra el actual nombre de grafica en el archivo y utiliza el informe con el mismo nombre.

Figura 3-11. Variables del indicador de Posición Neta Meta COT

Lo primero, todos los indicadores que utilizan un promedio, tienen una variable externa llamada período. De forma predeterminada, se encuentra a 156 (3 años promedio).

En segundo lugar, todos los indicadores tiene variables Booleanas, que permiten personalizar el sorteo del indicador (por ejemplo, se pueden definir grupos de los participantes del mercado).

En tercer lugar, los indicadores cuentan con tres variables: load_cot_file, cot_file, ajustes. Permite examinar en detalles. Para todos los indicadores hay el llamado "archivo de correspondencia", por defecto se llama "settings.ini". Es extremadamente incómodo seleccionar manualmente cada vez el nombre del informe, que debe ser descargado para el análisis de la grafica seleccionada. Así que cada instrumento tiene su propio informe. El archivo settings.ini determina qué tipo de informe desea descargar del gráfico actual. Por ejemplo, si la variable load_cot_file es falsa, y empieza el indicador de Posición Neta Meta COT en el gráfico GBPUSD, el indicador automáticamente selecciona el informe llamado "BRITISH POUND STERLING CONCATENATE.csv" y lo sube a la gráfica. Todo es posible gracias al archivo simple que coincide con el nombre del instrumento, con el nombre del informe.

Por defecto, Meta COT ya cuenta con tal archivo. Se trata de un típico archivo CSV como el siguiente:

El nombre de archivo del informe; nombre del indicador; los primeros caracteres importantes para 1 instrumento; los primeros caracteres importantes para n instrumentos

Por ejemplo, si desea descargar automáticamente los informes COT - SWISS FRANC CONCATENATE.csv, cada vez despues que el indicador lo adjunte a las gráficas 6S y USDCHF, necesita agregar la línea siguiente al archivo
COT - SWISS FRANC CONCATENATE.csv;SWISS FRANC;6S;USDCHF

En este caso, el símbolo «6S» es el nombre colectivo para varios futuros del franco suizo con fechas de ejecución diferentes. Por ejemplo, el franco suizo negociado en contratos 6S_CONT; 6SU9; 6SU9 #I; 6SZ9; 6SZ9#I; El primero de ellos - futuro continuo para el backtesting de estrategias. Para el sistema, es suficiente especificar sólo los primeros caracteres significativos del instrumento (en este caso, 6S), para utilizar el mismo informe para todos los identificadores del futuro del franco suizo. La última línea es una especie de "tapa". Si se ha explorado todo el contenido de los archivos y los informes necesarios no han sido encontrado, el indicador muestra el nombre del último informe. En este caso, en lugar del nombre del informe utilizado allí habrá un mensaje de ADVERTENCIA: "¡El informe para el instrumento no fue encontrado!". En este caso, se subirá un informe que determinará el nombre de una variable cot_file, independientemente de la variable load_cot_file.

Tenga en cuenta que el punto y coma al final de la línea está ausente. En este caso, el indicador descarga el informe COT - franco suizo CONCATENATE.csv, y el nombre del indicador cambiará a: Indice Meta COT (156): Franco suizo. El nombre "Franco suizo" se toma de la segunda línea de la columna, el período promedio es definido por la variable del periodo, especificado entre corchetes. Todo el contenido del archivo setting.ini, configurado para trabajar con un agente específico puede verse en la figura 3-8. Tenga en cuenta que los instrumentos de su agente pueden diferir de estos nombres. Deberás encontrar los nombres correspondientes en los instrumentos de su corredor y añadirlos a un archivo settings.ini, según las normas descritas anteriormente.

Hay algunos casos que el análisis del instrumento necesita descargar un archivo con el nombre del informe que no corresponde a valores por defecto. En este caso, se debe establecer a true la variable load_cot_file y especifique el nombre del mismo archivo en una variable cot_file. El indicador de carga del archivo requiere un informe sin importar el nombre de esta herramienta.


Figura 3-8. An example of the settings.ini file

Para una amplia gama de tareas, puede utilizar un programa de terceros como Microsoft Excel para el análisis de datos. En estos casos es conveniente usar los valores calculados por Meta COT para el instrumento especificado y luego descargar los valores del indicador en un programa de terceros. Para estos casos, se ha creado un script especial Script de Informe del Meta COT . Necesita la libreria cotlib.mq4 para que trabaje. Tiene los mismos parámetros que los indicadores: periodo de cálculo (periodo) y el índice de movimiento (movement_index). Después de su funcionamiento para el instrumento actual, creará un archivo Meta COT Informe TITLE.csv en el directorio \files. Este archivo contendrá los valores de todos los indicadores, con los valores básicos para el instrumento actual.

Ahora, cuando todos los indicadores están configurados y funcionando, es hora de eliminar todos los informes. Meta COT no actualiza los datos, y cada vez crea un conjunto de ellos desde cero o la adición a la existente. Esto significa que antes de ejecutar scripts, deben eliminarse los datos anteriores. Lamentablemente MetaTrader no ha incorporado la función de borrar los archivos y lo tenemos que hacer manualmente. The most convenient way to do this - to create a batch file commands or bat-file.

Este archivo ya existe y se llama erase_cot.bat. Contiene una sola línea:

erase COT*.csv

Después ejecutarse se eliminarán todos los archivos cuyos nombres comiencen en COT con la extensión CSV.

Después de borrarlos, el procedimiento de creación de archivos puede repetirse otra vez.


3.5 Código fuente

Hemos desarrollado un proyecto de fácil administración, modificado, que fácilmente puede adaptarse a cualquier sistema de trading mecánico.

El mecanismo de dat de obtención de informes de la Comisión de SCV se implementa en un programa independiente Construccion del Script Meta COT. El algoritmo es UN sencillo programa que garantiza un alto grado de manejabilidad y mayor modificación. Inicialmente, el programa abre una lista de nombres de archivos que necesita para ser procesada. Nombres de los archivos contenidos en un archivo especificado en su parámetro (valor por defecto names.ini). Cuando ha leído el nombre del primer archivo, el script intenta abrir el archivo del mismo nombre en el directorio. Si el archivo existe, el script empieza a leer el archivo SCV, columna a columna, el final de la línea restablece el contador de columnas. Cuando el contador de columna SE refiere a columna necesitada (se comprueba por la función especial), su valor se registra inmediatamente en el archivo de destino, y después escribe un punto y coma.

Es necesario describir el procedimiento de la creación del archivo final en detalle. Si el contador de columnas especifica que en la actualidad el programa proceda de la primera columna (nombre del instrumento), se lee este nombre y se intenta abrir el archivo con el mismo nombre. Si todavía no existe el archivo, el programa lo crea, overwise agrega los datos al final del archivo. Por lo tanto es necesario eliminar los archivos existentes antes de la actualización de datos. Los valores de columnas posteriores serán cargados y agregados a este archivo. Después de que el contador de columnas se anula, el programa cierra el fichero de salida actual. Después de procesar el archivo de informe de la Comisión, el programa intenta abrir el siguiente archivo especificado en una lista de archivos.

Resulta que el programa no sabe nada sobre el nombre de los futuros o el orden de su agrupación. En principio, los nombres de todos los instrumentos podrían estrar colocados en orden aleatorio y pueden ser en distintos archivos. El resultado final siempre será el mismo: un instrumento - archivo de un informe.

El código fuente de Construcción de Script Meta COT es el siguiente:

#property copyright "Copyright © 2009, C-4, All Rights Reserved."
#property link      "vs-box@mail.ru"
#propiedades del show_inputs
//  Definiciones
#define Market_and_Exchange_Names 1
#define As_of_Date_in_Form_YYMMDD 2
#define As_of_Date_in_Form_YYYY_MM_DD 3
#define CFTC_Contract_Market_Code 4
#define CFTC_Market_Code_in_Initials 5
#define CFTC_Region_Code 6
#define CFTC_Commodity_Code 7
#define Open_Interest_All 8
#define Nonc_Positions_Long_All 9
#define Nonc_Positions_Short_All 10
#define Nonc_Positions_Spreading_All 11
#define Commercial_Positions_Long_All 12
#define Commercial_Positions_Short_All 13
#define Total_Reportable_Pos_Long 14
#define Total_Reportable_Pos_Short 15
#define Nonrep_Positions_Long_All 16
#define Nonrep_Positions_Short_All 17

extern string name_list="names.ini";
//string normalize_name;
int a;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int CFileNames,
   cot_file,
   tools_data;

   int column,
   column_now,
   column_string;
   int cot;
   bool IsOldInfo=true;
   string name_cotfile;
   string data,data2,
   normalize_name,
   string_cot;

   CFileNames=FileOpen(name_list,FILE_READ|FILE_CSV);
   if(TrueFileName(CFileNames,name_list)==false)return(1);
   Print("The file list: ",CFileNames);
// AbrE una lista de archivos con informes
   while(FileIsEnding(CFileNames)==false)
     {
      cot++;
      name_cotfile=FileReadString(CFileNames);
      cot_file=FileOpen(name_cotfile,FILE_READ|FILE_CSV,",");
      if(TrueFileName(cot_file,name_cotfile)==false)return(1);
      else Print("File not found");

      // altar la primera cadena string
      while(FileIsLineEnding(cot_file)==false)
        {
         column++;
         FileReadString(cot_file);
        }

      while(FileIsEnding(cot_file)==false)
        {
         data=FileReadString(cot_file);
         column_string++;
         if(FileIsLineEnding(cot_file)==true || FileIsEnding(cot_file)==true)
           {
            column_string=0;
            FileWrite(tools_data,string_cot);
            FileClose(tools_data);
            string_cot="";
           }
         else
           {
            if(TrueDataNew(column_string)==true)
              {// check for the comma in the instrument name
               data=NormalizeData(data);
               if(column_string==Market_and_Exchange_Names)
                 {

                  data2=FileReadString(cot_file);        // see comment1!
                  if(CheckValidColumn(data2)==true)      //
                     data=data+NormalizeColumn(data2);   //
                  else column_string++;
                  //data=NormalizeNames(data);
                  tools_data=FileOpen("COT - "+data+".csv",FILE_READ|FILE_WRITE|FILE_CSV);
                  TrueFileName(tools_data,data);
                  FileSeek(tools_data,0,SEEK_END);
                  string_cot=string_cot+data;
                 }
               else
                 {
                  if(column_string==As_of_Date_in_Form_YYYY_MM_DD)data=ConvertData(data);
                  string_cot=string_cot+";"+data;
                 }
              }
           }
        }
      Print("Lineas Totales: ",column);
     }
   Print(a);
   return(0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string ConvertData(string data)
  {
   string c_data="";
   int strlen=StringLen(data);
   int char;
   for(int i=0;i<strlen;i++)
     {
      char=StringGetChar(data,i);
      if(char=='-')c_data=c_data+".";
      else c_data=StringConcatenate(c_data,CharToStr(char));
     }
   return(c_data);
  }
// Si la celda actual es necesaria para le informe combinado COT, devuelve true,
// De otra manera devuelve false. La lista de las celdas utilizadas se establecen como se define
bool TrueDataNew(int column_string)
  {
   switch(column_string)
     {
      case Market_and_Exchange_Names:
      case As_of_Date_in_Form_YYYY_MM_DD:
      case Open_Interest_All:
      case Nonc_Positions_Long_All:
      case Nonc_Positions_Short_All:
      case Nonc_Positions_Spreading_All:
      case Commercial_Positions_Long_All:
      case Commercial_Positions_Short_All:
      case Total_Reportable_Pos_Long:
      case Total_Reportable_Pos_Short:
      case Nonrep_Positions_Long_All:
      case Nonrep_Positions_Short_All:
         return(true);
      default:
         return(false);
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string NormalizeData(string file_name)
  {

   int char;
   int strlen;
   string normalize_name="";
   string normalize_name_p="";
   strlen=StringLen(file_name);
   for(int i=0;i<strlen;i++)
     {
      char=StringGetChar(file_name,i);
      switch(char)
        {
         case '/':
         case '\\':
         case ':':
         case '*':
         case '\"':
         case '<':
         case '>':
         case '|':
         case ';':
            break;
         default:
            // If the last symbol of the string is space, delete it.
            //if(char==" "&&i==strlen-1)break;
            normalize_name=StringConcatenate(normalize_name,CharToStr(char));
        }
     }
   return(normalize_name);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string NormalizeNames(string data)
  {
   int strlen=StringLen(data);
   string n_data;
   data=StringTrimRight(data);
   if(CharToStr(StringGetChar(data,strlen-1))==".")StringSetChar(data,strlen-1,"");
   return(data);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool TrueFileName(int handle,string filename)
  {
   if(handle==-1)
     {
      Print("Can't open the file: ",filename," Last Error: ",GetLastError());
      return(false);
     }
   else return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CheckValidColumn(string column_name)
  {
   int strlen=StringLen(column_name);
   if(StringFind(column_name,"\"")!=-1){a++;return(true);}
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string NormalizeColumn(string column)
  {
   string n_column;
   int char;
   int strlen=StringLen(column);
   for(int i=0;i<strlen;i++)
     {
      char=StringGetChar(column,i);
      if(char=='\"')continue;
      else n_column=StringConcatenate(n_column,CharToStr(char));
     }
   return(n_column);
  }
//+------------------------------------------------------------------+
El trabajo del indicador es más difícil. Todos los indicadores principalmente constan del mismo código - la librería cotlib.mq4. Su estructura se puede dividir en varias partes:


1. Definición - Descripción de las constantes del preproceso, graficas de datos (conjunto de matrices);

2. Inicialización - calcular el tamaño de los datos transferidos y la redistribución del tamaño de las matrices (función init_data ());

3. Carga de datos del archivo del informe (función load_data ());

4. Cálculo de los valores del indicador con los datos del informe (función count_data ());

Para acceder a los valores del indicador se utiliza la función get_data ((int tipo, int bar)) . Tiene dos parámetros: el número de valores del indicador que debe ser devuelto y la barra de índice que desea obtener el valor del indicador. Por ejemplo, si desea obtener los valores de indicador del indicador WILLCO de los operadores para la barra actual (barra = 0), entonces la llamada a la función debe ser: get_data (WILLCO_OPERATORS, 0); "WILLCO_OPERATORS" aquí se define la constante entera nombrada, especificado en el preproceso.

El periodo promedio para todos los indicadores calculados son los mismos y debe ser elegido antes de la inicialización del indicador (después de que los parámetros de entrada cambien, se produce la inicialización del indicador automáticamente). La función void settings_load (void)determina automáticamente el archivo que hay que leer. Abre el archivo de configuración (settings.ini por defecto) y trata de encontrar el instrumento actual (símbolo ()) en la lista de instrumentos de los informes requeridos. Si un informe coincide con el nombre de este instrumento, la función lo descargar, si no hay ningún informe para el instrumento actual - carga el instrumento por defecto (nombre del parámetro).

#property copyright "Copyright © 2009, C-4, All Rights Reserved."
#property link      "vs-box@mail.ru"
// Posible "type" de valor de los parámetros para la funcion get_data()
#define OI                    0
#define NONCOMM_LONG          1
#define NONCOMM_SHORT         2
#define OPERATORS_LONG        3
#define OPERATORS_SHORT       4
#define NONREP_LONG           5
#define NONREP_SHORT          6
#define NET_NONCOMM           7
#define NET_OPERATORS         8
#define NET_NONREP            9
#define OI_NONCOMM_LONG       10
#define OI_NONCOMM_SHORT      11
#define OI_OPERATORS_LONG     12
#define OI_OPERATORS_SHORT    13
#define OI_NONREP_LONG        14
#define OI_NONREP_SHORT       15
#define WILLCO_NONCOMM        16
#define WILLCO_OPERATORS      17
#define WILLCO_NONREP         18
#define INDEX_OI              19
#define INDEX_NONCOMM         20
#define INDEX_OPERATORS       21
#define INDEX_NONREP          22
#define MOVEMENT_NONCOMM      23
#define MOVEMENT_OPERATORS    24
#define MOVEMENT_NONREP       25
#define MOVEMENT_OI           26
#define OI_NET_NONCOMM        27
#define OI_NET_OPERATORS      28
#define OI_NET_NONREP         29


extern bool   load_cot_file=false;
extern string cot_file="COT - U.S. DOLLAR CONCATENATE.csv";
extern string settings="settings.ini";
string name;
bool error=false;
int column;
bool DrawData=true;
bool LoadData=true;


//**********************************************************************************************************
//                           GRAFICO DE DATOS DEL COT
int n_str;                    // número de  strings

                              // Matriz con las fechas
datetime realize_data[];
// Matrices con posiciones absolutas
double open_interest[];       // Valor de interés abierto
double noncomm_long[];        // Posiciones largas de los operadores no comercialess
double noncomm_short[];       // Posiciones cortas de operadores no commercialess
double noncomm_spread[];      // Spread de los operadores no comerciales
double operators_long[];      // Posiciones largas de los operadores
double operators_short[];     // Posiciones cortas de los operadores
double nonrep_long[];         // Posiciones largas no declaradas de los operadores (crowd)
double nonrep_short[];        // Posiciones cortasno declardas de los operadores (crowd)

                              // La matriz que contiene el resultado de la division de las posiciones largas absolutas 
// by short position para cada uno de los de la categoría de traders

double oi_noncomm_long[];     // Interes de apertura / posiciones largas de operadores no commerciales
double oi_noncomm_short[];    // Interes de apertura / Posiciones cortas de operadores no comerciales
double oi_operators_long[];   // Interes de apertura / Posiciones Largas de traders no comerciales  (operatores)
double oi_operators_short[];  // Open Interest / Posiciones Cortasde traders no comerciales (operadores)
double oi_nonrep_long[];      // Open Interest / Posiciones Largas de operadores no reportables (muchedumbre)
double oi_nonrep_short[];     // Open Interest / Short pPosiciones Cortas de operadores no reportables (muchedumbre)

                              // Una matriz contiene el resultado de la división de la posición neta total por el interés de apertura
// para cada una de las categorías de los traders, usados para cálculo del WILLCO
double oi_net_noncomm[];
double oi_net_operators[];
double oi_net_nonrep[];

// Matrices con posiciones netas de varios grupos de traders
double net_noncomm[];         //Posiciones netas de operadores no comerciales
double net_operators[];       // Posiciones netas de operadores comerciales
double net_nonrep[];          // Posiciones netas de operadores no reportables

double index_oi[];            // Indice de Interes de Apertura
double index_ncomm[];         // Índice de traders no comerciales
double index_operators[];     // Indice de traders commerciales (operadores)
double index_nonrep[];        // Índice de traders no reportables (muchedumbre)

                              // Matrices con estocástico, calculado sobre la división de
// Interés de apertura por la posición neta Total para cada categoría de traders
// Stohastic(OI/NET_POSITION)
double willco_ncomm[];        // 
double willco_operators[];    //
double willco_nonrep[];       //

                              //ÍNDICE DE MOVIMIENTO
double movement_oi[];
double movement_ncomm[];
double movement_operators[];
double movement_nonrep[];
//**********************************************************************************************************
//
bool init_data()
  {
   string data;
   int handle_cotfile;
   int str;
   settings_load();
   handle_cotfile=FileOpen(cot_file,FILE_READ|FILE_CSV);
//handle_cotfile=FileOpen("COT - U.S. DOLLAR CONCATENATE.csv",FILE_READ|FILE_CSV);
   if(handle_cotfile==-1)
     {
      Print("No se puede cargar el archivo. El trabajo posterior no es posible ",cot_file);
      Print(GetLastError());
      return(false);
     }
   while(FileIsEnding(handle_cotfile)==false)
     {
      data=FileReadString(handle_cotfile);
      if(FileIsLineEnding(handle_cotfile) && data!="")str++;
     }
   ArrayResize(realize_data,str);

   ArrayResize(open_interest,str);
   ArrayResize(noncomm_long,str);
   ArrayResize(noncomm_short,str);
   ArrayResize(noncomm_spread,str);
   ArrayResize(operators_long,str);
   ArrayResize(operators_short,str);
   ArrayResize(nonrep_long,str);
   ArrayResize(nonrep_short,str);

   ArrayResize(oi_noncomm_long,str);
   ArrayResize(oi_noncomm_short,str);
   ArrayResize(oi_operators_long,str);
   ArrayResize(oi_operators_short,str);
   ArrayResize(oi_nonrep_long,str);
   ArrayResize(oi_nonrep_short,str);

   ArrayResize(oi_net_noncomm,str);
   ArrayResize(oi_net_operators,str);
   ArrayResize(oi_net_nonrep,str);

   ArrayResize(net_noncomm,str);
   ArrayResize(net_operators,str);
   ArrayResize(net_nonrep,str);

   ArrayResize(index_oi,str);
   ArrayResize(index_ncomm,str);
   ArrayResize(index_operators,str);
   ArrayResize(index_nonrep,str);

   ArrayResize(willco_ncomm,str);
   ArrayResize(willco_operators,str);
   ArrayResize(willco_nonrep,str);

   ArrayResize(movement_oi,str);
   ArrayResize(movement_ncomm,str);
   ArrayResize(movement_operators,str);
   ArrayResize(movement_nonrep,str);

   FileClose(handle_cotfile);
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void settings_load()
  {
   int h_set,_column;
   string set,sname;
   if(load_cot_file==true)return;
   h_set=FileOpen(settings,FILE_READ|FILE_CSV,";");
//FileOpen("\Temp\Cot_file.txt",FILE_WRITE,FILE_CSV);
   if(h_set==-1)return;
   while(FileIsEnding(h_set)==false)
     {
      set=FileReadString(h_set);
      _column++;
      if(set==Symbol() && _column!=1){cot_file=sname;return;}
      if(_column==2 && set!="")name=set;    // La segunda columna es el nombre de indicador que usted desee
      if(FileIsLineEnding(h_set)==true)_column=0;
      if(_column==1)sname=set;

     }
   FileClose(h_set);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void load_data()
  {
   datetime data_realize;
   int handle_cotfile;
   string data;
   handle_cotfile=FileOpen(cot_file,FILE_READ|FILE_CSV,";");
   Print("Файл найден");
   while(FileIsEnding(handle_cotfile)==false)
     {
      data=FileReadString(handle_cotfile);
      column++;
      if(FileIsLineEnding(handle_cotfile)==true || FileIsEnding(handle_cotfile)==true)
        {//column=12 - special case
         if(column==12)
            nonrep_short[n_str]=StrToDouble(data);
         column=0;
         if(data!="")n_str++;
        }
      else
        {
         switch(column)
           {
            case 2:
               realize_data[n_str]=StrToTime(data);
               break;
            case 3:
               open_interest[n_str]=StrToDouble(data);
               //Print(open_interest[n_str]);
               break;
            case 4:
               noncomm_long[n_str]=StrToDouble(data);
               break;
            case 5:
               noncomm_short[n_str]=StrToDouble(data);
               break;
            case 6:
               noncomm_spread[n_str]=StrToDouble(data);
               break;
            case 7:
               operators_long[n_str]=StrToDouble(data);
               break;
            case 8:
               operators_short[n_str]=StrToDouble(data);
               break;
            case 11:
               nonrep_long[n_str]=StrToDouble(data);
               break;
           }
        }
     }
   FileClose(handle_cotfile);
   Print("Fil loaded");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void count_data()
  {
   int    max,
   min;
   double delta;

   for(int i=0;i<n_str;i++)
     {
      index_oi[i]=EMPTY_VALUE;
      index_ncomm[i]=EMPTY_VALUE;
      index_operators[i]=EMPTY_VALUE;
      index_nonrep[i]=EMPTY_VALUE;
      willco_ncomm[i]=EMPTY_VALUE;
      willco_operators[i]=EMPTY_VALUE;
      willco_nonrep[i]=EMPTY_VALUE;
      movement_ncomm[i]=EMPTY_VALUE;
      movement_operators[i]=EMPTY_VALUE;
      movement_nonrep[i]=EMPTY_VALUE;
     }
   for(i=0;i<n_str;i++)
     {
      if(open_interest[i]==0)
        {
         oi_noncomm_long[i]=0;
         oi_noncomm_short[i]=0;
         oi_operators_long[i]=0;
         oi_operators_short[i]=0;
         oi_nonrep_long[i]=0;
         oi_nonrep_short[i]=0;
        }
      else
        {
         oi_noncomm_long[i]=noncomm_long[i]/open_interest[i];
         oi_noncomm_short[i]=noncomm_short[i]/open_interest[i];
         oi_operators_long[i]=operators_long[i]/open_interest[i];
         oi_operators_short[i]=operators_short[i]/open_interest[i];
         oi_nonrep_long[i]=nonrep_long[i]/open_interest[i];
         oi_nonrep_short[i]=nonrep_short[i]/open_interest[i];
        }

      net_noncomm[i]=noncomm_long[i]-noncomm_short[i];
      net_operators[i]=operators_long[i]-operators_short[i];
      net_nonrep[i]=nonrep_long[i]-nonrep_short[i];

      if(open_interest[i]==0)
        {
         oi_net_noncomm[i]=0;
         oi_net_operators[i]=0;
         oi_net_nonrep[i]=0;
        }
      else
        {
         oi_net_noncomm[i]=net_noncomm[i]/open_interest[i];
         oi_net_operators[i]=net_operators[i]/open_interest[i];
         oi_net_nonrep[i]=net_nonrep[i]/open_interest[i];
        }
     }

   for(i=0;i<n_str-period;i++)
     {

      max=ArrayMaximum(open_interest,period,i);
      min=ArrayMinimum(open_interest,period,i);
      delta=open_interest[max]-open_interest[min];
      if(delta==0)delta=1;
      index_oi[i]=(open_interest[i]-open_interest[min])/delta*100;

      max=ArrayMaximum(net_noncomm,period,i);
      min=ArrayMinimum(net_noncomm,period,i);
      delta=net_noncomm[max]-net_noncomm[min];
      if(delta==0)delta=1;
      index_ncomm[i]=(net_noncomm[i]-net_noncomm[min])/delta*100;

      max=ArrayMaximum(net_operators,period,i);
      min=ArrayMinimum(net_operators,period,i);
      delta=net_operators[max]-net_operators[min];
      if(delta==0)delta=1;
      index_operators[i]=(net_operators[i]-net_operators[min])/delta*100;

      max=ArrayMaximum(net_nonrep,period,i);
      min=ArrayMinimum(net_nonrep,period,i);
      delta=net_nonrep[max]-net_nonrep[min];
      if(delta==0)delta=1;
      index_nonrep[i]=(net_nonrep[i]-net_nonrep[min])/delta*100;

      max=ArrayMaximum(oi_net_noncomm,period,i);
      min=ArrayMinimum(oi_net_noncomm,period,i);
      delta=oi_net_noncomm[max]-oi_net_noncomm[min];
      if(delta==0)delta=1;
      willco_ncomm[i]=(oi_net_noncomm[i]-oi_net_noncomm[min])/delta*100;

      max=ArrayMaximum(oi_net_operators,period,i);
      min=ArrayMinimum(oi_net_operators,period,i);
      delta=oi_net_operators[max]-oi_net_operators[min];
      if(delta==0)delta=1;
      willco_operators[i]=(oi_net_operators[i]-oi_net_operators[min])/delta*100;

      max=ArrayMaximum(oi_net_nonrep,period,i);
      min=ArrayMinimum(oi_net_nonrep,period,i);
      delta=oi_net_nonrep[max]-oi_net_nonrep[min];
      if(delta==0)delta=1;
      willco_nonrep[i]=(oi_net_nonrep[i]-oi_net_nonrep[min])/delta*100;
     }
   for(i=0;i<n_str-period-movement_index;i++)
     {
      movement_oi[i]=index_oi[i]-index_oi[i-movement_index];
      movement_ncomm[i]=index_ncomm[i]-index_ncomm[i-movement_index];
      movement_operators[i]=index_operators[i]-index_operators[i-movement_index];
      movement_nonrep[i]=index_nonrep[i]-index_nonrep[i-movement_index];
     }
  }
// Devuelve uno de los valores de la grafica de COT
//  definido por la variable "tYPE" y la barra definida por "bar"
double get_data(int type,int bar)
  {
   double data;
   int i_data=get_cot(bar);
   if(i_data==EMPTY_VALUE)return(EMPTY_VALUE);
   switch(type)
     {
      case OI:
         return(open_interest[i_data]);
      case NONCOMM_LONG:
         return(noncomm_long[i_data]+noncomm_spread[i_data]);
         //return(noncomm_long[i_data]);
      case NONCOMM_SHORT:
         return(noncomm_short[i_data]+noncomm_spread[i_data]);
         //return(noncomm_short[i_data]);
      case OPERATORS_LONG:
         return(operators_long[i_data]);
      case OPERATORS_SHORT:
         return(operators_short[i_data]);
      case NONREP_LONG:
         return(nonrep_long[i_data]);
      case NONREP_SHORT:
         return(nonrep_short[i_data]);
      case NET_NONCOMM:
         return(net_noncomm[i_data]);
      case NET_OPERATORS:
         return(net_operators[i_data]);
      case NET_NONREP:
         return(net_nonrep[i_data]);
      case INDEX_OI:
         return(index_oi[i_data]);
      case INDEX_NONCOMM:
         return(index_ncomm[i_data]);
      case INDEX_OPERATORS:
         return(index_operators[i_data]);
      case INDEX_NONREP:
         return(index_nonrep[i_data]);
      case OI_NONCOMM_LONG:
         return(oi_noncomm_long[i_data]);
      case OI_NONCOMM_SHORT:
         return(oi_noncomm_short[i_data]);
      case OI_OPERATORS_LONG:
         return(oi_operators_long[i_data]);
      case OI_OPERATORS_SHORT:
         return(oi_operators_short[i_data]);
      case OI_NONREP_LONG:
         return(oi_nonrep_long[i_data]);
      case OI_NONREP_SHORT:
         return(oi_nonrep_short[i_data]);
      case WILLCO_NONCOMM:
         return(willco_ncomm[i_data]);
      case WILLCO_OPERATORS:
         return(willco_operators[i_data]);
      case WILLCO_NONREP:
         return(willco_nonrep[i_data]);
      case OI_NET_NONCOMM:
         return(oi_net_nonrep[i_data]);
      case OI_NET_OPERATORS:
         return(oi_net_operators[i_data]);
      case OI_NET_NONREP:
         return(oi_net_nonrep[i_data]);
      case MOVEMENT_NONCOMM:
         return(movement_ncomm[i_data]);
      case MOVEMENT_OPERATORS:
         return(movement_operators[i_data]);
      case MOVEMENT_NONREP:
         return(movement_nonrep[i_data]);
      case MOVEMENT_OI:
         return(movement_oi[i_data]);
     }
   return(EMPTY_VALUE);
  }
// Returns the cell number in array
// It returns an EMPTY_VALUE, if bar hasn't been found
int get_cot(int i)
  {
   datetime tbar=iTime(Symbol(),0,i);
   for(int k=0;k<n_str;k++)
      if(realize_data[k]<tbar)return(k);
   return(EMPTY_VALUE);
  }
// Barra de retornos con los últimos datos existentes de COT
int get_lastdata()
  {
   return(iBarShift(Symbol(),0,realize_data[n_str-1],false));
  }
// Devuelve una cadena sin extensión y los 6 primeros símbolos
// (antes era "COT - FileName.csv", se convierte en "FileName")
string str_trim(string fname)
  {
   int strlen=StringLen(fname)-1;
   int char;
   string str;
   for(int i=strlen;i>0;i--)
     {
      char=StringGetChar(fname,i);
      if(char=='.')
        {
         for(int b=6;b<i;b++) // change to b=0, if it is not necessary 
            // para eliminar el primer de los 6 símbolos
            str=str+CharToStr(StringGetChar(fname,b));
         return(str);
        }
     }
   return(fname);
  }
//+------------------------------------------------------------------+

El código de los indicadores ellos mismos son triviales y se diferencian sólo por el número de búferes inicializados y el primer parámetro de la función get_data (). Todos los valores son calculados por adelantado, en la fase de inicialización, por lo que no utilizan la función IndicatorCounted (). Al principio, durante la inicialización, se llaman las funciones básicas de la librería cotlib.mq4, configura unas graficas y luego empieza la función start (). Funciona a la vez que la función una vez build_data (), que muestra los datos en la ventana de indicador para el período de tiempo de los datos del informe.

Como ejemplo, aquí está el código fuente del indicador WILLCO:

#property copyright "Copyright © 2009, C-4, All Rights Reserved."
#property link      "vs-box@mail.ru"

#property indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Green
#property  indicator_color2  Red
#property  indicator_color3  Blue

extern int  period=52;
int movement_index=6;
extern bool Show_iNoncomm=false;
extern bool Show_iOperators=true;
extern bool Show_iNonrep=false;

double i_willco_noncomm[];
double i_willco_operators[];
double i_willco_nonrep[];

#include <cotlib.mq4>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   if(init_data()==false)error=true;
   if(error==false)load_data();
   if(error==false)count_data();
//if(error==false)count_index(period);
   SetParam();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if(error==true)Print("Can't load data. The further work is impossible");
   if(DrawData==true)build_data();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SetParam()
  {
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   IndicatorDigits(2);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexEmptyValue(2,EMPTY_VALUE);
   SetLevelValue(0,0.0);
   SetLevelValue(1,20.0);
   SetLevelValue(2,80.0);
   SetLevelValue(3,100.0);
   if(load_cot_file==true)IndicatorShortName(StringConcatenate("Meta COT WILLCO (",period,"): ",str_trim(cot_file)));
   else IndicatorShortName(StringConcatenate("Meta COT WILLCO (",period,"): ",name));
   if(Show_iNoncomm==true)
     {
      SetIndexBuffer(0,i_willco_noncomm);
      SetIndexLabel(0,"WILLCO: Noncommercial Traders");
     }
   if(Show_iOperators==true)
     {
      SetIndexBuffer(1,i_willco_operators);
      SetIndexLabel(1,"WILLCO: Operators Traders");
     }
   if(Show_iNonrep==true)
     {
      SetIndexBuffer(2,i_willco_nonrep);
      SetIndexLabel(2,"WILLCO: Nonrep Traders");
     }
  }

void build_data()
  {
   int end_data=get_lastdata();
   for(int i=0;i<end_data;i++)
     {
      if(Show_iNoncomm)
        {
         i_willco_noncomm[i]=get_data(WILLCO_NONCOMM,i);
         if(Show_iOperators)i_willco_operators[i]=get_data(WILLCO_OPERATORS,i);
         if(Show_iNonrep)i_willco_nonrep[i]=get_data(WILLCO_NONREP,i);
        }
      DrawData=false;
     }
//+------------------------------------------------------------------+

La parte más difícil del programa era crear un script para sumar los datos en un informe. Hay muchos problemas algorítmicos que se ha resuelto. El programa fue escrito en el viejo estilo C. Consiste en una sola unidad sin llamadas de función. Este planteamiento puede parecer ineficaz o incluso incorrecto, pero en este caso era la mejor solución para resolver el problema inmediatamente sin dividirlo en las diferentes "subtareas".

Al principio, el programa abre la lista de archivos, Lee los nombres de archivo para combinar y los abre uno por uno. Cada archivo tiene una lista de informes que deben combinarse. El programa abre estos informes a la vez, Lee los valores de ellos y los procesa línea por línea (en el formato SCV la línea es una columna). Luego añade estos valores juntos, sin tener las fechas idénticas (los valores de la segunda columna). La suma de los valores se registran en el archivo final, que tiene el mismo nombre que el archivo para combinar, pero con extensión CSV.

#property copyright "Copyright © 2009, C-4, All Rights Reserved."
#property link      "vs-box@mail.ru"

#define EQU_NO           0
#define EQU_YES          1

#define DATA            1
#define OI              2
#define NONCOMM_LONG    3
#define NONCOMM_SHORT   4
#define SPREADING       5
#define OPERATORS_LONG  6
#define OPERATORS_SHORT 7
#define ALL_LONG        8
#define ALL_SHORT       9
#define NONREP_LONG     10
#define NONREP_SHORT    11

extern string s_list="AGREGATION.ini";
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int h_list;                    // Archivo descriptor de la lista
                                       // (contiene una lista de archivos)
                                       // String s_list;                    Nombre del archivo

   int h_enumeration;             // Descriptor del fichero de enumeración
   cadena de s_enumeration;             // Nombre del archivo de enumeraton

   int h_rezult;                  // Descripción del archivo de salida
   cadena de s_rezult;                  // Nombre del archivo de salida

   int h_temp;                    //Descriptor temporal  (uno para todos)
                                       //  utilizado para el conteo de archivo
   string s_temp;                    // String temporal (uno para todos), 
                                       // utilizado para el conteo de archivo

   int h_file[];                  // Matriz de descriptores de los archivos de salida
   cadena s_file[];                  //Matriz con los nombres de los archivos de salida

   datetime data[],data_all;
   int      oi[],oi_all,
   noncomm_long[],noncomm_long_all,
   noncomm_short[],noncomm_short_all,
   spreading[],spreading_all,
   operators_long[],operators_long_all,
   operators_short[],operators_short_all,
   all_long[],all_long_all,
   all_short[],all_short_all,
   nonrep_long[],nonrep_long_all,
   nonrep_short[],nonrep_short_all;

   int str;                       // Cuenta los archivos con los resultados
   n int ;                         // El índice actual de los archivos con los resultados
   int columna;                    // Número de columna
   int frnz_str[];                //Descriptores congelados
   cuenta doble ;                     // Cuenta la cuenta del string para el archivo de resultados
   cadena tmp;                       // String para el archivo de resultados

   h_list=FileOpen(s_list,FILE_READ|FILE_CSV);                    // Abra la lista de archivos
   if(h_list==-1){Print("File list not found");return(0);}
   while(FileIsEnding(h_list)==false)
     { } // Lectura secuencia por secuencia
      s_enumeration=FileReadString(h_list);                       // Each string has a filename
      Print("---------------<<",s_enumeration,">>---------------");
      h_enumeration=File()s_enumeration,FILE_READ| FILE_CSV);   // Intenta abrir la lista de enumeracion de archivos.
      if(h_enumeration==-1)
        {
         Print("The enumeration file not found ",s_enumeration);
         continue;                                                // If it does not exist, skip it
        }

      s_rezult=StringConcatenate(ConvertName(s_enumeration),".csv");
      h_rezult=FileOpen(s_rezult,FILE_WRITE|FILE_CSV);
      if(h_rezult==-1)
        {
         Print("Can't create a result file: ",s_rezult,"; ",GetLastError());
         continue;
        }
      while(FileIsEnding(h_enumeration)==false)
        {
         s_temp=FileReadString()h_enumeration);                  / / Leyendo string por fichero de enumeracion de string
                                                                // cada string es el nombre del archivo final
         h_temp=File()s_temp,FILE_READ| FILE_CSV);            // Intenta abrir el archivo de resultados
         si () h_temp==–1) continuar ;        // Si el resultado no existe, saltar
         Str++;                                                 // De otra manera incrementaremos 1 en el conteo de los archivos procesados.
                                                                // Print("--> ",s_temp);
         while(FileIsEnding(h_temp)==false)
           {
            tmp=FileReadString(h_temp);
            if(tmp!="")count++;
           }
         Print("--> ",s_temp," ",count/12);
         count=0;
         FileClose ()h_temp) ;                                    // Cerrar archivo de resultados
        }//End While (contando los archivos con enumeraciones)
      FileSeek(h_enumeration,0,SEEK_SET);

      ArrayResize(h_file,str);
      ArrayResize(s_file,str);
      ArrayResize(data,str);
      ArrayResize(oi,str);
      ArrayResize(noncomm_long,str);
      ArrayResize(noncomm_short,str);
      ArrayResize(spreading,str);
      ArrayResize(operators_long,str);
      ArrayResize(operators_short,str);
      ArrayResize(all_long,str);
      ArrayResize(all_short,str);
      ArrayResize(nonrep_long,str);
      ArrayResize(nonrep_short,str);
      ArrayResize(frnz_str,str);
      while(FileIsEnding(h_enumeration)==false)
        {
         n s_file[]=h_enumerationFileReadString();              // Leyendo archivo de enumeración string a string
                                                               // cada string es el nombre del archivo de resultados
                                                               // Print(str,"; ",s_file[n]);
         h_file[n]=FileOpen(s_file[n],FILE_READ|FILE_CSV);     // Try to open the final file
         if(h_file[n]==-1){Print("File not found");continue;}  // It it does not exist, skip it
         n++;
        }// End While( open enumerations file)   
      //for(n=0;n<str;n++){
      //   Print(n,"; ",s_file[n]);
      //}
      // En la actualidad tenemos la lista de resultados files(s_file[]) resultado 
      // y sus descriptores (h_file[]) que son
      // en el archivo único de enumeraciones. // Ahora permite combinar estos archivos en un solo archivo:
      while(FileIsEnding(h_file[0])==false)
        {
                                 // Como una señal del final del archivo hay un final del primer archivo
                                 // (suponemos que los archivos son los mismos)

         for(int i=0;i<str;i++)
           {                     // Reading column by column for each of the file included in the enumerations file.
            if(frnz_str[i]==1)continue;
            tmp=FileReadString(h_file[i]);
            switch(column)
              {
               case DATA:            data[i]=StrToTime(tmp);
               case OI:              oi[i]=StrToInteger(tmp);
               case NONCOMM_LONG:    noncomm_long[i]=StrToInteger(tmp);
               case NONCOMM_SHORT:   noncomm_short[i]=StrToInteger(tmp);
               case SPREADING:       spreading[i]=StrToInteger(tmp);
               case OPERATORS_LONG:  operators_long[i]=StrToInteger(tmp);
               case OPERATORS_SHORT: operators_short[i]=StrToInteger(tmp);
               case ALL_LONG:        all_long[i]=StrToInteger(tmp);
               case ALL_SHORT:       all_short[i]=StrToInteger(tmp);
               case NONREP_LONG:     nonrep_long[i]=StrToInteger(tmp);
               case NONREP_SHORT:    nonrep_short[i]=StrToInteger(tmp);
              }
           }// End For()
         //Print(h_file[0], ";  ",s_file[0]);
         column++;
         if(FileIsLineEnding(h_file[0])==true || FileIsEnding(h_file[0])==true)
           { }  // Si el string ha terminado - comparar las fechas de todos los archivos, si son iguales, combinar
            column=0;
            if(tmp=="")continue;
            for(int k=0;k<str;k++)
              {
               if(data[0]>data[k])
                  frnz_str[k]=1;
               if(data[0]<data[k])
                  frnz_str[0]=1;
               if(data[0]==data[k])frnz_str[k]=0;
               if(data[0]!=data[k])
                 {
                  Print("Time Gap was found: ",TimeToStr(data[0],TIME_DATE),"; ",TimeToStr(data[k],TIME_DATE));
                  continue;
                 }
              }

            for(k=0;k<str;k++)
              {
               data_all=data[0];
               oi_all+=oi[k];
               noncomm_long_all+=noncomm_long[k];
               noncomm_short_all+=noncomm_short[k];
               spreading_all+=spreading[k];
               operators_long_all+=operators_long[k];
               operators_short_all+=operators_short[k];
               all_long_all+=all_long[k];
               all_short_all+=all_short[k];
               nonrep_long_all+=nonrep_long[k];
               nonrep_short_all+=nonrep_short[k];
              }
            FileWrite(h_rezult,ConvertName(s_enumeration),
                      TimeToStr(data_all,TIME_DATE),
                      oi_all,
                      noncomm_long_all,
                      noncomm_short_all,
                      spreading_all,
                      operators_long_all,
                      operators_short_all,
                      all_long_all,
                      all_short_all,
                      nonrep_long_all,
                      nonrep_short_all);
            //Print(TimeToStr(data_all,TIME_DATE),";  ",oi_all);
            data_all=0;
            oi_all=0;
            noncomm_long_all=0;
            noncomm_short_all=0;
            spreading_all=0;
            operators_long_all=0;
            operators_short_all=0;
            all_long_all=0;
            all_short_all=0;
            nonrep_long_all=0;
            nonrep_short_all=0;
           }

        }// End While(summation)

      // Zero results
      FileClose(h_enumeration);
      FileClose(h_rezult);
/*for(int j=0;j<str;j++){
         FileClose(h_file[j]);
         noncomm_long[j]=0;
         noncomm_short[j]=0;
         spreading[j]=0;
         operators_long[j]=0;
         operators_short[j]=0;
         all_long[j]=0;
         all_short[j]=0;
         nonrep_long[j]=0;
         nonrep_short[j]=0;
      }*/

      n=0;str=0;
     } //End While( file enumeration list)

  }// End Programm   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string ConvertName(string str)
  {
   string str_cnv;
   int strlen=StringLen(str);
   int char;
   for(int i=0;i<strlen-4;i++)
     {
      char=StringGetChar(str,i);
      str_cnv=StringConcatenate(str_cnv,CharToStr(char));
     }
   return(str_cnv);
  }
//+------------------------------------------------------------------+

El programa que combina los reportes por fechas Script concatenado del Meta COT utiliza una manera similar, pero su algoritmo es simple.

#property copyright "Copyright © 2009, C-4, All Rights Reserved."
#property link      "vs-box@mail.ru"

extern string FilesList="CONCATENATE.ini";
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    h_list,h_file,h_cont,h_rezult;   // File descriptors
   int    column;
   string s_list,s_file,s_cont,s_rezult,   // Strings with file names
   string_cont,string_cont_f;
   h_list=FileOpen(FilesList,FILE_READ|FILE_CSV);      // Open the file list
   if(h_list==-1){Print("File list ("+FilesList+") not found");return(0);}
   while(FileIsEnding(h_list)==false)
     { } // Leído string a string
      s_list=FileReadString()h_list);                      // Cada string es un nombre de archivo
      Print(s_list);
      h_file=FileOpen(s_list,FILE_READ|FILE_CSV);         // Try open this file
      if(h_list==-1){Print("File "+s_list+" not found");continue;}  // If it does not exists
                                                                    // nos lo saltamos
                                                                    // s_rezult="COT - CONT - "+s_list;
      s_rezult=get_rezultname(s_list);
      h_rezult=FileOpen(s_rezult,FILE_WRITE|FILE_READ|FILE_CSV);
      while(FileIsEnding(h_file)==false)
        {
         s_file=FileReadString(h_file);
         //Print(s_file);
         h_cont=FileOpen(s_file,FILE_READ|FILE_CSV,';');
         if(h_cont==-1){Print("Data file "+s_file+" not found");continue;}
         else Print("Loading data file "+s_file+"...");

         while(FileIsEnding(h_cont)==false)
           {
            string_cont=FileReadString(h_cont);
            if(string_cont=="")continue;
            if(FileIsLineEnding(h_cont)==true)
              {
               string_cont_f=string_cont_f+";"+string_cont;
               FileWrite(h_rezult,string_cont_f);
               string_cont_f="";
               column=0;
              }
            else
              {
               //if(string_cont=="")continue;
               if(column==0)string_cont_f=string_cont_f+string_cont;
               else string_cont_f=string_cont_f+";"+string_cont;
               column++;
              }
           }
         FileClose(h_cont);
        }
      FileClose(h_file);
      FileClose(h_rezult);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string get_rezultname(string fname)
  {
   int strlen=StringLen(fname)-1;
   int char;
   string str;
   for(int i=strlen;i>0;i--)
     {
      char=StringGetChar(fname,i);
      if(char=='.')
        {
         for(int b=0;b<i;b++)
            str=str+CharToStr(StringGetChar(fname,b));
         str=str+".csv";
         return(str);
        }
     }
   return("COT - CONT - "+fname);
  }
//+------------------------------------------------------------------+



4. De la teoría a la práctica!

4.1 U minuto y los traders de materias primas están listo para trabajar

Por lo tanto, es la hora de generalizarlo todo. El mercado de futuros tiene tres grupos principales de participantes: hedgers, fondos de grandes materias primas y la muchedumbre. El primeros y segundo grupo más capitalizados. La gente controla solamente una parte pequeña del mercado, generalmente inferior al 10%, por lo que sus acciones no pueden afectar el precio de mercado. Los dos grupos restantes son pocos pero de gran alcance, y definen la interacción de la ley de la oferta y la demanda.

Los operadores y los operadores no comerciales son opuestos por naturaleza. Las acciones de un grupo será casi una imagen espejo del otro. La primera aplicación posible de los informes CTFC son: observar el equilibrio entre los dos grupos sobre la base de la ley de oferta y demanda.

The hedgers are more informed participants of the market than anyone else. Son más cercanos a los bienes de producción, por lo que conoce sobre las tendencias del mercado oculto mucho antes que los demás. En este caso, siempre serán iniciados en relación con otros participantes del mercado. Esta información oculta hace que se ajuste a sus niveles de cobertura, que se refleja en los informes del CFTC. La segunda aplicación posible es observando los rápidos cambios en las posiciones de los operadores.

La multitud es considerado como el menos informado de todas las categorías de traders. A menudo, esto significa que las acciones de la multitud son causadas por rumores ridículos, la psicología de las masas, codicia y miedo. Los cambios bruscos en multitud de la posición neta a menudo afirma que el estado de ánimo de la multitud ha cambiado drásticamente bajo la acción de todos estos factores y es mejor estar preparados para el desarrollo opuesto de la situación. Una tercera posible aplicación es observar los rápidos cambios de las posiciones de las multitudes.

El informe CFTC no apunta a la entrada específica o salir del mercado. Esta propiedad es común a todos los indicadores fundamentales. Usted tiene que utilizar métodos eficaces de análisis técnico para determinar los puntos de entrada y salida más precisos.


Aquí están algunas características que debe tener un sistema de trading con el uso efectivo de la información de CFTC:

1. Debe ser rentable, o al menos neutral, incluso sin el uso de filtros del CFTC.

2. El sistema no debe tener parámetros, la optimización de los cuales cambia el comportamiento y el resultado final del sistema de trade. La función principal del sistema debe confirmar las señales de comercio. La optimización de la unidad auxiliar no debe ser una prioridad para el desarrollo de una estrategia.

3. El sistema debe ser completamente reversible. Las señales de venta deben ser un espejo de las señales de compra.

4. La técnica debe ser una contra tendencia a la actual tendencia local. Aparecerán las señales del CFTC para la venta en una tendencia bull larga o por lo menos a la fuerte inversión de la moción principal. Las señales de compra también se oponen a la tendencia subyacente.

5. La técnica debe garantizar la captura de la reversión de la tendencia. Todos los puntos de inflexión deben ser considerados por el sistema como un punto de entrada en el mercado. Esto es lo más difícil, pero al mismo tiempo es en las condiciones más importantes para el sistema de comercio. Las señales del CFTC aparece muy raramente, algunos de los indicadores generan una señal, no más de 1 - 2 veces al año. Si la técnica no diera una señal para entrar en el mercado en estos momentos, el uso de los informes CFTC carecerán de sentido.

6. Utilizando información de los informes CFTC obtendrá el beneficio principal de sólo varias oportunidades, con un largo tiempo de comercio, hasta por varios meses. En consecuencia, la estrategia de negociación debe permitir una deriva de las posiciones durante mucho tiempo.

7. El sistema no debe explotar las propiedades de un mercado en particular. Los informes del CFTC están disponibles para muchos mercados, por lo que el sistema debería aplicarse igualmente bien a todos los mercados, para lo cual se crean los informes.

El uso más prometedor de la tecnología es visto como filtros. En este caso, el número de ofertas y la máxima reducción disminuye rápidamente, mientras que debe aumentar la expectativa de ganar y los beneficios resultantes.

Ahora consideremos las señales más importantes en los que centrarse. Hay dos de estas señales: el nivel de interés de apertura y la posición neta de una de tres categorías, asumen que serán los operadores. Reducimos toda la información del informe a estos dos parámetros, expresado a través del índice de 3 años.

Esto elimina la subjetividad y el análisis de los mercados mucho más fáciles. Así, una situación favorable para la compra será un mercado frío con bajas ventas de los operadores. El mercado frío significa que el nivel de interés de apertura en este momento es muy pequeño, y por lo tanto no hay crecimiento posible. Buscaremos también la situación de contraste para la venta: el mercado debe estar bien caliente (un nivel muy alto de OI), mientras que los operadores muestran un muy alto nivel de ventas.

Pasemos a los indicadores JPY a identificar esos momentos:


Figura 4-1. Interés de apertura y el índice de los operadores para el futuro del yen

Las líneas azules muestran los momentos favorables para vender, las líneas naranja - comprar. Cuando el interés de apertura es lo suficientemente grande (línea verde arriba) y los operadores son osos (línea roja abajo), son condiciones favorables para vender yenes. Lo mismo puede aplicarse para comprar: cuando el interés de apertura es relativamente pequeño (línea verde abajo) y los operadores son toros (línea roja), son condiciones favorables para comprar yenes. Esta información puede utilizarse para el análisis de mercado inicial, el nivel de precios no es necesario. Sólo después de un tiempo favorable para la especulación se ha encontrado que usted puede buscar un punto más adecuado para entrar al mercado usando el análisis técnico. El siguiente gráfico muestra el mismo indicador pero con el precio de mercado:


Figura 4-2. Índice del operador y el interés de apertura con el gráfico de precios para el Yen

Como se puede ver, no todas las señales de venta y compra condujeron a mayores beneficios. Incluso muchos podrían producir graves pérdidas. Sin embargo, las paradas difíciles se deben utilizar en cualquier sistema, y este no es una excepción.

Hay señales de la gráfica con algunos valores que no alcanzó los niveles de 20% y 80%. Estos niveles no son impecables. Uno de cada mercado tiene sus propios niveles óptimos. Lo mismo para los indicadores, no hay ningún valor nivel universal que sea óptimo para todos los mercados.

Ahora vamos a examinar en más detalle con una visión de cómo los mercados son registros de transacciones de los traders. Cabe señalar que muchos mercados con informes periódicos. Hay algunos mercados con reportes que aparecen dentro de cierto período (mes o año) y luego desaparecen para siempre. Hay algunos mercados, comercio en el que durante mucho tiempo había estado ausente, pero su información está presente en los datos históricos. Entre esto se puede identificar sobre 60 mercados con informes que salen claramente y regularmente. Aquí están los mercados con los informes más completos (nombres de archivos de datos, especificados sin extensión CSV):

INSTRUMENTO

ARCHIVO DE DATOS CSV

Materias primas
1CERDOS MAGROSCOT - CERDOS MAGROS - BOLSA MERCANTIL DE CHICAGO
2GANADO DE ENGORDECOT - GANADO DE ENGORDE - BOLSA MERCANTIL DE CHICAGO
3GANADO VIVOCOT - BOVINO - BOLSA MERCANTIL DE CHICAGO
4LECHE CONCATENADACOT - LECHE CONCATENADA
5TRIGO - BOLSA DE COMERCIO DE CHICAGOCOT - TRIGO - BOLSA DE COMERCIO DE CHICAGO
6TRIGO - BOLSA DE COMERCIO DE KANSAS CITYCOT - TRIGO - BOLSA DE COMERCIO DE KANSAS CITY
7TRIGO - BOLSA DE COMERCIO DE MINNEAPOLISCOT - TRIGO - BOLSA DE COMERCIO DE MINNEAPOLIS
8AVENA - BOLSA DE COMERCIO DE CHICAGOCOT - AVENA - BOLSA DE COMERCIO DE CHICAGO
9ARROZ EN BRUTOCOT - ARROZ EN BRUTO - BOLSA DE COMERCIO DE CHICAGO
10AZÚCAR COT - AZÚCAR CONCATENADA
11CAFÉ COT - CAFÉ CONCATENADO
12CACAO COT - CACAO CONCATENADO
13ALGODÓN NO2 COT - ALGODÓN 2 CONCATENADO
14HARINA DE SOJACOT - HARINA DE SOJA - BOLSA DE COMERCIO DE CHICAGO
15MINI SOJACOT - MINI SOJA - BOLSA DE COMERCIO DE CHICAGO
16ACEITE DE SOJACOT - HARINA DE SOJA - BOLSA DE COMERCIO DE CHICAGO
17SEMILLAS DE SOYACOT - SEMILLAS DE SOJA - BOLSA DE COMERCIO DE CHICAGO
18MANTEQUILLA (EFECTIVO COLOCADO)COT - MANTEQUILLA (EFECTIVO COLOCADO) - BOLSA MERCANTIL DE CHICAGO
19CONCENTRADO JUGO DE NARANJA CONGELADO COT - CONCENTRADO JUGO DE NARANJA CONGELADO
20MADERA COT - MADERA CONCATENADA
Metales
21COBRE-GRADO #1COT - COBRE-GRADO #1 - BOLSA DE PRODUCTOS INC.
22PLATACOT - PLATA - BOLSA DE PRODUCTOS INC.
23OROCOT - GOLD - BOLSA DE PRODUCTOS INC.
24PLATINOCOT - PLATINO - BOLSA MERCANTIL DE CHICAGO
25PALADIO COT - PALADIO - BOLSA MERCANTIL DE NUEVA YORK
Monedas
26DÓLAR AUSTRALIANOCOT - DÓLAR AUSTRALIANO CONCATENADO
27DÓLAR CANADIENSECOT - DÓLAR CANADIENSE CONCATENADO
28LIBRA ESTERLINACOT - LIBRA ESTERLINA CONCATENADA
29EURO FXCOT - EURO FX CONCATENADO
30YEN JAPONÉSCOT - JAPONÉS YEN CONCATENADA
31PESO MEXICANOCOT - PESO MEXICANO CONCATENADO
32 DÓLAR DE NUEVA ZELANDACOT - DÓLAR DE NUEVA ZELANDA - BOLSA DE COMERCIO DE CHICAGO
33FRANCO SUIZO CONCATENADOCOT - FRANCO SUIZO CONCATENADO
34 RUBLO RUSOCOT - RUBLO RUSO - BOLSA DE COMERCIO DE CHICAGO
35U.S. ÍNDICE DEL DÓLARCOT - U.S. DÓLAR CONCATENADO
Índices
36DOW JONES INDUSTRIALCOT - PROMEDIO INDUSTRIAL DE DOW JONES - BOLSA DE COMERCIO DE CHICAGO
37DOW JONES INDUSTRIAL x5$COT - DOW JONES INDUSTRIAL AVG - AVG- x $5 - BOLSA DE COMERCIO DE CHICAGO
38E-MINI S&P400COT - E-MINI S&P 400 STOCK INDEX - BOLSA DE COMERCIO DE CHICAGO
39E-MINI S&P500COT - E-MINI S&P500 CONCATENADO
40S&P500 STOCK INDEXCOT - S&P500 STOCK INDEX CONCATENADO
41S&P400 MIDCAP STOCK INDEXCOT - S&P400 MIDCAP STOCK INDEX CONCATENADO
42NASDAQ-100COT - NASDAQ-100 STOCK INDEX CONCATENADO
43NASDAQ-100 MINICOT - NASDAQ-100 INDEX (MINI) CONCATENADO
44ÍNDICE NIKKEYCUNA - NIKKEI STOCK AVERAGE CONCATENADO
45RUSSELL-2000 E-MINICOT - RUSSELL 2000 CONCATENADO
Instrumentos de deuda
46SWAPS DE TASA DE INTERÉS 10 AÑOSCOT - SWAPS DE TASA DE INTERÉS 10 AÑOS
47SWAPS DE TASA DE INTERÉS 5 AÑOSCOT - SWAPS DE TASA DE INTERÉS 5 AÑOS
48U.S. BONOS DEL TESOROCOT - U.S. BONOS DEL TESORO - BOLSA DE COMERCIO DE CHICAGO
4910-YEAR U.S. NOTAS DEL TESOROCOT - 10-YEAR U.S. NOTAS DEL TESORO - BOLSA DE COMERCIO DE CHICAGO
505-YEAR U.S. NOTAS DEL TESORO COT - 5-YEAR U.S. NOTAS DEL TESORO - BOLSA DE COMERCIO DE CHICAGO
512-YEAR U.S. NOTAS DEL TESOROCOT - 2-YEAR U.S. NOTAS DEL TESORO - BOLSA DE COMERCIO DE CHICAGO
521- TASA LIBOR MENSUALCOT - TASA LIBOR MENSUAL CONCATENADO
53FONDOS FEDERALES 30 DÍASCOT - FONDOS FEDERALES 30 DÍAS - BOLSA DE COMERCIO DE CHICAGO
543 MESES EUROYENCOT - 3 MESES EUROYEN TIBOR CONCATENADO
553 MESES EURODÓLARESCOT - 3 MESES EURODÓLARES CONCATENADO
Energía
56PETRÓLEO CRUDO LIGERO DULCECOT - PETRÓLEO CRUDO LIGERO DULCE - BOLSA MERCANTIL DE NUEVA YORK
57GAS NATURALCOT - GAS NATURAL - BOLSA MERCANTIL DE NUEVA YORK
58NO. 2 CALEFACCIÓN PETRÓLEO NUEVA YORK PUERTOCOT - NO. 2 CALEFACCIÓN PETRÓLEO NUEVA YORK PUERTO - BOLSA MERCANTIL DE NUEVA YORK
Índices de volatilidad
59ISO NEW ENGLAND LMP SWAPCOT - ISO NEW ENGLAND LMP SWAP - BOLSA MERCANTIL DE NUEVA YORK

Table 4-3. Lista de instrumentos con informes regualar disponibles durante mucho tiempo

Uno puede ver que en la actualidad la Comisión recopila los datos en un amplio espectro de tiempo, la agricultura, moneda, financiera y otros mercados. Todos los archivos descritos en la gráfica serán recibidos después de la ejecución de scripts de COT Meta Script Build y Meta COT Script concatenate.


4.2 Crear robot de investigación

El estudio de eficacia de los informes CFTC es una tarea difícil que requiere desarrollos y efectivos reales en el campo de análisis técnico, así como optimización multiinstrumental. Muchos de los traders experimentados, tiene su propio know-how y son cerrados. El análisis técnico es un amplio campo, que va más allá del artículo, así que restringimos el acceso técnico en los indicadores y métodos primitivos, pero bien conocidos, y métodos técnicos de análisis de mercado.

Vamos a crear un robot de toma de decisiones de investigación simples para la entrada en el mercado sobre la base de análisis de informes de los traders. Si eres desarrollador de MQL4, fácilmente puedes utilizar los datos de la CFTC como un filtro adicional en el comercio de su estrategia basada en el análisis técnico. Si usted no es un desarrollador, pero está interesado en esta tecnología, la disponibilidad de este robot será también muy valiosa.

Con el optimizador de estrategia es posible elegir el indicador y su período promedio óptimo. La práctica muestra que para los diferentes mercados, los indicadores más rentables y precisos son los indicadores basados en la dinámica de los diferentes grupos de traders. Quizás, para algunos mercados, el uso de la posición neta total de los comerciantes no reportables será eficaz, para los otros mercados las acciones de operadores más eficaces.

Por lo tanto, en principio, pasemos al análisis técnico para encontrar los momentos más exactos de la entrada en el mercado. Larry Williams en su libro propone utilizar el análisis técnico clásico basado en las medias móviles. Vamos a hacer lo mismo y hacer trabajar dos medias móviles simples, una de los cuales se basará en la tendencia a largo plazo, la otra - a corto plazo. La media móvil a largo plazo, aplicamos a barras semanales, a corto plazo-el diario. El período medio lento es igual para el cálculo del indicador, uno rápido - es constante y es igual a 5 días.

Si un valor actual medio lento es mayor que su valor de hace dos semanas, la tendencia a largo plazo es ascendente, si es menos - hacia abajo. Del mismo modo que se aplicará para analizar una media móvil de período 5: Si el valor actual es de hace más de dos días, espera una tendencia alcista a corto plazo, si menos - probablemente estamos en la tendencia bajista a corto plazo. Una vez que la tendencia a corto plazo coincide con el largo plazo, estamos en su camino. Vamos a utilizar uno de los indicadores de Meta COT como un filtro. La posición será abierta sólo si el indicador se ubica en el rango de valores favorables en la actualidad.

Echa un vistazo a la figura 4-2:


Figura 4-4. Análisis técnico de señales a la posición de apertura

En la figura 4.4 se presenta un gráfico diario de EURUSD. La esquina superior izquierda muestra un fragmento del gráfico semanal del EURUSD para el mismo período. El promedio simple de largo plazo (línea azul) tiene el mismo período que el indicador de Índice Meta COT, en este caso es igual a 26 semanas. La media a corto plazo (línea roja) es siempre de 5 períodos. Vemos esto en octubre. el 15, 2006 el valor medio de la red (Ma1) era más alto que hace dos días (MA2), mientras que al mismo tiempo, el valor promedio a largo plazo fue mayor que hace dos semanas. Las tendencias son las mismas, al mismo nivel de los operadores de índice del indicador fue del 100%, por mencionar una oportunidad favorable para comprar (o en sentido estricto, esta condición emparejado al día anterior, pero hemos utilizado esta combinación para una ilustración gráfica)

El robot realiza operaciones con valores de Stop Loss y Take Profit (es la única posible salida de puntos). El tamaño de los niveles depende del indicador de período, el período mayor es corresponde a los valores más altos de stop-loss y take profit. Para cada 26 períodos del indicador hay 100 puntos 300 puntos de ganancia y de pérdida. Por ejemplo, en este caso para el promedio de 156 semanas usaremos valores de StopLoss iguales a 600 puntos y de Take Profit de 1800 puntos (es una estimación simple). Los niveles de Take Profit y Stop Loss especificados tienen un único camino fuera de posición, por lo que suponemos que el sistema de trading está totalmente completado.

El tamaño de la posición es fija e igual a 0.1 del contrato del instrumento.

El sistema no es perfecto, por no decir primitivo. En general, es una buena manera de arruinar, pero las cosas pueden cambiar, si se utiliza con los filtros deL Meta COT.

Ahora conviertanos el robot a código fuente. Su funcionamiento es muy similar al indicador. El robot es como un indicador que sabe cómo poner una orden. Durante la inicialización el robot carga los datos para la gráfica actual (libreria cotlib.mq4) y luego calcula los valores de todos los indicadores, después obtiene el valor de uno de ellos. El indicador elegido dependerá del indicator_type entero, si se establece en 17, significa que usará el indicador WILLCO para los operadores, si es igual a 22, significa que el será el índice de los comerciantes no reportables.

Es simple encontrar el número del indicador, se enumeran al principio de la librería cotlib.mq4. Para definir el período promedio, es necesario establecer el valor período del indicador. La elección de los indicadores y sus períodos ha sido organizada usando el optimizador de estrategia. Ambos valores se marcan como valores a optimizar. El período comienza en el valor 26, con el paso de 26 y último valor 156. El valor del indicator_type parte en 16, con el paso 1 y último valor de 26. Por lo tanto, de esta forma trataremos a todos los indicadores y diferentes períodos de promediación:


Figura 4-4. Ventana de parámetros de entrada del experto

Algunos indicadores no se incluyeron en el backtesting del historial. Estos indicadores que no tienen claro los niveles, como la posición absoluta o neta de los operadores, así como los indicadores de los valores que deben ser elegidos dependiendo del mercado, por ejemplo la posición larga de operadores divididos por el interés de apertura. En cualquier caso, los indicadores son más que suficientes, para estimar su efectividad. La estrategia considerada es demasiado perfecta como para ser utilizada para construir un robot real de trading. Sin embargo, el asesor de ejemplo te ayudará a navegar por la masa de información suministrada por el proyecto y encontrar de entre los métodos propuestos el más eficaz. La gráfica 4.5 muestra que los mejores resultados con los indicadores utilizados.

Los resultados que se muestran en la gráfica de abajo son bastante aproximados y el propósito principal de las pruebas es encontrar el indicador más adecuado, en lugar de maximizar las ganancias. Tenga en cuenta que el mejor resultado no quiere decir que es el más rentable. El mejor resultado fue determinado por el número de ofertas (más - mejor), de máximo drawdown (menos - mejor) rentabilidad y, luego, el beneficio final.

Puede realizarse el backtesting en su computadora. La gráfica incluye un historial backtesting para el siguiente conjunto de instrumentos:

Instrumento

Indicador

Período de calculo

Total de oportunidades

Factor de beneficio

Matemáticas. Expectativa de

Drawdown %

Beneficio $

EURO

Índice de operadores

26

77

1.79

62.31

12.57

4798

LIBRA ESTERLINA

WILLCO Noncomm

26

140

1.44

18.64

7.12

2600

YEN JAPONÉS

Índice Nonrep

52

35

1.37

63.29

14.85

2200

FRANCO SUIZO

Operadores de índice de movimiento

26

21

3.96

159.71

4.63

3354

DÓLAR AUSTRALIANO

Índice Nonrep

26

59

1.98

57.50

5.67

3392

DÓLAR DE ZEARLAND NUEVA

Índice Noncomm

26

20

1.97

59.00

4.13

1180

ÍNDICE DEL DÓLAR DE LOS ESTADOS UNIDOS

Movimiento Nonrep

26

144

1.20

1.50

1.98

216

ORO

Índice Nonrep

26

81

1.84

52.09

5.70

4219

PLATA

WILLCO operadores

26

165

1.85

26.58

4.76

4385

PLATINO

Índice Nonrep

26

233

1.77

24.54

6.73

5717

PALADIO

Índice Noncomm

26

142

1.23

8.15

10.61

1158

AZÚCAR

WILLCO operadores

26

18

1.89

61.22

6.67

1102

CACAO

Índice de operadores

26

29

1.96

56.59

6.08

1641

CAFÉ

Índice de operadores

52

113

1.38

19.58

7.59

2212

OATS

Índice de operadores

26

15

2.24

83.50

8.25

1252

TRIGO

Índice de OI

26

53

1.66

53.25

8.91

2822

SEMILLAS DE SOYA

Índice Noncomm

26

66

2.88

118.72

6.46

7965

JUGO DE NARANJA

Índice de operadores

26

29

2.75

68.83

2.73

1996

LIGHT SWEET OIL

Índice de operadores

26

194

1.23

16.53

12.68

3206

E-MINI S&P

Operadores de movimiento

26

32

2.01

75.21

6.66

2406

Gráfica 4-5. Los mejores resultados de backtesting de hitorial del filtro COT con lote fijo 0,1

Los resultados de la prueba con los indicadores es muy interesante. El primero, hay un cambio claro hacia la zona rentable para el índice de Nonrep y WILLCO indicadores. El comportamiento de los indicadores de índice de movimiento es más incierto. Para algunos de los instrumentos, se han logrado el máximo beneficio (generalmente un indicador calculado por los operadores) para ciertos valores del mismo indicador que les dieron grandes pérdidas. El uso del índice de movimiento para los traders no comerciales ha llevado a la pérdida máxima a todos los instrumentos (punto №43 en la figura 4-6). Quizás el estudio más profundo de este fenómeno permitirá usar sus señales.

El gráfico de optimización puede ser representado como sigue:



Figura 4-6. El esquema general de la eficacia de la inspección de los indicadores y sus parámetros

La línea roja corresponde al nivel cero de rentabilidad. Desde el 43 el correr los beneficios se vuelve menos estables.

En general, el beneficio máximo se logró con grandes períodos de promediación de los indicadores (104-156 semanas), pero debido al reducido número de oportunidades no fueron incluidas en el informe. Los indicadores con un gran promedio de periodo son muy exactos, y su uso es una forma muy eficaz, especialmente en docenas de mercados simultáneamente. A pesar de la semejanza espejo entre el operador y los operadores no comerciales en algunos mercados es preferible utilizar la posición de los operadores por los otros - la posición de los operadores no comerciales. Las acciones de la multitud son también interesantes.

Cabe mencionar que frente siguiendo las acciones de la multitud que traen más beneficios, los siguiente a seguir por los operadores es el mercado del oro

Aunque el indicador WILLCO incluye el interés de apertura y es altamente efectivo, el interés de aoertura en sí mismo no es tan eficaz. A lo sumo, su uso proporciona menos beneficios. La aplicación de la IO se ve más bien como una señal adicional y no como su fuente principal.

En general, los indicadores han demostrado para ser eficaces, y, sin duda, traerán un beneficio más sustancial, conforme a su integración en un buen sistema de trading.

El gráfico de optimización típico del EURO, se presenta a continuación:

Como vemos, hay un cambio evidente en la zona positiva (por encima de la línea roja). No todas las gráficas tienen tal desplazamiento eficaz, y muchas de ellas podrían no ser probadas correctamente debido a una serie de razones técnicas.

Ahora vamos a comparar la efectividad de los propios filtros. Para ello se prueba en el mismo gráfico de precios con y sin filtros de COT. Como instrumento utilizamos el futuro EURO.

El resultado comercial del sistema de comercio sin el uso de filtros de COT se presenta en la Fig 4.8:


Figura 4-8. Los resultados de comercio sin filtros de COT

Como se puede ver la ganancia final fue de 1.897 dólares, lo que equivale aproximadamente a la misma cantidad de puntos usando el volumen 0.1 del tamaño del lote. La aspiración máxima a la vez fue deL 30%, que es sin duda muy grande. Vamos a echar un vistazo en Figura 4-9.

La misma estrategia, pero ya filtrada con los valores del índice de 26 semanas de los operadores:


Figura 4-9. Los resultados de operar con el uso de filtros COT.

Como vemos, el número de oportunidades ha caído bruscamente, ha aumentado la esperanza matemática de ganar. El beneficio final no es mucho mayor que en la primera prueba, pero el mayor cambio se produjo con el nivel de aspiración máxima. Ahora fue 8,6%, que es mucho más pequeño que la versión anterior. Sin duda, los filtros COT son lo suficientemente efectivos, permitiendo mejorar la estrategia.

Para determinar la máxima eficiencia del uso de la información de la CFTC es necesario realizar investigaciones detalladas, no es posible hacerlo en este artículo. La tarea principal de la sección - para ilustrar los conceptos básicos y utilizando ejemplos simples para demostrar que el uso de los datos CFTC puede ser eficaz.

Se seguirá o no este método con trading real, depende de usted.


4.3 Un epílogo con la continuación

Si todavía no tiene preguntas sobre el tema puede significar que usted no ha leído el artículo con cuidado o no le interesa el concepto propuesto. Espero, que en la actualidad tenga un montón de preguntas, algunas de las respuestas puede encontrarse a continuación. De hecho, es un FAQ corto, que puede ayudar a resolver muchos problemas de concepto.

1. ¿Debo aplicar la lógica de la apertura de posiciones del experto que se describe en la práctica? 

Por supuesto que no. Encontrar fácilmente una técnica más adecuada para determinar los puntos de precisión para entrar en el mercado. Tal vez ya tienes tu propia experiencia en el campo de análisis técnico. Tratar de aplicar los filtros de la CFTC en su estrategia comercial. Usted puede añadir su propia ténica de la gestión de la posición para el robot de investigación Meta COT.

2. Cual es la mejor posición de los grupos, ¿observar y seguir?

Existe una respuesta definitiva. Con el experto Meta COT puede averiguar que grupo es más eficaz en un mercado especificado. Trate de usar todos los tres grupos de comerciantes de cada mercado y seleccione el que le da pronósticos más precisos.

3. ¿Qué Indicadores utilizamos mejor?

Existe una respuesta definitiva. Las pruebas preliminares muestran que una buena opción sería el WILLCO o índice de movimiento. Otra vez, debe seleccionar este indicador, que primero, se correlaciona bien con el mercado y en segundo lugar, se combina bien con el uso de TS. En cualquier caso, un robot de investigación debe determinar que el indicador más apropiado suministrado por el sistema de comercio es la lógica de programación.

4. ¿Cúal es el mejor período promedio a elegir?

Existe una respuesta definitiva. Tal vez la mejor opción para traders de corto plazo será los indicadores de un promedio de 26-períodos o indicador índice de movimiento. Para los traders que quieren mantener su posición de indicadores más adecuados con un gran período de cálculo. Difiere más el cálculo del período de 26. Períodos mayores no difieren entre sí. Además, no utilice el período de cálculo si es de menos de 26 semanas. Incluso si los indicadores semestrales son altamente volátil y excesiva turbulencia. El momento períodos de tiempo óptimo puede variar de mercado a mercado, así como debe correlacionarse bien con el TS seleccionado. Período óptimo de cálculo puede encontrar fácilmente a través de el robot de investigación a través de fuerza bruta.

5. ¿Qué niveles de indicadores considera críticos?

En su libro, Larry Williams muestra gráficos con diferentes niveles. Algunos de los gráficos tienen niveles del 25-75%, los demás tienen 20-80%. Tal vez en algunos de los mercados son más amplios los niveles efectivos, en algunos son más estrechos. En cualquier caso, los niveles eficientes estarán en el rango de 0 - 30% y 70-100%. Puede utilizar el robot de investigación para determinar los niveles óptimos. Crear dos variables con los valores del nivel inferior y superior. Establezca estas variables a optimizar. Intente cambiar sus valores para obtener resultados óptimos.

6. ¿Por qué en algunos mercados los operadores (fondos de cobertura, la multitud) tienen un comportamiento inusual?

Una posible razón del comportamiento inusual de un grupo de traders puede ser su estructura interna y los problemas que resuelvne usando el trading en mercados de productos básicos. Por ejemplo, la estructura y las tareas de los hedgers (cubreidores) en el mercado del oro pueden ser muy diferentes de sus tareas de cambio de divisas. En cualquier caso, debe utilizar el grupo más eficaz de los traders (ver pregunta 2).

7. Quiero combinar varios instrumentos en uno solo mediante el uso de la agregación del Meta COT, pero no estoy seguro de que la Unión sea correcta. ¿Cómo comprobar correctamente ya que combina los instrumentos?

En primer lugar, usted necesita descargar el archivo resultante de algún tipo de indicador y para determinar visualmente los valores de los puntos de cambio de mercado. Debe mantenerse el principio general: los operadores deben tener el mayor nivel de ventas antes de la caída del mercado hacia abajo, los otros al contrario, deben tener un posiblilidad de compra en ese momento. El espejo debe ser la situación en la parte inferior del mercado. Si la comprobación visual muestra valores correctos, entonces esos valores pueden ser probado en un robot de investigación. Si el resultado es positivo y supera el resultado obtenido del uso de informe estándar, la cosechadora puede considerarse como fiable y se incluyen en el trade.

8. Los informes no funcionan en algunos mercados. Todos los indicadores dan un resultado negativo.

En estos mercados, trata de utilizar un sistema de comercio sin los filtros del CFTC. Comparar los resultados. Si el sistema sin filtros tiene más resultados que con ellos, tal vez el propio sistema tiene un problema. En este caso, usted necesita mejorar su sistema de trading a por lo menos neutral, añadirle filtros CFTC y probar otra vez. Intenta, probar y optimizar - que un enfoque común a identificar y resolver problemas.

9. No puedo encontrar el informe para el mercado.

Los informes no son para todos los mercados. Tal vez el mercado que ha elegido no tiene los informes recogidos. Tratar de encontrar el mercado deseado en la gráfica presentada en la parte 4 del artículo. Si no está en la mesa, entonces probablemente el informe simplemente no existe, o no están completos, por lo que no pueden ser utilizados. Si el mercado se define en la gráficaa, mire el nombre del archivo, correspondiente a él. Cargar manualmente este archivo en el indicador.

10. El indicador (guión, el experto) no funciona. ¿Qué tengo que hacer?

Deberá leer más detenidamente la 3ª parte del artículo. Lo más probable es que se olvidó hacer algo o hacerlo incorrectamente. Por favor lea cuidadosamente y tratar de solucionar el problema.

11. No aparece el indicador.

La razón principal es la ausencia del archivo de informe. Verificar que se ha descargado el archivo del informe. Para, abrir "Terminal", seleccione la pestaña "Log" y descargar de nuevo el indicador. Si el indicador no encuentra el archivo de informe, usted recibirá un mensaje de ADVERTENCIA: "Error al descargar el archivo File_name.scv. Trabajo más es imposible". Vaya al directorio \files de su terminal y verifique la existencia de los archivos necesarios. Si el archivo no existe, borrar todos los registros con un lote de erase_cot.batdel programa, a continuación, volver a crear. El archivo debe aparecer.

12. Aparece el indicador, pero no como se indica. En lugar del nombre del indicador hay un "Instrumento no encontrado!".

Probablemente, el nombre de la herramienta actual no coincide con ninguno de los informes. Abra el archivo settings.ini y busque el informe que se debe cargar automáticamente. Si no has encontrado el informe, cree un entorno en sí mismo (véase la sección 3.4). Agregar el nombre del instrumento en la lista de archivos. Reinicie el indicador, debe trabajar.

13. Experto no "tradea".

Una razón posible de esto es que los informes de archivos necesarios para el trabajo experto no se copian en el directorio \tester\files. El probador de estrategias utiliza este catálogo, por lo que necesita un archivos para trabajar allí. Copiar todos los archivos incluyendo el archivo de configuración para el directorio de archivos \tester\. El experto debe trabajar.

14. ¿Es posible crear mi propio indicador sobre la base de Meta COT?

Sure. La principal función que usted necesita es get_data (int tipo, int bar). Devuelve el valor del indicador que es especificado por el parámetro de tipo. La 3ª parte del artículo tiene más información sobre el código principal y ejemplos.

15. ¿Cómo crear una cartera de expertos?

No hemos proporcionado un trade multi-instrumental. Usted tiene que desarrollar su propio método para descarga de datos. Como alternativa, puede aplicar una carga de archivo ordenado, en este caso los datos pueden ser almacenados en la sección separada para cada instrumento. Pero todo esto requiere más desarrollo.

16. Los scripts son carreras sin posibilidad de ajuste / cada vez antes de iniciar las secuencias de comandos muestra la ventana de configuración, aunque esto no es necesario.

Hay una directiva #property que define la llamada de los valores. Si usted no necesita cambiar la configuración, solo comentelo. Por lo contrario, si desea personalizar la configuración, eliminar el comentario. Y luego vuelva a compilar la secuencia de comandos.

17. Incluso después de leer el articulo tengo muchas preguntas...

Usted puede leer el libro de Larry Williams, comercio Stocks & Commodities con los iniciados: secretos del informe COT varias veces. El análisis de informes CTFC es un asunto grande.


Referencias

1. Larry Williams, Trade Stocks & Commodities with the Insiders: Secrets of the COT Report (Wiley Trading)

2. Stephen Briese. The Commitments of Traders Bible.

3. Campbell R. McConnell, Stanley L. Brue. Economics: Principles, Problems, and Policies, 16th edition

4. Todd Lofton, Getting Started in Futures

5. http://www.procapital.ru/forumdisplay.php?f=267 The topic about CFTC report analysis application (in Russian).

6. http://www.aup.ru/articles/finance/1.htm The concept of risk in economic activity article by Valery Romanov.

7. http://www.timingcharts.com Site with COT charts.

8. http://www.ireallytrade.com Larry Williams's site. It contain a recent information about CFTC reports. On the main page Larry Williams gives an useful advices about the recent trade opportunities.

9. http://commitmentsoftraders.org Steve Briese's site. It's mostly about his book. It contains a useful analysis and additional indicators, basicly in PDF.

10. http://cftc.gov U.S. Sitio de la Comisión de comercio de futuros de productos básicos. Contiene datos recientes sobre posiciones del trader, una fuente principal de información sobre análisis de COT.