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:
- 877
- Ranking:
- Publicado:
- 2014.01.14 14:32
- 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
El script optiene los valores del indicador Moving Average y los escribe en un archivo binario en la subcarpeta "Data" de la carpeta local del terminal. Entre los parámetros de entrada del script se pueden especificar parámetros para los cálculos del indicador MA, el nombre de la divisa y el periodo, así como la fecha a partir de la cual se calcularán los valores del indicador.
Además de los valores del indicador MA, los valores correspondientes a las fecha considerador como tipo double son escritos también en el archivo.
Código:
//--- muestra la ventana de parámetros de entrada al lanzar el script #property script_show_inputs //--- parámetros para recibir los datos del terminal input string InpSymbolName="EURJPY"; // par de divisas input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_M15; // periodo input int InpMAPeriod=10; // peridodo de suavizado input int InpMAShift=0; // desplazamniento del indicador input ENUM_MA_METHOD InpMAMethod=MODE_SMA; // tipo de suavizado input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // tipo de precio input datetime InpDateStart=D'2013.01.01 00:00'; // fecha de inicio de la copia de datos //--- parámetros para escribir los datos al archivo input string InpFileName="MA.csv"; // nombre del archivo input string InpDirectoryName="Data"; // nombre de la carpeta //+------------------------------------------------------------------+ //| Función de inicio del script | //+------------------------------------------------------------------+ void OnStart() { datetime date_finish=TimeCurrent(); double ma_buff[]; datetime time_buff[]; int size; //--- obtiene el manejador del MA ResetLastError(); int ma_handle=iMA(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpMAShift,InpMAMethod,InpAppliedPrice); if(ma_handle==INVALID_HANDLE) { //--- fallo al obtener el manejador del indicador PrintFormat("Error al recibir el manejador del indicador. Código de error = %d",GetLastError()); return; } //--- nos mantenemos dentro del ciclo mientras el indicador calcula todos sus valores while(BarsCalculated(ma_handle)==-1) Sleep(20); // pausa para permitir al inidcador realizar sus cálculos PrintFormat("Los valores del indicador a partir de %s se escribirán en el archivo",TimeToString(InpDateStart)); //--- copia los valores del indicador ResetLastError(); if(CopyBuffer(ma_handle,0,InpDateStart,date_finish,ma_buff)==-1) { PrintFormat("Error al copiar los valores del indicador. Código de error = %d",GetLastError()); return; } //--- copia las fechas de las barras correspondientes ResetLastError(); if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1) { PrintFormat("Error al copiar los valores de las fechas. Código de error = %d",GetLastError()); return; } //--- recibe el tamaño del buffer size=ArraySize(ma_buff); //--- libera la memoria ocupada por el indicador IndicatorRelease(ma_handle); //--- abre el archivo para escribir los valores del indicador (si no existe, será creado automáticamente) ResetLastError(); int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN); if(file_handle!=INVALID_HANDLE) { PrintFormat("El archivo %s está disponible para escritura",InpFileName); PrintFormat("Ruta del archivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); //--- primero escribimos el tamaño de la muestra de datos FileWriteDouble(file_handle,(double)size); //--- escribimos la fecha del indicador y su valor en el archivo for(int i=0;i<size;i++) { FileWriteDouble(file_handle,(double)time_buff[i]); FileWriteDouble(file_handle,ma_buff[i]); } //--- cerramos el archivo FileClose(file_handle); PrintFormat(Los datos ha sido escritos, el archivo %s está cerrado",InpFileName); } else PrintFormat("Error al abrir el archivo %s, Código de error = %d",InpFileName,GetLastError()); }
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/1629
![Indicador Estocástico Blau_TStoch](https://c.mql5.com/i/code/indicator.png)
Indicador Estocástico (smoothed q-period Stochastic) de William Blau.
![Demo_FileReadDouble](https://c.mql5.com/i/code/indicator.png)
Este indicador muestra un ejemplo del uso de la función FileReadDouble()
![Blau_Ergodic](https://c.mql5.com/i/code/indicator.png)
Oscilador Ergodic de William Blau.
![Blau_TSI](https://c.mql5.com/i/code/indicator.png)
True Strength Index (TSI) indicador de William Blau.