← К каталогу
Исходный код · ID 2409

MarginTrader

mt_functions_mt5.mqh
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Библиотека mt_functions_mt5.mqh — это include-файл для MetaTrader 5, предоставляющий набор вспомогательных функций для разработки программ. Она содержит инструменты создания и управления графическими объектами на графике: метки, кнопки, панели, поля ввода и растровые изображения, что позволяет строить визуальные интерфейсы на чартах.

Библиотека включает функции финансовых расчётов и работы с торговой информацией. Она способна проверять и корректировать объём сделки под требования брокера, рассчитывать требуемое обеспечение для заданного количества лотов, а также кодировать названия символов в числовые идентификаторы.

Важную роль в библиотеке играет обработка ошибок. Функции позволяют сохранять данные об ошибках в глобальные переменные и получать подробные текстовые описания как кодов возврата торгового сервера, так и ошибок времени выполнения MQL5.

В библиотеке отсутствуют пользовательские настраиваемые параметры (input-параметры). Все функции работают как встроенные утилиты, подключаемые через #include.

Состав библиотеки

Классов: 0 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 10

Функции
Функция void MakeBackground(color BCol)

Создаёт цветную фоновую область на графике с помощью объектов-меток.

Функция double Divide(double n, double d)

Делит одно число на другое, возвращая ноль вместо ошибки, если делитель равен нулю.

Функция string AccountCurrencySymbol()

Возвращает код валюты торгового счёта.

Функция double EncodeSymbol()

Возвращает числовой код текущего торгового символа.

Функция ulong EncodeSy(string _Sym)

Возвращает числовой код для указанной строки символа.

Функция double VerifyVolume(string pSymbol,double pVolume)

Проверяет и корректирует объём сделки в соответствии с минимальным, максимальным и шаговым значением символа.

Функция double MarginRequired(double pLots)

Рассчитывает требуемое обеспечение для заданного количества лотов.

Функция void StoreErrorData(int eCode, datetime eTime)

Сохраняет код ошибки и время её возникновения в глобальные переменные терминала.

Функция string TradeServerReturnCodeDescription(int return_code)

Возвращает текстовое описание кода возврата торгового сервера.

Функция string ErrorDescription(int err_code)

Возвращает текстовое описание кода ошибки времени выполнения MQL5.

Получить полный код

Поиск по коду файла

??//+------------------------------------------------------------------------------------------------------------------------------------------------------+

//|                                                                                                                      MarginTrader: Functions Library |

//|                                                                                                                                     MT_functions.mqh |

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

#property      strict

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

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

// --- LIBRARIES

#define MAX_RETRIES 5		// Max retries on error

#define RETRY_DELAY 3000	// Retry delay in ms



//#include       <errordescription.mqh>

#include       <MT_defines.mqh>

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

void           MakeBackground             (color BCol) {



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

   // Set the backround of working area.                                                                                                                 |

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

   

   int xB = 1;

   int yB = 0;

   char Bfontsize = 10;

   string _backName = _ID + "_bkg";



   for (int k = 0; k <= 300; k++) {

     yB = int(k * Bfontsize * 1.3);

     Label(_backName + IntegerToString(k), CORNER_RIGHT_UPPER, xB, yB, "gggggggggggg", Bfontsize, BCol, "Webdings", ANCHOR_RIGHT_LOWER);

   }

}

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

