CustomSymbolCreate

Создает пользовательский символ с указанным именем в указанной группе.

bool  CustomSymbolCreate(
   const string     symbol_name,         // имя пользовательского символа
   const string     symbol_path="",      // название группы, в которой будет создан символ
   const string     symbol_origin=NULL   // имя символа, на основе которого будет создан пользовательский символ
   );

Параметры

symbol_name

[in]  Имя пользовательского символа. Не должно содержать групп или подгрупп, в котором символ находится.

symbol_path=""

[in]  Имя группы, в которой создается символ.

symbol_origin=NULL

[in]  Имя символа, из которого будут скопированы свойства создаваемого пользовательского символа. После создания пользовательского символа можно изменить любое свойство на нужное значение соответствующими функциями.

Возвращаемое значение

true – в случае успеха, иначе false. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Примечание

Все пользовательские символы создаются в специальном разделе Custom. Если имя группы не задано (параметр symbol_path в функции CustomSymbolCreate содержит пустую строку или NULL), то пользовательский символ будет создан в корне раздела Custom. Здесь можно провести аналогию с файловой системой, где группы-подгруппы могут рассматриваться как папки-подпапки

Имя символа и название группы задается только латинскими буквами без знаков препинания, пробелов и спецсимволов (допускаются ".", "_", "&" и "#"). Не рекомендуется использовать в названии символы <, >, :, ", /, |, ?, *.

Имя пользовательского символа должно быть уникальным независимо от названия группы, в котором он создается. Если символ с таким именем уже существует, то функция CustomSymbolCreate() вернёт false, а последующий вызов GetLastError() выдаст код ошибки 5300 (ERR_NOT_CUSTOM_SYMBOL) или 5304 (ERR_CUSTOM_SYMBOL_EXIST).

Длина имени символа не должна превышать 31 знака, в противном случае CustomSymbolCreate() вернёт false и будет взведена ошибка 5302 – ERR_CUSTOM_SYMBOL_NAME_LONG.

Параметр symbol_path допускается задавать двумя способами:

  • только имя группы без имени пользовательского символа, например – "CFD\\Metals". Лучше всего использовать именно этот вариант, чтобы избегать ошибок.
  • либо имя <группы> + разделитель групп "\\"+<имя пользовательского символа>, например – "CFD\\Metals\\Platinum". В этом случае имя группы должно оканчиваться точным именем пользовательского символа. В случае несовпадения пользовательский символ все равно будет создан, но не в той группе, которая задумывалась. Например, если symbol_path="CFD\\Metals\\Platinum" и symbol_name="platinum" (ошибка в регистре), то будет создан пользовательский символ с именем "platinum" в группе "Custom\CFD\Metals\Platinum". При этом функция SymbolInfoGetString("platinum",SYMBOL_PATH) вернёт значение "Custom\CFD\Metals\Platinum\platinum".

 

Необходимо иметь в виду, что свойство SYMBOL_PATH возвращает путь вместе с именем символа на конце. Поэтому нельзя просто так копировать его без изменений, если необходимо создать пользовательский символ в точно такой же группе. В этом случае необходимо отрезать имя символа, чтобы не получить результат, описанный выше.

Если в качестве параметра symbol_origin задан несуществующий символ, то пользовательский символ будет создан пустым, как если бы параметр symbol_origin не был указан. При этом будет взведена ошибка 4301 – ERR_MARKET_UNKNOWN_SYMBOL.

Длина параметра symbol_path не должна превышать 127 знаков с учетом "Custom\\", разделителей групп "\\" и имени символа, если оно указано в конце.

 

Пример:

//+------------------------------------------------------------------+
//|                                           CustomSymbolCreate.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   CUSTOM_SYMBOL_NAME     Symbol()+".C"  // наименование пользовательского символа
#define   CUSTOM_SYMBOL_PATH     "Forex"        // название группы, в которой будет создан символ
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()       // наименование символа, на основе которого будет создан пользовательский
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- если пользовательский символ создать не удалось - сообщим об этом в журнале
   if(!CustomSymbolCreate(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN))
     {
      Print("CustomSymbolCreate() failed. Error "GetLastError());
      return;
     }
 
//--- проверим существование созданного символа и получим группу, в которой он создан
   bool   customfalse;
   bool   exist = SymbolExist(CUSTOM_SYMBOL_NAMEcustom);
   string path  = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_PATH);
 
//--- распечатаем в журнале результат создания символа и название группы - заданное и получаемое из свойств символа
   PrintFormat("Custom symbol '%s' created\n"+
               "Symbol '%s' is exist: %s\n"+
               "Symbol '%s' is custom: %s\n"+
               "Path specified in the settings: '%s'\n"+
               "Path returned from the 'SYMBOL_PATH' property: '%s'",
               CUSTOM_SYMBOL_NAME
               CUSTOM_SYMBOL_NAME, (string)exist
               CUSTOM_SYMBOL_NAME, (string)custom,
               CUSTOM_SYMBOL_PATH,
               path);
 
//--- подождем две секунды и удалим созданный символ с сообщением о результате в журнал
   Sleep(2000);
   ResetLastError();
   bool deleted = CustomSymbolDelete(CUSTOM_SYMBOL_NAME);
   Print(deleted ? StringFormat("Custom symbol '%s' removed"CUSTOM_SYMBOL_NAME) : StringFormat("CustomSymbolDelete() failed. Error ",GetLastError()));
   /*
   результат:
   Custom symbol 'EURUSD.Ccreated
   Symbol 'EURUSD.Cis existtrue
   Symbol 'EURUSD.Cis customtrue
   Path specified in the settings: 'Forex'
   Path returned from the 'SYMBOL_PATHproperty: 'Custom\Forex\EURUSD.C'
   Custom symbol 'EURUSD.Cremoved
   */
  }

 

Смотри также

SymbolName, SymbolSelect, CustomSymbolDelete