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
- Visualizaciones:
- 757
- Ranking:
- Publicado:
- 2018.07.03 09:21
-
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Desarrollo de la segunda versión de la librería SignalMAAboveBelow 2.
Novedades en la versión 3
- El parámetro CurrentBarSize - tamaño de la barra actual (se calcula como Close-Open);
- El parámetro PreviousBarSize - calcula el tamaño de la barra anterior (se calcula como Close-Open).
En este caso, si el precio en la barra actual se encuentra POR ENCIMA del indicador, ambas barras tienen que ser alcistas. Si el precio en la barra actual se encuentra POR DEBAJO del indicador, ambas barras tienen que ser bajistas. De esta manera, ambas parámetros (CurrentBarSize y PreviousBarSize) sirven del filtro de protección al abrir una posición.
En el módulo de señales, incluimos las series temporales en el constructor:
//+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CSignalMA::CSignalMA(void) : m_reverse(false), m_ma_period(12), m_ma_shift(0), m_ma_method(MODE_SMA), m_ma_applied(PRICE_CLOSE), m_pattern_0(80), m_size_current_bar(40), m_size_previous_bar(20) { //--- initialization of protected data m_used_series=USE_SERIES_OPEN+USE_SERIES_HIGH+USE_SERIES_LOW+USE_SERIES_CLOSE; }
Después de incluir las series temporales, se puede usar los objetos m_close y m_open de las clases CiClose y CiOpen, respectivamente (estos objetos están declarados en un nivel más alto, en el nivel del padre ExpertBase.mqh).
Trabajamos con estos objetos en CSignalMA::LongCondition
//+------------------------------------------------------------------+ //| "Voting" that price will grow. | //+------------------------------------------------------------------+ int CSignalMA::LongCondition(void) { if(m_type_trade==1) // m_type_trade: enum type of trade: 0 -> BUY, 1 -> SELL, 2 -> BUY and SELL return(0); int result=0; int idx =StartIndex(); //--- if(m_close.GetData(idx+1)-m_open.GetData(idx+1)<m_previous_bar_size*PriceLevelUnit()) return(0); if(m_close.GetData(idx)-m_open.GetData(idx)<m_current_bar_size*PriceLevelUnit()) return(0); //--- analyze positional relationship of the close price and the indicator at the first analyzed bar
y en CSignalMA::ShortCondition
//+------------------------------------------------------------------+ //| "Voting" that price will fall. | //+------------------------------------------------------------------+ int CSignalMA::ShortCondition(void) { //--- m_type_trade: enum type of trade: 0 -> BUY, 1 -> SELL, 2 -> BUY and SELL if(m_type_trade==0) return(0); int result=0; int idx=StartIndex(); //--- if(m_open.GetData(idx+1)-m_close.GetData(idx+1)<m_previous_bar_size*PriceLevelUnit()) return(0); if(m_open.GetData(idx)-m_close.GetData(idx)<m_current_bar_size*PriceLevelUnit()) return(0); //--- analyze positional relationship of the close price and the indicator at the first analyzed bar
Ejemplo de apertura de las posiciones con el parámetro Reverse == false:
Fig. 1. SignalMAAboveBelow 3 - apertura de la posición BUY
Fig. 2. SignalMAAboveBelow 3 - apertura de la posición SELL
Parámetros del módulo de señales
- Reverse - bandera de la reversión de señales;
- PeriodMA - período de promediación del indicador Moving Average;
- Shift - desplazamiento del indicador Moving Average por la horizontal;
- Method - tipo del suavizado del indicador Moving Average;
- Applied - tipo del precio a base del cual se calcula el indicador Moving Average;
- TypeOfTrade - tipo de señales comerciales: 0 → BUY, 1 → SELL, 2 → BUY and SELL;
- CurrentBarSize - tamaño de la barra actual (se calcula como Close-Open);
- PreviousBarSize - tamaño de la barra anterior (se calcula como Close-Open).
Los parámetros del EA de prueba TestSignalMAAboveBelow3.mq5 están predefinidos, la optimización no se realizaba.
Por cierto, si en el EA TestSignalMAAboveBelow3.mq5 generado en el Asistente para MQL5,
//+------------------------------------------------------------------+ //| Inputs | //+------------------------------------------------------------------+ //--- inputs for expert input string Expert_Title ="TestSignalMAAboveBelow3"; // Document name ulong Expert_MagicNumber =20884; // bool Expert_EveryTick =false; // //--- inputs for main signal
permitimos el trabajo EN CADA TICK (para eso, "false" que se pone por defecto, se sustituye por "true"), se puede obtener un resultado más interesante: el EA va a procesar más rápidamente la condición cuando la barra actual (será la barra con el índice #0) será igual o un poco más grande que el parámetro establecido CurrentBarSize.
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/20164

VSI (Volatility Switch Indicator) - indicador del cambio de la volatilidad.

Indicador del estado del mercado.

Es una versión normalizada que muestra el volumen expresado en por cientos en comparación con el volumen medio durante el período seleccionado.

Dynamic Momentum Index (DMI) es un RSI con período variable. Al usar los ajustes predefinidos, el período del RSI se oscila de 3 a 30. La variabilidad del período hace que el RSI sea más sensible hacia los movimientos del precio de corta duración. Cuanto más alta sea la volatilidad del precio, menor será el período. El indicador se interpreta igual como el RSI, pero las señales aparecen antes.