//--- input parameters input int InpPeriod = 10; // Период расчёта скользящей средней input ENUM_MA_METHOD InpMethod = MODE_SMA; // Метод расчёта скользящей средней input ENUM_APPLIED_PRICE InpPrice = PRICE_CLOSE; // Цена расчёта скользящей средней //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- если для периода скользящей средней задано значение меньше 1, то использоваться будет значение по умолчанию (10) int period=(InpPeriod<1 ? 10 : InpPeriod); //--- создаём хэндл индикатора Moving Average int handle=iMA(Symbol(),Period(),period,0,InpMethod,InpPrice); if(handle==INVALID_HANDLE) { Print("Не удалось создать хэндл индикатора Moving Average. Ошибка ",GetLastError()); return; } //--- получаем текущую цену Bid double bid=0; ResetLastError(); if(!SymbolInfoDouble(Symbol(),SYMBOL_BID,bid)) { Print("Не удалось получить цену Bid. Ошибка ",GetLastError()); return; } //--- получаем значение скользящей средней на текущем баре double array[1]; int copied=CopyBuffer(handle,0,0,1,array); if(copied!=1) { Print("Не удалось получить данные Moving Average. Ошибка ",GetLastError()); return; } //--- получаем наибольшую цену из двух (цена Bid и значение Moving Average) и выводим результирующшие данные в журнал double max_price=MathMax(bid,array[0]); PrintFormat("Bid: %.*f, Moving Average: %.*f, наибольшая цена из двух: %.*f",_Digits,bid,_Digits,array[0],_Digits,max_price); PrintFormat("Цена Bid %s скользящей средней",(bid>array[0] ? "выше" : bid<array[0] ? "ниже" : "равна значению")); } |