Predictive_Price_FPIv2





//+------------------------------------------------------------------+
//|                                              Price Predictor.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern bool IsMini= false;
extern bool UseBid= true;
string pairs[14][3]={
"EURJPY","EURAUD","AUDJPY",//1 d
"EURJPY","EURCHF","CHFJPY",//6 h, inv
"EURJPY","EURGBP","GBPJPY",//12 inv
"EURJPY","EURUSD","USDJPY",//14
"AUDJPY","AUDUSD","USDJPY",//2 d
"EURUSD","EURAUD","AUDUSD",//3 d
"EURUSD","EURGBP","GBPUSD",//13
"USDJPY","USDCHF","CHFJPY",//8 
"GBPJPY","GBPCHF","CHFJPY",//7 inv
"GBPJPY","GBPUSD","USDJPY",//14
"EURCAD","EURUSD","USDCAD",//9 inv
"EURCHF","EURGBP","GBPCHF",//10 inv
"EURCHF","EURUSD","USDCHF",//11 inv
"GBPCHF","GBPUSD","USDCHF",//15
};

int itn;string cal[14];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   if(IsMini){
      for(int i=0;i<14;i++){
         for(int y=0;y<3;y++){
            pairs[i][y]=pairs[i][y]+"m";
         }
      }
   }
   start();
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   while(true){
      RefreshRates();
      main();
      itn++;
      Sleep(100);
   }
//----
   return(0);
  }
  
  
//+------------------------------------------------------------------+

void main(){
   color col[]={Yellow,Orange,Pink,YellowGreen,Purple,Red};
   string colst[]={"Yellow","Orange","Pink","YellowGreen","Purple","Red"};
   int match[];int c;
   for(int i=0;i<14;i++){
      for(int y=0;y<3;y++){
         if(pairs[i][y]==Symbol()){
            c++;
            ArrayResize(match,c);
            match[c-1]=i;
         }
      }
   }
   c=0;
   
   int size=ArraySize(match);
   /*for(i=0;i<size;i++){
      Comment("ring found ",match[i],"\n\n",
      pairs[match[i]][0],"  ",
      pairs[match[i]][1],"  ",
      pairs[match[i]][2],"  ");
      Sleep(2000);
   }
      */
   //Comment("\nMatches = ",size,"\nIterations = ",itn);
   static double fpi[];
   ////////////////////
   getFPI(match,fpi);////////////////
   ////////////////////
   for(i=0;i<size;i++){
      double level=0;
      if(UseBid)double pr1=MarketInfo(pairs[match[i]][0],MODE_BID);else pr1= MarketInfo(pairs[match[i]][0],MODE_ASK);
      if(UseBid)double pr2=MarketInfo(pairs[match[i]][1],MODE_BID);else pr2= MarketInfo(pairs[match[i]][1],MODE_ASK);
      if(UseBid)double pr3=MarketInfo(pairs[match[i]][2],MODE_BID);else pr3= MarketInfo(pairs[match[i]][2],MODE_ASK);
      pr1=1/pr1;
      for(y=0;y<3;y++){
         if(Symbol()==pairs[match[i]][y]){
            c++;
            if(y==0){
            level=fpi[match[i]]/(pr2*pr3);
            level=1/level;
            break;
            }
            if(y==1){
            level=fpi[match[i]]/(pr1*pr3);
            break;
            }
            if(y==2){
            level=fpi[match[i]]/(pr1*pr2);
            break;
            }
         }
      }
      //level=NormalizeDouble(level,Digits);
      //level+=i*Point;
      string name=Symbol()+DoubleToStr(i,0);
      drawLine(NormalizeDouble(level,Digits),name,col[i],1);
    
   }
   string k;
   for(i=0;i<size;i++){
      k=k+"\n";
      for(y=0;y<3;y++){
         k=k+pairs[match[i]][y]+" ";
      }
      k=k+StringConcatenate(" ( ",colst[i]," )",cal[match[i]]);
   }
   Comment("RINGS:\n",k);
}
      
void getFPI(int match[],double& fpi[])
{
   if(ArraySize(fpi)!=14)ArrayResize(fpi,14);
   int size=ArraySize(match);
   static double fpiavg[14][200];  
   static double lasttick[14];
   for(int i=0;i<size;i++){
      if(!UseBid){
         double aaa=(1/MarketInfo(pairs[match[i]][0],MODE_ASK))*MarketInfo(pairs[match[i]][1],MODE_ASK)*MarketInfo(pairs[match[i]][2],MODE_ASK);
      }else{
         aaa =(1/MarketInfo(pairs[match[i]][0],MODE_BID))*MarketInfo(pairs[match[i]][1],MODE_BID)*MarketInfo(pairs[match[i]][2],MODE_BID);
      }
      if(aaa!=lasttick[match[i]]){
         lasttick[match[i]]=aaa;
         for(int y=200-1;y>0;y--){
            fpiavg[match[i]][y]=fpiavg[match[i]][y-1];
         }
         fpiavg[match[i]][0]=aaa;
         int c=0;double total=0;
         while(fpiavg[match[i]][c]!=0){
            total+=fpiavg[match[i]][c];
            c++;
         }
         //if(c<3)cal[match[i]]=" (Calibrating) ";else cal[match[i]]="";
         
         fpi[match[i]]=total/c;
         Print("FPI new average on ",i," # ",c,"  avg :",fpi[match[i]]);
      }
   }
}
         
      
void drawLine(double lvl,string name, color Col,int type){
   if(ObjectFind(name) != 0){
      ObjectCreate(name, OBJ_HLINE, 0, Time[0], lvl,Time[0],lvl);
      if(type == 1)
         ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);
      else
         ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
      ObjectSet(name, OBJPROP_COLOR, Col);
      ObjectSet(name,OBJPROP_WIDTH,1);
   }else{
      ObjectDelete(name);
      ObjectCreate(name, OBJ_HLINE, 0, Time[0], lvl,Time[0],lvl);
      if(type == 1)
         ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);
      else
         ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
      ObjectSet(name, OBJPROP_COLOR, Col);        
      ObjectSet(name,OBJPROP_WIDTH,1);
   }
}
      
         



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: