Como protejo meu indicador?

 
Ola pessoal!

Gostaria de saber se alguém pode me ajudar!
Não tenho muita experiência com MQL, estou me aventurando e criando meus próprios indicadores e aprendendo.

Estou tentando criar uma proteção para meus indicadores e encontrei um artigo aqui mostrando alguns tipos de proteção, mas não consigo adicionar ao meu indicador.

O artigo é https://www.mql5.com/en/articles/359 e a proteção que estou tentando é "3. Licença de conta única", mas não posso colocá-la no meu código.

Alguém por favor pode me ajudar com isso?
Obrigado a todos!
Securing MQL5 code: Password Protection, Key Generators, Time-limits, Remote Licenses and Advanced EA License Key Encryption Techniques
Securing MQL5 code: Password Protection, Key Generators, Time-limits, Remote Licenses and Advanced EA License Key Encryption Techniques
  • www.mql5.com
Most developers need to have their code secured. This article will present a few different ways to protect MQL5 software. All examples in the article will refer to Expert Advisors but the same rules can be applied to Scripts and Indicators. The article starts with simple password protection and follows with key generators, licensing a given...
 

Olá Leandro, tudo bem?
Você está na comunidade portuguesa da MQL5, então poste em português para que um moderador não o chame a atenção ou, pior, apague seu post :)

Com respeito a proteger sua ferramenta existe várias formas, e depende de como é sua ferramenta.

Se você deseja fazer um período trial, por exemplo, pode criar uma data X e utilizar o comando TimeCurrent() para checar quando chega a expiração.

Outra forma é pedir o(s) número(s) da(s) conta(s) do seu(s) cliente(s) e cadastrar na sua ferramenta, de forma que ela verifica se é a conta cadastrada.

O modo como é apresentado naquele artigo é muito complexo, existem formas bem mais simples de se fazer isso.

 
Thiago Duarte:

Olá Leandro, tudo bem?
Você está na comunidade portuguesa da MQL5, então poste em português para que um moderador não o chame a atenção ou, pior, apague seu post :)

Com respeito a proteger sua ferramenta existe várias formas, e depende de como é sua ferramenta.

Se você deseja fazer um período trial, por exemplo, pode criar uma data X e utilizar o comando TimeCurrent() para checar quando chega a expiração.

Outra forma é pedir o(s) número(s) da(s) conta(s) do seu(s) cliente(s) e cadastrar na sua ferramenta, de forma que ela verifica se é a conta cadastrada.

O modo como é apresentado naquele artigo é muito complexo, existem formas bem mais simples de se fazer isso.

Boa noite Thiago, tudo bem?

Então, meu indicador é bem simples, é baseado em RSI. É o segundo que eu faço pro meu próprio uso.

Como estou conhecendo a programação MQL, estou estudando e pesquisando sobre. 

Achei esse artigo sobre proteção e gostaria de proteger a minha por segurança e principalmente, conhecer como funciona o código!

Tentei adicionar a proteção por numero ID do meu meta trader, para que ele funcione somente no meu ID. Mas quando colo aqueles códigos do artigo e compilo meu programa, ele dá um erro!

Pode me ajudar com essa forma mais simples? E muito obrigado por responder e pela dica do idioma! 

 
LeandroCLL Camargo:

Boa noite Thiago, tudo bem?

Então, meu indicador é bem simples, é baseado em RSI. É o segundo que eu faço pro meu próprio uso.

Como estou conhecendo a programação MQL, estou estudando e pesquisando sobre. 

Achei esse artigo sobre proteção e gostaria de proteger a minha por segurança e principalmente, conhecer como funciona o código!

Tentei adicionar a proteção por numero ID do meu meta trader, para que ele funcione somente no meu ID. Mas quando colo aqueles códigos do artigo e compilo meu programa, ele dá um erro!

Pode me ajudar com essa forma mais simples? E muito obrigado por responder e pela dica do idioma! 

Claro, ajudo sim! Você pode fazer de várias formas. As duas mais simples que consigo pensar são:

1) Verificar a conta:

uint conta = 12345

void OnStart()
  {
    if (AccountInfoInteger(ACCOUNT_LOGIN) != conta)
      {
        Alert("Conta não cadastrada!");
        // Fecha o programa
      }
      
  }

2) Verifica o titular (no caso você):

string titular;

void OnStart()
  {
    titular = StringSubstr(AccountInfoString(ACCOUNT_NAME),0,6); //Recorta 6 caracteres do nome do titular, nesse caso Thiago
    if (titular != "Thiago")
      {
        Alert("A conta não é sua!");
      }
      
  }
 
Thiago Duarte:

