- Что Вы сделали для популяризации MetaTrader 5?
- Как создать функцию возвращающую два значения?
- Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6.
- Было бы супер! Вынужден выкручиваться без них.
- К чему они? И так возможностей для грамотного профи достаточно.
- Было бы не плохо, но этими возможностями будут пользоваться единицы, а у разработчиков других задач полно.
- А что это? Я ими не пользуюсь, хотя и программирую на MQL.
- Я просто смотрю очередной «опрос», хотя и программирую.
- Я не программист и мне все равно.
- Я не программирую на МQL, но я против, чтобы разработчики платформы отвлекались на всякую блажь.
Сортировку бы string массивов сделали бы, и динамическое формирование имени массива не обязательно строкового, как и переменной, и хватило бы пока.
Сортировку бы string массивов сделали бы, и динамическое формирование имени массива не обязательно строкового, как и переменной, и хватило бы пока.
А разе сортировки строчных массивов нет ???
CArrayString::Sort() - прекрасно работает, только что проверил...
Сортировку бы string массивов сделали бы, и динамическое формирование имени массива не обязательно строкового, как и переменной, и хватило бы пока.
А разе сортировки строчных массивов нет ???
CArrayString::Sort() - прекрасно работает, только что проверил...
Ну, нету сейчас глобальных переменных-строк.
Кому необходимо - пользуйтесь файлами. Кстати, INI-файлы для этого очень даже годятся. В Кодебазе были библиотеки для пользования INI-файлами, как с использованием стандартных функций Windows, так и с полностью самописными.
Ну, нету сейчас глобальных переменных-строк.
Кому необходимо - пользуйтесь файлами. Кстати, INI-файлы для этого очень даже годятся. В Кодебазе были библиотеки для пользования INI-файлами, как с использованием стандартных функций Windows, так и с полностью самописными.
да разумеется!
прекрасный механизм - есть один минус - DLL запрещены в коммерческих продуктах
да разумеется!
прекрасный механизм - есть один минус - DLL запрещены в коммерческих продуктах
Значит, полностью самописный класс.
Как вариант, таким образом можно записывать и считывать из глобальных переменных строки, простые структуры и даже массивы (например, обмениваться результатами CopyTicks)
// MQL4&5-code #property strict #include <TypeToBytes.mqh> #define POSTFIX "___" string GetName( const string Name, const int Num, const string PostFix = POSTFIX ) { return(Name + PostFix + (string)Num); } bool _GlobalVariableDel( const string Name ) { return(GlobalVariableDel(Name) && (GlobalVariablesDeleteAll(Name + POSTFIX) >= 0)); } #define GLOBAL_VARIABLE_SET(A) \ template <typename T> \ datetime _GlobalVariableSet( const string Name, const T A ) \ { \ _GlobalVariableDel(Name); \ \ double Array[]; \ \ const datetime Res = GlobalVariableSet(Name, _ArrayCopy(Array, _R(Value).Bytes)); \ const int Size = ArraySize(Array); \ \ for (int i = 0; i < Size; i++) \ GlobalVariableSet(GetName(Name, i), Array[i]); \ \ return(Res); \ } GLOBAL_VARIABLE_SET(Value) GLOBAL_VARIABLE_SET(&Value) GLOBAL_VARIABLE_SET(&Value[]) #define GLOBAL_VARIABLE_GET(A) \ { \ double Array[]; \ \ const int Amount = (int)Tmp; \ const int Size = ArrayResize(Array, Amount / sizeof(double) + \ ((Amount % sizeof(double) == 0) ? 0 : 1)); \ \ for (int i = 0; i < Size; i++) \ Array[i] = GlobalVariableGet(GetName(Name, i)); \ \ uchar Bytes[]; \ \ _ArrayCopy(Bytes, Array, 0, 0, Amount); \ \ _W(A) = Bytes; \ } template <typename T> const T _GlobalVariableGet( const string Name ) { T Res; // https://www.mql5.com/ru/forum/1111/page1869#comment_4854112 double Tmp; if (GlobalVariableGet(Name, Tmp)) GLOBAL_VARIABLE_GET(Res) return(Res); } template <typename T> bool _GlobalVariableGet( const string Name, T &Value ) { double Tmp; const bool Res = GlobalVariableGet(Name, Tmp); if (Res) GLOBAL_VARIABLE_GET(Value) return(Res); } void OnStart() { string Name = "Name"; // Записываем/считываем строки _GlobalVariableSet(Name, "Hello World!"); Print(_GlobalVariableGet<string>(Name)); // Записываем/считываем простые структуры MqlTick Tick; SymbolInfoTick(_Symbol, Tick); _GlobalVariableSet(Name, Tick); Print(_GlobalVariableGet<MqlTick>(Name).time); // Записываем/считываем массивы MqlTick Ticks[2]; Ticks[0] = Tick; Ticks[1] = Tick; _GlobalVariableSet(Name, Ticks); MqlTick NewTicks[]; // if (_GlobalVariableGet(Name, NewTicks)) // https://www.mql5.com/ru/forum/1111/page1868#comment_4853867 // Print(NewTicks[1].time); _GlobalVariableDel(Name); }
Возможно, стоит причесать в виде библиотеки.
fxsaber, хм... Век живи, век учись - можно темплейты вот прямо так использовать, без угловых скобок ?
Я всегда использовал только так:
Print(_GlobalVariableGet<MqlTick>(Name).time);
А, оказывается, можно и так:
_GlobalVariableSet(Name, "Hello World!");
Хороший код, кстати, о нашем недавнем разговоре - вот тут, вполне разумно использовать темплейты без проверки типов.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования