### Content directory

• Overview
• The concept of point
• Point value
• Output the spread costs of all Forex symbols
• Test
• Conclusion

### Output the spread costs of all Forex symbols

The fourth part describes how to output the spread cost of all Forex symbols in the platform.

1.  Get the spread cost of all Forex symbols in the platform

In class CForexSymbols, CForexSymbols::FxSymbolsTotal() returns the total number of foreign exchange currency pairs in the platform. CForexSymbols::IsForex() is used to determine whether a given symbol is a currency pair. Since the gold XAU and silver XAG trading instrument are CFD spread contracts, their profit calculation formulas are the same as the foreign exchange varieties, and XAU and XAG are common trading varieties. Therefore, the XAU and XAG trading varieties are also counted within the total number of foreign currency pairs. The specific code is as follows:

```//+------------------------------------------------------------------+
//| get total forex symbols number                                   |
//+------------------------------------------------------------------+
int CForexSymbols::FxSymbolsTotal(void)
{
int i;
string symbol;
//--it returns the total number of all symbols.
int SymbsTotalNum = ::SymbolsTotal(false);
FXSymbsTotalNum = 0;
::ArrayResize(AllSymbols,SymbsTotalNum);

for(i = 0; i < SymbsTotalNum; i++)
{
symbol = ::SymbolName(i,false);
if(!IsForex(symbol)) continue;

AllSymbols[FXSymbsTotalNum] = symbol;
FXSymbsTotalNum++;
}

return(FXSymbsTotalNum);
}
//+------------------------------------------------------------------+
//| Judge whether this symbol is Forex or not                        |
//+------------------------------------------------------------------+
bool CForexSymbols::IsForex(string symb)
{
if(CalcMode != SYMBOL_CALC_MODE_FOREX)
{
if(FxSymbolType(symb,"XAU") == -1 && FxSymbolType(symb,"XAG") == -1) return(false);
}

return(true);
}```

CForexSymbols::GetFxSymbols() is used to get the symbols of all foreign exchange currency pairs in the platform. If you need to obtain the total number of foreign exchange currency pairs in the platform at the same time, first determine whether the FxSymbolsTotal() function has been called, if it has been called directly using the value of FXSymbsTotalNum variables. The specific code is as follows:

```//+------------------------------------------------------------------+
//| get all forex symbols                                            |
//+------------------------------------------------------------------+
bool CForexSymbols::GetFxSymbols(string &FxSymb[])
{
uint array_size;
//---check whether if the fuction ForexSymbolsTotal() has been called
if(FXSymbsTotalNum == -1)
{
array_size = FxSymbolsTotal();
}
else
{
array_size = FXSymbsTotalNum;
}

::ArrayResize(FxSymb,array_size);

if(::ArrayCopy(FxSymb,AllSymbols,0,0,array_size) != array_size)
{
::Print(__FUNCTION__," > Array copy error !!");
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
//| get all forex symbols                                            |
//+------------------------------------------------------------------+
bool CForexSymbols::GetFxSymbols(string &FxSymb[],int &FxSymbsTNum)
{
//---check whether if the fuction ForexSymbolsTotal() has been called
if(FXSymbsTotalNum == -1)
{
FxSymbsTNum = FxSymbolsTotal();
}
else
{
FxSymbsTNum = FXSymbsTotalNum;
}

::ArrayResize(FxSymb,FxSymbsTNum);

if(::ArrayCopy(FxSymb,AllSymbols,0,0,FxSymbsTNum) != FxSymbsTNum)
{
::Print(__FUNCTION__," > Array copy error !!");
return(false);
}
return(true);
}```

```//+------------------------------------------------------------------+
//| Get Symbols Spread Cost                                          |
//+------------------------------------------------------------------+
{
int i;
int SymbsNum;

SymbsNum = ::ArraySize(Symb);

for(i = 0; i < SymbsNum; i++)
{

}

return(true);
}
//+------------------------------------------------------------------+
//| Get All Symbols Spread Cost                                      |
//+------------------------------------------------------------------+
{
if(!oSymbs.GetFxSymbols(AllSymb,SymbsTotalNum))
{
return(false);
}

::ArrayResize(AllCost,SymbsTotalNum);

for(int i = 0; i < SymbsTotalNum; i++)
{

}

return(true);
}```

The method used in this paper is to output all the spread costs obtained to the specified file. The output path is "platform path\MQL5\Files\SpreadCostData". The file name is the current date, and the output path and file name are as follows:

The specific code output to the file is as follows:

```//+------------------------------------------------------------------+
//| Output Trade Cost to file                                        |
//+------------------------------------------------------------------+
bool Output()
{
int totalnum;
string symbols[];
string FileName;
string date = TimeToString(TimeLocal(),TIME_DATE);
string minute = TimeToString(TimeLocal(),TIME_MINUTES);

if(StringReplace(minute,":","h") == -1)
{
Print("StringReplace error!");
return(false);
}
FileName = date+" "+minute+"m.csv";

int file_handle=FileOpen(DirectoryName+"\\"+FileName,FILE_WRITE|FILE_CSV);
PrintFormat("%s file is available for writing",FileName);

+"/"+DoubleToString(Extlots,2)+" lot(s))");
if(file_handle!=INVALID_HANDLE)
{
for(int i=0;i<totalnum;i++)
{
}
//--- close the file
FileClose(file_handle);
PrintFormat("Data is written, %s file is closed",FileName);
}
else
PrintFormat("Failed to open %s file, Error code = %d",FileName,GetLastError());

return(true);
}```

Since not all trading symbols is showed by default in MT5 platform Market Watch, the MT5 Market Watch must be set to Show All before using this EA. The operation is as follows:

3.  Output display

1)  In the USD account, the trading volume is a standard lot, and the spreads and spread costs of all Forex symbols in the market watch

Figure 2.  Spread costs in USD account

2) In the EUR account, the trading volume is a standard lot, and the spreads and spread costs of all Forex symbols in the market watch

Figure 3.  Spread costs in EUR account

Share it with friends: