Initial Commit.
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
# ArrayBsearch
|
||||
|
||||
Searches for a specified value in a multidimensional numeric array [sorted](/en/docs/array/arraysort) ascending. Search is performed through the elements of the first dimension.
|
||||
|
||||
For searching in an array of double type
|
||||
|
||||
```
|
||||
int ArrayBsearch(
|
||||
const double& array[], // array for search
|
||||
double value // what is searched for
|
||||
);
|
||||
|
||||
```
|
||||
|
||||
For searching in an array of float type
|
||||
|
||||
```
|
||||
int ArrayBsearch(
|
||||
const float& array[], // array for search
|
||||
float value // what is searched for
|
||||
);
|
||||
|
||||
```
|
||||
|
||||
For searching in an array of long type
|
||||
|
||||
```
|
||||
int ArrayBsearch(
|
||||
const long& array[], // array for search
|
||||
long value // what is searched for
|
||||
);
|
||||
|
||||
```
|
||||
|
||||
For searching in an array of int type
|
||||
|
||||
```
|
||||
int ArrayBsearch(
|
||||
const int& array[], // array for search
|
||||
int value // what is searched for
|
||||
);
|
||||
|
||||
```
|
||||
|
||||
For searching in an array of short type
|
||||
|
||||
```
|
||||
int ArrayBsearch(
|
||||
const short& array[], // array for search
|
||||
short value // what is searched for
|
||||
);
|
||||
|
||||
```
|
||||
|
||||
For searching in an array of char type
|
||||
|
||||
```
|
||||
int ArrayBsearch(
|
||||
const char& array[], // array for search
|
||||
char value // what is searched for
|
||||
);
|
||||
|
||||
```
|
||||
|
||||
Parameters
|
||||
|
||||
array[]
|
||||
|
||||
[in] Numeric array for search.
|
||||
|
||||
value
|
||||
|
||||
[in] Value for search.
|
||||
|
||||
Return Value
|
||||
|
||||
The function returns index of a found element. If the wanted value isn't found, the function returns the index of an element nearest in value.
|
||||
|
||||
Note
|
||||
|
||||
Binary search processes only sorted arrays. To sort numeric arrays use the [ArraySort()](/en/docs/array/arraysort) function.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
#property description "Script based on RSI indicator data displays"
|
||||
#property description "how often the market was in"
|
||||
#property description "overbought and oversold areas in the specified time interval."
|
||||
//--- display the window of input parameters when launching the script
|
||||
#property script_show_inputs
|
||||
//--- input parameters
|
||||
input int InpMAPeriod=14; // Moving average period
|
||||
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Price type
|
||||
input double InpOversoldValue=30.0; // Oversold level
|
||||
input double InpOverboughtValue=70.0; // Overbought level
|
||||
input datetime InpDateStart=D'2012.01.01 00:00'; // Analysis start date
|
||||
input datetime InpDateFinish=D'2013.01.01 00:00'; // Analysis finish date
|
||||
//+------------------------------------------------------------------+
|
||||
//| Script program start function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnStart()
|
||||
{
|
||||
double rsi_buff[]; // array of the indicator values
|
||||
int size=0; // array size
|
||||
//--- receive RSI indicator handle
|
||||
ResetLastError();
|
||||
int rsi_handle=iRSI(Symbol(),Period(),InpMAPeriod,InpAppliedPrice);
|
||||
if(rsi_handle==INVALID_HANDLE)
|
||||
{
|
||||
//--- failed to receive the indicator handle
|
||||
PrintFormat("Indicator handle receiving error. Error code = %d",GetLastError());
|
||||
return;
|
||||
}
|
||||
//--- being in the loop, until the indicator calculates all its values
|
||||
while(BarsCalculated(rsi_handle)==-1)
|
||||
{
|
||||
//--- exit if the indicator has forcedly completed the script's operation
|
||||
if(IsStopped())
|
||||
return;
|
||||
//--- a pause to allow the indicator to calculate all its values
|
||||
Sleep(10);
|
||||
}
|
||||
//--- copy the indicator values for a certain period of time
|
||||
ResetLastError();
|
||||
if(CopyBuffer(rsi_handle,0,InpDateStart,InpDateFinish,rsi_buff)==-1)
|
||||
{
|
||||
PrintFormat("Failed to copy the indicator values. Error code = %d",GetLastError());
|
||||
return;
|
||||
}
|
||||
//--- receive the array size
|
||||
size=ArraySize(rsi_buff);
|
||||
//--- sort out the array
|
||||
ArraySort(rsi_buff);
|
||||
//--- find out the time (in percentage terms) the market was in the oversold area
|
||||
double ovs=(double)ArrayBsearch(rsi_buff,InpOversoldValue)*100/(double)size;
|
||||
//--- find out the time (in percentage terms) the market was in the overbought area
|
||||
double ovb=(double)(size-ArrayBsearch(rsi_buff,InpOverboughtValue))*100/(double)size;
|
||||
//--- form the strings for displaying the data
|
||||
string str="From "+TimeToString(InpDateStart,TIME_DATE)+" to "
|
||||
+TimeToString(InpDateFinish,TIME_DATE)+" the market was:";
|
||||
string str_ovb="in overbought area "+DoubleToString(ovb,2)+"% of time";
|
||||
string str_ovs="in oversold area "+DoubleToString(ovs,2)+"% of time";
|
||||
//--- display the data on the chart
|
||||
CreateLabel("top",5,60,str,clrDodgerBlue);
|
||||
CreateLabel("overbought",5,35,str_ovb,clrDodgerBlue);
|
||||
CreateLabel("oversold",5,10,str_ovs,clrDodgerBlue);
|
||||
//--- redraw the chart
|
||||
ChartRedraw(0);
|
||||
//--- pause
|
||||
Sleep(10000);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| Display comment in the bottom left corner of the chart |
|
||||
//+------------------------------------------------------------------+
|
||||
void CreateLabel(const string name,const int x,const int y,
|
||||
const string str,const color clr)
|
||||
{
|
||||
//--- create the label
|
||||
ObjectCreate(0,name,OBJ_LABEL,0,0,0);
|
||||
//--- bind the label to the bottom left corner
|
||||
ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);
|
||||
//--- change position of the anchor point
|
||||
ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
|
||||
//--- distance from the anchor point in X-direction
|
||||
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
|
||||
//--- distance from the anchor point in Y-direction
|
||||
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
|
||||
//--- label text
|
||||
ObjectSetString(0,name,OBJPROP_TEXT,str);
|
||||
//--- text color
|
||||
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
|
||||
//--- text size
|
||||
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
|
||||
}
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user