• Skip to primary navigation
  • Skip to main content
barmenteros FX logo

MetaTrader Programming Services | Programmers for MT4, MQL4, MT5, MQL5, Expert Advisor EA, Forex robots, Algo Trading | barmenteros FX

No matter if you need an MT4 programmer, EA programmer, Forex programmer, or MQL programmer. We are the best qualified team to develop your forex trading strategy. Highly skilled in MT4 programming, Expert Advisor EA programming, Forex programming, and MQL4 programming.

  • Home
  • Blog
  • Services
    • MT4 Programmers
    • EA programming
    • Forex Programming
    • MQL4 Programming
    • MetaTrader 4/5 License Management System
  • Products
    • My Account
    • Latest Offers
    • MT4 Indicators
    • MT5 Indicators
  • Request Quote
  • Show Search
Hide Search
Home/MT4 Programming/How to Protect Your MT4 Programs: Simple Ways Even Without Being an MT4 Programmer
Padlock shield protecting a computer

How to Protect Your MT4 Programs: Simple Ways Even Without Being an MT4 Programmer

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.

Table of Contents

Toggle
  • Code Snippet to Bond a Program to a Single MT4 Forex Account
  • Download a sample of an Expert Advisor bond to a single MT4 Forex account
  • Code Snippet to Set a Trial Period
  • Download a sample of an Indicator with a trial period
  • Limiting Use of Your MT4 Program to Demo Accounts
  • Adding an Extra Layer of Protection with MQL5 Cloud Protector
  • Protect Your MT4 Programs and Keep Them Safe
  • Connected Discoveries
    • How MetaTrader License Management Secures and Scales Your Trading Software
    • Can Automated Trading Strategies Help Navigate Market Turbulence Triggered by Banking Shocks
    • Using the Two Moving Averages Crossover Strategy in Trading

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.

Opening MetaEditor in MetaTrader 4 - MT4

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.

Code placed at the beginning of the mt4 program

6. Compile the MT4 program.

Compile MT4 Program

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

Share Only EX4 File

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.

MACD Sample – Account Protection

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.

ATR – Trial Period

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.

  • LinkedIn
  • Facebook
  • Telegram
  • Instagram
  • Mail
  • Twitter
  • YouTube

Connected Discoveries


Unraveling Ideas That Inspire.


Illustration of a secure MetaTrader license management system, showing scalable trading software solutions

How MetaTrader License Management Secures and Scales Your Trading Software

January 2, 2025

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

A robot holding a shield and sword standing guard over a stack of money

Can Automated Trading Strategies Help Navigate Market Turbulence Triggered by Banking Shocks

March 13, 2023

The stock market can be a rollercoaster ride, with prices fluctuating wildly…

Continue Reading Can Automated Trading Strategies Help Navigate Market Turbulence Triggered by Banking Shocks

A trader looking at a computer screen with the two moving averages plotted on a price chart

Using the Two Moving Averages Crossover Strategy in Trading

March 10, 2023

Moving averages are widely used technical indicators in financial markets, and one…

Continue Reading Using the Two Moving Averages Crossover Strategy in Trading

Written by:
barmenteros FX
Published on:
July 22, 2019
Last Updated:
March 20, 2023
Thoughts:
60 Comments

Categories: Blog, MQL Programmer, MQL4 Programming, MT4 Programmers, MT4 Programming

Reader Interactions

