MQL5 Marketinfo

//+------------------------------------------------------------------+

//|                                                   MarketInfo.mq5 |

//|                        Copyright 2010, MetaQuotes Software Corp. |

//|                                              http://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2010, MetaQuotes Software Corp."

#property link      "http://www.mql5.com"

#property version   "1.00"

#define MODE_LOW 1

#define MODE_HIGH 2

#define MODE_TIME 5

#define MODE_BID 9

#define MODE_ASK 10

#define MODE_POINT 11

#define MODE_DIGITS 12

#define MODE_SPREAD 13

#define MODE_STOPLEVEL 14

#define MODE_LOTSIZE 15

#define MODE_TICKVALUE 16

#define MODE_TICKSIZE 17

#define MODE_SWAPLONG 18

#define MODE_SWAPSHORT 19

#define MODE_STARTING 20

#define MODE_EXPIRATION 21

#define MODE_TRADEALLOWED 22

#define MODE_MINLOT 23

#define MODE_LOTSTEP 24

#define MODE_MAXLOT 25

#define MODE_SWAPTYPE 26

#define MODE_PROFITCALCMODE 27

#define MODE_MARGINCALCMODE 28

#define MODE_MARGININIT 29

#define MODE_MARGINMAINTENANCE 30

#define MODE_MARGINHEDGED 31

#define MODE_MARGINREQUIRED 32

#define MODE_FREEZELEVEL 33

#define MAXSYMBOL 20

string Symb[MAXSYMBOL];

string FileName="";

int FileHandle=0;

MqlTick last_tick;

double Bid;

double Ask;

//+------------------------------------------------------------------+

//| Script program start function                                    |

//+------------------------------------------------------------------+

void OnStart()

  {

//---

  Symb[0]="AUDCAD";

  Symb[1]="AUDJPY";

  Symb[2]="AUDNZD";

  Symb[3]="AUDUSD";

  Symb[4]="CADJPY";

  Symb[5]="CHFJPY";

  Symb[6]="EURAUD";

  Symb[7]="EURCAD";

  Symb[8]="EURCHF";

  Symb[9]="EURGBP";

  Symb[10]="EURJPY";

  Symb[11]="EURUSD";

  Symb[12]="GBPCHF";

  Symb[13]="GBPJPY";

  Symb[14]="GBPUSD";

  Symb[15]="NZDUSD";

  Symb[16]="USDCAD";

  Symb[17]="USDCHF";

  Symb[18]="USDJPY";

  Symb[19]="USDMXN";  

   // file name formation, (Symbol+Period+Month) EURUSD_M1_09.txt

  string header="SYMBOL,LOTSIZE,POINT,SPREAD,STOPLEVEL,DIGITS,TICKVALUE,TICKSIZE";

  

   FileName="MarketInfo.csv";

   FileHandle=FileOpen(FileName,FILE_WRITE|FILE_ANSI,',');

   if(FileHandle!=INVALID_HANDLE)

   {   

     FileWrite(FileHandle, header);   // heading   

     for(int i=0; i<MAXSYMBOL ; i++)

     {    

       SymbolInfoTick(Symb[i],last_tick);

       Bid=last_tick.bid;

       Ask=last_tick.ask;

       

       int LotSize     = MarketInfoMQL4(Symb[i], MODE_LOTSIZE);

       double point       = MarketInfoMQL4(Symb[i], MODE_POINT);

       int spread         = MarketInfoMQL4(Symb[i], MODE_SPREAD); 

       int msl            = MarketInfoMQL4(Symb[i], MODE_STOPLEVEL);

       int dg             = MarketInfoMQL4(Symb[i], MODE_DIGITS); 

       double tval        = MarketInfoMQL4(Symb[i], MODE_TICKVALUE);

       double tsize       = MarketInfoMQL4(Symb[i], MODE_TICKSIZE);

       //double price1pip   = tval/tsize*point*LotSize;

       //Print(sym," ",tval," ",tsize," ",point);

       string line=Symb[i]+","+LotSize+","+point+","+spread+","+msl+","+dg+","+tval+","+tsize;

       FileWrite(FileHandle, line);   // heading

      }       

     

   }  

   

   FileClose(FileHandle);        

   

  }

