//+------------------------------------------------------------------+ //| FPI_v1.mq4 | //| Copyright © 2009, TrendLaboratory | //| Many Thanks to Rosh for Ticks indicator | //| http://finance.groups.yahoo.com/group/TrendLaboratory | //| E-mail: igorad2003@yahoo.co.uk | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, TrendLaboratory" #property link "http://finance.groups.yahoo.com/group/TrendLaboratory" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 DodgerBlue #property indicator_maximum 1.001 #property indicator_minimum 0.999 #property indicator_level1 1.0 #property indicator_level2 1.0003 #property indicator_level3 0.9997 //---- buffers extern string Symbol_1st = "EURUSD"; extern string Symbol_2nd = "USDCHF"; extern string Symbol_3rd = "EURCHF"; extern int UseDelimiter = 1; //Delimiter Mode: 0-off,1-on extern color DelimColor = Gray; //Color of Bars Delimiter extern int MaxTicks = 200; //Max Number of ticks double FPI[]; int tickCounter=0; int delimeterCounter; datetime pTime; string short_name, setup; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, FPI); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1); short_name="FPI("+Symbol_1st+","+Symbol_2nd+","+Symbol_3rd+")"; IndicatorShortName(short_name); SetIndexLabel(0,"FPI"); SetIndexEmptyValue(0,0.0); setup = short_name+": "; pTime = Time[0]; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjDel(setup); //---- return(0); } void SetDelimeter() { //---- string delimeterName = setup + TimeToStr(Time[0]); int handle=WindowFind(short_name); if(!ObjectCreate(delimeterName,OBJ_VLINE,handle,Time[0],0)) { Print("Error delimiter:",GetLastError()); } else { ObjectSet(delimeterName,OBJPROP_COLOR,DelimColor); ObjectSet(delimeterName,OBJPROP_STYLE,STYLE_DOT); } } void ShiftArray() { for(int cnt=tickCounter-1; cnt > 0; cnt--) { FPI[cnt] = FPI[cnt-1]; } if (UseDelimiter!=0) { for (int j=0;j<ObjectsTotal();j++) { int NumStr = StringFind(ObjectName(j),setup,0); if (NumStr == 0) { datetime Time1=ObjectGet(ObjectName(j),OBJPROP_TIME1); int BarTime1=iBarShift(NULL,0,Time1); Time1 = Time[BarTime1+1]; ObjectSet(ObjectName(j),OBJPROP_TIME1,Time1); if( BarTime1+1 > MaxTicks ) { if (!ObjectDelete(ObjectName(j))) { int _GetLastError = GetLastError(); Print("ObjectDelete: ",ObjectName(j)," Error #", _GetLastError ); } } } } } } bool isNewBar() { bool res=false; if (Time[0]!=pTime) { res=true; pTime=Time[0]; } return(res); } bool ObjDel(string name) { int _GetLastError = 0; while(ObjFind(name,0,0) > 0) { int obtotal = ObjectsTotal(); for (int i = 0; i < obtotal;i++) { if (StringFind(ObjectName(i),name,0) >= 0) { if (!ObjectDelete(ObjectName(i))) { _GetLastError = GetLastError(); Print( "ObjectDelete( \"",ObjectName(i),"\" ) - Error #", _GetLastError ); } } } } if(_GetLastError > 0) return(false); else return (true); } //----- int ObjFind(string name,int start, int num) { int cnt = 0; for (int i = 0; i < ObjectsTotal();i++) if (StringFind(ObjectName(i),name,start) == num) cnt+=1; return(cnt); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if(tickCounter == 0) for(int i=Bars-1;i>=0;i--) FPI[i]=0.0; tickCounter++; if(tickCounter >= MaxTicks) { tickCounter = MaxTicks; FPI[tickCounter]=0.0; } if (isNewBar()) {if(UseDelimiter == 1) SetDelimeter();} else ShiftArray(); double Num1 = MarketInfo(Symbol_1st,MODE_BID); double Num2 = MarketInfo(Symbol_2nd,MODE_BID); double DNum = MarketInfo(Symbol_3rd,MODE_BID); FPI[0]= Num1 * Num2 / DNum; //---- return(0); }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: