80 lines
2.9 KiB
Markdown
80 lines
2.9 KiB
Markdown
# MathMax
|
||
|
||
The function returns the maximal value of two values.
|
||
|
||
```
|
||
double MathMax(
|
||
double value1, // first value
|
||
double value2 // second value
|
||
);
|
||
|
||
```
|
||
|
||
Parameters
|
||
|
||
value1
|
||
|
||
[in] First numeric value.
|
||
|
||
value2
|
||
|
||
[in] Second numeric value.
|
||
|
||
Return Value
|
||
|
||
The largest of the two values.
|
||
|
||
Note
|
||
|
||
Instead of MathMax() you can use fmax(). Functions fmax(), [fmin()](/en/docs/math/mathmin), MathMax(), [MathMin()](/en/docs/math/mathmin) can work with integer types without typecasting them to the type of double.
|
||
|
||
If parameters of different types are passed into a function, the parameter of the smaller type is automatically [cast](/en/docs/basis/types/casting) to the larger type. The type of the return value corresponds to the larger type.
|
||
|
||
If data of the same type are passed, no casting is performed.
|
||
|
||
Example:
|
||
|
||
```
|
||
//--- input parameters
|
||
input int InpPeriod = 10; // Moving average calculation period
|
||
input ENUM_MA_METHOD InpMethod = MODE_SMA; // Moving average calculation method
|
||
input ENUM_APPLIED_PRICE InpPrice = PRICE_CLOSE; // Moving average calculation price
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| Script program start function |
|
||
//+------------------------------------------------------------------+
|
||
void OnStart()
|
||
{
|
||
//--- if the moving average period is set to a value less than 1, then the default value (10) is used
|
||
int period=(InpPeriod<1 ? 10 : InpPeriod);
|
||
//--- create the Moving Average indicator handle
|
||
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;
|
||
}
|
||
//--- get the current Bid price
|
||
double bid=0;
|
||
ResetLastError();
|
||
if(!SymbolInfoDouble(Symbol(),SYMBOL_BID,bid))
|
||
{
|
||
Print("Failed to get Bid price. Error ",GetLastError());
|
||
return;
|
||
}
|
||
//--- get the moving average value on the current bar
|
||
double array[1];
|
||
int copied=CopyBuffer(handle,0,0,1,array);
|
||
if(copied!=1)
|
||
{
|
||
Print("Failed to get Moving Average data. Error ",GetLastError());
|
||
return;
|
||
}
|
||
//--- get the highest price of the two (Bid price and Moving Average value) and display the resulting data in the 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"));
|
||
}
|
||
|
||
```
|