void           Label                      (string  _Name, 

                                           char    corner, 

                                           int     x, 

                                           int     y,

                                           string  _text, 

                                           char    size, 

                                           color   col = C'65,65,65', 

                                           string  _font = "Consolas",

                                           char    anchor = ANCHOR_LEFT_LOWER,

                                           int     window = 0) {



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

   // Creates a text field.                                                                                                                              |

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



   long cID = ChartID();

   

   if(ObjectFind(cID, _Name) < 0) {

   

      ObjectCreate(cID, _Name, OBJ_LABEL, window, 0, 0);

      ObjectSetInteger(cID, _Name, OBJPROP_CORNER, corner);

      ObjectSetInteger(cID, _Name, OBJPROP_SELECTABLE, false);

      ObjectSetInteger(cID, _Name, OBJPROP_HIDDEN, true);

      ObjectSetInteger(cID, _Name, OBJPROP_XDISTANCE, x);

      ObjectSetInteger(cID, _Name, OBJPROP_YDISTANCE, y);

      ObjectSetInteger(cID, _Name, OBJPROP_BACK, false);

      ObjectSetInteger(cID, _Name, OBJPROP_ANCHOR, anchor);

      ObjectSetString(cID, _Name, OBJPROP_TOOLTIP, _LF);

   }

   

   //ObjectSetText(_Name, _text, size, _font, col);

   ObjectSetString(cID, _Name, OBJPROP_TEXT, _text);

   ObjectSetInteger(cID, _Name, OBJPROP_FONTSIZE, size);

   ObjectSetString(cID, _Name, OBJPROP_FONT, _font);

   ObjectSetInteger(cID, _Name, OBJPROP_COLOR, col);



}



//+------ Mic v1.70 ------------------------------------------------------------------------------------------------------------------------------------------------+

void           PendingLabel               (string  _Name, 

                                           char    corner, 

                                           int     x, 

                                           int     y,

                                           string  _text, 

                                           char    size, 

                                           color   col = C'65,65,65', 

                                           string  _font = "Consolas",

                                           char    anchor = ANCHOR_LEFT_LOWER,

                                           int     window = 0) {



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

   // Creates a text field for pending order - Mic v1.70                                                                                                                              |

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



   long cID = ChartID();

   

   if(ObjectFind(cID, _Name) < 0) {

   

      ObjectCreate(cID, _Name, OBJ_LABEL, window, 0, 0);

      ObjectSetInteger(cID, _Name, OBJPROP_CORNER, corner);

      ObjectSetInteger(cID, _Name, OBJPROP_SELECTABLE, false);

      ObjectSetInteger(cID, _Name, OBJPROP_HIDDEN, true);

      ObjectSetInteger(cID, _Name, OBJPROP_XDISTANCE, x);

      ObjectSetInteger(cID, _Name, OBJPROP_YDISTANCE, y);

      ObjectSetInteger(cID, _Name, OBJPROP_BACK, false);

      ObjectSetInteger(cID, _Name, OBJPROP_ANCHOR, anchor);

      ObjectSetString(cID, _Name, OBJPROP_TOOLTIP, _LF);



      // This is diferent for pending order label

      ObjectSetInteger(cID,_Name,OBJPROP_SELECTABLE,true); 

      ObjectSetInteger(cID,_Name,OBJPROP_SELECTED,true); 

      ObjectSetInteger(cID,_Name,OBJPROP_ZORDER,2); 

   

      ObjectSetString(cID, _Name, OBJPROP_TEXT, _text);

      ObjectSetInteger(cID, _Name, OBJPROP_FONTSIZE, size);

      ObjectSetString(cID, _Name, OBJPROP_FONT, _font);

      ObjectSetInteger(cID, _Name, OBJPROP_COLOR, col);

      //ObjectSetText(_Name, _text, size, _font, col);

   }

   

}



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

void        Edit                       (const string           name="Edit",              // object name 

                                        const int              x=0,                      // X coordinate 

                                        const int              y=0,                      // Y coordinate 

                                        const int              width=50,                 // width 

                                        const int              height=18,                // height 

                                        const string           text="Text",              // text 

                                        const string           font="Arial",             // font 

                                        const int              font_size=10,             // font size 

                                        const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // alignment type 

                                        const ENUM_BASE_CORNER corner=CORNER_RIGHT_UPPER, // chart corner for anchoring 

                                        const color            clr=clrWhite,             // text color 

                                        const color            back_clr=clrBlack,        // background color 

                                        const color            border_clr=clrNONE        // border color

                                       )



