CustomSymbolSetString

사용자 지정 심볼의 문자열 유형 속성 값을 설정.

bool  CustomSymbolSetString(
   const string              symbol_name,      // 심볼 이름
   ENUM_SYMBOL_INFO_STRING   property_id,      // 속성 ID
   string                    property_value    // 속성 값
   );

매개변수

symbol_name

[in]  사용자 지정 심볼 이름.

property_id

[in]  심볼 속성 ID. 값은 ENUM_SYMBOL_INFO_STRING 열거 값 중 하나일 수 있습니다.

property_value

[in]  속성 값을 포함하는 문자열 유형 변수.

값 반환

성공하면 true, 그렇지 않으면 false. 오류에 대한 정보를 얻으려면 GetLastError() 함수를 호출.

주의

심볼 사양에서 SYMBOL_FORMULA 속성(사용자 지정 심볼 가격 구성에 대한 방정식 설정)을 변경하면 사용자 지정 심볼의 분 및 틱이 완전히 제거됩니다. 사용자 지정 심볼 내역을 삭제한 후 터미널은 새 방정식을 사용하여 새 내역을 생성하려고 시도합니다. 사용자 지정 심볼 방정식을 수동으로 변경할 때도 마찬가지 입니다.

 

예:

//+------------------------------------------------------------------+
//|                                        CustomSymbolSetString.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()
  {
//--- 사용자 정의 심볼을 생성할 때 오류 코드를 가져옵니다.
   int create=CreateCustomSymbol(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN);
   
//--- 오류 코드가 0(심볼 생성 성공)도 아니고 5304(심볼이 이미 생성됨)도 아닌 경우 - 그대로 둠
   if(create!=0 && create!=5304)
      return;
      
//--- 사용자 정의 심볼의 기반이 되는 심볼의 속성을 저널에서 가져오고 출력합니다.
//--- (거래 실행을 위한 최소 거래량, 최대 거래량, 최소 거래량 변경 단계)
   string origin_basis    = SymbolInfoString(CUSTOM_SYMBOL_ORIGINSYMBOL_BASIS);
   string origin_category = SymbolInfoString(CUSTOM_SYMBOL_ORIGINSYMBOL_CATEGORY);
   string origin_formula  = SymbolInfoString(CUSTOM_SYMBOL_ORIGINSYMBOL_FORMULA);
   
   PrintFormat("The '%s' symbol from which the custom '%s' was created:\n"+
               "  Basis: %s\n  Category: %s\n  Formula: %s",
               CUSTOM_SYMBOL_ORIGINCUSTOM_SYMBOL_NAME,
               origin_basisorigin_categoryorigin_formula);
   
//--- 사용자 정의 심볼 속성에 대한 다른 값을 설정합니다.
   ResetLastError();
   bool res=true;
   res &=CustomSymbolSetString(CUSTOM_SYMBOL_NAMESYMBOL_BASISCUSTOM_SYMBOL_ORIGIN);
   res &=CustomSymbolSetString(CUSTOM_SYMBOL_NAMESYMBOL_CATEGORY"FX");
   res &=CustomSymbolSetString(CUSTOM_SYMBOL_NAMESYMBOL_FORMULA, ("1.0 / "+CUSTOM_SYMBOL_ORIGIN));
 
//--- 속성을 설정할 때 오류가 발생하면 저널에 해당 메시지를 표시합니다.
   if(!res)
      Print("CustomSymbolSetString() failed. Error "GetLastError());
   
//--- 수정된 사용자 정의 심볼 속성을 저널에서 가져오고 인쇄합니다.
//--- (거래 실행을 위한 최소 거래량, 최대 거래량, 최소 거래량 변경 단계)
   string custom_basis    = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_BASIS);
   string custom_category = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_CATEGORY);
   string custom_formula  = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_FORMULA);
   
   PrintFormat("Custom symbol '%s' based on '%s':\n"+
               "  Basis: %s\n  Category: %s\n  Formula: %s",
               CUSTOM_SYMBOL_ORIGINCUSTOM_SYMBOL_NAME,
               custom_basiscustom_categorycustom_formula);
   
//--- 차트 주석에 스크립트 종료 키에 대한 힌트를 표시합니다.
   Comment(StringFormat("Press 'Esc' to exit or 'Del' to delete the '%s' symbol and exit"CUSTOM_SYMBOL_NAME));
 
//--- Esc 또는 Del 키를 눌러 무한 루프를 종료할 때까지 기다립니다.
   while(!IsStopped() && TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)==0)
     {
      Sleep(16);
      //--- Del을 누르면 생성된 사용자 정의 심볼이 삭제됩니다.
      if(TerminalInfoInteger(TERMINAL_KEYSTATE_DELETE)<0)
        {
         if(DeleteCustomSymbol(CUSTOM_SYMBOL_NAME))
            PrintFormat("Custom symbol '%s' deleted successfully"CUSTOM_SYMBOL_NAME);
         break;
        }
     }
//--- 종료하기 전에 차트를 삭제
   Comment("");
   /*
   결과:
   The 'EURUSDsymbol from which the custom 'EURUSD.Cwas created:
     Basis
     Category
     Formula
   Custom symbol 'EURUSDbased on 'EURUSD.C':
     BasisEURUSD
     CategoryFX
     Formula1.0 / EURUSD
   */
  }
//+------------------------------------------------------------------+
//| 사용자 지정 심볼 생성, 에러 코드 반환                                |
//+------------------------------------------------------------------+
int CreateCustomSymbol(const string symbol_nameconst string symbol_pathconst string symbol_origin=NULL)
  {
//--- 사용자 정의 심볼의 기반이 될 심볼명을 정의합니다.
   string origin=(symbol_origin==NULL ? Symbol() : symbol_origin);
   
//--- 사용자 정의 심볼 생성에 실패했고 오류 5304가 아닌 경우 저널에 이를 보고합니다.
   ResetLastError();
   int error=0;
   if(!CustomSymbolCreate(symbol_namesymbol_pathorigin))
     {
      error=GetLastError();
      if(error!=5304)
         PrintFormat("CustomSymbolCreate(%s, %s, %s) failed. Error %d"symbol_namesymbol_pathoriginerror);
     }
//--- 성공
   return(error);
  }
//+------------------------------------------------------------------+
//| 사용자 정의 심볼 삭제                                               |
//+------------------------------------------------------------------+
bool DeleteCustomSymbol(const string symbol_name)
  {
//--- 종합시세 창에서 심볼 숨기기
   ResetLastError();
   if(!SymbolSelect(symbol_namefalse))
     {
      PrintFormat("SymbolSelect(%s, false) failed. Error %d"GetLastError());
      return(false);
     }
      
//--- 사용자 정의 심볼 삭제에 실패한 경우 이를 저널에 보고하고 'false'를 반환합니다.
   ResetLastError();
   if(!CustomSymbolDelete(symbol_name))
     {
      PrintFormat("CustomSymbolDelete(%s) failed. Error %d"symbol_nameGetLastError());
      return(false);
     }
//--- 성공
   return(true);
  }

 

추가 참조

SymbolInfoString