//+------------------------------------------------------------------+
//|                                        BuySellBasketTotalv2a.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net/|
//|                           Major mods by Comdoc (goldom@yahoo.com)|
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Green
#property indicator_color2 LightGreen
#property indicator_color3 Lime
#property indicator_color4 LightPink
#property indicator_color5 HotPink
#property indicator_color6 Red

//---- input parameters
//extern bool buy_all = false;
extern int tf=15;
extern int look_back= 0;
extern int DisplayBars = 500;
extern string long_basket= "enter 9 long symbols";
extern string mlong_basket1= "AUDJPY";
extern double price1= 0;
extern string mlong_basket2= "CADJPY";
extern double price2= 0;
extern string mlong_basket3= "CHFJPY";
extern double price3= 0;
extern string mlong_basket4= "EURCHF";
extern double price4= 0;
extern string mlong_basket5= "EURJPY";
extern double price5= 0;
extern string mlong_basket6= "EURUSD";
extern double price6= 0;
extern string mlong_basket7= "GBPCHF";
extern double price7= 0;
extern string mlong_basket8= "GBPJPY";
extern double price8= 0;
extern string mlong_basket9= "USDJPY";
extern double price9= 0;

extern string short_basket= "enter 5 short symbols";
extern string mshort_basket1= "AUDUSD";
extern double price10= 0;
extern string mshort_basket2= "EURGBP";
extern double price11= 0;
extern string mshort_basket3= "GBPUSD";
extern double price12= 0;
extern string mshort_basket4= "USDCAD";
extern double price13= 0;
extern string mshort_basket5= "USDCHF";
extern double price14= 0;

double AUDJPY,CADJPY,CHFJPY,EURCHF,EURJPY,EURUSD,GBPCHF,GBPJPY,USDJPY;
double AUDUSD,EURGBP,GBPUSD,USDCAD,USDCHF;
double AUDJPY_now,CADJPY_now,GBPUSD_now,EURGBP_now,EURJPY_now,EURUSD_now,GBPJPY_now,USDCHF_now,USDJPY_now;
double AUDUSD_now,CHFJPY_now,EURCHF_now,GBPCHF_now,USDCAD_now;
double AUDJPY_pipsBuy,CADJPY_pipsBuy,CHFJPY_pipsBuy,EURCHF_pipsBuy,EURJPY_pipsBuy,EURUSD_pipsBuy,GBPCHF_pipsBuy,GBPJPY_pipsBuy,USDJPY_pipsBuy;
double AUDUSD_pipsBuy,EURGBP_pipsBuy,GBPUSD_pipsBuy,USDCAD_pipsBuy,USDCHF_pipsBuy;
double AUDJPY_pipsSell,CADJPY_pipsSell,CHFJPY_pipsSell,EURCHF_pipsSell,EURJPY_pipsSell,EURUSD_pipsSell,GBPCHF_pipsSell,GBPJPY_pipsSell,USDJPY_pipsSell;
double AUDUSD_pipsSell,EURGBP_pipsSell,GBPUSD_pipsSell,USDCAD_pipsSell,USDCHF_pipsSell;
double highest_long_pips=0, highest_short_pips=0,long_pipsBuy, short_pipsBuy,long_pipsSell, short_pipsSell;

string long_basket1, long_basket2, long_basket3, long_basket4, long_basket5, long_basket6, long_basket7, long_basket8, long_basket9;
string short_basket1, short_basket2, short_basket3, short_basket4, short_basket5; 
int    spread1,spread2,spread3,spread4,spread5,spread6,spread7,spread8,spread9;
int    spread10,spread11,spread12,spread13,spread14;

//---- buffers
double LongPipsBuyBuffer[];
double ShortPipsBuyBuffer[];
double CombinedPipsBuyBuffer[];
double LongPipsSellBuffer[];
double ShortPipsSellBuffer[];
double CombinedPipsSellBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- 2 additional buffers are used for counting.
//   IndicatorBuffers(3);
//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,LongPipsBuyBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ShortPipsBuyBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,CombinedPipsBuyBuffer);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,LongPipsSellBuffer);
   SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(4,ShortPipsSellBuffer);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,CombinedPipsSellBuffer);
   
//---- name for DataWindow and indicator subwindow label
   short_name="BuySellBasket";
   IndicatorShortName(short_name);
   SetIndexLabel(0,"LongPipsBuy");
   SetIndexLabel(1,"ShortPipsBuy");
   SetIndexLabel(2,"CombinedPipsBuy");
   SetIndexLabel(3,"LongPipsSell");
   SetIndexLabel(4,"ShortPipsSell");
   SetIndexLabel(5,"CombinedPipsSell");