{

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

   // Creates a edit field.                                                                                                                              |

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

   long cID = ChartID();



   if(ObjectFind(cID, name) > -1) {

      if(ObjectGetString(cID,name,OBJPROP_TEXT) != text) {

         ObjectSetString(cID,name,OBJPROP_TEXT,text);

         ObjectSetInteger(cID,name,OBJPROP_COLOR,clr);

      }

   }

   else {

      EditCreate(cID, name, 0, x, y, width, height, text, font, font_size, align, corner, clr, back_clr, border_clr);

   }

}



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

//| Create Edit object - Mic add func v1.65                          | 

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

bool EditCreate(const long             chart_ID=0,               // chart's ID 

                const string           name="Edit",              // object name 

                const int              sub_window=0,             // subwindow index 

                const int              x=0,                      // X coordinate 

                const int              y=0,                      // Y coordinate 

                const int              width=50,                 // width 

                const int              height=18,                // height 

                const string           text="Text",              // text 

                const string           font="Arial",             // font 

                const int              font_size=10,             // font size 

                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // alignment type 

                const ENUM_BASE_CORNER corner=CORNER_RIGHT_UPPER, // chart corner for anchoring 

                const color            clr=clrWhite,             // text color 

                const color            back_clr=clrBlack,        // background color 

                const color            border_clr=clrNONE        // border color

               )

  { 

//--- reset the error value 

   ResetLastError(); 

//--- create edit field 

   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0)) 

     { 

      Print(__FUNCTION__, 

            ": failed to create \"Edit\" object! Error code = ",GetLastError()); 

      return(false); 

     } 

//--- set object coordinates 

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); 

//--- set object size 

   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); 

//--- set the text 

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 

//--- set text font 

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 

//--- set font size 

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 

//--- set the type of text alignment in the object 

   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align); 

//--- set the chart's corner, relative to which object coordinates are defined 

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 

//--- set text color 

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 

//--- set background color 

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); 

//--- set border color 

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); 



//--- enable (true) or cancel (false) read-only mode 

   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY, false); 

//--- display in the foreground (false) or background (true) 

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,false); 

//--- enable (true) or disable (false) the mode of moving the label by mouse 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,false); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,false); 

//--- hide (true) or display (false) graphical object name in the object list 

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,true); 

//--- set the priority for receiving the event of a mouse click in the chart 

//   The default zero value is set when creating an object; the priority can be increased if necessary.

//   When objects are placed one atop another, only one of them with the highest priority will receive the CHARTEVENT_CLICK event.

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1); 



   // This not work with edit object

   //ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,ANCHOR_CENTER);



//--- successful execution

   return(true); 

  } 





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

void           Panel                      (string  _Name, 

                                           char    corner,

                                           char    border, 

                                           int     x, 

                                           int     y, 

                                           int     w, 

                                           int     h, 

                                           color   col,

                                           int     vis = OBJ_ALL_PERIODS) {

  

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

   // Create the panel.                                                                                                                                  |

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

   

   long cID = ChartID();

      

   if(ObjectFind(cID, _Name) == -1) {

      

      ObjectCreate(cID, _Name, OBJ_RECTANGLE_LABEL, 0, 0, 0);

      ObjectSetInteger(cID, _Name, OBJPROP_CORNER, corner);

      ObjectSetInteger(cID, _Name, OBJPROP_XDISTANCE, x);

      ObjectSetInteger(cID, _Name, OBJPROP_YDISTANCE, y);

      ObjectSetInteger(cID, _Name, OBJPROP_XSIZE, w);

      ObjectSetInteger(cID, _Name, OBJPROP_YSIZE, h);

      ObjectSetInteger(cID, _Name, OBJPROP_BGCOLOR, col);

      ObjectSetInteger(cID, _Name, OBJPROP_COLOR, col);

      ObjectSetInteger(cID, _Name, OBJPROP_BORDER_TYPE, border);

      ObjectSetInteger(cID, _Name, OBJPROP_WIDTH, 1);



      ObjectSetInteger(cID, _Name, OBJPROP_SELECTABLE, false);

      ObjectSetInteger(cID, _Name, OBJPROP_BACK, false);

      ObjectSetInteger(cID, _Name, OBJPROP_HIDDEN, true);

      ObjectSetString(cID, _Name, OBJPROP_TOOLTIP, _LF);



   }

   

   ObjectSetInteger(cID, _Name, OBJPROP_TIMEFRAMES, vis);

}

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