//+------------------------------------------------------------------+

double MarketInfoMQL4(string symbol,

                      int type)

  {

   switch(type)

     {

      case MODE_LOW:

         return(SymbolInfoDouble(symbol,SYMBOL_LASTLOW));

      case MODE_HIGH:

         return(SymbolInfoDouble(symbol,SYMBOL_LASTHIGH));

      case MODE_TIME:

         return(SymbolInfoInteger(symbol,SYMBOL_TIME));

      case MODE_BID:

         return(Bid);

      case MODE_ASK:

         return(Ask);

      case MODE_POINT:

         return(SymbolInfoDouble(symbol,SYMBOL_POINT));

      case MODE_DIGITS:

         return(SymbolInfoInteger(symbol,SYMBOL_DIGITS));

      case MODE_SPREAD:

         return(SymbolInfoInteger(symbol,SYMBOL_SPREAD));

      case MODE_STOPLEVEL:

         return(SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL));

      case MODE_LOTSIZE:

         return(SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE));

      case MODE_TICKVALUE:

         return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE));

      case MODE_TICKSIZE:

         return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE));

      case MODE_SWAPLONG:

         return(SymbolInfoDouble(symbol,SYMBOL_SWAP_LONG));

      case MODE_SWAPSHORT:

         return(SymbolInfoDouble(symbol,SYMBOL_SWAP_SHORT));

      case MODE_STARTING:

         return(0);

      case MODE_EXPIRATION:

         return(0);

      case MODE_TRADEALLOWED:

         return(0);

      case MODE_MINLOT:

         return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN));

      case MODE_LOTSTEP:

         return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP));

      case MODE_MAXLOT:

         return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX));

      case MODE_SWAPTYPE:

         return(SymbolInfoInteger(symbol,SYMBOL_SWAP_MODE));

      case MODE_PROFITCALCMODE:

         return(SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE));

      case MODE_MARGINCALCMODE:

         return(0);

      case MODE_MARGININIT:

         return(0);

      case MODE_MARGINMAINTENANCE:

         return(0);

      case MODE_MARGINHEDGED:

         return(0);

      case MODE_MARGINREQUIRED:

         return(0);

      case MODE_FREEZELEVEL:

         return(SymbolInfoInteger(symbol,SYMBOL_TRADE_FREEZE_LEVEL));

      default: return(0);

     }

   return(0);

  }

///////////////////////////////////////////////////////////////////////////////////

SYMBOL,LOTSIZE,POINT,SPREAD,STOPLEVEL,DIGITS,TICKVALUE,TICKSIZE

AUDCAD,100000,0.00001000,61,120,5,0.00000000,0.00000000

AUDJPY,100000,0.00100000,30,70,3,0.00000000,0.00000000

AUDNZD,100000,0.00001000,100,500,5,0.00000000,0.00000000

AUDUSD,100000,0.00001000,18,50,5,0.00000000,0.00000000

CADJPY,0,0.00000000,0,0,0,0.00000000,0.00000000

CHFJPY,100000,0.00100000,40,100,3,0.00000000,0.00000000

EURAUD,100000,0.00001000,50,100,5,0.00000000,0.00000000

EURCAD,100000,0.00001000,61,150,5,0.00000000,0.00000000

EURCHF,100000,0.00001000,21,80,5,0.00000000,0.00000000

EURGBP,100000,0.00001000,15,80,5,0.00000000,0.00000000

EURJPY,100000,0.00100000,33,50,3,0.00000000,0.00000000

EURUSD,100000,0.00001000,12,50,5,0.00000000,0.00000000

GBPCHF,100000,0.00001000,59,100,5,0.00000000,0.00000000

GBPJPY,100000,0.00100000,62,100,3,0.00000000,0.00000000

GBPUSD,100000,0.00001000,24,50,5,0.00000000,0.00000000

NZDUSD,100000,0.00001000,31,80,5,0.00000000,0.00000000

USDCAD,100000,0.00001000,25,50,5,0.00000000,0.00000000

USDCHF,100000,0.00001000,26,50,5,0.00000000,0.00000000

USDJPY,100000,0.00100000,17,50,3,0.00000000,0.00000000

USDMXN,0,0.00000000,0,0,0,0.00000000,0.00000000