CustomSymbolSetDouble

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

bool  CustomSymbolSetDouble(
   const string              symbol_name,      // 심볼 이름
   ENUM_SYMBOL_INFO_DOUBLE   property_id,      // 속성 ID
   double                    property_value    // 속성 값
   );

매개변수

symbol_name

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

property_id

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

property_value

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

값 반환

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

주의

심볼 사양에서 다음 속성 중 하나가 변경되면 사용자 지정 심볼의 분 및 틱 내역이 완전히 제거됩니다.

  • SYMBOL_POINT – 1 포인트 값
  • SYMBOL_TRADE_TICK_SIZE – 최소 허용 가격 변동을 지정하는 틱 값
  • SYMBOL_TRADE_TICK_VALUE – 수익성 있는 포지션에 대한 1틱 가격 변동 값

사용자 지정 심볼 내역을 삭제한 후 터미널은 업데이트된 속성을 사용하여 새 내역을 생성하려고 시도합니다. 사용자 지정 심볼 속성을 수동으로 변경할 때도 마찬가지입니다.

 

예:

//+------------------------------------------------------------------+
//|                                        CustomSymbolSetDouble.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;
      
//--- 사용자 정의 심볼의 기반이 되는 심볼의 속성을 저널에서 가져오고 출력합니다.
//--- (거래 실행을 위한 최소 거래량, 최대 거래량, 최소 거래량 변경 단계)
   double origin_vol_min = SymbolInfoDouble(CUSTOM_SYMBOL_ORIGINSYMBOL_VOLUME_MIN);
   double origin_vol_max = SymbolInfoDouble(CUSTOM_SYMBOL_ORIGINSYMBOL_VOLUME_MAX);
   double origin_vol_stepSymbolInfoDouble(CUSTOM_SYMBOL_ORIGINSYMBOL_VOLUME_STEP);
   
   PrintFormat("The '%s' symbol from which the custom '%s' was created:\n"+
               "  Volume Min: %.2f\n  Volume Max: %.2f\n  Volume Step: %.2f",
               CUSTOM_SYMBOL_ORIGINCUSTOM_SYMBOL_NAME,
               origin_vol_minorigin_vol_maxorigin_vol_step);
   
//--- 사용자 정의 심볼 속성에 대한 다른 값을 설정합니다.
   ResetLastError();
   bool res=true;
   res &=CustomSymbolSetDouble(CUSTOM_SYMBOL_NAMESYMBOL_VOLUME_MIN0.1);
   res &=CustomSymbolSetDouble(CUSTOM_SYMBOL_NAMESYMBOL_VOLUME_MAX1000);
   res &=CustomSymbolSetDouble(CUSTOM_SYMBOL_NAMESYMBOL_VOLUME_STEP0.1);
 
//--- 속성을 설정할 때 오류가 발생하면 저널에 해당 메시지를 표시합니다.
   if(!res)
      Print("CustomSymbolSetDouble() failed. Error "GetLastError());
   
//--- 수정된 사용자 정의 심볼 속성을 저널에서 가져오고 인쇄합니다.
//--- (거래 실행을 위한 최소 거래량, 최대 거래량, 최소 거래량 변경 단계)
   double custom_vol_min = SymbolInfoDouble(CUSTOM_SYMBOL_NAMESYMBOL_VOLUME_MIN);
   double custom_vol_max = SymbolInfoDouble(CUSTOM_SYMBOL_NAMESYMBOL_VOLUME_MAX);
   double custom_vol_stepSymbolInfoDouble(CUSTOM_SYMBOL_NAMESYMBOL_VOLUME_STEP);
   
   PrintFormat("Custom symbol '%s' based on '%s':\n"+
               "  Volume Min: %.2f\n  Volume Max: %.2f\n  Volume Step: %.2f",
               CUSTOM_SYMBOL_ORIGINCUSTOM_SYMBOL_NAME,
               custom_vol_mincustom_vol_maxcustom_vol_step);
   
//--- 차트 주석에 스크립트 종료 키에 대한 힌트를 표시합니다.
   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:
     Volume Min0.01
     Volume Max500.00
     Volume Step0.01
   Custom symbol 'EURUSDbased on 'EURUSD.C':
     Volume Min0.10
     Volume Max1000.00
     Volume Step0.10
   */
  }
//+------------------------------------------------------------------+
//| Create a custom symbol, return an error code                     |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| Remove a custom symbol                                           |
//+------------------------------------------------------------------+
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);
  }

 

추가 참조

SymbolInfoDouble