//--- paramètres d'entrée input int InpPeriod = 10; // période de calcul de la moyenne mobile input ENUM_MA_METHOD InpMethod = MODE_SMA; // méthode de calcul de la moyenne mobile input ENUM_APPLIED_PRICE InpPrice = PRICE_CLOSE; // prix de calcul de la moyenne mobile //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- si la période de moyenne mobile est inférieure à 1, alors la valeur par défaut (10) est utilisée int period=(InpPeriod<1 ? 10 : InpPeriod); //--- crée le handle de l'indicateur de moyenne mobile int handle=iMA(Symbol(),Period(),period,0,InpMethod,InpPrice); if(handle==INVALID_HANDLE) { Print("Failed to create the Moving Average indicator handle. Error ",GetLastError()); return; } //--- récupère le prix Bid (Offre) actuel double bid=0; ResetLastError(); if(!SymbolInfoDouble(Symbol(),SYMBOL_BID,bid)) { Print("Failed to get Bid price. Error ",GetLastError()); return; } //--- récupère la valeur de la moyenne mobile de la barre actuelle double array[1]; int copied=CopyBuffer(handle,0,0,1,array); if(copied!=1) { Print("Failed to get Moving Average data. Error ",GetLastError()); return; } //--- récupère le prix le plus élevé des deux (prix Bid et valeur de la moyenne mobile) et affiche les données résultantes dans le journal double max_price=MathMax(bid,array[0]); PrintFormat("Bid: %.*f, Moving Average: %.*f, highest price of the two: %.*f",_Digits,bid,_Digits,array[0],_Digits,max_price); PrintFormat("Bid price %s moving average",(bid>array[0] ? "higher" : bid<array[0] ? "lower" : "equal to")); } |