리소스

MQL5 프로그램에서 그래픽 및 사운드 사용

MQL5의 프로그램을 사용하면 사운드 및 그래픽 파일 작업을 수행할 수 있습니다:

 

PlaySound()

PlaySound() 함수의 호출 예:

//+------------------------------------------------------------------+
//| 표준 OrderSend()를 호출하고 사운드를 재생합니다                               |
//+------------------------------------------------------------------+
void OrderSendWithAudio(MqlTradeRequest  &request, MqlTradeResult &result)
  {
  //--- 서버에 요청 전송
   OrderSend(request,result);
   //--- 요청이 수락되면 사운드 Ok.wav를 재생합니다. 
   if(result.retcode==TRADE_RETCODE_PLACEDPlaySound("Ok.wav");
   //--- 실패할 경우, timeout.wav 파일에서 알람을 재생합니다
   else PlaySound("timeout.wav");
  }

이 예에서는 표준 터미널 패키지에 포함되어 있는 'OK.wav' 및 'timeout' 파일에서 소리를 재생하는 방법을 보여 줍니다. 이러한 파일은 폴더 terminal_directory\Sounds에 있습니다. 여기서 terminal_directory는 MetaTrader 5 클라이언트 터미널이 시작되는 폴더입니다. 터미널 디렉터리의 위치는 다음과 같은 방법으로 mql5 프로그램에서 확인할 수 있습니다:

//--- 터미널 데이터가 저장되는 폴더
   string terminal_path=TerminalInfoString(TERMINAL_PATH);

terminal_directory\Sounds폴더뿐만 아니라 다음 폴더에 있는 모든 하위 폴더에서도 사운드 파일을 사용할 수 있습니다 : terminal_data_directory\MQL5. 터미널 메뉴 "File" -> "Open Data Folder"에서 터미널 데이터 디렉토리의 위치를 확인하거나 프로그램 방법을 사용하여 확인할 수 있습니다:

//--- 터미널 데이터가 저장되는 폴더
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);

예를 들어, Demo.wav 사운드 파일이 terminal_data_directory\MQL5\Files 에 있는 경우, PlaySound()의 호출은 다음과 같이 작성되어야 합니다:

//--- terminal_directory_data\MQL5\Files\ 폴더에서 Demo.wav 재생
   PlaySound("\\Files\\Demo.wav");

주석에서 파일의 경로는 백슬래시 "\", 함수 "\\"를 사용하여 작성된다는 점에 유의하십시오.

경로를 지정할 때는 항상 이중 백슬래시만 구분 기호로 사용하십시오. 단일 백슬래시는 프로그램 소스 코드에서 상수 문자열과 문자 상수를 처리할 때 컴파일러의 제어 기호이기 때문입니다.

NULL 매개 변수로 PlaySound()함수를 호출하여 재생을 중지합니다:

//--- NULL 매개 변수를 사용하여 PlaySound()를 호출하면 재생이 중지됩니다
   PlaySound(NULL);

 

ObjectCreate()

ObjectCreate() 함수를 사용하는 그래픽 레이블(OBJ_BITMAP_LABEL)을 생성하는 Expert Advisor의 예.

string label_name="currency_label";        // name of the OBJ_BITMAP_LABEL object
string euro      ="\\Images\\euro.bmp";    // path to the file terminal_data_directory\MQL5\Images\euro.bmp
string dollar    ="\\Images\\dollar.bmp";  // path to the file terminal_data_directory\MQL5\Images\dollar.bmp
//+------------------------------------------------------------------+
//| Expert 초기화 함수                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 아직 OBJ_BITMAP_LABEL 버튼이 생성되지 않았다면, 이를 생성합니다
   if(ObjectFind(0,label_name)<0)
     {
      //--- OBJ_BITMAP_LABEL 개체를 생성 시도
      bool created=ObjectCreate(0,label_name,OBJ_BITMAP_LABEL,0,0,0);
      if(created)
        {
         //--- 버튼을 차트의 왼쪽 상단 코너에 링크
         ObjectSetInteger(0,label_name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
         //--- 개체 속성을 설정
         ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,100);
         ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,50);
         //--- 마지막 오류의 코드를 0으로 재설정
         ResetLastError();
         //--- 사진을 다운로드하여 버튼의 "누름" 상태를 표시
         bool set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,0,euro);
         //--- 결과 테스트
         if(!set)
           {
            PrintFormat("%s 파일에서 이미지 다운로드 실패. Error code %d",euro,GetLastError());
           }
         ResetLastError();
         //--- 사진을 다운로드하여 버튼의 "누르지 않음" 상태를 표시
         set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,1,dollar);
         
         if(!set)
           {
            PrintFormat("%s 파일에서 이미지 다운로드 실패. Error code %d",dollar,GetLastError());
           }
         //--- 차트 새로 고침 명령을 전송하여 버튼이 즉시 나타남
         ChartRedraw(0);
        }
      else
        {
         //--- 개체 생성 실패, 알림
         PrintFormat("OBJ_BITMAP_LABEL 오브젝트 생성 실패. Error code %d",GetLastError());
        }
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert 초기화 취소 함수                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 차트에서 객체를 삭제
   ObjectDelete(0,label_name);
  }