Claro, ajudo sim! Você pode fazer de várias formas. As duas mais simples que consigo pensar são:

1) Verificar a conta:

2) Verifica o titular (no caso você):

Muito Obrigado Thiago! Vou testar aqui se consigo proteger o indicador!

Estou conhecendo MQL agora, então tenho que aprender muita coisa ainda! rsrsr

Mais uma vez obrigado e tenha um ótimo final de semana!

Abraço!


PS. Thiago, tentei aqui e nao consegui ainda! rsrs

Mas, onde eu coloco esse código? Fiz aqui mas nao deu certo! Desculpe destas perguntas bobas, mas estou começado agora e descobrindo as coisas ainda!


//+------------------------------------------------------------------+
//|                                                        Sinal.mq5 |
//|                                                  Leandro Camargo |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Leandro Camargo"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Venda
#property indicator_label1  "Venda"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Compra
#property indicator_label2  "Compra"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrGreen
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot Sinal
#property indicator_label3  "Sinal"
#property indicator_type3   DRAW_NONE
#property indicator_color3  clrWhiteSmoke
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- input parameters
input int      periodos=14;
//--- indicator buffers
double         VendaBuffer[];
double         CompraBuffer[];
double         SinalBuffer[];

//---------------
//Chave
//---------------
uint conta = 123456

void OnStart()
  {
    if (AccountInfoInteger(ACCOUNT_LOGIN) != conta)
      {
        Alert("Conta não cadastrada!");
        // Fecha o programa
      }
      
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,VendaBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,CompraBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,SinalBuffer,INDICATOR_DATA);
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
  • www.mql5.com
Tire dúvidas sobre análise técnica, fale com outros traders sobre sistemas de negociação e melhore suas habilidades de programação de estratégias em linguagem MQL5. Participe do fórum, compartilhe ideias com traders de todo o mundo e ajude com feedback os novatos — nossa comunidade está crescendo junto com você. Como protejo meu indicador...
 

Aqueles dois exemplos que mandei são em forma de script rsrsr.
Você primeiro vai declarar a variável conta, fez corretamente colocando no âmbito global. Você só muda o valor da variável conta, que é "123456" para o número da sua conta na corretora :)
Agora a condição você precisa tirar do âmbito global e colocar no OnInit.

Só esse pedaço você coloca no OnInit:

if (AccountInfoInteger(ACCOUNT_LOGIN) != conta)
  {
     Alert("Conta não cadastrada!");
     return(INIT_FAILED); //Fecha o programa
  }
 
Thiago Duarte:

Aqueles dois exemplos que mandei são em forma de script rsrsr.
Você primeiro vai declarar a variável conta, fez corretamente colocando no âmbito global. Você só muda o valor da variável conta, que é "123456" para o número da sua conta na corretora :)
Agora a condição você precisa tirar do âmbito global e colocar no OnInit.

Só esse pedaço você coloca no OnInit:

Bom dia Thiago, tudo bem?
Cara, fiz aquela modificação mas não estou conseguindo compilar. Dá erro toda vez!
Desculpe ficar perguntando mas é que realmente não estou conseguindo. To começando agora a programar e não sei muito bem como funciona e o local correto onde colocam os códigos! rsrs

olha como eu fiz:

//+------------------------------------------------------------------+
//|                                            Entradas de Sinal.mq5 |
//|                                                  Leandro Camargo |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Leandro Camargo"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Venda
#property indicator_label1  "Venda"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Compra
#property indicator_label2  "Compra"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrGreen
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot Sinal
#property indicator_label3  "Sinal"
#property indicator_type3   DRAW_NONE
#property indicator_color3  clrWhiteSmoke
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- input parameters
input int      periodos=14;
//--- indicator buffers
double         VendaBuffer[];
double         CompraBuffer[];
double         SinalBuffer[];

//---------------
//Chave
//---------------
uint conta = 20975302

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()

if (AccountInfoInteger(ACCOUNT_LOGIN) != conta)
  {
     Alert("Conta não cadastrada!");
     return(INIT_FAILED); //Fecha o programa
  }
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,VendaBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,CompraBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,SinalBuffer,INDICATOR_DATA);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   PlotIndexSetInteger(0,PLOT_ARROW,234);
   PlotIndexSetInteger(1,PLOT_ARROW,233);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,


os erros estão no anexo!


Obrigado pela ajuda!

Arquivos anexados:
 

Não esquenta, to aqui pra ajudar, amo conversar sobre programação :D

O erro é simples, basta mover aquela chave aberta para a parte superior da condição como mostra a imagem:



[Editado pelo Moderador]

Razão: