Watch how to download trading robots for free
Find us on Telegram!
Join our fan page
Join our fan page
You liked the script? Try it in the MetaTrader 5 terminal
- Views:
- 9308
- Rating:
- Published:
- 2016.10.27 13:43
- Updated:
- 2017.05.15 16:53
-
Need a robot or indicator based on this code? Order it on Freelance Go to Freelance
This cross-platform library allows to conveniently perform byte-wise operation with structures and standard data types.
Features:
- Byte-wise comparison (== and !=) of the structures and standard data types with each other (in MQL, the operators for comparing structures are absent by default).
- Determining the byte shift of a structure filed by its name.
- Reading the value of any standard type by the byte shift in the source data.
- Writing structures and standard types by byte shift to the source data.
- Converting structures and standard data types into a byte array.
Everything mentioned applies to simple structures.
A script with detailed comments is attached to demonstrate the capabilities of the library
// MQL4&5-code #property strict #include <TypeToBytes.mqh> #define PRINT(A) ::Print(#A + " = " + (string)A); void OnStart( void ) { MqlTick Tick; ::SymbolInfoTick(::Symbol(), Tick); MqlTick CloneTick = Tick; // Operation with structures if (_R(Tick) == CloneTick) // Now the structures can be compared ::Print("Equal"); // Get the result of the required type by shift PRINT(_R(Tick)[(datetime)0]) // Check the 'datetime' value with the zero shift in the object of the MqlTick structure - Tick.time // Get the shift of the structure field const int Offset = _OFFSET(Tick, bid); // Found the shift in bytes of the bid field in the MqlTick object PRINT(Tick.bid) // Checked the value of Tick.bid _W(Tick, Offset, (double)1.23456); // Wrote the (double)1.23456 value at the found shift PRINT(Tick.bid) // Made sure that the Tick.bid is now equal to 1.23456 PRINT(_R(Tick)[(double)Offset]) // Printed the 'double' value located at the shift Offset - it is Tick.bid again PRINT(_R(Tick).Bytes[8]) // Checked the value of byte with the shift of 8 in the object of the MqlTick structure PRINT(_R(Tick)[(uchar)8]) // The same, but using a different method PRINT(CloneTick.bid) // Checked the value of CloneTick.bid _W(CloneTick, 0, Tick); // Wrote the value of the Tick structure object to the CloneTick at the zero shift PRINT(CloneTick.bid) // Made sure that CloneTick.bid == Tick.bid // Operation with the standard types color Color = C'241,248,255'; PRINT(_R(Color)[(uchar)1]) // Green component of the color - 248 _W(Color, 2, (uchar)230); // Wrote the (uchar)230 value at the shift of 2. PRINT(Color) // Made sure that Color is now C'241,248,230' // Simultaneous operation with mixed types if (_R(Tick) != Color) // It is even possible to compare structures with standard types ::Print("Not equal"); return; }
Translated from Russian by MetaQuotes Ltd.
Original code: https://www.mql5.com/ru/code/16282
![PriceLines](https://c.mql5.com/i/code/script.png)
Script for drawing a price markup.
![Multi Timeframe Moving Average](https://c.mql5.com/i/code/indicator.png)
The indicator displays the moving average for the selected timeframe.
![News EA Template without DLL](https://c.mql5.com/i/code/expert.png)
Template EA that downloads news without the use of DLL.
![Basket Chart Creator](https://c.mql5.com/i/code/script.png)
Basket offline chart creator script using geometric mean method.