currency_label이라는 그래픽 객체의 생성 및 설정은 다음 함수에서 수행됩니다: OnInit() function. 그래픽 파일의 경로는 글로벌 변수 유로달러로 설정되며, 구분 기호에 이중 백슬래시가 사용됩니다:

string euro      ="\\Images\\euro.bmp";    // path to the file terminal_dara_directory\MQL5\Images\euro.bmp
string dollar    ="\\Images\\dollar.bmp";  // path to the file terminal_dara_directory\MQL5\Images\dollar.bmp

파일은 다음 폴더에 위치합니다 terminal_data_directory\MQL5\Images.

OBJ_BITMAP_LABEL 개체는 실제로 버튼 상태(누름 또는 누르지않음)에 따라 두 이미지 중 하나를 표시하는 버튼입니다: euro.bmp 또는 dollar.bmp.

OBJ_BITMAP_LABEL 개체 속성

그래픽 인터페이스가 있는 버튼의 크기는 그림 사이즈에 맞게 자동으로 조정됩니다. 이미지는 OBJ_BITMAP_LABEL 개체를 마우스 좌클릭하면 변경됩니다 ("선택 사용 안 함" 옵션은 속성에서 선택해야 함). OBJ_BITMAP 개체는 동일한 방식으로 생성되며, 필요한 이미지로 배경을 만드는 데 사용됩니다.

다음 개체의 모양을 담당하는 OBJPROP_BMPFILE 속성 값은 동적으로 변경할 수 있습니다: OBJ_BITMAP 및 OBJ_BITMAP_LABEL. 이를 통해 mql5 프로그램에 대한 다양한 대화형 사용자 인터페이스를 만들 수 있습니다.

 

mql5 프로그램을 컴파일하는 동안 실행 파일에 리소스 포함 #

mql5 프로그램은 이미지와 사운드 파일의 형태로 많은 다양한 다운로드 가능한 자원이 필요할 수 있습니다. MQL5에서 실행 파일을 이동할 때 이러한 파일을 모두 전송할 필요가 없도록 컴파일러의 명령문 #resource를 사용해야 합니다:

 #resource path_to_resource_file

#resource 명령은 컴파일러에게 지정된 경로 path_to_resource_file의 리소스를 실행 가능한 EX5 파일에 포함해야 한다고 알려줍니다. 따라서 필요한 모든 영상과 사운드는 EX5 파일에 직접 위치할 수 있으므로, 프로그램을 다른 단말에서 실행하려면 EX5 파일에 사용되는 파일을 별도로 전송할 필요가 없습니다. 모든 EX5 파일은 리소스를 포함할 수 있으며, 모든 EX5 프로그램은 다른 EX5 프로그램의 리소스를 사용할 수 있습니다.

BMP 및 WAV 형식의 파일은 EX5 파일에 포함되기 전에 자동으로 압축됩니다. 이것은 MQL5에서 완전한 프로그램을 만들 뿐만 아니라, 자원을 사용하는 것은 MQL5 프로그램 쓰기의 일반적인 방법에 비해 그래픽과 사운드를 사용할 때 필요한 파일의 전체 크기를 줄일 수 있다는 것을 의미합니다.

리소스 파일 크기는 128Mb를 초과할 수 없습니다.

 

컴파일러에서 지정된 리소스 검색

