//+------------------------------------------------------------------+ //| BullsBearsEyes.mq5 | //| Copyright © 2007, EmeraldKing, transport_david | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, EmeraldKing, transport_david" #property link "http://finance.groups.yahoo.com/group/MetaTrader_Experts_and_Indicators/" #property description "BullsBearsEyes" //---- indicator version #property version "1.00" //---- drawing the indicator in a separate window #property indicator_separate_window //---- number of indicator buffers #property indicator_buffers 1 //---- only one plot is used #property indicator_plots 1 //+----------------------------------------------+ //| Indicator drawing parameters | //+----------------------------------------------+ //---- drawing the indicator as a line #property indicator_type1 DRAW_LINE //---- use BlueViolet color for the indicator line #property indicator_color1 BlueViolet //---- the indicator line is a continuous curve #property indicator_style1 STYLE_SOLID //---- indicator line width is equal to 1 #property indicator_width1 1 //---- displaying the indicator label #property indicator_label1 "BullsBearsEyes" //+----------------------------------------------+ //| Horizontal levels display parameters | //+----------------------------------------------+ #property indicator_level2 1.0 #property indicator_level3 0.75 #property indicator_level4 0.50 #property indicator_level5 0.25 #property indicator_level6 0.0 #property indicator_levelcolor LimeGreen #property indicator_levelstyle STYLE_DASHDOTDOT //+----------------------------------------------+ //| Declaration of constants | //+----------------------------------------------+ #define RESET 0 // the constant for getting the command for the indicator recalculation back to the terminal //+----------------------------------------------+ //| Indicator input parameters | //+----------------------------------------------+ input double period=13; // Indicator smoothing period input double gamma=0.6; // Indicator smoothing ratio input int Shift=0; // Horizontal shift of the indicator in bars //+----------------------------------------------+ //---- declaration of a dynamic array that //---- will be used as an indicator buffer double BullsBearsEyes[]; //---- declaration of integer variables for the indicators handles int Bears_Handle,Bulls_Handle; //---- declaration of the integer variables for the start of data calculation int min_rates_total; //+------------------------------------------------------------------+ //| BullsBearsEyes indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- initialization of variables of the start of data calculation min_rates_total=int(period+1); //---- getting handle of the iBearsPower indicator Bears_Handle=iBearsPower(NULL,0,int(period)); if(Bears_Handle==INVALID_HANDLE) Print(" Failed to get handle of the iBearsPower indicator"); //---- getting handle of the iBullsPower indicator Bulls_Handle=iBullsPower(NULL,0,int(period)); if(Bulls_Handle==INVALID_HANDLE) Print(" Failed to get handle of the iBullsPower indicator"); //---- set BullsBearsEyes[] dynamic array as an indicator buffer SetIndexBuffer(0,BullsBearsEyes,INDICATOR_DATA); //---- moving the indicator 1 horizontally PlotIndexSetInteger(0,PLOT_SHIFT,Shift); //---- performing the shift of the beginning of the indicator drawing PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total); //---- setting the indicator values that won't be visible on a chart PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- indexing the elements in the buffer as timeseries ArraySetAsSeries(BullsBearsEyes,true); //---- initializations of a variable for the indicator short name string shortname; StringConcatenate(shortname,"BullsBearsEyes(",period,", ",gamma,", ",Shift,")"); //--- creation of the name to be displayed in a separate sub-window and in a tooltip IndicatorSetString(INDICATOR_SHORTNAME,shortname); //---- determination of accuracy of displaying the indicator values IndicatorSetInteger(INDICATOR_DIGITS,2); //---- initialization end } //+------------------------------------------------------------------+ //| BullsBearsEyes iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // number of bars in history at the current tick const int prev_calculated,// number of bars calculated at previous call const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //---- checking the number of bars to be enough for the calculation if(BarsCalculated(Bears_Handle)rates_total || prev_calculated<=0)// checking for the first start of the indicator calculation { limit=rates_total-min_rates_total-1; // starting index for calculation of all bars } else limit=rates_total-prev_calculated; // starting index for calculation of new bars to_copy=limit+1; //---- indexing elements in arrays as timeseries ArraySetAsSeries(Bears,true); ArraySetAsSeries(Bulls,true); //--- copy newly appeared data in the array if(CopyBuffer(Bears_Handle,0,0,to_copy,Bears)<=0) return(RESET); if(CopyBuffer(Bulls_Handle,0,0,to_copy,Bulls)<=0) return(RESET); //---- restore values of the variables L0=L0_; L1=L1_; L2=L2_; L3=L3_; //---- indicators values recalculation for(bar=limit; bar>=0 && !IsStopped(); bar--) { //---- store values of the variables before running at the current bar if(rates_total!=prev_calculated && bar==0) { L0_=L0; L1_=L1; L2_=L2; L3_=L3; } L0A=L0; L1A=L1; L2A=L2; L3A=L3; L0=(1.0-gamma)*(Bears[bar]+Bulls[bar])+gamma*L0A; L1=-gamma*L0+L0A+gamma*L1A; L2=-gamma*L1+L1A+gamma*L2A; L3=-gamma*L2+L2A+gamma*L3A; CU=0.0; CD=0.0; result=0.0; if(L0>=L1) CU=L0-L1; else CD=L1-L0; if(L1>=L2) CU+=L1-L2; else CD+=L2-L1; if(L2>=L3) CU+=L2-L3; else CD+=L3-L2; if(CU+CD!=0) result=CU/(CU+CD); BullsBearsEyes[bar]=result; } //---- return(rates_total); } //+------------------------------------------------------------------+