기능에 대해 더 잘 이해하기 위해 이 글을 읽었습니다. 글로벌 변수를 만들거나 변경하면 거래 환경에 어떤 영향을 미치나요?
글로벌 변수의 수치가 무엇을 나타내는지 설명할 수 있나요?
꽤 오랫동안 터미널의 글로벌 변수를 연구하고 이해하려고 노력해왔지만 아직까지 그 사용법과 효과를 이해하지 못했습니다. 가능하다면 글로벌 변수를 생성하면 트레이딩 계좌 잔고에 어떤 긍정적인 영향을 미치는지 간단한 예를 들어 설명해 주시겠습니까?
감사합니다.
안부 전해주세요,
Dale.
과제:
메타쿼츠에서 제공하는 통화 거래 도구인 MT4/MT5에서 외부 txt 파일에 대한 전역 변수(일반적으로 글로벌 변수라고 함)를 쓰고 읽고 싶습니다.
상태:
아래 참조 페이지에 설명된 CGlobalVar.mqh 및 CGlobalVarList.mqh 클래스를 사용하여 이를 구현하고자 합니다.
(구체적으로는 CGLobalVarList 클래스의 Save () / Load () 메서드를 사용하여 전역 변수에 대한 쓰기/읽기를 수행합니다).
기본적으로 Windows API를 사용하지 않습니다(HANDLE CeateFile W () 등). Д.).
운영 파일 저장 위치:
대상 파일의 기본 위치는 이 클래스의 사양을 따릅니다.
/ Files
또는
FileOpen ()의 인자로 FILE_COMMON이 지정되면 저장됩니다.
C: \ { 사용자 \ 사용자 이름 \ 앱 데이터 \ 로밍 \ 메타 따옴표 \ 터미널 \ 일반 \ 파일 \ 파일
그리고 다음 중 하나입니다.
생성된 파일:
실험용 샘플로 두 개의 간단한 스크립트 파일
WriteGlobalParameters.mq4
и
ReadGlobalParameters.mq4.
에 의해 생성되었습니다.
참고 사항
전역 변수를 다른 터미널과 공유하는 것만이 목적이라면 공유 메모리 등을 사용하는 방법도 생각해 볼 수 있습니다. 하지만 이번에는 외부 txt 파일을 이용하는 방법만 생각해 보겠습니다.
내보내기 쪽의 파일(WriteGlobalParamaeters.mq 4)은 저장(HANDLE) 쓰기가 아닌 내장된 MQL 함수인 GlobalVariablesTotal (), GlobalVariableName (), GlobalVariableName (), GlobalVariableGet (), GlobalVariableTime ()을 사용하여 WriteFile () 함수를 사용하여 작성합니다(↓).
For (int i = GlobalVariablesTotal () - 1; i> = 0; i -) {
문자열 gName = GlobalVariableName (i);
if (this.CheckGlobalVar (gName)) continue;
double gValue = GlobalVariableGet (gName);
날짜 시간 gTime = GlobalVariableTime (gName);
WriteFile (hFile, gName, gValue, gTime);
}를 사용하면 변수 목록을 지정된 디렉터리에 있는 txt 파일에 쓸 수 있었습니다.
하지만 위의 GlobalVariable 함수 그룹의 경우 쓰기는 가능하지만 글로벌 읽기 및 터미널 변수 목록에 추가할 수 없기 때문에 제외되었습니다.
#### 문제 발생 - 오류 메시지
WriteGlobalParameters.mq 4면:
2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: uninit 이유 0
2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: 파일 저장 오류
2018.05.26 22: 34: 45.282 WriteGlobalParameters EURUSD, M1: 포인터 생성 오류
ReadGlobalParameters.mq 4면:
2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: 불명확한 이유 0
2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: 포인터 생성 오류
* 위의 오류 메시지에서
포인터 사양의 결함 및 부적절한 파일 조작으로 인해 의도한 작업이 실패한 것이 분명합니다,
다음 코드에서 문제가 어디에 있는지 알 수 없으므로이 점 (불분명 한 이유 0)에 대해 이야기하고 싶습니다.
```MQL4/MQL5.
WriteGlobalParameters.mq4>>
//+------------------------------------------------------------------+
//| WriteGlobalParameters.mq4 ||
//| Copyright 2018, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#재산권 저작권 "Copyright 2018, MetaQuotes Software Corp."
#속성 링크"https://www.mql5.com"
#속성 버전 "1.00"
#include <Arrays\List.mqh>
#include <CGlobalVar.mqh>
#include <CGlobalVarList.mqh>
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수 |
//+------------------------------------------------------------------+
void OnStart(){
//파일 이름
string FileName="Write";
string FileType="txt";
string file=파일명+"."+파일형;
//Pointer
CGlobalVarList *list = 새로운 CGlobalVarList;
if(list!=NULL){
Print("포인터 생성 오류");
}
//Handle
int hFile;
hFile=FileOpen(file,FILE_WRITE|FILE_COMMON); //FILE_CSV|FILE_UNICODE
if(hFile>=0){
if(!list.Save(hFile)){
Print("파일 저장 오류");
목록을 삭제합니다;
FileClose(hFile);
}
//Close
FileClose(hFile);
}
//포인터 해제
목록을 삭제합니다;
}
==========================================================================
ReadGlobalParameters.mq4>
//+------------------------------------------------------------------+
//| ReadGlobalParameters.mq4 ||
//| Copyright 2018, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#재산권 저작권 "Copyright 2018, MetaQuotes Software Corp."
#속성 링크"https://www.mql5.com"
#속성 버전 "1.00"
#include <Arrays\List.mqh>
#include <CGlobalVar.mqh>
#include <CGlobalVarList.mqh>
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수 |
//+------------------------------------------------------------------+
void OnStart(){
//파일 이름
string FileName="Read";
string FileType="txt";
string file=파일명+"."+파일형;
//Pointer
CGlobalVarList *list = 새로운 CGlobalVarList;
if(list!=NULL){
Print("포인터 생성 오류");
}
//Handle
int hFile;
hFile=FileOpen(file,FILE_READ|FILE_COMMON); //FILE_CSV|FILE_UNICODE
if(hFile>=0){
if(!list.Load(hFile)){
Print("파일 로드 오류");
목록을 삭제합니다;
FileClose(hFile);
}
//Close
FileClose(hFile);
}
//포인터 해제
목록을 삭제합니다;
}
### 시도
起動 MT 4를 활성화하고 터미널의 전역 변수 목록에 임의의 이름과 숫자 값(Coco에서는 쉽게 0.0 또는 1.0)을 등록합니다.
(시간은 등록 시 자동으로 설정되므로 설정하지 않습니다.)
================================================== ===============
먼저 Write GlobalParameters.mq4 쪽에서 ---.
WriteGlobalParameters.mq4를 ⓪ 설정으로 차트에 적용합니다.
→ 정상적으로 작동하면 위에 지정한 디렉터리에 파일이 생성되고 전역 변수 정보를 입력해야 합니다.
디렉토리(C: \ 사용자 \ 사용자 - 이름 \ 앱데이터 \ 로밍 \ 메타쿼트 \ 터미널 \ 공통 \ 파일 \)를 확인합니다,
지정한 "Write.txt"가 생성되었지만 파일 크기는 0KB입니다.
→ 물론 열었을 때 전역 변수의 이름과 값이 입력되지 않았습니다.
================================================== ================
다음 ReadGlobalParameters.mq 4면 ---.
2와 같은 디렉터리에 임의의 이름과 숫자 값을 가진 전역 변수를 읽기 위해 "Read.txt" 파일을 생성했습니다.
(이름/숫자/타임스탬프의 분할(미지정)과 분할 탭(FileOpen에서 "\ t"를 지정하여) 두 가지 타입으로 생성하여 테스트했습니다())))).
) ④ ①과 마찬가지로 ReadGlobalParameters.mq4를 차트에 적용해도 위의 오류 메시지와 터미널의 전역 변수 목록 열기 역시 공백으로 표시됩니다.
================================================== ================
참고 사항
혹시 모를 경우를 대비해 FileOpen () 함수에 기본으로 설정되어 있는 FILE_CSV, FILE_UNICODE, FILE_BIN, FILE_ANSI로 동일한 실험을 진행했지만 결과는 달라지지 않았습니다.

- www.mql5.com
이제 전역 변수는 복수로만 사용할 수 있습니다.
희망사항은 키:값 쌍과 같은 요소와 함께 CMap 객체를 사용할 수 있습니다.
또는 Array 또는 목록 ..... 또는 배열 또는 목록을 전역 변수로 사용하세요.
또는 메모리를 가리키는 포인터를 전역 변수로 사용하세요 .
새로운 기고글 MQL5 프로그래밍 기초: 터미널 글로벌 변수 가 게재되었습니다:
이 문서에서는 터미널에서 글로벌 변수 작업을 용이하게 하는 객체 생성을 위한 MQL5 언어의 객체 지향 기능에 중점을 두고 알아보겠습니다. 실전적인 예를 들어보자면, 글로벌 변수가 프로그램 단계 구현을 위한 제어점으로 사용되는 경우를 고려합니다.
MQL4/5 환경에는 클라이언트 터미널의 글로벌 변수라는 흥미로는 요소가 있습니다. 이를 통해서 터미널 내의 모든 프로그램들이 공유할 수 있는 데이터 저장공간을 만들 수 있습니다. 또한 이 영역의 데이터는 터미널이 청산된다고해서 사라지지 않습니다. 이 문서에서는 객체 지향 프로그래밍(Object Oriented Programming) 도구를 사용하여 터미널의 글로벌 변수란 무엇인지에 대해 알아볼 것입니다.
또한 이 문서에서 클라이언트의 글로벌 변수를 따로 언급하지않는 한 "글로벌 변수"라고 지칭합니다.
1. 글로벌 변수, 함수들
프로그래머의 관점에서 설명하자면, 글로벌 변수는 매매 터미널의 모든 작업 프로그램에서 사용할 수 있는 명명된 메모리 영역입니다. 초보 프로그래머는 동시에 작동하는 여러 터미널이 있는 경우 각 터미널에 전역 변수에 대한 자체 독립 메모리 공간이 있다는 점에 유의해야 합니다. 겹치는 일이 없기 때문입니다.
개발자용 설명서에 의하면 글로벌 변수를 다루는 함수는 총 11개 있음을 알 수 있습니다. 이론적인 부분은 MQL4 책의 "글로벌 변수(GlobalVariables)" 섹션에서 찾아볼 수 있습니다.
글로벌 변수를 이용하여 모듈 스테이지를 추적하는 패턴을 8번 그림에서 볼 수 있습니다.
8번 그림. 플래그 시퀀스 처리 패턴
작성자: Denis Kirichenko