#resource "<path to the resource file>" 명령을 사용하여 리소스를 삽입합니다.

 #resource "<path_to_resource_file>"

상수 문자열 <path_to_resource_file>의 길이는 63자를 초과할 수 없습니다.

컴파일러는 다음 순서로 지정된 경로에서 리소스를 검색합니다:

  • 백슬래시 "\" 구분자("\\"로 쓰임)가 경로의 시작 부분에 배치되어 있는 경우 다음 디렉토리에 상대적 자원을 검색합니다: terminal_data_directory\MQL5\,
  • 백슬래시가 없는 경우 리소스가 기록되는 소스 파일의 위치를 기준으로 리소스를 검색합니다.

리소스 경로는 하위 문자열 "..\\" and ":\\" 입니다.

리소스 포함 예:

//--- 자원의 정확한 사양
#resource "\\Images\\euro.bmp" // euro.bmp is located in terminal_data_directory\MQL5\Images\
#resource "picture.bmp"        // picture.bmp는 원본 파일과 동일한 디렉토리에 있습니다.
#resource "Resource\\map.bmp"  // the resource is located in source_file_directory\Resource\map.bmp
 
//--- 리소스의 부정확한 사양
#resource ":picture_2.bmp"     // must not contain ":"
#resource "..\\picture_3.bmp"  // must not contain ".."
#resource "\\Files\\Images\\Folder_First\\My_panel\\Labels\\too_long_path.bmp" //63자 이상

 

리소스 사용

리소스명

#resource 명령문을 사용하여 리소스를 선언한 후에는 프로그램의 모든 부분에서 사용할 수 있습니다. 리소스 이름은 줄 시작 부분에 백슬래시가 없는 경로로, 리소스 경로를 설정합니다. 코드에서 사용자 자신의 리소스를 사용하려면 리소스 이름 앞에 특수 기호 "::"를 추가해야 합니다.

예:

//--- 리소스 규격의 예 및 주석의 이름
#resource "\\Images\\euro.bmp"          // 리소스명 - Images\euro.bmp
#resource "picture.bmp"                 // 리소스명 - picture.bmp
#resource "Resource\\map.bmp"           // 리소스명 - Resource\map.bmp
#resource "\\Files\\Pictures\\good.bmp" // 리소스명 - Files\Pictures\good.bmp
#resource "\\Files\\Demo.wav";          // 리소스명 - Files\Demo.wav"
#resource "\\Sounds\\thrill.wav";       // 리소스명 - Sounds\thrill.wav"
...                                  
 
//--- 자원 활용
ObjectSetString(0,bitmap_name,OBJPROP_BMPFILE,0,"::Images\\euro.bmp");
...
ObjectSetString(0,my_bitmap,OBJPROP_BMPFILE,0,"::picture.bmp");
...
set=ObjectSetString(0,bitmap_label,OBJPROP_BMPFILE,1,"::Files\\Pictures\\good.bmp");
...
PlaySound("::Files\\Demo.wav");
...
PlaySound("::Sounds\\thrill.wav");

리소스의 이미지를 OBJ_BITMAP 및 OBJ_BITMAP_LABEL 설정할 때는 OBJPROP_BMPFILE 속성 값을 수동으로 수정할 수 없습니다. 예를 들어 OBJ_BITMAP_LABEL 를 생성하는 경우 리소스 euro.bmp 및 dollar.bmp를 이용합니다.

#resource "\\Images\\euro.bmp";    // euro.bmp is located in terminal_data_directory\MQL5\Images\
#resource "\\Images\\dollar.bmp";  // dollar.bmp is located in terminal_data_directory\MQL5\Images\

이 개체의 속성을 조회할 때 BitMap File (On) 및 BitMap File (Off) 속성이 흐리게 표시되고 수동으로 변경할 수 없습니다.:

using_resource

 

다른 mql5 프로그램의 리소스 사용

리소스를 사용하는 또 다른 이점이 있습니다 - 모든 MQL5 프로그램에서는 다른 EX5 파일의 리소스를 사용할 수 있습니다. 따라서 한 EX5 파일의 리소스를 다른 많은 mql5 프로그램에서 사용할 수 있습니다.

