This is old code but most of it is still valid and can be adapted to an Indicator. Use it as a reference and adapt it to your own needs:
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 //+------------------------------------------------------------------------------------+
I noticed just now that the market already offers a trial version that works only on the strategy tester, it does that automatically after you publish. So there is no need to provide a trial version of the indicator at all.
Then you should have explained that in your post, that this was for a Market product!
It is also against the rules to place any kind of limitations on your Market products, not even to restrict the symbol being used. No limitations are allowed.
Also, you are not allowed to create "demo" or "lite" versions of your product. That is also against the rules of Market products.
I suggest you read those rules carefully so as not to have problems in the future.
This has nothing to do with being smart or dumb, but being hasty.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Or to restrict the indicator to work only on the strategy tester?
Thanks