int GetActiveMagic()
Возвращает текущий присвоенный магический номер.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «magicclient.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Библиотека для управления магическими номерами в MetaTrader. Реализует клиентскую логику инициализации, получения, проверки и освобождения магических чисел. Данные хранятся в локальном CSV-файле общего доступа. Поддерживается привязка к имени советника и номеру счёта. В текущей версии назначение магических номеров выполняется локально на основе даты; HTTP-интеграция с внешним реестром запланирована, но не реализована.
| Настройка | Описание |
|---|---|
| Legacy compatibility only. Not used by YYYYMMDDn registry. (MagicRegistryBase) | База реестра магических номеров — Целое число, зарезервированное для обратной совместимости; в текущей реализации YYYYMMDDn-реестром не используется. |
Классов: 0 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 4
int GetActiveMagic()
Возвращает текущий присвоенный магический номер.
void MagicHeartbeat()
Выполняет периодическую проверку состояния; в текущей реализации ограничивается обновлением внутренней метки времени.
void MagicRelease()
Предназначена для уведомления реестра об остановке советника; в текущей версии не выполняет действий.
bool IsMagicValid()
Проверяет, был ли успешно присвоен активный магический номер.
#ifndef MAGIC_CLIENT_INCLUDED
#define MAGIC_CLIENT_INCLUDED
#define MAGIC_REGISTRY_FILE "MagicRegistry.csv"
input int MagicRegistryBase = 300; // Legacy compatibility only. Not used by YYYYMMDDn registry.
int g_AssignedMagic = 0;
string g_EAName="";
string g_RegistryKey="";
datetime g_LastHeartbeat=0;
bool MagicClientInit(
string eaName,
int legacyMagic
)
{
g_EAName = eaName;
g_RegistryKey =
g_EAName + "_" +
IntegerToString(AccountNumber());
string todayStr = TimeToString(TimeCurrent(), TIME_DATE);
string todayCompact = todayStr;
StringReplace(todayCompact, ".", "");
long todayPrefix = StringToInteger(todayCompact); // YYYYMMDD
bool found = false;
int nextN = 0;
int rHandle = FileOpen(
MAGIC_REGISTRY_FILE,
FILE_READ|FILE_CSV|FILE_COMMON
);
if(rHandle != INVALID_HANDLE)
{
while(!FileIsEnding(rHandle))
{
string line = FileReadString(rHandle);
if(line == "") break; // Skip empty lines
string parts[];
int count = StringSplit(line, ',', parts);
if(count < 2) continue;
string name = parts[0];
string magicStr = parts[1];
if(name == g_RegistryKey)
{
g_AssignedMagic = (int)StringToInteger(magicStr);
found = true;
break;
}
long m = StringToInteger(magicStr);
if(m / 10 == todayPrefix)
{
int n = (int)(m % 10);
Показано первые 50% кода (символов: 2003)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.