void           Button                     (string  _Name, 

                                           char    corner, 

                                           int     x, 

                                           int     y, 

                                           int     w, 

                                           int     h,

                                           string  _text, 

                                           int     fontsize,

                                           color   fontcol = Black,

                                           color   bkgcol = White,

                                           color   bordercol = CLR_NONE, 

                                           string  _font = "Tahoma") {



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

   // Create a button.                                                                                                                                   |

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



   long cID = ChartID();

   

   if(ObjectFind(cID, _Name) == -1) {



      ObjectCreate(cID, _Name, OBJ_BUTTON, 0, 0, 0);

      ObjectSetInteger(cID, _Name, OBJPROP_CORNER, corner);

      ObjectSetInteger(cID, _Name, OBJPROP_XDISTANCE, x);

      ObjectSetInteger(cID, _Name, OBJPROP_YDISTANCE, y);

      ObjectSetInteger(cID, _Name, OBJPROP_XSIZE, w);

      ObjectSetInteger(cID, _Name, OBJPROP_YSIZE, h);

      ObjectSetString(cID, _Name, OBJPROP_TEXT, _text);

      ObjectSetString(cID, _Name, OBJPROP_FONT, _font);

      ObjectSetInteger(cID, _Name,OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);

      ObjectSetString(cID, _Name, OBJPROP_TOOLTIP, _LF);

      ObjectSetInteger(cID, _Name, OBJPROP_FONTSIZE, fontsize);

      ObjectSetInteger(cID, _Name, OBJPROP_COLOR, fontcol);

      ObjectSetInteger(cID, _Name, OBJPROP_BGCOLOR, bkgcol);

      ObjectSetInteger(cID, _Name, OBJPROP_BORDER_COLOR, bordercol);

      ObjectSetInteger(cID, _Name, OBJPROP_BACK, false);

   }

}

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

void           BmpButton                  (string  _Name, 

                                           int     corner,

                                           int     x, 

                                           int     y,

                                           int     w,

                                           int     h,

                                           string  _bmp_on,

                                           string  _bmp_off) {



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

   // Create a two-state bitmap.                                                                                                                         |

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



   long cID = ChartID();

   

   if(ObjectFind(cID, _Name) < 0) {

   

      ObjectCreate(cID, _Name, OBJ_BITMAP_LABEL, 0, 0, 0);

      ObjectSetInteger(cID, _Name, OBJPROP_CORNER, corner);

      ObjectSetInteger(cID, _Name, OBJPROP_XDISTANCE, x);

      ObjectSetInteger(cID, _Name, OBJPROP_YDISTANCE, y);

      ObjectSetInteger(cID, _Name, OBJPROP_XSIZE, w);

      ObjectSetInteger(cID, _Name, OBJPROP_YSIZE, h);

      ObjectSetString(cID, _Name, OBJPROP_BMPFILE, 0, _bmp_on);

      ObjectSetString(cID, _Name, OBJPROP_BMPFILE, 1, _bmp_off);

      ObjectSetInteger(cID, _Name,OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);

      ObjectSetString(cID, _Name, OBJPROP_TOOLTIP, _LF);

      ObjectSetInteger(cID, _Name, OBJPROP_STATE, false);

      ObjectSetInteger(cID, _Name, OBJPROP_ZORDER, 1);

      ObjectSetInteger(cID, _Name, OBJPROP_BACK, false);

      ObjectSetInteger(cID, _Name, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS);

   }

}

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

