I suggest reading the following ...
investeo, 2012.02.17 09:11
Most developers need to have their code secured. This article will present a few different ways to protect MQL5 software - it presents methods to provide licensing capabilities to MQL5 Scripts, Expert Advisors and Indicators. It covers password protection, key generators, account license, time-limit evaluation and remote protection using MQL5-RPC calls.
Your topic has been moved to the section: Expert Advisors and Automated Trading — In the future, please consider which section is most appropriate for your query.
The following may also be useful, but requires recompiling ...
Forum on trading, automated trading systems and testing trading strategies
Fernando Carreiro, 2017.09.10 22:17
Here is a sample of my own code that I use, but it is up to you to implement properly. I'm not offering any support on it. It is up to you to do the necessary research and learning.
//+------------------------------------------------------------------------------------+ // Initialisation Event Function //+------------------------------------------------------------------------------------+ int OnInit() { // Check Licensing Restrictions if( boolRestrictOnInit() ) return( INIT_FAILED ); // ... return( INIT_SUCCEEDED ); // Initialisation complete } //+------------------------------------------------------------------------------------+ // Tick Event Function //+------------------------------------------------------------------------------------+ void OnTick() { // Check Licensing Restrictions if( boolRestrictOnTick() ) return; /// ... } //+------------------------------------------------------------------------------------+ // Function to Test Restrictions during Initialisation //+------------------------------------------------------------------------------------+ bool boolRestrictOnInit() { boolRestrictions = boolRestrictExpiration || boolRestrictAccountNumber || boolRestrictAccountName || boolRestrictAccountServer || boolRestrictAccountCompany || boolRestrictDemoAccount || boolRestrictSymbols; if( boolRestrictions ) { boolRestrictionsUnverified = true; if( (bool) TerminalInfoInteger( TERMINAL_CONNECTED ) ) { long longAccountNumber = AccountInfoInteger( ACCOUNT_LOGIN ); if( longAccountNumber > 0 ) { if( boolRestrictAccountNumber ) { if( longAccountNumber != longRestrictAccountNumber ) { return( boolRestrictAlert() ); } } if( boolRestrictAccountName ) { if( AccountInfoString( ACCOUNT_NAME ) != strRestrictAccountName ) { return( boolRestrictAlert() ); } } if( boolRestrictAccountServer ) { if( AccountInfoString( ACCOUNT_SERVER ) != strRestrictAccountServer ) { return( boolRestrictAlert() ); } } if( boolRestrictAccountCompany ) { if( AccountInfoString( ACCOUNT_COMPANY ) != strRestrictAccountCompany ) { return( boolRestrictAlert() ); } } if( boolRestrictDemoAccount ) { if( AccountInfoInteger( ACCOUNT_TRADE_MODE ) != ACCOUNT_TRADE_MODE_DEMO ) { return( boolRestrictAlert() ); } } if( boolRestrictSymbols() ) { return( boolRestrictAlert() ); } boolRestrictionsUnverified = false; } } } return( false ); } //+------------------------------------------------------------------------------------+ // Function to Test Variations of Restricted Symbols //+------------------------------------------------------------------------------------+ bool boolRestrictSymbols() { if( boolRestrictSymbols ) { int intSymbolCount = ArraySize( strRestrictSymbols ); if( intSymbolCount == 0 ) return( false ); for( int i = 0; i < intSymbolCount; i++ ) { if( StringFind( _Symbol, strRestrictSymbols[i] ) != WRONG_VALUE ) return( false ); int intLen = StringLen( strRestrictSymbols[i] ), intHalf = intLen / 2; string strLeft = StringSubstr( strRestrictSymbols[i], 0, intHalf ), strRight = StringSubstr( strRestrictSymbols[i], intHalf, intLen - intHalf ); if( ( StringFind( _Symbol, strLeft ) != WRONG_VALUE ) && ( StringFind( _Symbol, strRight ) != WRONG_VALUE ) ) return( false ); } return( true ); } return( false ); } //+------------------------------------------------------------------------------------+ // Function to Test Expiration during Tick Events //+------------------------------------------------------------------------------------+ bool boolRestrictOnTick() { if( boolRestrictions ) { if( boolRestrictionsUnverified ) return( boolRestrictOnInit() ); if( boolRestrictExpiration && ( TimeCurrent() >= dtRestrictExpiration ) ) return( boolRestrictAlert() ); } return( false ); } // Function to Alert User of Licensing Restrictions and Remove Code from Execution bool boolRestrictAlert() { if( boolRestrictAlert ) MessageBox( strRestrictAlertMessage, strRestrictAlertCaption, MB_ICONERROR ); ExpertRemove(); return( true ); } //+------------------------------------------------------------------------------------+ // Variables for Handling of Licensing Restrictions //+------------------------------------------------------------------------------------+ bool boolRestrictExpiration = false, // Set to true, to use an Experation Date boolRestrictAccountNumber = false, // Set to true for Restricting by Account Number boolRestrictAccountName = false, // Set to true for Restricting by Account Name boolRestrictAccountServer = false, // Set to true for Restricting by Account Server boolRestrictAccountCompany = false, // Set to true for Restricting by Account Company boolRestrictDemoAccount = false, // Set to true, to only allow Demo Accounts boolRestrictSymbols = false, // Set to true, to only allow certain Symbols boolRestrictAlert = true, // Display Alert Message when Restrictions apply boolRestrictionsUnverified = false, // DO NOT CHANGE. For internal use only! boolRestrictions = false; // DO NOT CHANGE. For internal use only! datetime dtRestrictExpiration = D'2017.03.31'; // Restricted by Expration Date long longRestrictAccountNumber = 123456789; // Restricted by Account Number string strRestrictAccountName = "Client Name", // Restricted by Account Name strRestrictAccountServer = "Server Name", // Restricted by Account Server strRestrictAccountCompany = "Company Name", // Restricted by Account Company strRestrictSymbols[] = { "EURUSD", "GBPJPY", "NZDCAD" }, // Restricted Symbols strRestrictAlertCaption = "Restrictions", // Alert Message Box Caption strRestrictAlertMessage = "ATTENTION! Due to Licensing Restrictions, code execution has been blocked!"; // Message to be used when Restrictions have been detected //+------------------------------------------------------------------------------------+

You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Hello everyone, everything good? I have a doubt, I have the code below where I limit the use of my EA to a certain limit of Metatrader IDs, however for each new Id that I add I will need to recompile the code, I would like to know if there is any tutorial on how I can do to create a remote license, where I have some external database, or even a simple HTML page where I put all the allowed IDs and my EA can consult this page to check if it has the allowed ID and grant access to EA. Of course, the HTML page would be hosted on some server and they would not have access to that page, it would only be for consultation. Any idea will be welcome and a better way to do this control without having to recompile the code