//----

   GetCorrectPairs();
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| BuySellBasket Total                                              |
//+------------------------------------------------------------------+
int start()
  {
   int    i,counted_bars=IndicatorCounted();
   double rel,negative,positive;
   static bool HaveSpreads = false;
//----
//----
   if (DisplayBars < 1)
     i=Bars-1;
   else
      i = DisplayBars;
   
   if (!HaveSpreads)
   {
     GetSpreads();
     HaveSpreads = true;
   }
   while(i>=0)
     {
     if (price1==0)AUDJPY= iOpen(long_basket1, tf, i + look_back);else AUDJPY=price1;
     if (price2==0)CADJPY= iOpen(long_basket2, tf, i + look_back);else CADJPY=price2;
     if (price3==0)CHFJPY= iOpen(long_basket3, tf, i + look_back);else CHFJPY=price3;
     if (price4==0)EURCHF= iOpen(long_basket4, tf, i + look_back);else EURCHF=price4;
     if (price5==0)EURJPY= iOpen(long_basket5, tf, i + look_back);else EURJPY=price5;
     if (price6==0)EURUSD= iOpen(long_basket6, tf, i + look_back);else EURUSD=price6;
     if (price7==0)GBPCHF= iOpen(long_basket7, tf, i + look_back);else GBPCHF=price7;
     if (price8==0)GBPJPY= iOpen(long_basket8, tf, i + look_back);else GBPJPY=price8;
     if (price9==0)USDJPY= iOpen(long_basket9, tf, i + look_back);else USDJPY=price9;
     if (price10==0)AUDUSD= iOpen(short_basket1, tf, i + look_back);else AUDUSD=price10;
     if (price11==0)EURGBP= iOpen(short_basket2, tf, i + look_back);else EURGBP=price11;
     if (price12==0)GBPUSD= iOpen(short_basket3, tf, i + look_back);else GBPUSD=price12;
     if (price13==0)USDCAD= iOpen(short_basket4, tf, i + look_back);else USDCAD=price13;
     if (price14==0)USDCHF= iOpen(short_basket5, tf, i + look_back);else USDCHF=price14;
     
     AUDJPY_now= iClose(long_basket1, 0, i);
     CADJPY_now= iClose(long_basket2, 0, i);
     CHFJPY_now= iClose(long_basket3, 0, i);
     EURCHF_now= iClose(long_basket4, 0, i);
     EURJPY_now= iClose(long_basket5, 0, i);
     EURUSD_now= iClose(long_basket6, 0, i);
     GBPCHF_now= iClose(long_basket7, 0, i);
     GBPJPY_now= iClose(long_basket8, 0, i);
     USDJPY_now= iClose(long_basket9, 0, 1);
     
      AUDJPY_pipsBuy = (AUDJPY_now-AUDJPY)/dPoint(long_basket1);
      AUDJPY_pipsSell = (AUDJPY-AUDJPY_now)/dPoint(long_basket1);
      
      CADJPY_pipsBuy = (CADJPY_now-CADJPY)/dPoint(long_basket2);
      CADJPY_pipsSell = (CADJPY-CADJPY_now)/dPoint(long_basket2);
      
      CHFJPY_pipsBuy = (GBPUSD_now-GBPUSD)/dPoint(long_basket3);
      CHFJPY_pipsBuy = (GBPUSD_now-GBPUSD)/dPoint(long_basket3);
      
      EURCHF_pipsBuy = (EURCHF_now-EURCHF)/dPoint(long_basket4);
      EURCHF_pipsSell = (EURCHF-EURCHF_now)/dPoint(long_basket4);
      
      EURJPY_pipsBuy = (EURJPY_now-EURJPY)/dPoint(long_basket5);
      EURJPY_pipsSell = (EURJPY-EURJPY_now)/dPoint(long_basket5);
      
      EURUSD_pipsBuy = (EURUSD_now-EURUSD)/dPoint(long_basket6);
      EURUSD_pipsSell = (EURUSD-EURUSD_now)/dPoint(long_basket6);

      GBPCHF_pipsBuy = (GBPCHF_now-GBPCHF)/dPoint(long_basket7);
      GBPCHF_pipsSell = (GBPCHF-GBPCHF_now)/dPoint(long_basket7);
      
      GBPJPY_pipsBuy = (GBPJPY_now-GBPJPY)/dPoint(long_basket8);
      GBPJPY_pipsSell = (GBPJPY-GBPJPY_now)/dPoint(long_basket8);

      USDJPY_pipsBuy = (USDJPY_now-USDJPY)/dPoint(long_basket9);
      USDJPY_pipsSell = (USDJPY-USDJPY_now)/dPoint(long_basket9);          

long_pipsBuy = AUDJPY_pipsBuy + CADJPY_pipsBuy + CHFJPY_pipsBuy + EURCHF_pipsBuy + EURJPY_pipsBuy + EURUSD_pipsBuy + GBPCHF_pipsBuy + GBPJPY_pipsBuy + USDJPY_pipsBuy; 
   LongPipsBuyBuffer[i] = long_pipsBuy; 

long_pipsSell = AUDJPY_pipsSell + CADJPY_pipsSell + CHFJPY_pipsSell + EURCHF_pipsSell + EURJPY_pipsSell + EURUSD_pipsSell + GBPCHF_pipsSell + GBPJPY_pipsSell + USDJPY_pipsSell;
   LongPipsSellBuffer[i] = long_pipsSell;
   
   AUDUSD_now= iClose(short_basket1, 0, i);
   EURGBP_now= iClose(short_basket2, 0, i);
   GBPUSD_now= iClose(short_basket3, 0, i);
   USDCAD_now= iClose(short_basket4, 0, i);
   USDCHF_now= iClose(short_basket5, 0, i);
         
      AUDUSD_pipsBuy = (AUDUSD_now-AUDUSD)/dPoint(short_basket1);
      AUDUSD_pipsSell = (AUDUSD-AUDUSD_now)/dPoint(short_basket1);

      EURGBP_pipsBuy = (EURGBP_now-EURGBP)/dPoint(short_basket2);
      EURGBP_pipsSell = (EURGBP-EURGBP_now)/dPoint(short_basket2);

      GBPUSD_pipsBuy = (GBPUSD_now-GBPUSD)/dPoint(short_basket3);
      GBPUSD_pipsSell = (GBPUSD-GBPUSD_now)/dPoint(short_basket3);
      
      USDCAD_pipsBuy = (USDCAD_now-USDCAD)/dPoint(short_basket4);
      USDCAD_pipsSell = (USDCAD-USDCAD_now)/dPoint(short_basket4);

      USDCHF_pipsBuy = (USDCHF_now-USDCHF)/dPoint(short_basket5);
      USDCHF_pipsSell = (USDCHF-USDCHF_now)/dPoint(short_basket5);

short_pipsBuy = AUDUSD_pipsBuy + EURGBP_pipsBuy + GBPUSD_pipsBuy + USDCAD_pipsBuy + USDCHF_pipsBuy;
      ShortPipsBuyBuffer[i] = short_pipsBuy;

short_pipsSell = AUDUSD_pipsSell + EURGBP_pipsSell + GBPUSD_pipsSell + USDCAD_pipsSell + USDCHF_pipsSell;
      
      ShortPipsSellBuffer[i] = short_pipsSell;
      CombinedPipsBuyBuffer[i] = short_pipsBuy+long_pipsBuy;
      CombinedPipsSellBuffer[i] = short_pipsSell+long_pipsSell;
   
      i--;
     }
//----
   return(0);
  }


