Опубликована статья Основы программирования на MQL5 - Глобальные переменные терминала:
Автор: Dennis Kirichenko
① Назначение:
Хотите написать и прочитать глобальные переменные (обычно называемые глобальными переменными) для внешних txt-файлов в MT4 / MT5, который является инструментом для торговли валютой, предоставляемым MetaQuotes.
② Состояние:
Я хотел бы реализовать это, используя классы CGlobalVar.mqh и CGlobalVarList.mqh, описанные на ссылочной странице ниже.
(В частности, он выполняет запись / чтение глобальной переменной с использованием метода Save () / Load () класса CGLobalVarList)
В основном не используют Windows API (HANDLE CeateFile W () и т. Д.).
③ Место хранения файла операции:
Позиция файла адресата по умолчанию соответствует спецификации этого класса
/ Файлы
или
Он сохраняется, когда FILE_COMMON указан как аргумент FileOpen ()
C: \ User \ User-Name \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \ File
И один из.
④ Созданные файлы:
Два простых файла сценариев в качестве экспериментальных образцов
WriteGlobalParameters.mq4
и
ReadGlobalParameters.mq4
Она была создана.
※ замечания
① Если только целью является обмен глобальной переменной с другим терминалом, можно подумать о методе использования разделяемой памяти и т. Д. Однако на этот раз думать только о методе, использующем внешний файл txt.
② Что касается файла (WriteGlobalParamaeters.mq 4) на стороне экспорта, используя встроенные функции MQL GlobalVariablesTotal (), GlobalVariableName (), GlobalVariableGet (), GlobalVariableTime (), не используя Save (HANDLE) Запись с помощью функции WriteFile () (↓)
for (int i = GlobalVariablesTotal () - 1; i> = 0; i -) {
string gName = GlobalVariableName (i);
if (this.CheckGlobalVar (gName)) continue;
double gValue = GlobalVariableGet (gName);
datetime gTime = GlobalVariableTime (gName);
WriteFile (hFile, gName, gValue, gTime);
}, Можно было написать список переменных в txt-файл в указанном каталоге.
Однако в случае использования вышеперечисленной функциональной группы GlobalVariable, даже если она может быть выписана, ее нельзя добавить в список глобальных переменных чтения и терминала, поэтому она оставлена.
### Проблемы, возникающие · Сообщение об ошибке
WriteGlobalParameters.mq 4 Сторона:
2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: uninit reason 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 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#include <Arrays\List.mqh>
#include <CGlobalVar.mqh>
#include <CGlobalVarList.mqh>
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
//Your File Name
string FileName="Write";
string FileType="txt";
string file=FileName+"."+FileType;
//Pointer
CGlobalVarList *list = new CGlobalVarList;
if(list!=NULL){
Print("Pointer Create Error");
}
//Handle
int hFile;
hFile=FileOpen(file,FILE_WRITE|FILE_COMMON); //FILE_CSV|FILE_UNICODE
if(hFile>=0){
if(!list.Save(hFile)){
Print("File Save Error");
delete list;
FileClose(hFile);
}
//Close
FileClose(hFile);
}
//Release the Pointer
delete list;
}
==========================================================================
ReadGlobalParameters.mq4>
//+------------------------------------------------------------------+
//| ReadGlobalParameters.mq4 |
//| Copyright 2018, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#include <Arrays\List.mqh>
#include <CGlobalVar.mqh>
#include <CGlobalVarList.mqh>
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
//Your File Name
string FileName="Read";
string FileType="txt";
string file=FileName+"."+FileType;
//Pointer
CGlobalVarList *list = new CGlobalVarList;
if(list!=NULL){
Print("Pointer Create Error");
}
//Handle
int hFile;
hFile=FileOpen(file,FILE_READ|FILE_COMMON); //FILE_CSV|FILE_UNICODE
if(hFile>=0){
if(!list.Load(hFile)){
Print("File Load Error");
delete list;
FileClose(hFile);
}
//Close
FileClose(hFile);
}
//Release the Pointer
delete list;
}
### Я пробовал
起動 Включить MT 4 и зарегистрировать произвольные имена и числовые значения (0.0 или 1.0 легко в Coco) в списке глобальных переменных на терминале.
(Время не установлено, поскольку оно автоматически устанавливается при регистрации)
================================================== ===============
Сначала от Write GlobalParameters.mq4 side ---
① WriteGlobalParameters.mq4 применяется к диаграмме с настройкой ⓪.
→ Если он работает правильно, файл создается в каталоге, указанном выше, и должна быть введена информация о глобальной переменной.
② Если вы проверяете каталог (C: \ User \ User - Name \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \),
Указанный «Write.txt» был создан, но размер файла составляет 0 килобайт.
→ Когда я открыл его, естественно, имя и значение глобальной переменной не были введены.
================================================== ================
Далее на ReadGlobalParameters.mq 4 сторона ---
③ Я создал файл «Read.txt» для чтения глобальной переменной с произвольным именем и числовым значением в том же каталоге, что и 2
(Мы создали и протестировали два типа имен / номеров / временных разрывов, разделили (не указано) и разделили табуляцию (указав «\ t» в FileOpen ()))
④ Как и в случае с ①, аналогично ①, даже если вы примените ReadGlobalParameters.mq4 к диаграмме, выведенное выше сообщение об ошибке и открытие списка глобальных переменных на терминале также было пустым.
================================================== ================
※ замечания
В качестве меры предосторожности мы провели тот же эксперимент с FILE_CSV, FILE_UNICODE, FILE_BIN и FILE_ANSI, которые по умолчанию заданы для функции FileOpen (), но результат не изменился.
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Основы программирования на MQL5 - Глобальные переменные терминала:
В среде MQL4/5 есть интересный инструмент – глобальные переменные клиентского терминала. Он позволяет создавать некоторую общую область хранения данных для всех программ терминала. Кроме того, жизнь этой области не прекращается при закрытии терминала. В данной статье я предлагаю воспользоваться средствами ООП, чтобы "разобраться" с глобальными переменными терминала.
В тексте статьи, если не оговорено иное, глобальные переменные клиентского терминала будут называться для краткости "глобальные переменные".
1. Глобальные переменные, функции
С точки зрения программиста глобальная переменная - это именованный участок памяти, который доступен для всех работающих программ одного торгового терминала. Наверное, для начинающих стоит заметить, что если работают несколько терминалов одновременно, то у каждого будет свое независимое пространство в памяти для глобальных переменных. И пересекаться они не будут.
Разработчики языка в документации указывают, что есть 11 функций, обрабатывающих потребности глобальных переменных. В учебнике по MQL4 есть раздел "Переменные GlobalVariables", где рассматривается теория. В следующих разделах будем использовать средства ООП для выполнения поставленных задач.
Схематично процесс отслеживания этапов работы модулей посредством глобальных переменных представлен на рис.8.
Рис.8. Диаграмма последовательностей для обработки флагов
Автор: Dennis Kirichenko