Comments

  1. Sky

    November 19, 2023 at 05:40

    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?

    Reply
    • barmenteros FX

      November 19, 2023 at 11:58

      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

      Reply
      • Sky

        November 21, 2023 at 10:48

        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);
        }
        //+——————————————————————+

        Reply
        • barmenteros FX

          November 21, 2023 at 11:05

          // 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.

          Reply
          • Sky

            November 21, 2023 at 19:47

            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

            November 23, 2023 at 17:32

            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

  2. Alex

    July 9, 2023 at 03:30

    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 …

    Reply
  3. Philip

    February 2, 2023 at 15:35

    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

    Reply
    • barmenteros FX

      February 2, 2023 at 17:00

      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.

      Reply
  4. Adam Ahmad

    September 12, 2022 at 05:24

    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?

    Reply
    • barmenteros FX

      September 12, 2022 at 09:12

      Yes Adam. That’s correct. Regards

      Reply
      • Adam Ahmad

        February 20, 2023 at 04:31

        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

        Reply
        • barmenteros FX

          February 22, 2023 at 22:39

          Hi Adam, we have updated the post to include your suggestion. Best regards

          Reply
  5. Robert Chen

    September 7, 2022 at 04:10

    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

    Reply
    • barmenteros FX

      September 12, 2022 at 09:11

      Hi Robert. Not sure of getting what you mean. Can you explain more in detail with an example, please? Regards

      Reply
  6. Robert Chen

    September 7, 2022 at 04:07

    can you share also how to protect a MT4 template also ?

    Reply
  7. Abbey

    July 6, 2022 at 06:57

    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)?

    Reply
    • barmenteros FX

      July 7, 2022 at 08:25

      Yes, Abbey. You can use a combination of the 2 restrictions. Best regards

      Reply
  8. Dave Waters

    April 26, 2022 at 14:56

    Very helpful article – thank you.

    Reply
    • barmenteros FX

      April 26, 2022 at 16:08

      Thanks for your comment, Dave. Really appreciate it!

      Reply
  9. Mathew Karanja

    March 13, 2022 at 15:48

    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

    Reply
    • barmenteros FX

      March 15, 2022 at 12:07

      Hi. Send us a screenshot showing the code you added. Thanks

      Reply
  10. Mike Rossi

    January 5, 2022 at 17:13

    Hello, how can I make an indicator work on 2 pairs only (EURUSD, GBPUSD).
    Indicator only not EA
    Thank you

    Reply
    • barmenteros FX

      January 10, 2022 at 13:59

      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

      Reply
  11. JACK BE

    August 7, 2021 at 16:47

    I WANT TO USE THIS CODE IN MT5 BUT I DOES’T WORK CAN SOMEONE PROVIDE ME CODE FOR MQL5

    Reply
    • barmenteros FX

      August 9, 2021 at 12:34

      Hi Jack, can you send us a screenshot showing the code you used? Thanks

      Reply
  12. Tomi

    May 8, 2021 at 20:09

    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

    Reply
    • barmenteros FX

      May 10, 2021 at 23:58

      Hi Tomi,

      Yes, basically it’s the same. Just dismiss ‘#property strict’ that’s not necessary in MQL5.

      Best regards

      Reply
  13. Micheal

    May 3, 2021 at 14:16

    Hello sir worked perfect , what if I want to use password or key ?

    Reply
    • barmenteros FX

      May 3, 2021 at 15:05

      Thanks for the feedback, Micheal. We’ll try to update the post to include password or key protection. Best regards

      Reply
  14. OPOH

    May 2, 2021 at 14:48

    The Codes is working perfectly and is so simple to implement

    Reply
    • barmenteros FX

      May 2, 2021 at 15:04

      Thank you for the feedback. Glad to hear it has been helpful to you.

      Reply
  15. John

    April 9, 2021 at 08:32

    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

    Reply
    • barmenteros FX

      April 12, 2021 at 18:19

      Hi John,

      Please, explain what step from the post you are not able to understand / implement.

      Thanks

      Reply
  16. Moe

    February 19, 2021 at 05:50

    I have tried Copied and pasted the code for my EA ,compile didn’t work

    Reply
    • barmenteros FX

      February 19, 2021 at 07:57

      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

      Reply
  17. Wongani Bulaya

    January 5, 2021 at 11:27

    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?

    Reply
    • barmenteros FX

      January 5, 2021 at 12:52

      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

      Reply
  18. khoa le

    December 1, 2020 at 02:46

    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

    Reply
    • Barmenteros FX Staff

      December 1, 2020 at 09:07

      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

      Reply
  19. Chicco

    October 22, 2020 at 08:51

    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?

    Reply
    • Barmenteros FX Staff

      October 23, 2020 at 09:22

      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

      Reply
      • Mohammed

        October 22, 2022 at 09:07

        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

        Reply
        • barmenteros FX

          October 23, 2022 at 13:17

          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

          Reply
  20. Matimba

    September 20, 2020 at 17:55

    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);
    }

    Reply
    • Barmenteros FX Staff

      September 22, 2020 at 17:47

      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

      Reply
      • jaison

        December 11, 2020 at 19:18

        hi i got an error like this…
        can u show me how to put that codes correctly..

        Reply
        • Barmenteros FX Staff

          December 12, 2020 at 09:36

          Hi Jaison,
          Please, tell us what’s not clear in our previous reply so we can provide a better explanation.
          Regards

          Reply
  21. Troc

    September 17, 2020 at 12:18

    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!

    Reply
    • Barmenteros FX Staff

      September 22, 2020 at 17:50

      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

      Reply
  22. rosa

    August 25, 2020 at 15:11

    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
    }

    Reply
    • Barmenteros FX Staff

      August 26, 2020 at 19:58

      Hi Rosa,

      Not sure what you are trying to do but your code is different from the code we posted here.

      Best regards

      Reply
  23. rosa

    August 25, 2020 at 13:11

    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
    }
    }

    Reply
    • Barmenteros FX Staff

      August 26, 2020 at 19:58

      Hi Rosa,

      Not sure what you are trying to do but your code is different from the code we posted here.

      Best regards

      Reply
  24. Francis

    July 23, 2020 at 16:17

    i tried to do this to restrict my indicator to a particular account but still its not working

    Reply
    • Barmenteros FX Staff

      July 24, 2020 at 14:18

      Hi. Please, send us a screenshot of the code you added and where you placed it. Thanks

      Reply
  25. Lito Lapis

    June 15, 2020 at 06:45

    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

    Reply
    • Barmenteros FX Staff

      June 15, 2020 at 10:21

      Hi Lito. Yes, it’s possible. Greetings

      Reply
  26. gary

    September 9, 2019 at 23:20

    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.

    Reply
    • Barmenteros FX Staff

      September 10, 2019 at 11:25

      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

      Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Explore more

Get a Free Quote Get Inspiration Get Connected

Footer

Copyright © 2025 · barmenteros FX

  • Home
  • Terms and Conditions
  • About Us