다른 파일의 리소스 이름을 사용하려면 <path_EX5_file_name>::<resource_name>로 지정해야 합니다. 예를 들어 Draw_Triangles_Script.mq5 스크립트에 triangle.bmp 파일의 이미지에 대한 리소스가 포함되어 있다고 가정합니다.

 #resource "\\Files\\triangle.bmp"

그런 다음 스크립트 자체에서 사용하기 위한 그것의 이름은 "Files\triangle.bmp"처럼 보일 것이고, 그것을 사용하기 위해서는 "::"가 리소스 이름에 추가되어야 합니다.

//--- 스크립트의 리소스 사용
ObjectSetString(0,my_bitmap_name,OBJPROP_BMPFILE,0,"::Files\\triangle.bmp");

다른 프로그램(예: Expert Advisor)의 동일한 리소스를 사용하려면 리소스 이름에 terminal_data_directory\MQL5\에 대한 EX5 파일의 경로와 스크립트의 EX5 파일 이름 Draw_Triangles_Script.ex5를 추가해야 합니다. 스크립트가 표준 폴더 terminal_data_directory\MQL5\Scripts\ 에 있다고 가정하면 호출은 다음과 같이 작성되어야 합니다:

//--- EA의 스크립트에서 리소스 사용
ObjectSetString(0,my_bitmap_name,OBJPROP_BMPFILE,0,"\\Scripts\\Draw_Triangles_Script.ex5::Files\\triangle.bmp");

다른 EX5에서 리소스를 호출할 때 실행 파일의 경로를 지정하지 않으면 리소스를 호출하는 프로그램이 포함된 동일한 폴더에서 실행 파일이 검색됩니다. 즉, 경로 지정 없이 Expert Advisor가 Draw_Triangles_Script.ex5 에서 리소스를 호출할 경우 다음과 같이 됩니다:

//--- 경로를 지정하지 않고 EA의 스크립트 리소스 호출
ObjectSetString(0,my_bitmap_name,OBJPROP_BMPFILE,0,"Draw_Triangles_Script.ex5::Files\\triangle.bmp");

terminal_data_directory\MQL5\Experts\ 폴더에서 파일을 검색하십시오, Expert Advisor가 terminal_data_directory\MQL5\Experts\ 에 있다면.

 

커스텀 지표가 리소스로 포함되도록 작업

MQL5 어플리케이션들의 작동을 위해 하나 또는 여러 개의 커스텀 지표가 필요할 수 있습니다. 이들 모두는 실행 가능한 MQL5 프로그램의 코드에 포함될 수 있습니다. 지표가 자원으로 포함되면 어플리케이션 배포가 간단해집니다.

다음은 terminal_data_folder\MQL5\Indicators\ directory 에 있는 SampleIndicator.ex5 커스텀 지표를 포함 및 사용하는 예입니다:

//+------------------------------------------------------------------+
//|                                                     SampleEA.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#resource "\\Indicators\\SampleIndicator.ex5"
int handle_ind;
//+------------------------------------------------------------------+
//| Expert 초기화 함수                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5");
   if(handle_ind==INVALID_HANDLE)
     {
      Print("Expert: iCustom call: Error code=",GetLastError());
      return(INIT_FAILED);
     }
//--- ...
   return(INIT_SUCCEEDED);
  }

OnInit() 함수의 커스텀 지표가 하나 이상의 사본을 생성하는 경우 특별한 고려가 필요합니다. Please keep in mind that the resource should be specified in the following way리소스는 다음과 같은 방법으로 지정해야 합니다.<path_EX5_file_name>::<resource_name>.

예를 들어 SampleIndicator.ex5 지표가 SampleEA.ex5 Expert Advisor에 리소스로 포함된 경우 커스텀 지표의 초기화 함수에서 iCustom() 를 호출할 때 지정된 자체 경로는 다음과 같습니다: "\\Experts\\SampleEA.ex5::Indicators\\SampleIndicator.ex5". 이 경로를 명시적으로 설정하면 SampleIndicator.ex5 커스텀 지표는 독립적으로 작동하는 능력을 상실하는 SampleEA.ex5 Expert Advisor에 견고하게 연결됩니다.

자체 경로는 GetRelativeProgramPath() 함수를 사용하여 수신할 수 있습니다. 사용 예는 아래에 나와 있습니다:

