
Aprendiendo a diseñar un sistema de trading con Relative Vigor Index
Introducción
Le presentamos un nuevo artículo de la serie en la que estudiamos herramientas técnicas populares y aprendemos a crear sistemas comerciales basados en ellas. Hoy veremos el Índice de Vigor Relativo (Relative Vigor Index, RVI). El tema se dividirá en varias secciones:
- Definición de Relative Vigor Index
- Estrategias de Relative Vigor Index
- Esquemas de la estrategia de Relative Vigor Index
- Sistemas comerciales con Relative Vigor Index
- Conclusión
Escribiremos los códigos de este artículo en MQL5 (MetaQuotes Language 5) y ejecutaremos las aplicaciones resultantes en el terminal comercial MetaTrader 5. Recomendamos a todos los principiantes, y también a los programadores experimentados que lleven a la práctica por su cuenta todas las cosas de las que hablamos aquí: es precisamente la práctica la que desarrollará sus habilidades. Si aún no está familiarizado con MetaTrader 5 y MQL5, por favor lea "Escribiendo el código MQL5 en el MetaEditor" en uno de los artículos anteriores, ahí podrá encontrar instrucciones detalladas sobre cómo descargarlos y utilizarlos.
Todas las estrategias de las que hablaremos aquí se presentan exclusivamente como material de aprendizaje. No obstante, si está interesado en alguna de ellas, tenga en cuenta que deberá optimizarla en cualquier caso. Una vez más, el objetivo principal de este artículo y de las estrategias simples presentadas en él es aprender y asimilar el material. En general, antes de usar cualquiera de las técnicas en una cuenta real, siempre deberá probar esta para asegurarse de que resulta adecuada para usted.
¡Atención! Toda la información del presente artículo se ofrece «tal cual», únicamente con fines ilustrativos, y no supone ningún tipo de recomendación. El artículo no garantiza ningún resultado en absoluto. Todo lo que ponga en práctica usando este artículo como base, lo hará bajo su propia cuenta y riesgo; el autor no garantiza resultado alguno.
Definición de Relative Vigor Index
En este apartado aprenderemos con detalle qué es el Índice de Vigor Relativo (RVI). Se trata de un indicador técnico de impulso y un oscilador. Mide la fuerza de la tendencia, comparando para ello el precio de cierre con el nivel de apertura. Durante una tendencia alcista, el precio de cierre será superior al de apertura, y durante una tendencia bajista, el precio de cierre será inferior al de apertura. Además, se usa una media móvil simple para suavizar los valores. Debido a la naturaleza de los cálculos, el indicador RVI se comporta mejor en los mercados con tendencia que en los periodos planos. El cálculo del RVI es similar al del oscilador estocástico, solo que el RVI compara los precios de cierre con los de apertura, mientras que el estocástico compara el rango de precios durante un periodo determinado. El indicador RVI puede calcularse manualmente de la forma que sigue:
RVI = (CLOSE - OPEN) / (HIGH - LOW)
donde:
CLOSE es el precio de cierre;
OPEN es el precio de apertura;
HIGH es el máximo;
LOW es el mínimo.
No obstante, la mayoría de las veces, el RVI que usamos se mostrará en dos líneas, cada una de las cuales utilizará componentes diferentes para el cálculo.
Cálculo de la primera línea
- Cálculo del numerador:
MovAverage = (CLOSE-OPEN) + 2 * (CLOSE-1 - OPEN-1) + 2 * (CLOSE-2 - OPEN-2) + (CLOSE-3 - OPEN-3)
donde:
CLOSE — precio de cierre actual
CLOSE 1, CLOSE 2, CLOSE 3 — precios de cierre de 1, 2 y 3 periodos atrás
OPEN — precio de apertura actual
OPEN 1, OPEN 2, OPEN 3 — precios de apertura de 1, 2 y 3 periodos atrás
- Cálculo del denominador:
RangeAverage = (HIGH-LOW) + 2 x (HIGH-1 - LOW-1) + 2 x (HIGH-2 - LOW-2) + (HIGH-3 - LOW-3)
donde:
HIGH — último precio máximo
HIGH, HIGH 2, HIGH 3 — precio del máximo 1, 2 y 3 periodos atrás
LOW — último mínimo
LOW 1, LOW 2, LOW 3 — precio del mínimo 1, 2 y 3 periodos atrás
- Calculamos la suma de estas medias:
Calculamos la segunda línea
RVIsignal = (RVIaverage + 2 * RVIaverage-1 + 2 * RVIaverage-2 + RVIaverage-3)/6
El concepto básico del indicador puede entenderse partiendo de las características del cálculo. Sin embargo, no deberemos hacerlo ahora porque se calcula automáticamente en el terminal comercial MetaTrader 5: todo lo que tenemos que hacer es seleccionarlo de la lista de indicadores disponibles. Cómo adjuntar el indicador al gráfico:
En MetaTrader 5, entre en "Insertar" --> "Indicadores" --> "Indicadores de Volumen" --> Relative Vigor Index
Tras seleccionar Relative Vigor Index, se abrirá una ventana con sus parámetros:
1 - periodo del indicador
2 - color de la línea RVI
3 - estilo de la línea RVI
4 - grosor de la línea RVI
5 - color de la línea de señal
6 - estilo de línea de señal
7 - grosor de la línea de señal
Seleccionamos los parámetros necesarios del indicador, presionamos el botón OK y el indicador se iniciará en el gráfico como se muestra a continuación:
En la captura de pantalla anterior, podemos ver que el indicador se ha iniciado y está funcionando en el gráfico: muestra dos líneas que oscilan alrededor del nivel cero.
Estrategias de Relative Vigor Index
Tras los aspectos teóricos, veamos cómo usar el indicador RVI. Para ello, veremos algunas estrategias sencillas. Antes de pasar a las estrategias en sí, queremos reiterar la necesidad de probar cualquier estrategia antes de usarla en una cuenta real. Compruebe si la estrategia resulta adecuada para sus operaciones y si es rentable. Esto resulta especialmente actual en el caso de las estrategias ilustrativas, como las de este artículo.
- Estrategia uno: cruce de RVI — tendencia alcista
Esta estrategia puede generar señales de compra y cierre durante una tendencia alcista según determinadas condiciones. Si el valor actual de RVI y el valor actual de la línea de señal RVI están ambos por encima de cero y el valor actual de RVI está por encima de la señal RVI, tendremos una señal de compra. Por el contrario, si el valor actual de RVI y el valor actual de la línea de señal RVI está por debajo de cero, y el valor actual de RVI está por debajo de la señal RVI, tendremos una señal de cierre de posición.
Esquemáticamente:
RVI > 0 y señal RVI > 0 y además RVI > señal RVI --> Compra
RVI < 0 y señal RVI < 0 y además RVI < señal RVI --> Cierre
- Estrategia dos: cruce de RVI — tendencia bajista
Las señales de esta estrategia serán las contrarias a la anterior, pues generará señales de venta y el cierre correspondiente. Si el valor actual de RVI y el valor actual de la línea de señal RVI están ambos por debajo de cero y el valor actual de RVI está por debajo de la señal RVI, tendremos una señal de venta. Por el contrario, si el valor actual de RVI y el valor actual de la línea de señal RVI están ambos por encima de cero, y el valor actual de RVI está por encima de la señal RVI, tendremos una señal de cierre de posición.
Esquemáticamente:
RVI < 0 y señal RVI < 0 y además RVI < señal RVI --> Apertura de una posición corta
RVI > 0 y señal RVI > 0 y además RVI > señal RVI --> Cierre
- Estrategia tres: cruce de RVI y MA
Esta estrategia producirá señales de compra y venta en ciertas condiciones. Se generará una señal de compra cuando el precio de cierre sea mayor que la media móvil de 100 periodos y el valor actual de RVI sea mayor que el valor actual de la línea de señal de RVI. Si el precio de cierre está por debajo de la media móvil de 100 periodos y el valor actual de RVI está por debajo del valor de la señal, será una señal de venta.
Esquemáticamente:
Precio de cierre > media móvil de 100 periodos y valor RVI > señal RVI --> Compra
Precio de cierre < media móvil de 100 periodos y valor de RVI < señal RVI --> Venta
Esquemas de las estrategias de Relative Vigor Index
Ahora es el momento de considerar la creación de sistemas comerciales. En esta parte crearemos esquemas paso a paso para cada estrategia para ayudar a desarrollar sistemas comerciales.
- Estrategia uno: cruce de RVI — tendencia alcista
Basándonos en esta estrategia, crearemos un sistema comercial que pueda utilizarse para generar señales de apertura y cierre de operaciones de compra durante una tendencia alcista. Para ello, deberemos comprobar los siguientes valores:
- El valor actual de RVI
- El valor actual de la línea de señal RVI
- El nivel cero
Si el valor actual de RVI es superior a cero, la línea de señal de RVI es superior a cero y el valor actual de RVI es superior a la línea de señal, el sistema comercial deberá retornar un comentario con los siguientes valores:
- La señal de compra
- El valor de Relative Vigor Index
- La señal RVI
De lo contrario, si el valor actual de RVI es inferior a cero, la línea de señal de RVI es inferior a cero y el valor actual de RVI es inferior a la línea de señal, el sistema comercial deberá retornar un comentario con los siguientes valores:
- La señal de cierre
- El valor de Relative Vigor Index
- La señal RVI
El siguiente esquema paso a paso le ayudará a desarrollar un sistema comercial para esta estrategia:
- Estrategia dos: cruce de RVI — tendencia bajista
Basándonos en esta estrategia, crearemos un sistema comercial que se podrá utilizar para generar señales de apertura y cierre de operaciones de venta durante una tendencia alcista. Para ello, deberemos comprobar los siguientes valores:
- El valor actual de RVI
- El valor actual de la línea de señal RVI
- El nivel cero
Las condiciones serán ligeramente distintas. Si el valor actual de RVI es inferior a cero, la línea de señal de RVI es inferior a cero y el valor actual de RVI es inferior a la línea de señal, el sistema comercial deberá retornar un comentario con los siguientes valores:
- La señal de apertura de una operación en corto
- El valor de Relative Vigor Index
- La señal RVI
Si el valor actual de RVI está por debajo de cero y la línea de señal de RVI está por encima de cero, y al mismo tiempo el valor actual de RVI está por encima de la línea de señal, el sistema comercial deberá mostrar un comentario en el gráfico con los siguientes valores:
- Cerrar
- El valor de Relative Vigor Index
- La señal RVI
Esquema paso a paso para desarrollar un sistema comercial utilizando esta estrategia:
- Estrategia tres: cruce de RVI y MA
El sistema comercial generará señales de compra y venta. Para ello, se monitorearán los siguientes valores:
- El precio de cierre
- La media móvil (MA) de 100 periodos
- El valor actual de RVI
- El valor actual de la línea de señal RVI
Si el precio de cierre está por encima de la MA de 100 periodos y el valor actual de RVI está por encima de la línea de señal de RVI, necesitaremos que el sistema comercial retorne los siguientes valores como comentario en el gráfico:
- La señal de compra
- El precio de cierre
- El valor de la media móvil
- El valor de Relative Vigor Index
- La señal RVI
Si el precio de cierre está por debajo de la MA de 100 periodos y el valor actual de RVI está por debajo del valor actual de la señal de RVI, el sistema comercial retornará los siguientes valores como comentario en el gráfico:
- La señal de venta
- El precio de cierre
- El valor de la media móvil
- El valor de Relative Vigor Index
- La señal RVI
La siguiente figura muestra el esquema de esta estrategia:
Sistemas comerciales con Relative Vigor Index
Así pues, hemos analizado algunas estrategias sencillas utilizando el indicador RVI y hemos elaborado sus esquemas de desarrollo. Ahora procederemos directamente a escribir los códigos de los sistemas comerciales. Para empezar, escribiremos un sistema sencillo que retorne el valor actual de RVI como un comentario en el gráfico. Vamos a ver todos los pasos necesarios para crear el código de un sistema de este tipo.
Crearemos dos arrays para el RVI y el RVI de la señal utilizando la función double:
double rviArray[]; double rviSignalArray[];
Luego estableceremos la bandera de clasificación como en la serie temporal AS_SERIES usando la función ArraySetAsSeries, que retorna true o false:
ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true);
A continuación, definiremos el Índice de Vigor Relativo usando la función iRVI, que retorna el manejador del indicador. Parámetros de la función:
- symbol — nombre del símbolo; nosotros tenemos "_Symbol", es decir, calcularemos el indicador según el símbolo del gráfico actual.
- period — marco temporal para el cálculo; el valor "_Period" señalará que el indicador se calculará en el marco temporal actual.
- ma_period — periodo de promediación; usaremos 10.
int rviDef = iRVI(_Symbol,_Period,10);
Después obtendremos los datos del búfer del indicador RVI usando la función CopyBuffer. Parámetros de la función:
- indicator_handle — manejador estándar del indicador rviDef, rviDef
- buffer_num — número del búfer de indicador; lo estableceremos en 0, 1.
- start_pos — estableceremos la posición de inicio del cálculo; indicaremos 0, 0.
- count — cantidad de datos para copiar; indicaremos 3, 3.
- buffer[] — define el array de precios a copiar; en nuestro caso, será rviArray, rviSignalArray
CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray);
Luego definiremos los valores RVI y RVI de la señal usando la función NormalizeDouble, que retorna un valor de tipo double. Parámetros de la función:
- value — número normalizado; usaremos (rviArray[0], rviSignalArray[0]).
- digits — número de dígitos después del punto decimal. Usaremos 3.
double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
Con la ayuda de la función Comment, mostraremos un comentario en el gráfico con el valor actual del indicador RVI.
Comment("Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal);
El código completo de este sistema tendrá el aspecto siguiente:
//+------------------------------------------------------------------+ //| Simple RVI.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double rviArray[]; double rviSignalArray[]; ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true); int rviDef = iRVI(_Symbol,_Period,10); CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); Comment("Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } //+------------------------------------------------------------------+
Después compilaremos el código del asesor, y este aparecerá en la ventana del Navegador, en el terminal de MetaTrader 5:
Luego clicaremos dos veces para ejecutar el sistema en el terminal y se abrirá la ventana de configuración del asesor:
A continuación, permitiremos el trading automático "Allow Algo Trading", pulsaremos OK y el programa se iniciará en el gráfico:
El programa funciona y genera las señales correspondientes. Ejemplo de señal en el gráfico:
Como podemos ver, en la esquina superior izquierda del gráfico tenemos un comentario con el valor actual de RVI.
- Estrategia uno: cruce de RVI — tendencia alcista
El código completo del sistema comercial que opera según esta estrategia tendrá el aspecto siguiente:
//+------------------------------------------------------------------+ //| RVI Crossover - Uptrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double rviArray[]; double rviSignalArray[]; ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true); int rviDef = iRVI(_Symbol,_Period,10); CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal) { Comment("Buy Signal","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal) { Comment("Close","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } } //+------------------------------------------------------------------+
Diferencias en este código:
Las condiciones de la estrategia.
Con una señal de compra
if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal) { Comment("Buy Signal","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
La señal de cierre
if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal) { Comment("Close","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
Recompilamos el código, lo buscamos en el Navegador y lo ejecutamos en el gráfico. El asesor se adjuntará al gráfico de la misma forma que se muestra a continuación:
El sistema comercial genera señales con el aspecto siguiente:
Señal de compra:
En la esquina superior izquierda del gráfico aparecerá un comentario con la señal y los siguientes valores:
- La señal de compra
- El valor de Relative Vigor Index
- El valor de la línea de señal RVI
En el caso de una señal de cierre:
En la esquina superior izquierda del gráfico aparecerá un comentario con la señal y los siguientes valores:
- Cierre
- El valor de Relative Vigor Index
- El valor de la línea de señal RVI
Estas han sido las señales del sistema comercial de la estrategia comentada anteriormente, que opera en una tendencia alcista.
- Estrategia dos: cruce de RVI — tendencia bajista
A continuación, mostraremos el código completo para crear un sistema comercial de este tipo:
//+------------------------------------------------------------------+ //| RVI Crossover - Downtrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double rviArray[]; double rviSignalArray[]; ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true); int rviDef = iRVI(_Symbol,_Period,10); CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal) { Comment("Short Signal","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal) { Comment("Cover","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } } //+------------------------------------------------------------------+
Diferencias en este código:
Las condiciones de la estrategia.
Con una señal corta
if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal) { Comment("Short Signal","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
La señal de cierre
if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal) { Comment("Cover","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
Después de compilar el código, ejecutaremos el archivo resultante en el terminal. El asesor se ejecutará en el gráfico y tendrá un aspecto parecido al siguiente:
Ahora podremos obtener señales basadas en esta estrategia y el sistema comercial. Ejemplos de señales generadas a partir de esta estrategia.
Con una señal corta:
En la esquina superior izquierda del gráfico aparecerá un comentario con la señal y los siguientes valores:
- Una transacción corta
- El valor de Relative Vigor Index
- El valor de la línea de señal RVI
La señal de cierre
Como podemos ver, tenemos una señal y los siguientes valores:
- Cerrar
- El valor de Relative Vigor Index
- El valor de la línea de señal RVI
Así que hemos creado un sistema comercial basado en la estrategia RVI Crossover - Downtrend para trabajar en una tendencia bajista.
- Estrategia tres: cruce de RVI y MA
A continuación, mostraremos el código completo para crear un sistema comercial de este tipo:
//+------------------------------------------------------------------+ //| RVI & MA Crossover.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { MqlRates pArray[]; double maArray[]; double rviArray[]; double rviSignalArray[]; int Data=CopyRates(_Symbol,_Period,0,1,pArray); ArraySetAsSeries(maArray,true); ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true); int rviDef = iRVI(_Symbol,_Period,10); int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE); CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); CopyBuffer(maDef,0,0,3,maArray); double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); double maVal = NormalizeDouble(maArray[0],3); if(pArray[0].close>maVal && rviVal>rviSignalVal) { Comment("Buy Signal","\n", "Closing price is ",pArray[0].close,"\n", "MA Value is ",maVal,"\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } if(pArray[0].close<maVal && rviVal<rviSignalVal) { Comment("Sell Signal","\n", "Closing price is ",pArray[0].close,"\n", "MA Value is ",maVal,"\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } } //+------------------------------------------------------------------+
Diferencias en este código:
Creamos cuatro arrays (pArray, maArray, rviArray, rviSignalArray). Luego utilizaremos la función double, pero en lugar de pArray usaremos la función MqlRates, que almacena la información sobre el precio, el volumen y el spread.
MqlRates pArray[]; double maArray[]; double rviArray[]; double rviSignalArray[];
A continuación, estableceremos la bandera de clasificación como en la serie temporal AS_SERIES utilizando la función ArraySetAsSeries, que retorna true o false. Después usaremos la función CopyRates para rellenar el array y obtener los datos históricos de MqlRates. Parámetros de la función:
- symbol — nombre del símbolo; nosotros tenemos "_Symbol", es decir, calcularemos el indicador según el símbolo del gráfico actual.
- period — marco temporal para el cálculo; el valor "_Period" señalará que el indicador se calculará en el marco temporal actual.
- start_pos — indica la posición del inicio del cálculo; especificaremos 0.
- count — cantidad de datos para copiar; indicaremos 1.
- rates_array[] — array en el que se copian los datos
int Data=CopyRates(_Symbol,_Period,0,1,pArray); ArraySetAsSeries(maArray,true); ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true);
Para determinar el indicador RVI usaremos la función iRVI, y para la media móvil, utilizaremos iMA, que retorna el manejador del indicador MA. Parámetros de la función iMA:
- symbol — nombre del símbolo, _Symbol
- period — marco temporal para calcular la media (_period)
- ma_period — periodo para calcular la media, para nosotros será 100
- ma_shift — desplazamiento horizontal; lo estableceremos como 0
- ma_method — tipo de suavización de la media móvil; utilizaremos la exponencial.
- applied_price — define el tipo de precio utilizado para el cálculo; utilizaremos el precio de cierre
int rviDef = iRVI(_Symbol,_Period,10); int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);
Después recuperaremos los datos del búfer de los indicadores RVI y MA usando la función "CopyBuffer".
CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); CopyBuffer(maDef,0,0,3,maArray);
Luego determinaremos el RVI, el RVI de la señal y los valores medios utilizando la función NormalizeDouble.
double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); double maVal = NormalizeDouble(maArray[0],3);
Las condiciones de la estrategia.
Con una señal de compra
if(pArray[0].close>maVal && rviVal>rviSignalVal) { Comment("Buy Signal","\n", "Closing price is ",pArray[0].close,"\n", "MA Value is ",maVal,"\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
Con una señal de venta
if(pArray[0].close<maVal && rviVal<rviSignalVal) { Comment("Sell Signal","\n", "Closing price is ",pArray[0].close,"\n", "MA Value is ",maVal,"\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }
A continuación, compilaremos el código, buscaremos el archivo resultante en el Navegador del terminal y ejecutaremos el asesor en el gráfico del símbolo comercial:
El sistema comercial funciona y genera señales según la estrategia, y se ven así.
Señal de compra:
En la esquina superior izquierda del gráfico aparecerá un comentario con la señal y los siguientes valores:
- La señal de compra
- El precio de cierre
- El valor de la media móvil
- El valor de Relative Vigor Index
- La señal RVI
La señal de venta
Tenemos una señal con los siguientes valores:
- La señal de venta
- El precio de cierre
- El valor de la media móvil
- El valor de Relative Vigor Index
- La señal RVI
Eso es todo, ya hemos creado sistemas automáticos basados en cada una de las estrategias analizadas. Todos ellos generan señales según las instrucciones mostradas en los esquemas anteriores.
Conclusión
En este artículo hemos analizado otra herramienta técnica, el Índice de Vigor Relativo RVI. Hemos descubierto qué es este indicador, qué mide y cómo se puede calcular manualmente. También hemos visto opciones de uso del indicador en estrategias sencillas:
- RVI Crossover - Uptrend: formación de señales de compra y cierre en una tendencia alcista.
- RVI Crossover - Downtrend: genera señales en corto y señales de cierre en una tendencia bajista.
- RVI & MA Crossover: señales de compra y venta basadas en los cruces de los dos indicadores.
Asimismo, hemos desarrollado esquemas paso a paso para cada estrategia analizada que nos serán útiles a la hora de escribir el código del sistema comercial. Eso es todo, ya hemos creado sistemas automáticos basados en cada una de las estrategias estudiadas. Dichos sistemas han sido diseñados para funcionar en el terminal MetaTrader 5.
Esperamos que el lector escriba su propio código repitiendo todo lo que hemos hablado en este artículo. También esperamos que este artículo le ayude a encontrar nuevas ideas o una nueva forma de ver las antiguas, y también a mejorar sus resultados comerciales en general. Si le ha gustado este artículo y le ha resultado útil, lea los artículos anteriores de la misma serie para aprender a desarrollar sistemas comerciales basados en otros indicadores técnicos populares.
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/11425





- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso