Auto Trade Driver is an automatic powerful tool (run as Expert Advisor) that helps you to manage risk and control orders and maximize your profit in multi-protect/trailing-stop rules.
This tool is very useful for both scalpers and trend followers. It not only calculates the trade risk exactly, but also protects and maximizes your profits in real-time.
With this tool, the only thing you have to do is to enter trade by your own strategy, then it will auto-drive your position with exit strategy y
The indicator displays economic news on the currency chart (the appropriate data must be downloaded from the Internet - please see the download instructions on the screenshots provided). The list of currencies (countries) is customizable. By default it shows all currencies. The main parameters come with a built-in description. In addition, there are parameters for advanced users. News items are divided into 3 categories by degree of importance. There is a great flexibility in display parameter s
The indicator determines the inside bar and marks its High/Low. It is plotted based on the closed candles (does not redraw). The identified inside bar can be displayed on the smaller periods. You may set a higher period (to search for the inside bar) and analyze on a smaller one. Also you can see the levels for Mother bar.
Period to find Inside Bar — the period to search for the inside bar. If a specific period is set, the search will be performed in that period. Al
A script for opening a grid of orders
If you need to quickly open several pending orders (Buy Limit, Sell Limit, Buy Stop, Sell Stop) on a certain distance from the current price, this script will do all the routine for you! Allow AutoTrading before running the script.
Run the script on a chart.
Language of messages displayed (EN, RU, DE, FR, ES) - language of the output messages (English, Russian, German, French, Spanish). Price for open - open price. If set to
The fractal analysis of the markets is used in the indicator operation algorithm. According to the fractals theory, after the breakthrough of the fractal level confirmed by the closing price located below or above the fractal, the trend wave in the direction of the breakthrough starts to develop. Until the fractal has been passed in the opposite direction, the trend is considered to be acting even if the price is flat or moves backwards. If a bullish fractal has been previously broken through on
Market Profile defines a number of day types that can help the trader to determine market behaviour. A key feature is the Value Area, representing the range of price action where 70% of trading took place. Understanding the Value Area can give traders valuable insight into market direction and establish the higher odds trade. It is an excellent addition to any system you may be using.
Blahtech Limited presents their Market Profile indicator for the MetaTrader community. Inspired by Jim Dalton’s
MACD All MAs-14 is a MACD indicator that allows choosing usual parameters of the standard MACD (constructed from EMA) as well as the type of the moving average to be applied: up to 14 different types.
You can select 9 standard MAs available in MetaTrader 5 - SMA, EMA, SMMA, LWMA, DEMA, TEMA, Frama, VIDYA, AMA, TRIX, and 4 non-standard - LRMA, HMA, JMA, AFIRMA.
Method MA - select the type of moving average to be displayed in the current graph. Period slow MA - the number
Does not support hedging orders on a single symbol on MT5
MultiMTCopier MT5Source - new and improved multi-terminal positions copier for your real / demo account, works faster, requires less, flexible in managing and upgrading, new information support. This expert is designed for terminal MetaTrader5 from which the position will be copied.
The EA will copy all positions without delays Additionally integrated notification in situations requiring user attention Buttons for re
Ichimoku Kinko Hyo is a purpose-built trend trading charting system that has been successfully used in nearly every tradable market. It is unique in many ways, but its primary strength is its use of multiple data points to give the trader a deeper, more comprehensive view into price action. This deeper view, and the fact that Ichimoku is a very visual system, enables the trader to quickly discern and filter "at a glance" the low-probability trading setups from those of higher proba
The script allows users to easily close positions if their profit/loss reaches or exceeds a value specified in pips.
Please set slippage value first. Sometimes some positions do not close due to high volatility of the market. Please set larger slippage or restart the script.
Exp COPYLOT CLIENT for MT5 is a copier for the МetaТrader 5 platform. It copies forex trades from any accounts. Including those from terminals МТ5 and МТ4.
Install the Expert Advisor in the terminal where you want to copy trades. Specify any text label name as pathRead, for example, "COPY". This should match the master terminal (to bind the two terminals). To copy trades, you need to install the free Master copier in the terminal from where you want to copy the trades: COPYLOT
Safe Automatic is a safe MetaТrader 5 trading robot working autonomously on a VPS server. The good results are achieved on EURUSD.
The EA applies modified versions of a trend-following strategy, half-pyramiding, scalping, Elliott Wave method and speculating trading with a deposit protection. The EA switches the strategies automatically. The program also takes the news calendar into account: the robot does not enter the market in a 10-minute interval before and after a news rel
The Expert Advisor implements the classic "triangular arbitrage", which is successfully used by hedge funds.
"Triangular" arbitrage refers to a class of neutral-market strategies, in which the profit or loss of open positions does not depend on the direction of the market movement as a whole.
In order to take profit, the EA exploits a weak spot of market makers - it utilizes the difficulty of balancing cross rates of all currency pairs.
The advantages of the strategy are the following:
Auto Trade Copier is designed to copy trades between multi MetaTrader 5 accounts/terminals with 100% accuracy.
With this tool, you can act as either a provider (source) or a receiver (destination). All trading actions will be copied from the provider to the receiver with no delay.
Note: Demo version for testing can be downloaded at: https://www.mql5.com/en/market/product/5006.
Followings are highlight features:
Switch between Provider or Receiver role within one tool.One provider can copy tr
The script is intended for automatic placing of Sell Stop pending orders, Stop Losses and Take Profits on the user specified levels. This script is not that useful as "Virtual pending buy stop", since short positions are opened as Bid price crosses the levels. Thus spread widening is not dangerous. Nevertheless, you need to have this script to prevent unwanted hitting of the Stop Loss levels.
Automation of the process of placing the Sell Stop pending orders, Stop Losses and T
COSMOS4U Volume indicator facilitates your trade decisions. It gives confirmation of the running movement and market trends. It highlights current and past accumulation and distribution volumes, comparing them to moving average volume and the highest volume. In addition, it identifies and marks nuances as well as convergence and divergence patterns of bears and bulls in order to provide the market trend and price ranges.
The supported features are as follows:
Fast Volume Moving Average Slow
The script is intended for automatic placing of Buy Stop pending orders, Stop Losses and Take Profits on the user specified levels.
Avoiding unwanted entering a long position in case of false hitting the level as a result of widening of the spread by a dealing center. Avoiding unwanted triggering of a Stop Loss in case a quote pierces a significant level (fractal) without further confirmation with the close price. Setting a necessary virtual order and entering the market in
The script creates account summary report in a separate window.
The report can be created for all deals and on deals for selected financial instruments.
It is possible to specify a time interval of calculation and save report to htm-file.
The script creates account summary report in a separate window.
The report can be created for all deals and for deals of the selected financial instruments.
It is possible to specify a time interval of calculation and save report to htm-file.
Fast Copy MT5 allows to copy trades between different MetaTrader 5 (netting)(hedge) and MetaTrader 4 accounts in any direction and amount, quickly and easily (without loading the system).
Any type of copying is available
MT5 —> MT5 MT5 —> MT4 MT4 —> MT5 MT4 —> MT4
* For any interaction with the MT4, it is necessary to additionally install Fast Copy MT4
One tool for sending and receiving transactions: [master] > [slave] operation mode can be selected in
The most profitable trend traders are the ones who know how to recognize not only the market trend, but also the trading opportunities that arise once a trend has been established. The Pz Trend Trading indicator has been designed to profit has much as possible from trends taking place in the maket.
Established trends offer dozens of trading opportunities, but most trend trading indicators neglect them completely, and leave the trader completely uninformed about what the market is doing during a
The Heiken Ashi indicator drawn using a tick chart. It draws synthetic candlesticks that contain a definite number of ticks.
option prices - price option. It can be Bid, Ask or (Ask+Bid)/2. the number of ticks to identify Bar - number of ticks that form candlesticks. price levels count - number of displayed price levels (no levels are displayed if set to 0 or a lower value). calculated bar - number of bars on the chart.Buffer indexes: 0 - OPEN, 1 - HIGH, 2 - LOW, 3 - CLOSE.
Trade Copier Pro is a powerful tool to copy trade remotely between multiple accounts at different locations over internet. This is an ideal solution for signal provider, who want to share his trade with the others globally on his own rules. One provider can copy trades to multiple receivers and one receiver can get trade from multiple providers as well. The provider can even set the subscription expiry for each receiver, so that receiver will not be able to receive the signal after that
MetaCOT 2 is a set of indicators and specialized utilities for the analysis of the U.S. Commodity Futures Trading Commission reports. Thanks to the reports issued by the Commission, it is possible to analyze the size and direction of the positions of the major market participants, which brings the long-term price prediction accuracy to a new higher-quality level, inaccessible to most traders.
These indicators, related to the fundamental analysis, can also be used as an effective long-term filte
We present you an effective software solution for arbitrage between brokers.
The Arbitrage on the market became widespread due to decentralization. There are many liquidity providers, whose quotes differ for various reasons. By tracking the dynamics of changes in the quotes of different brokers, it is possible to determine the delayed and leading brokers, thereby predicting the future prices of the delayed broker for a short time. Knowing these prices and using efficient built-in software filte
DeltaVolumeDistribution indicator can be considered as the fusion of the DeltaVolume and TradeSizeDistribution indicators.
This indicator, inspired by the MarketDelta-family charts, computes the net difference between trades occurring at bid and at ask, while trades occurring between bid and ask quotes are not computed. The indicator plots the resulting DeltaVolume as a unique distribution plot.
With the DeltaVolumeDistribution indicator you will actually be able to see the order flow entering
Virtual TrailingStop is an Expert Advisor that manages trailing stop without sending its information to the broker server.
EnableVirtualTrailingStop: enable or disable whole function VirtualTrailingStop: the pip use for determine how far the Virtual Trailing Stop will placed calculated from current price StartFromBreakEven: true/false. If true, Virtual Trailing Stop will placed after breakeven BreakEvenPoint: point profit from order open price where the Virtual T
Does not support hedging orders on a single symbol on MT5
MultiMTCopier MT5Receiver - new and improved multi-terminal positions copier for your real/demo account, works faster, requires less, flexible in managing and upgrading, new information support. This Expert Advisor is designed for the MetaTrader 5 terminal, trades will be copied into this terminal.
The EA will copy all positions without delays Additionally integrated notification in situations requiring user attention
Averager is intended for averaging your deals that has had a drawdown or had gone against the trend.
An example of operation of the averager in an Exeprt Advisor in the MetaTrader 5 terminal: Exp - TickSniper. The system is identical to the averaging system created for MetaTrader 4. A demo version of the averager for MetaTrader 5: Averager DEMO.Note: this is not an automated trading system (the EA doesn't work in the strategy tester). It monitors your deals and averages them in case o
Easy Order is an Expert Advisor allowing you to enter any type of trade with one click based on your RISK preferences.
You can choose to enter a trade and automatically calculate your lot size based on how much of your account you want to risk. Risk is calculated based on your Stop Loss placement. You can use a fixed lot size if you don't want to use risk based calculation of lot size. Your previous setting of risk based or fixed lot size remains saved for your next use of this Expert Advi
CandleTimer is an indicator that can be usable for scalper and short-term traders. It shows the following useful information:
Remaining and past time of a candle on the current chart or other timeframe Alarm setting for play sound at the start of the current candle Show SL/TP line defining whether the indicator has a Sell or Buy order or both Show a spread value Show Ask and Bid lines in different colors in high and low spread Compatible with a money management EA (you can buy it separat
I never came up with this in MQL5 so i gave it a try. You're right, you can't create pointers to structures so you can't rely on a classic C linked list.
Dynamic array of structures technically means this:
MyStruct dyn_array; // Dynamic array of structures.
I don't know what you're trying to do but these arrays should be enough to work with.
Basically as I often use the standard library CList and CArrayObj, I wanted to use these built-in functionalities for dealing with groups of structures. Specifically, I am developing an universal EA framework, which will be capable of trading with a group of 1...n EAs. This basically implies that beside the general framework input parameters, there are also sets of input parameters for each of the EAs - like stop loss parameters, position sizing parameters, indicator parameters etc. I wanted to store all these parameters as structures, not classes (as you basically only need to read/write parameters, so all this overhead related to classes like virtual function table, writing getters/setters is not necessary) and add such structures to each EAs parameter list (e.g. each EA would have CList *ParamList and I could add my own structures like StopLossParams, PosSizingParams or built in ones like MqlParam to this list.
Other issue that I can think of - imagine that for some purposes you want to store groups of MqlTradeRequest or MqlTradeResult. Currently you could only create a static array and have to resize it once in a while. Not very handy to be honest. Handling this in a dynamic array would be much more elegant.
Even worse issue - imagine that you design your own "base" structure of data, e.g. structA. Then you derive structB, structC, structD which differ a little bit, but you would like to store them in one list or dynamic array of objects. Currently not possible with standard library due to lack of pointers to structures (or hopefully I am missing something).
Currently i'm working on an universal EA framework too! (i'm in the early stage though) I believe it's the way to go to get maximum dynamism in the market. Until a small time ago i was inclined by small and simple EAs but now i believe that the great deal is to coordinate a bunch of simple EAs together. Keep the hard work and don't forget to add a benchmark mechanism to change directions in case all is going downwards, these kind of frameworks allow this feature.
I understand all of your points:
...I wanted to store all these parameters as structures, not classes (as
you basically only need to read/write parameters, so all this overhead
related to classes like virtual function table, writing getters/setters
is not necessary)...
You can use container classes and treat them in the same manner as structures with no extra overhead plus gaining access to dynamic pointers wich is what you really would like to use in a framework. You can access class members directly in the same way as structures, just declare them as public, no need to implement getters and setters. Regarding to virtual functions, in my opinion the keyword only exist because MQL5 does not support interfaces or asbtract classes (yet), in the meanwhile there's no big damage in using them.
...Other issue that I can think of - imagine that for some purposes you want to store groups of MqlTradeRequest
or MqlTradeResult. Currently you could only create a static array and
have to resize it once in a while. Not very handy to be honest. Handling
this in a dynamic array would be much more elegant...
You can create dynamic arrays of these structures too (example at my first post). But, please realize that resizing would need to be applied to dynamic arrays too. Static arrays have its initial memory space preallocated, that's the only difference to our concerns.
Even worse issue - imagine that you design your own "base" structure of
data, e.g. structA. Then you derive structB, structC, structD which
differ a little bit, but you would like to store them in one list or
dynamic array of objects. Currently not possible with standard library
due to lack of pointers to structures (or hopefully I am missing
Even with access to pointers to structures the solution would be much HORRIBLE: The only way to link structures that don't know about each other would be to use void pointers (void*) but in that case it would require to implement a mechanism to know wich type of structure is at any index and then perform the right cast. Class inheritance and the Base/Derived model was brought to address this issue in the most elegant manner using no extra pointers at all. As mentioned before, classes have access to dynamic pointers wich are used to reference an object whose derived type is unknown.
I must say that after reading all your needs, OOP is your best aproach and the most ELEGANT one, trust me. MQL5 implemented OOP to bring life to these complex frameworks. All is there for you to use it and with less (or none) overhead than what you think: Take advantadge of the power of refence types!
After saying that, if you insist in using structures to store data then the most elegant solution would be to create your own List object, it is totally possible in MQL5: Create a dynamic array of your structure and wrap it inside a class then you can implement the basic methods (Add, Remove, IndexOf). But this would not solve all of your needs, this just would pack a single type of structs in a convenient manner and also you would have to create a different class for each type, that's why these wrapper classes are implemented using templates in other languages but they're not supported by MQL5.
I insist, OOP. All your problems solved clean. Don't know at wich stage your program is but sooner or later you would need to use class interfaces to attach EAs to your framework. Structures are kept for simple data types and interaction with plain C APIs. In your case use classes to store data. Hope this serves as guidance.
Thanks for spending your time on a detailed answer. Obviously I am developing my app in the OO manner (to be honest I'd never come back to MQL4 due to lack of OOP), I was just wondering if using structures to store data will give me better runtime efficiency.
(...) You can use container classes and treat them in the same manner as structures with no extra overhead plus gaining access to dynamic pointers wich is what you really would like to use in a framework. You can access class members directly in the same way as structures, just declare them as public, no need to implement getters and setters. Regarding to virtual functions, in my opinion the keyword only exist because MQL5 does not support interfaces or asbtract classes (yet), in the meanwhile there's no big damage in using them. (...)
In your case use classes to store data. Hope this serves as guidance.
I also thought about declaring all attributes in such classes as public, but as far as I know most of C++ authorities recommend keeping most of class attributes as private or protected - so I was not sure if it won't be against sound programming rules if I create classes that have no methods and only attributes, which are public and can be accessed from anywhere and by anything in my app.
Just one more question - if in my current approach I have classes for storing parameters with only getters/setters, and I store groups of parameter objects in CArrayObj or CList, is there any advantage in introducing my own containers? I have checked in the profiler that my current approach consumes almost nothing in terms of time, so I guess that I could stay with it. What's your opinion?
I also thought about declaring all attributes in such classes as public,
but as far as I know most of C++ authorities recommend keeping most of
class attributes as private or protected - so I was not sure if it won't
be against sound programming rules if I create classes that have no
methods and only attributes, which are public and can be accessed from
anywhere and by anything in my app.
MetaQuotes also suggests using encapsulation and gives a few basic pros:
This approach offers several
advantages. First, by function name we can understand what it does -
sets or gets the value of a class member. Secondly, perhaps in the
future we will need to change the type of the m_name variable in the
CPerson class or in any of its derivative classes.
In this case, we'll need just to
change the implementation of functions SetName() and GetName(), while
objects of the CPerson class will be available for using in a program
without any code changes because the user will not even know that the
data type of m_name has changed.
I think those C++ authorities recommend the use of encapsulation for a matter of "programming best practices" and even related to "programming styles" but there's no standard about how to code using C++ nor MQL5, if the capability of making class members public is there then its sane to use it.
Also in the case of C++ itself there are no authorities, in C++ there's everything but a standard, C++ it's only a language specification but there's no corporation behind it, there's no official compiler nor official documentation (the most important thing for programmers), this is why there're so many C++ variants. Unlike MQL5...but this is beyond the discussion.
Just one more question - if in my current approach I have classes for
storing parameters with only getters/setters, and I store groups of
parameter objects in CArrayObj or CList, is there any advantage in
introducing my own containers? I have checked in the profiler that my current approach consumes almost nothing in terms of time, so I guess that I could stay with it. What's your opinion?
I would stick to the std CList or CArrayObj as you mention. Those are ready to use and very complete classes, they do everithing we need and with haste. I use CList the most, it's the best container class ever, it's easy to insert or remove objects at any index and you can still manipulate objects by indices as in arrays.
MQL5 compiler optimizations are out of public knoledge but yesterday i read a topic from MetaQuotes here that states (look at the end) that the compiler uses a lot of function inlining, to put it in a simple manner, this means that no matter if you're using getters/setters or not, you'll always get the best performance posible. Also the resulting executable size in most cases is extremely small (wich is good).
Right now i use class containers with only public attributes and no methods (the same as you). I use static functions to manipulate the attributes of these classes but after reading that post yesterday i'm going to implement getters and setters and move the functions to manipulate the members into the class itself. This would move my code to my own "programming best practices standard" and to the ones of the C++ authorities :)
With function inlining we both should stop worring about performance hits.
That sounds great :) If so, then I'll definitely stay with the current solution. Thanks a lot for all your help and best of luck with work on your framework!