//+------------------------------------------------------------------+
//|                                              SampleIndicator.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_plots 0
int handle;
//+------------------------------------------------------------------+
//| 커스텀 지표 초기화 함수                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 스스로의 링크를 제공하는 잘못된 방법
//--- string path="\\Experts\\SampleEA.ex5::Indicators\\SampleIndicator.ex5";  
//--- 스스로의 링크를 받는 올바른 방법
  string path=GetRelativeProgramPath();
//--- 지표 버퍼 매핑
   handle=iCustom(_Symbol,_Period,path,0,0);
   if(handle==INVALID_HANDLE)
     {
      Print("지표: iCustom call: Error code=",GetLastError());
      return(INIT_FAILED);
     }
   else Print("Indicator handle=",handle);
//---
   return(INIT_SUCCEEDED);
  }
///....
//+------------------------------------------------------------------+
//| GetRelativeProgramPath                                           |
//+------------------------------------------------------------------+
string GetRelativeProgramPath()
  {
   int pos2;
//--- 어플리케이션의 절대 경로 획득
   string path=MQLInfoString(MQL_PROGRAM_PATH);
//--- "\MQL5\" 하위 문자열의 위치를 탐색
   int    pos =StringFind(path,"\\MQL5\\");
//--- 하위문자열 찾을 수 없음 - 오류
   if(pos<0)
      return(NULL);
//--- skip "\MQL5" directory
   pos+=5;
//--- skip extra '\' symbols
   while(StringGetCharacter(path,pos+1)=='\\')
      pos++;
//--- 리소스인 경우 MQL5 디렉토리를 기준으로 경로를 반환합니다.
   if(StringFind(path,"::",pos)>=0)
      return(StringSubstr(path,pos));
//--- 첫 번째 MQL5 하위 디렉토리에 대한 구분자 찾기(예: MQL5\Indicators)
//--- 찾을 수 없는 경우 MQL5 디렉토리를 기준으로 경로를 반환합니다.
   if((pos2=StringFind(path,"\\",pos+1))<0)
      return(StringSubstr(path,pos));
//--- 하위 디렉토리에 상대 경로 반환 (예: MQL5\Indicators)
   return(StringSubstr(path,pos2+1));
  }
//+------------------------------------------------------------------+
//| 커스텀 지표 반복 함수                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,        
                const double& price[])
  {
//--- 다음 요청에 대한 prev_calculated 의 값 반환
   return(rates_total);
  }

 

리소스 변수 #

리소스 변수를 사용하여 리소스를 선언하고 적절한 유형의 변수인 것처럼 처리할 수 있습니다. 선언 형식:

#resource path_to_the_resource_file as resource_variable_type resource_variable_name

선언 샘플:

#resource "data.bin" as int ExtData[]             // data.bin 파일 데이터를 포함하는 숫자 배열을 선언
#resource "data.bin" as MqlRates ExtData[]        // data.bin 파일 데이터를 포함하는 단순 구조배열을 선언
//--- strings
#resource "data.txt" as string ExtCode            // data.txt 파일 데이터가 포함된 문자열을 선언 (ANSI, UTF-8 및 UTF-16 인코딩 지원)
//--- graphical resources
#resource "image.bmp" as bitmap ExtBitmap[]       // BMP 파일의 비트맵을 포함하는 1차원 배열을 선언. 배열 크기 = 높이 * 너비
#resource "image.bmp" as bitmap ExtBitmap2[][]    // BMP 파일의 비트맵을 포함하는 2차원 배열을 선언. 배열 크기 [height][width]

이러한 선언의 경우, 리소스 데이터는 변수를 통해서만 보내질 수 있으며 자동 어드레싱에서 "::<rsource name>"를 통해서는 작동하지 않습니다.

#resource "\\Images\\euro.bmp" as bitmap euro[][]
#resource "\\Images\\dollar.bmp"
//+------------------------------------------------------------------+
//|  리소스를 사용한 OBJ_BITMAP_LABEL 개체 생성 함수   |
//+------------------------------------------------------------------+
void Image(string name,string rc,int x,int y)
  {
   ObjectCreate(0,name,OBJ_BITMAP_LABEL,0,0,0);
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
   ObjectSetString(0,name,OBJPROP_BMPFILE,rc);
  }
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                         |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 유로 리소스 변수에 저장된 이미지 크기 [width, height]를 출력.
   Print(ArrayRange(euro,1),", ",ArrayRange(euro,0));