void           Bitmap                     (string  _Name, 

                                           int     corner,

                                           int     x, 

                                           int     y,

                                           int     w,

                                           int     h,

                                           string  _bmp) {



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

   // Create a plain bitmap.                                                                                                                             |

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



   long cID = ChartID();

   

   if(ObjectFind(cID, _Name) < 0) {

   

      ObjectCreate(cID, _Name, OBJ_BITMAP_LABEL, 0, 0, 0);

      ObjectSetInteger(cID, _Name, OBJPROP_CORNER, corner);

      ObjectSetInteger(cID, _Name, OBJPROP_XDISTANCE, x);

      ObjectSetInteger(cID, _Name, OBJPROP_YDISTANCE, y);

      ObjectSetInteger(cID, _Name, OBJPROP_XSIZE, w);

      ObjectSetInteger(cID, _Name, OBJPROP_YSIZE, h);

      ObjectSetString(cID, _Name, OBJPROP_BMPFILE, _bmp);

      if(corner == CORNER_RIGHT_LOWER)

         ObjectSetInteger(cID, _Name,OBJPROP_ANCHOR, ANCHOR_RIGHT_LOWER);

      else

         ObjectSetInteger(cID, _Name,OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);

      ObjectSetString(cID, _Name, OBJPROP_TOOLTIP, _LF);

      ObjectSetInteger(cID, _Name, OBJPROP_BACK, false);

      ObjectSetInteger(cID, _Name, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS);

   }

}

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

void           Mark                       (string   _Name, 

                                           int      anchor,

                                           datetime time, 

                                           double   price,

                                           int      size,

                                           color    col,

                                           string   _tooltip,

                                           bool     selectable = false,

                                           bool     selected   = false) {



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

   // Create a text mark (sign).                                                                                                                         |

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



   long cID = ChartID();

   

   if(ObjectFind(cID, _Name) == -1) {

   

      ObjectCreate(cID, _Name, OBJ_TEXT, 0, 0, 0);



      ObjectSetInteger(cID, _Name, OBJPROP_SELECTABLE, false);

      ObjectSetInteger(cID, _Name, OBJPROP_BACK, false);

      ObjectSetString(cID, _Name, OBJPROP_TOOLTIP, _LF);



      ObjectSetInteger(cID, _Name, OBJPROP_HIDDEN, true);

      ObjectSetInteger(cID, _Name, OBJPROP_ANCHOR, anchor);

      ObjectSetInteger(cID, _Name, OBJPROP_TIME, time);

      ObjectSetDouble(cID, _Name, OBJPROP_PRICE, price);

      ObjectSetInteger(cID, _Name, OBJPROP_BACK, false);



      ObjectSetString(cID, _Name, OBJPROP_TEXT, "3");

      ObjectSetInteger(cID, _Name, OBJPROP_FONTSIZE, size);

      ObjectSetString(cID, _Name, OBJPROP_FONT, "Webdings");

      ObjectSetInteger(cID, _Name, OBJPROP_COLOR, col);



      ObjectSetInteger(cID, _Name, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS);

   }

   

   ObjectSetInteger(cID, _Name, OBJPROP_SELECTABLE, selectable);

   ObjectSetInteger(cID, _Name, OBJPROP_SELECTED, selected);

   ObjectSetInteger(cID, _Name, OBJPROP_TIME, time);

   ObjectSetDouble(cID, _Name, OBJPROP_PRICE, price);

   ObjectSetString(cID, _Name, OBJPROP_TOOLTIP, _tooltip);



}

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

double         Divide                     (double n, double d) {



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

   // This function is a workaround for possible division by zero - returns zero in such a case, instead of an error.                                    |

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



	if(d == 0.0) return 0.0;

	return n / d;

}

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

string         AccountCurrencySymbol      () {



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

   // Returns currency sign.                                                                                                                             |

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



	if(AccountInfoString(ACCOUNT_CURRENCY) == "USD") return _USD;

	if(AccountInfoString(ACCOUNT_CURRENCY) == "AUD") return _AUD;

	if(AccountInfoString(ACCOUNT_CURRENCY) == "NZD") return _NZD;

	if(AccountInfoString(ACCOUNT_CURRENCY) == "EUR") return _EUR;

	if(AccountInfoString(ACCOUNT_CURRENCY) == "GBP") return _GBP;

	if(AccountInfoString(ACCOUNT_CURRENCY) == "JPY") return _JPY;

	

	

	return NULL;

}

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

