# Защита кода советника

Раздел: Язык программирования MQL4
Автор темы: Zeliboba
Создана: 2022-05-22 19:54
Ответов: 8 | Просмотров: 4230
Страница 1 из 1
Источник: https://forexsystemru.com/threads/90783/

---

## Zeliboba — 2022-05-22 19:54

Дорогие друзья поделитесь скриптом или частью котом который можно вживить в советник для его защиты
То есть привязка советника к определенному номеру счета или брокеру
Если есть какие варианты при помощи сервера пишите
Не судите строго я новичок в этом деле ))

## AlexeNP — 2022-05-23 21:21

если AccountInfoInteger(ACCOUNT_LOGIN) не равен какому-то заданному, то делаешь выход из OnInit с ошибкой

## ИванМН — 2022-05-26 21:17

Если нужна именно защита кода от декомпиляции, то сервис "Cloud Protector" в МетаЭдиторе. Но для использования этой функции у Вас должен иметься эккаунт на сайте mql5.

## FEEX — 2022-10-05 14:36

```
void OnTick()
{
   int Number = AccountNumber(); // получить номер счета
   if (Number  != 1234567)       // сравнить его с заданным, и если не равен,
   {
      Comment("Работа на счете ",Number," запрещена!");   // вывести комментарий о запрете работы
      return;     // принудительно завершить работу
   }
   // ... дальнейший код советника
}
```

> Цитата (Zeliboba):
> Дорогие друзья поделитесь скриптом или частью котом который можно вживить в советник для его защиты
> То есть привязка советника к определенному номеру счета или брокеру
> Если есть какие варианты при помощи сервера пишите
> Не судите строго я новичок в этом деле ))

> Цитата (MERFY):
>

## FEEX — 2022-10-05 15:07

вопрос по данной защите:

```

extern int Parol = 12345;     // поле для ввода ключа
//
bool Check()  {                                
   int Key=AccountNumber()*2+1000001;  // Вычисляем ключ
   if (Parol==Key) return(true); // Если пароль верный, то..    
   Alert("Неправильный пароль. Эксперт не работает.");
   return(false);
}
//
int OnTick() {
   //
   if(Check()==false) return;                      
   //------------------------------------------ 3 -- основной код ниже
```

При не правильном вводе пароля срабатывает алерт, но сигналит просто без остановки. Как ограничить кол-во активаций алерта? Например, один раз сработал и всё.
Или, как вариант, как заменить алерт на Comment, чтобы вместо алерта на экране выводилось сообщение об ошибке?
Если можно, именно сам КОД нарисуйте)

## ZIKILO — 2022-10-05 15:25

а что есть что защищать?

## FEEX — 2022-10-05 15:53

> Цитата (ZIKILO):
> а что есть что защищать?

Как говорится: было бы ЧЕМ защищать, а ЧТО - всегда найдется :LOL:

## FEEX — 2022-10-06 12:46

> Цитата (FEEX):
> вопрос по данной защите:
> 
```

> extern int Parol = 12345;     // поле для ввода ключа
> //
> bool Check()  {
>    int Key=AccountNumber()*2+1000001;  // Вычисляем ключ
>    if (Parol==Key) return(true); // Если пароль верный, то..
>    Alert("Неправильный пароль. Эксперт не работает.");
>    return(false);
> }
> //
> int OnTick() {
>    //
>    if(Check()==false) return;
>    //------------------------------------------ 3 -- основной код ниже
```

> При не правильном вводе пароля срабатывает алерт, но сигналит просто без остановки. Как ограничить кол-во активаций алерта? Например, один раз сработал и всё.
> Или, как вариант, как заменить алерт на Comment, чтобы вместо алерта на экране выводилось сообщение об ошибке?
> Если можно, именно сам КОД нарисуйте)

Никто не подскажет вариант решения моего вопроса?

## ИванМН — 2023-04-09 17:22

> Цитата (FEEX):
> Никто не подскажет вариант решения моего вопроса?

Потому что у Вас обращение к функции проверки ключа идёт на каждом тике, а, поскольку внешняя переменная Parol не меняется, а проверка производится на каждом тике, и она заканчивается неудачно, то и выдаётся алёрт.
Вместо

   if(Check()==false) return;

вбейте

   if(!Check())
   {
       ExpertRemove();
       return;
   }

Тогда после однократного неудачного прохождения проверки советник выгрузится с графика, и алёрт будет выдан также однократно.

