Have you ever wanted to share your MT4 programs with a friend or potential partner but worried that it might be shared or sold without your permission? As an MT4 developer, it’s essential to protect your intellectual property and maintain control over your program. In this blog post, we’ll show you some simple and effective ways to protect your MT4 programs, even if you’re not an MT4 programmer.
Code Snippet to Bond a Program to a Single MT4 Forex Account
Here’s a simple way to limit the use of your MT4 program to a single MetaTrader account. By following these steps, you can send your Expert Advisor, Indicator, or Script to anyone you want, knowing that it won’t work on any other account except the one you authorized:
1. Open your MT4 program in MetaEditor by pressing F4 in the MetaTrader platform.

2. Copy the following code.
//--- code begin
int account_number = 0;
if(account_number > 0 && account_number != AccountNumber())
{
Print("Account not allowed");
return(-1);
}
//--- code end
3. Modify the second line of the code by replacing ‘0’ with the number of the account authorized to use your MT4 program:
//--- code begin int account_number = 52068425; // <-- WRITE HERE THE AUTHORIZED ACCOUNT NUMBER if(account_number > 0 && account_number != AccountNumber()) { Print("Account not allowed"); return(-1); } //--- code end
4. Paste the code above between the brackets of ‘OnInit’ or ‘init’ (in old files) function of your MT4 program.
5. Ensure that the line of code (#property strict) is at the start of the program. If not, add it, or the code won’t work.

6. Compile the MT4 program.

7. Share only the executable file (‘ex4’).

Download a sample of an Expert Advisor bond to a single MT4 Forex account
The EA is linked by default to the fictitious MetaTrader 4 forex account 52068425. Change this number to the account you want to allow use of the program.
Code Snippet to Set a Trial Period
You can limit the use of your MT4 trading tool from a certain date with this simple piece of code. The MT4 EA or Indicator will work until the date you set in the code, after which the MetaTrader 4 program will stop working.
Follow the same steps above but replace points 2 and 3 with the following ones:
2. Copy the following code.
//--- code begin
datetime trial_end_date = 0;
if(TimeCurrent() > trial_end_date)
{
Print("Trial period has expired!");
return(-1);
}
//--- code end
3. Modify the second line of the code replacing ‘0’ (zero) with the date you want the MT4 program to stop working.
//--- code begin datetime trial_end_date = D'23.07.2020'; // <-- SET PROGRAM EXPIRATION DATE if(TimeCurrent() > trial_end_date) { Print("Trial period has expired!"); return(-1); } //--- code end
Download a sample of an Indicator with a trial period
The indicator trial is limited by default to work until December 31, 2020 (format D’31.12.2020′). Change it to the date to which you want to limit the use of the program.
Limiting Use of Your MT4 Program to Demo Accounts
If you want to limit the use of your MT4 program to demo accounts, you can use this code snippet to prevent it from running on live accounts:
//--- code begin
if(AccountInfoInteger(ACCOUNT_TRADE_MODE) != ACCOUNT_TRADE_MODE_DEMO)
{
//--- stop EA if not demo
Print("This program only works on demo accounts!");
return(-1);
}
//--- code end
Adding an Extra Layer of Protection with MQL5 Cloud Protector
The MetaTrader 4 trading platform contains a tool that adds an additional layer of protection to programs: MQL5 Cloud Protector. This free service adds a high degree of protection to MT4 programs, similar to the protection system used in trading apps marketed in MQL5 market.

It is advisable to always use this protection, especially for those cases where a high degree of protection is desired in the MT4 program that you want to share or sell. From our point of view, MQL5 Cloud Protector significantly reduces the need to use DLL files in program protection.
MQL5 Cloud Protector was launched at the end of 2017 on MT5 build 1700. You can see the details of this version in the post “MetaTrader 5 Build 1700: Synthetic Instruments, Shared Projects and MQL5 Cloud Protector“. Consequently, the tool was also available for MT4 sometime later.
Protect Your MT4 Programs and Keep Them Safe
Your MT4 programs are your intellectual property, and it’s essential to protect them from unauthorized use and distribution. By following the steps outlined in this post, you can ensure that your programs are not used by unauthorized parties, prevent unauthorized distribution, and maintain control over your product.
However, there are additional steps you can take to keep your programs safe. Regularly back up your files, keep your antivirus software up to date, and use strong passwords to prevent unauthorized access. Be careful who you share your programs with and only give access to trusted individuals or companies. Remember, protecting your intellectual property is not just good for your business, but it’s also essential for maintaining the integrity of the MT4 platform.
Connected Discoveries
Unraveling Ideas That Inspire.
How MetaTrader License Management Secures and Scales Your Trading Software
Discover how a secure MetaTrader license management system can protect your trading software, track usage, and scale your business operations with ease. Learn the key benefits and how to get started today!
Continue Reading How MetaTrader License Management Secures and Scales Your Trading Software
Can Automated Trading Strategies Help Navigate Market Turbulence Triggered by Banking Shocks
The stock market can be a rollercoaster ride, with prices fluctuating wildly…
Using the Two Moving Averages Crossover Strategy in Trading
Moving averages are widely used technical indicators in financial markets, and one…
Continue Reading Using the Two Moving Averages Crossover Strategy in Trading
Sky
Really appreciate you helping out the trading community. This code is very useful.
It works for me however, I am having the issue whenever I restart Mt4, the indicators that I apply this code to get removed from all charts and I either have to drag the indicator back onto the chart or load the template I saved.
Do you know what could be causing this issue?
barmenteros FX
Thank you for your kind words and for reaching out with your concern. We’re glad to hear that the code has been useful to you.
Regarding the issue you’re experiencing with indicators getting removed upon restarting MT4, it would be helpful if you could provide us with a screenshot showing how you’ve implemented the code and where exactly you’ve placed it. This will enable us to better understand the situation and assist you in resolving the issue more efficiently.
Best regards
Sky
Here’s the full code of one of my indicators with your code included:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 LightSeaGreen
#property indicator_style1 1
#property indicator_width1 2
double TodayOpenBuffer[];
extern double TimeZoneOfData=0;
extern double Horizontaloffset=20;
//+——————————————————————+
//| Custom indicator initialization function |
//+——————————————————————+
int init()
{
//— code begin
int account_number = 12345678; // 0 && account_number != AccountNumber())
{
Print(“Account not allowed”);
return(-1);
}
//— code end
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,TodayOpenBuffer);
SetIndexLabel(0,”Open”);
SetIndexEmptyValue(0,0.0);
return(0);
}
//+——————————————————————+
//| Custor indicator deinitialization function |
//+——————————————————————+
int deinit()
{
return(0);
}
//+——————————————————————+
//| Custom indicator iteration function |
//+——————————————————————+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars 0) counted_bars–;
int lastbar=Bars-counted_bars;
if(counted_bars==0) lastbar-=1+1;
DailyOpen(1,lastbar);
return (0);
}
//+——————————————————————+
//| DailyOpen |
//+——————————————————————+
int DailyOpen(int offset,int lastbar)
{
int shift;
int tzdiffsec=TimeZoneOfData*3600;
double barsper30=1.0*PERIOD_M30/Period();
bool ShowDailyOpenLevel=True;
// lastbar+= barsperday+2; // make sure we catch the daily open
//lastbar=MathMin(Bars-20*barsper30-1,lastbar);
for(shift=lastbar;shift>=offset;shift–)
{
TodayOpenBuffer[shift]=0;
if(ShowDailyOpenLevel)
{
if(TimeDay(Time[shift]-tzdiffsec)!=TimeDay(Time[shift-1]-tzdiffsec))
{ // day change
TodayOpenBuffer[shift]=Open[shift];
TodayOpenBuffer[shift+1]=0; // avoid stairs in the line
}
else
{
TodayOpenBuffer[shift]=TodayOpenBuffer[shift+1];
}
}
}
return(0);
}
//+——————————————————————+
barmenteros FX
// Issue in ‘init()’ function: Incorrect account validation logic
// Current code:
/*
int account_number = 12345678; // 0 && account_number != AccountNumber())
{
Print(“Account not allowed”);
return(-1);
}
*/
// Corrected version:
int account_number = 12345678;
if (account_number != 0 && account_number != AccountNumber())
{
Print(“Account not allowed”);
return(-1);
}
// Ensure the ‘if’ statement is properly structured for account validation.
Sky
Thank you, but the indicator no longer works for me with the new code. I’m not able to drag it onto the chart.
barmenteros FX
It seems that the issue might be related to other aspects of the indicator’s code, rather than the snippet we provided. We recommend compiling the indicator in the MetaTrader editor and addressing any errors or warnings that appear. This process should help identify and resolve any underlying problems. Best regards
Alex
metaquotes – are russian freaks . Cloud protection garbage that can be easy decompiled, same as their MQLMarket are decompiles and resell now in Indian telegram channels …
Philip
Thank You for this, you have saved me a lot of time. I have not made an attempt yet, but I’m sure I can get the code provided to work.
Thanks Again,
Philip,
Phil_GMT
barmenteros FX
You’re welcome Philip! We’re glad we could help and that the information provided was useful to you. If you have any further questions or concerns, don’t hesitate to reach out.
Adam Ahmad
Big thanks for that simple code that you post and by the way, just one question if I change “{Print” to “{Alert”, the message will popup in the screen right?
barmenteros FX
Yes Adam. That’s correct. Regards
Adam Ahmad
Hi there, can you show the simple code to set the expert advisor only run on the demo account? For example ” This EA only works for Demo Account” Just wanna set for trial version without those 2 code that you provide. Hope to hear from you soon. Thx
barmenteros FX
Hi Adam, we have updated the post to include your suggestion. Best regards
Robert Chen
Thanks for the great sharing.
Wondering can you share also how to protect or lock a MT4 template to certain MT4 account number or name ?
thanks in advance & hopefully can receive your reply
barmenteros FX
Hi Robert. Not sure of getting what you mean. Can you explain more in detail with an example, please? Regards
Robert Chen
can you share also how to protect a MT4 template also ?
Abbey
Hi,
Thanks for all you do. Is there a way to combine the two restrictions (bonding to one or two accounts and also setting a trial period)?
barmenteros FX
Yes, Abbey. You can use a combination of the 2 restrictions. Best regards
Dave Waters
Very helpful article – thank you.
barmenteros FX
Thanks for your comment, Dave. Really appreciate it!
Mathew Karanja
I have tried that code and did as instructed but an error msg keep popping up showing
‘{‘ – Function defination unexpected
‘}’ – not all control paths return a value
barmenteros FX
Hi. Send us a screenshot showing the code you added. Thanks
Mike Rossi
Hello, how can I make an indicator work on 2 pairs only (EURUSD, GBPUSD).
Indicator only not EA
Thank you
barmenteros FX
Hi. You must add a restriction in the code to limit the use of the indicator to only those pairs. You can send us the indicator and we’ll do it. Regards
JACK BE
I WANT TO USE THIS CODE IN MT5 BUT I DOES’T WORK CAN SOMEONE PROVIDE ME CODE FOR MQL5
barmenteros FX
Hi Jack, can you send us a screenshot showing the code you used? Thanks
Tomi
Adding restriction or locking an indicator to a particular account number as you explained above clearly, is it the same with indicator on mt5 platform sir? I will like you to (if not too much to ask sir) help me on how to go about it with indicator on mt5 platform sir.
Thanks
barmenteros FX
Hi Tomi,
Yes, basically it’s the same. Just dismiss ‘#property strict’ that’s not necessary in MQL5.
Best regards
Micheal
Hello sir worked perfect , what if I want to use password or key ?
barmenteros FX
Thanks for the feedback, Micheal. We’ll try to update the post to include password or key protection. Best regards
OPOH
The Codes is working perfectly and is so simple to implement
barmenteros FX
Thank you for the feedback. Glad to hear it has been helpful to you.
John
Hello,
Please I have an indicator in MT5 .mq5 , can you please assist me adding a code to lock the indicator to an account number?
Thank you
barmenteros FX
Hi John,
Please, explain what step from the post you are not able to understand / implement.
Thanks
Moe
I have tried Copied and pasted the code for my EA ,compile didn’t work
barmenteros FX
Hi Moe. Please, send us a screenshot showing the code you added and the compilation error you get. You can send it to [email protected]
Regards
Wongani Bulaya
hey guys, my software is working fine, but when i change the propety to strict thats when a number of erros are popping up
like undeclared identifier and ‘if’ expressions not being allowedon a global space.
what do i do?
barmenteros FX
Hi Wongani, the strict property is used to give compatibility with programs developed before the recent MT4 versions (build 600+). It also implies that the old codes are checked according to the new compilers standards. That is why using the strict property may cause new errors and warnings to appear when compiling. In some cases the warnings can be ignored. Instead, the errors must be corrected so that the code can be compiled successfully. Regards
khoa le
hi,
I pasted #property strict line in code but when compile got error :
“possible loss of data die type conversion”
Could you help me to solve it?
thank you
Barmenteros FX Staff
Hi,
That’s not an error but a warning so you can compile the file properly. Anyway, send us a screenshot showing the line triggering the warning so we can take a look.
Best regards
Chicco
Thank you! It works perfectly :) I really appreciate your wworks.
What if I want to add 2 or more accounts. Should I use a comma or semi colon to separate multiple accounts?
Barmenteros FX Staff
Hi Chicco,
Find below a simple example:
//--- code begin
int AcctNbr1 = 52068425; // <-- write here the authorized account number if(AcctNbr1 > 0 && AcctNbr1 != AccountNumber())
{Print("Account not allowed"); return(-1);}
int AcctNbr2 = 26341416; // <-- write here the authorized account number if(AcctNbr2 > 0 && AcctNbr2 != AccountNumber())
{Print("Account not allowed"); return(-1);}
//--- code end
Best regards
Mohammed
hey dear thanks for your great efforts
i just follow your instruction for single account it is working well but when i add second account EA not working even i follow same code you post
{
//— code begin
int AcctNbr1 = 274282; // 0 && AcctNbr1 != AccountNumber())
{Print(“Account not allowed”); return(-1);}
int AcctNbr2 = 277166; // 0 && AcctNbr2 != AccountNumber())
{Print(“Account not allowed”); return(-1);}
//— code end
}
please need your advise
thanks
barmenteros FX
Hi. Your code does not have much to do with what we publish. In your case, use the following:
//— code begin
int AcctNbr1 = 274282;
int AcctNbr2 = 277166;
if(AcctNbr1 != AccountNumber() && AcctNbr2 != AccountNumber())
{Print(“Account not allowed”); return(-1);}
//— code end
Matimba
Hi, I did put the code as instructed but it gives me an error code ” onlnit- function already defined and has a body
This is the code i was trying to put on my indicator and ea. please help me out on how to fix this issue
int OnInit()
{
int AcctNbr = 21698831; // 0 &&
AcctNbr != AccountNumber())
{
Alert(“Account not allowed”);
return(-1);
}
return(INIT_SUCCEEDED);
}
Barmenteros FX Staff
Hi Matimba,
You get that error because you already have a function in the code with the same name (‘OnInit’), so you should delete this new ‘OnInit’ function you created, search the ‘OnInit’ function already existing in your code, and copy the snippet inside it. In the other hand, your code won’t run since it contains error. Please, recheck your code and make sure it’s the same as the code we published in this post.
Thanks
jaison
hi i got an error like this…
can u show me how to put that codes correctly..
Barmenteros FX Staff
Hi Jaison,
Please, tell us what’s not clear in our previous reply so we can provide a better explanation.
Regards
Troc
Hello Bamenteros,
Many thanks for your great help!
Could you show us how to modify the code slightly so instead of checking for account number it validates against the name of the account?
Many many thanks Barmenteros!
You guys are great!
Barmenteros FX Staff
Hi Troc,
Please, send us a screenshot highlighting what do you mean by account name. If it’s what we think, you should notice that the name of the account is the same for all the accounts belonging to the same broker server, so it won’t be a valid verification method.
Thanks
rosa
Alert(“acct numbr> ” + AccountNumber());
//— code begin
int AcctNbr = 452295; // 0 && AcctNbr != AccountNumber())
{
Alert(“No puedes usar este indicador. Contacta con [email protected]” + AcctNbr);
return(-1);
//— code end
}
Barmenteros FX Staff
Hi Rosa,
Not sure what you are trying to do but your code is different from the code we posted here.
Best regards
rosa
Hi,
AccountNumber() returns “0” so it doesn´t work if you already have the indicator on your chart, close mt4 and reopen it.
int OnInit() {
//— code begin
Alert(“accountnumber: ” + AccountNumber());
int AcctNbr = XXXXXX; // 0 && AcctNbr != AccountNumber())
{
Alert(“not allowed: ” + AcctNbr );
return(-1);
//— code end
}
}
Barmenteros FX Staff
Hi Rosa,
Not sure what you are trying to do but your code is different from the code we posted here.
Best regards
Francis
i tried to do this to restrict my indicator to a particular account but still its not working
Barmenteros FX Staff
Hi. Please, send us a screenshot of the code you added and where you placed it. Thanks
Lito Lapis
Hi,
Is it possible to create a code protector for MT4 that you can share to your client that will expire in an X amount of days or months?
Thank you.
Lito
Barmenteros FX Staff
Hi Lito. Yes, it’s possible. Greetings
gary
I read somewhere on your blog abt using vmprotect for extra protection, but cant seemed to find the post. Can u share a little more on your experience of using that? Thank you.
Barmenteros FX Staff
Hi Gary. Unfortunately, we don’t have any post related to VmProtect. Nevertheless, you can find a lot of related info on the web. Best regards