double         EncodeSymbol               () {



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

   // Returns the code of chosen symbol.                                                                                                                 |

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



   string _Sym = StringSubstr(_Symbol + "      ", 0, 6);

   double  SymNum = 0.0;

   

   for(int i = 0; i < StringLen(_Sym); i++) {

   

      ushort c = StringGetCharacter(_Sym, i);

      SymNum += MathPow(256, i) * c;

   }

   

   return SymNum;

}

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

ulong         EncodeSy               (string _Sym) {



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

   // Returns the code of chosen symbol.                                                                                                                 |

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



   _Sym = StringSubstr(_Sym + "  ", 0, 2);

   ulong  SymNum = 0.0;

   

   for(int i = 0; i < StringLen(_Sym); i++) {

   

      ushort c = StringGetCharacter(_Sym, i);

      SymNum += (ulong)MathPow(256, i) * c;

   }

   

   return SymNum;

}



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

double VerifyVolume(string pSymbol,double pVolume)

{



   // Verify and adjust trade volume Mic v1.68



	double minVolume = SymbolInfoDouble(pSymbol,SYMBOL_VOLUME_MIN);

	double maxVolume = SymbolInfoDouble(pSymbol,SYMBOL_VOLUME_MAX);

	double stepVolume = SymbolInfoDouble(pSymbol,SYMBOL_VOLUME_STEP);

	

	double tradeSize;

	if(pVolume < minVolume) tradeSize = minVolume;

	else if(pVolume > maxVolume) tradeSize = maxVolume;

	else tradeSize = MathRound(pVolume / stepVolume) * stepVolume;

	

	if(stepVolume >= 0.1) tradeSize = NormalizeDouble(tradeSize,1);

	else tradeSize = NormalizeDouble(tradeSize,2);

	

	return(tradeSize);

}



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

// This is only for Forex and for base currency USD and EUR

// better solution is in MT_margin_calc.mqh

double MarginRequired(double pLots = 1.0)

{

   // Replacement for MarketInfo(_Symbol, MODE_MARGINREQUIRED)

   double margin_req;

   double MarginInit, MarginMain;

   double contract = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE);

   long leverage = AccountInfoInteger(ACCOUNT_LEVERAGE);



   SymbolInfoMarginRate(_Symbol, ORDER_TYPE_BUY, MarginInit, MarginMain);

   margin_req = pLots * contract / leverage * MarginInit; // MarginRequired for 1.0 lot

   if(AccountInfoString(ACCOUNT_CURRENCY) == "EUR")

      margin_req /= SymbolInfoDouble("EURUSD", SYMBOL_BID);



   return(margin_req);

}



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

string ExpandCcy(string str)

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

// Expands a currency (e.g. G to GBP) or a currency pair (e.g. EU to EURUSD)

//  as shown in the code

{

  //str = StringTrim(StringUpper(str));

  if (StringLen(str) < 1 || StringLen(str) > 2)   return(str);

  string str2 = "";

  for (int i=0; i<StringLen(str); i++)   {

    string char2 = StringSubstr(str,i,1);

    if (char2 == "A")  str2 = str2 + "AUD";     else

    if (char2 == "C")  str2 = str2 + "CAD";     else   

    if (char2 == "E")  str2 = str2 + "EUR";     else   

    if (char2 == "F")  str2 = str2 + "CHF";     else   

    if (char2 == "G")  str2 = str2 + "GBP";     else   

    if (char2 == "J")  str2 = str2 + "JPY";     else   

    if (char2 == "N")  str2 = str2 + "NZD";     else   

    if (char2 == "U")  str2 = str2 + "USD";     else   

    if (char2 == "H")  str2 = str2 + "HKD";     else   

    if (char2 == "S")  str2 = str2 + "SGD";     else   

    if (char2 == "Z")  str2 = str2 + "ZAR";     else

    if (char2 == "X")  str2 = str2 + "XAU";     else

    if (char2 == "T")  str2 = str2 + "XTI";   

  }  

  return(str2);

}





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

stri

Показано первые 50% кода (символов: 104648)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
10 464,80₽ ≈ $127.90