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() 함수를 호출.

주의

모든 사용자 지정 심볼은 특수 사용자 지정 섹션에 생성됩니다. 그룹 이름이 지정되지 않은 경우 (사용자 지정 심볼 생성 기능의 symbol_path 매개 변수에 빈 문자열 또는 NULL 포함), 사용자 지정 섹션 루트에 사용자 지정 심볼이 생성됩니다. 여기서는 파일 시스템과 유사할 수 있으며, 여기서 그룹 및 하위 폴더를 폴더 및 하위 폴더로 볼 수 있습니다

심볼 및 그룹 이름에는 문장 부호, 공백 또는 특수 문자(".", "_", "&" 및 "#"만 포함할 수 있음)가 없는 라틴 문자만 포함할 수 있습니다. <, >, :, ", /, |, ?, * 문자는 사용하지 않는 것이 좋습니다.

사용자 지정 심볼 이름은 생성된 그룹 이름에 관계 없이 고유해야 합니다. 동일한 이름의 심볼이 이미 있는 경우 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" and symbol_name="platinum" (register error), 뒤에 "Custom\CFD\Metals\Platinum" 그룹에 사용자 지정 심볼 이름 "platinum" 이 생성됩니다. SymbolInfoGetString("platinum",SYMBOL_PATH) 함수는 "Custom\CFD\Metals\Platinum\platinum" 값을 반환합니다.

 

SYMBOL_PATH 속성은 끝에 심볼 이름이 있는 경로를 반환합니다. 따라서 동일한 그룹에 사용자 지정 심볼을 생성하려는 경우 변경 없이 복사할 수 없습니다. 이 경우 위에서 설명한 결과를 얻지 않으려면 심볼 이름을 잘라야 합니다.

존재하지 않는 기호를 symbol_origin 매개변수로 설정하면 symbol_origin 매개변수가 설정되지 않은 것처럼 사용자 지정 심볼이 빈 상태로 생성됩니다. 이 경우 오류 4301 – ERR_MARKET_UNKNOWN_SYMBOL 이 활성화됩니다.

symbol_path 매개변수 길이는 "Custom\\", "\\" 그룹 구분 심볼 및 심볼 이름(끝에 지정된 경우)을 고려할 때 127자를 초과하지 않아야 합니다.

 

예:

//+------------------------------------------------------------------+
//|                                           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;
     }
 
//--- 생성된 심볼이 있는지 확인하고 생성된 그룹을 가져옵니다.in
   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);
 
//--- 2초 동안 기다린 후 저널의 결과 메시지와 함께 생성된 심볼을 삭제합니다.
   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