//--- 이미지를 유로로 변경 - 가운데에 빨간색 가로 줄무늬를 그림.
   for(int x=0;x<ArrayRange(euro,1);x++)
      euro[ArrayRange(euro,1)/2][x]=0xFFFF0000;
//--- 리소스 변수를 사용하여 그래픽 리소스 생성
   ResourceCreate("euro_icon",euro,ArrayRange(euro,1),ArrayRange(euro,0),0,0,ArrayRange(euro,1),COLOR_FORMAT_ARGB_NORMALIZE);
//--- euro_icon 리소스의 이미지를 설정할 유료 그래픽 레이블 개체를 생성
   Image("Euro","::euro_icon",10,40);
//--- 리소스를 적용하는 다른 방법으로는 그릴 수 없음
   Image("USD","::Images\\dollar.bmp",15+ArrayRange(euro,1),40);
//--- 유로 리소스 변수를 통해 이미 선언되었기 때문에 euro.bmp 리소스를 할당하는 직접 방법을 사용할 수 없음
   Image("E2","::Images\\euro.bmp",20+ArrayRange(euro,1)*2,40); // 실행 시간 오류가 발생
  }

스크립트 실행 결과 - 3개의 개체 중 오직 2개의 OBJ_BITMAP_LABEL 개체가 생성됩니다. 첫 번째 개체의 이미지는 가운데에 빨간색 줄무늬가 있습니다.

res_variables

리소스를 적용할 때의 중요한 이점은 리소스 파일이 컴파일 전에 실행 가능한 EX5 파일에 포함되기 전에 자동으로 압축된다는 것입니다. 따라서 리소스 변수를 사용하면 기존의 MQL5 프로그램 작성 방식에 비해 파일의 수와 전체 크기를 줄일 수 있을 뿐만 아니라 실행 가능한 EX5 파일에 필요한 모든 데이터를 직접 넣을 수 있습니다.

리소스 변수를 사용하면 마켓에서 제품을 게시하는 데 특히 편리합니다.

Features

  • 특수한 비트맵 리소스 변수 유형은 컴파일러에게 리소스가 이미지임을 알립니다. 그러한 변수는 uint 유형을 받습니다.
  • 비트맵 유형 배열 리소스 변수의 차원은 2개일 수 있습니다. 이 경우 어레이 크기는 [image_height][image_width]로 정의됩니다. 한 차원 배열이 지정된 경우 요소의 수는 image_height*image_width 와 같습니다.
  • 24비트 이미지를 다운로드할 때 알파 채널 구성 요소는 모든 이미지 픽셀에 대해 255로 설정됩니다.
  • 알파 채널이 없는 32비트 이미지를 다운로드할 때 알파 채널 구성 요소도 모든 이미지 픽셀에 대해 255로 설정됩니다.
  • 알파 채널로 32비트 이미지를 다운로드할 때 픽셀은 어떤 방식으로도 처리되지 않습니다.
  • 리소스 파일 크기는 128Mb를 초과할 수 없습니다.
  • 문자열 파일에 대해 BOM(헤더) 존재에 의한 자동 인코딩 탐지가 수행됩니다. BOM이 없는 경우 인코딩은 파일 내용에 의해 정의됩니다. ANSI, UTF-8 및 UTF-16 인코딩의 파일이 지원됩니다. 파일에서 데이터를 읽을 때 모든 문자열이 유니코드로 변환됩니다.

OpenCL programs

리소스 문자열 변수를 사용하면 일부 프로그램의 개발을 크게 촉진할 수 있습니다. 예를 들어 별도의 CL 파일에 OpenCL 프로그램 코드를 작성한 다음 이를 문자열로 MQL5 프로그램 리소스에 포함할 수 있습니다.

#resource "seascape.cl" as string cl_program
...
int context;
if((cl_program=CLProgramCreate(context,cl_program)!=INVALID_HANDLE)
  {
   //--- OpenCL 프로그램을 사용하여 추가 작업 수행
  }

이 예제에서는 cl_program 리소스 변수가 사용되지 않은 경우 전체 코드를 하나의 큰 문자열로 작성해야 했습니다.

참고 항목

ResourceCreate(), ResourceSave(), PlaySound(), ObjectSetInteger(), ChartApplyTemplate(), File Functions