Простой способ защитить авторское право.

Если Вы написали советника на MQL4 и хотите хоть как-то защитить авторское право на свое творение, то необходимо придумать способ, который бы доказывал, что именно Вы написали этого эксперта. Для этого достаточно, по запросу пользователя выводить, например, в журнал блок информации об авторе.

Сделать это достаточно просто.

Необходимо реализовать вывод информации в журнал при определенном условии. Одно из простых и надежных средств, как мне кажется, это проверять наличие свечи с определенными параметрами в исторических данных.

Для этого достаточно проделать следующие действия. Открываем в терминале архив котировок, выбираем валюту, определенный таймфрейм, и меняем значения OHLC определенной свечи на нужные нам значения. Затем запускаем тестер на этой валютной паре. Когда тестер дойдет до измененной свечи, он выдаст нам необходимый блок информации в журнал.

Изменение значений OHLC, выбранной нами, свечи это, как ввод известного только нам пароля. Ведь только тот знает параметры свечи, которые нужно изменить, кто написал этого эксперта.

Теперь, при спорных вопросах, Вам достаточно проделать описанные выше действия и Вы докажете, что советник написан именно Вами.

Давайте рассмотрим на примере, как и что надо делать и как изменить код советника, для того, чтобы добавить возможность проверки.
Вот код программы на MQL4, который позволяет выводить информацию об авторе в журнал:

//----------------- выводим информацию об авторском праве --------------
  if ((TimeDay(TimeCurrent())==3)&&    // проверяем дату текущего бара
      (TimeMonth(TimeCurrent())==2)&&  // она должна соответствовать 3 февраля 2003
      (TimeYear(TimeCurrent())==2003)&&
      (Symbol()=="EURUSD")&&(Period()==PERIOD_H1)&&  // проверяем текущую пару и период
      (IsTesting())) // заходим только в режиме тестирования
      {
        // далее проверяем значения OHLC на предыдущем баре - 2 февраля 2003 (именно этот бар мы изменяем
        // в истории котировок), и если значения совпадут, то выводим информацию об авторском праве.
        if((NormalizeDouble(Open[1],4)==3.4567)&&(NormalizeDouble(Close[1],4)==1.2345))
        {
          // выводим необходимую информацию в журнал
          Print("текст сообщения"); // для примера в журнал выводится строка - "текст сообщения"
        }
        return(0);
      }
  //-----------------------------------------------------------------------

Как видите все просто. Вывод сообщения в журнал произойдет только тогда, когда при запуске тестера на паре EURUSD, H1 в течение 3-го февраля 2003 года встретится бар со значениями Open=3.4567 и Close=1.2345.

Для проверки вставьте приведенный выше код в эксперта в самое начало функции Start() . Затем измените, значение Open и Close любой свечи в течение 3 февраля 2003 года на значения 3.4567 и 1.2345 соответственно. Так же, если необходимо, подкорректируйте значения High и Low и запустите эксперта на тестирование по модели все тики. Только не забудьте поставить галочку "пересчитать", чтобы тестер сгенерировал новый fxt-файл, используя измененные исторические данные, на котором будет идти тестирование. В журнале, среди других сообщений, будет выведена строка "текст сообщения":

сообщение об авторе советника

У, выше представленного, способа вывода информации в журнал, есть один недостаток. Если Вы сейчас откроете ex4-файл Вашего эксперта, например, с помощью блокнота, то увидите, среди прочих символов, нашу строку - "текст сообщения". Т.е. наше сообщение об авторском праве можно с легкостью прочитать в тексте самого кода. Это, в принципе, не страшно, т.к. изменить эту информацию невозможно, ну или, по крайней мере, сложно. Но, если требуется скрыть эту строку, то вывод сообщения в журнал можно изменить, например, на следующий код:

Print(copyright_text()); //строка - "текст сообщения" формируется в функции copyright_text().

при этом в эксперта добавляются две функции:

string t(int i)// Эта функция возвращает букву с порядковым номером i из строки
               // заданий ниже в функции StringSubstr()
{
  return(StringSubstr(" абвгдежзиклмнопрстуфхцчшщъыьэюя",i,1));
}

string copyright_text() // функция формирует строку для вывода в журнал
{
  return(StringConcatenate(t(18),t(6),t(10),t(17),t(18),t(0),t(17),t(14),t(14),t(2),
                           t(25),t(6),t(13),t(9),t(31)));
}

Понять, как это работает не сложно, воспользовавшись справкой в MetaEditor по соответствующим функциям.

Я думаю, что идея "пометить" своего эксперта будет полезна тогда, когда Вы отдаете или продаете кому-либо скомпилированный ex4-файл эксперта. Я понимаю, что эти файлы итак прекрасно защищены от изменения, но все же, в некоторых случаях, не помешает добавить дополнительную защиту авторского права.