//--- input parameters input int InpPeriod = 10; // Periodo de cálculo de la media móvil input ENUM_MA_METHOD InpMethod = MODE_SMA; // Método de cálculo de la media móvil input ENUM_APPLIED_PRICE InpPrice = PRICE_CLOSE; // Precio de cálculo de la media móvil //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- si para el periodo de la media móvil se ha establecido un valor inferior a 1, se utilizará el valor por defecto (10). int period=(InpPeriod<1 ? 10 : InpPeriod); //--- creamos el manejador del indicador Moving Average int handle=iMA(Symbol(),Period(),period,0,InpMethod,InpPrice); if(handle==INVALID_HANDLE) { Print("No se ha podido crear el manejador del indicador Moving Average. Error ",GetLastError()); return; } //--- obtenemos el precio Bid actual double bid=0; ResetLastError(); if(!SymbolInfoDouble(Symbol(),SYMBOL_BID,bid)) { Print("No se ha podido obtener el precio Bid. Error ",GetLastError()); return; } //--- obtenemos el valor de la media móvil en la barra actual double array[1]; int copied=CopyBuffer(handle,0,0,1,array); if(copied!=1) { Print("No se ha podido obtener los datos de Moving Average. Error ",GetLastError()); return; } //--- obtenemos el precio más alto de los dos (precio Bid y valor de Moving Average) y enviamos los datos resultantes al diario de registro double max_price=MathMax(bid,array[0]); PrintFormat("Bid: %.*f, Moving Average: %.*f, es el mayor precio de los dos: %.*f",_Digits,bid,_Digits,array[0],_Digits,max_price); PrintFormat("El precio Bid %s de la media móvil",(bid>array[0] ? "más alto" : bid<array[0] ? "más bajo" : "es igual al valor")); } |