Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
Clase de trazado el ADX usando el buffer circular - indicador para MetaTrader 5
- Visualizaciones:
- 1996
- Ranking:
- Publicado:
- 2014.01.15 09:14
- Actualizado:
- 2016.11.22 07:33
- ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Descripción
La clase CADXOnRingBuffer está diseñada para el cálculo de el indicador técnico Índice de Movimiento Direccional Promedio (Average Directional Movement Index,,ADX) utilizando el algoritmo del buffer circular.
Declaración
clase CADXOnRingBuffer
Título
#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>
El archivo de la clase CADXOnRingBuffer.mqh debe colocarse en la carpeta IncOnRingBuffer que es necesario establecer en MQL5\Include\. Se adjuntan a la descripción dos archivos con los ejemplos utilizados por la clase de esta carpeta. Archivo con la clase del buffer circular y la clase de Media Móvil también debe estar en esta carpeta.
Métodos de la clase
//--- método de inicio: bool Init( // Si error devuelve falso, de exitoso - verdadero int ma_period = 14, // periodo de MA suavizado ENUM_MA_METHOD ma_method = MODE_EMA, // método de MA suavizado int size_buffer = 256, // tamaño del buffer circular, número del dato almacenado bool as_series = false // verdad, si timeserie, falso si la indexación habitual de los datos de entrada );
//--- método de cálculo basado en una timeserie o buffers del indicador: int MainOnArray( // devuelve el número de elementos procesados const int rates_total, // tamaño de las matrices const int prev_calculated, //elementos procesados en la llamada anterior const double &high[] // máximo valor de la matriz const double &low[] // mínimo valor de la matriz const double &close[] // matriz de precio de cierre );
//--- método para el cálculo basado en los elementos de las series separadas de la matriz double MainOnValue( // devuelve el valor ADX para el conjunto de elementos const int rates_total, // tamaño de la matriz const int prev_calculated, // elementos procesados de la matriz const int begin, // desde donde los valores significativos del inicio de la matriz const double high, // valor máximo const double low, // valor mínimo const double close, // preciode cierre const int index // el índice del elemento );
//--- método de acceso a los datos: int BarsRequired(); // Devuelve el número necesario de barras para trazar el indicador string NameADX(); // Devuelve el nombre del indicador string NameNDI(); // Devuelve el nombre de la línea del indicador de movimiento direccional negativo string NamePDI(); // devuelve el nombre de la línea del indicador de movimiento direccional positivo string MAMethod(); // Devuelve el método de suavizado en la forma de la línea de texto int MAPeriod(); // Devuelve el periodo del suavizado int Size(); // Devuelve el tamaño del buffer circular
Es posible obtener los datos calculados del indicador desde el buffer circular a partir de la matriz habitual. Por ejemplo:
#include <IncOnRingBuffer\CADXOnRingBuffer.mqh> CADXOnRingBuffer adx; ... //+------------------------------------------------------------------+ //| Función de iteración del indicador personalizado | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- cálculo del indicador: adx.MainOnArray(rates_total,prev_calculated,high,low,close); ... //--- copiar los datos del buffer circular "adx" al indicador: for(int i=start;i<rates_total;i++) { ADX_Buffer[i]=adx[rates_total-1-i]; // índice del movimiento direccional medio PDI_Buffer[i]=adx.pdi[rates_total-1-i]; // Índice direccional positivo NDI_Buffer[i]=adx.ndi[rates_total-1-i]; // Índice direccional negativo } ... }
Tenga en cuenta que la indexación en el búfer circular es la misma que en la timeserie.
Ejemplos
- El archivo Test_ADX_OnArrayRB.mq5 calcula el indicador sobre la base de las timeseries de precios. Se demuestra la aplicación del método MainOnArray()
- El archivo Test_ADX_OnValueRB.mq5 muestra el uso del método MainOnValue(). En primer lugar se calcula y se traza el indicador ADX. Después sobre la base del búfer circular de este indicador, se calculan tres líneas del indicador ADX.
El resultado del trabajo del Test_ADX_OnArrayRB.mq5 con el tamaño del búfer circular de 256 elementos Al escribir el código fueron utilizados los desarrollos de MetaQuotes Software Corp., Integer y GODZILLA.
El resultado del trabajo del Test_ADX_OnValueRB.mq5 con el tamaño del búfer circular de 256 elementos
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/1343
La clase está diseñada para el cálculo de un indicador técnico Índice de Movimiento Direccional Promedio Wilder (Average Directional Movement Index Wilder, ADX Wilder) utilizando el algoritmo del buffer circular.
MultiMACDSignalMultiMACDSignal visualiza información sobre los valores actuales de la tendencia, utilzando los valores de seis indicadores MACD para periodos diferentes.
El MultiX2MASignal muestra información de la tendencia actual por medio de los cuatro indicadores X2MA que se obtienen de distintos marcos temporales.
Clase de trazado el ATR usando el buffer circularLa clase está diseñada para el cálculo del indicador de Rango Verdadero Promedio (Average True Range, ATR) utilizando el algoritmo del buffer circular.