double dPoint(string sym)
{
  double _Point = MarketInfo(sym, MODE_POINT);
  if (StringFind(sym, "JPY")>=0)
      _Point=0.01;
  
  if (_Point==0) _Point=0.0001; 
  
  return (_Point);
}


void GetCorrectPairs()
{
   long_basket1 = GetCorrectSymbol(mlong_basket9);
   long_basket2 = GetCorrectSymbol(mlong_basket9);
   long_basket3 = GetCorrectSymbol(mlong_basket9);
   long_basket4 = GetCorrectSymbol(mlong_basket9);
   long_basket5 = GetCorrectSymbol(mlong_basket9);
   long_basket6 = GetCorrectSymbol(mlong_basket9);
   long_basket7 = GetCorrectSymbol(mlong_basket9);
   long_basket8 = GetCorrectSymbol(mlong_basket9);
   long_basket9 = GetCorrectSymbol(mlong_basket9);
   
   short_basket1 = GetCorrectSymbol(mshort_basket1);
   short_basket2 = GetCorrectSymbol(mshort_basket2);
   short_basket3 = GetCorrectSymbol(mshort_basket3);
   short_basket4 = GetCorrectSymbol(mshort_basket4);
   short_basket5 = GetCorrectSymbol(mshort_basket5);
   
}

string GetCorrectSymbol(string pair)
{
   string AddChar, myPair;
   
   myPair = pair;
   if (StringLen(pair) > 0)
   {
   if (StringLen(Symbol()) == 7)
     {
      AddChar = StringSubstr(Symbol(), 6, 1);
      myPair = pair + AddChar;
     }
   }
   return(myPair);
   
}

void GetSpreads()
{
  spread1=MarketInfo(long_basket1,MODE_SPREAD);
  spread2=MarketInfo(long_basket2,MODE_SPREAD);
  spread3=MarketInfo(long_basket3,MODE_SPREAD);
  spread4=MarketInfo(long_basket4,MODE_SPREAD);
  spread5=MarketInfo(long_basket5,MODE_SPREAD);
  spread6=MarketInfo(long_basket6,MODE_SPREAD);
  spread7=MarketInfo(long_basket7,MODE_SPREAD);
  spread8=MarketInfo(long_basket8,MODE_SPREAD);
  spread9=MarketInfo(long_basket9,MODE_SPREAD);
  
  spread10=MarketInfo(short_basket1,MODE_SPREAD);
  spread11=MarketInfo(short_basket2,MODE_SPREAD);
  spread12=MarketInfo(short_basket3,MODE_SPREAD);
  spread13=MarketInfo(short_basket4,MODE_SPREAD);
  spread14=MarketInfo(short_basket5,MODE_SPREAD);
}
//+------------------------------------------------------------------+