Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Twitter !
Rejoignez notre page de fans
Rejoignez notre page de fans
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
- Vues:
- 3587
- Note:
- Publié:
- 2016.09.19 12:57
- Mise à jour:
- 2017.07.17 17:18
-
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur 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.098765 value at the found shift PRINT(Tick.bid) // Made sure that the Tick.bid is now equal to 1.098765 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; }
Traduit du russe par MetaQuotes Ltd.
Code original : https://www.mql5.com/ru/code/16280
![PriceLines](https://c.mql5.com/i/code/script.png)
Script for drawing a price markup.
![StochasticDiff_HTF](https://c.mql5.com/i/code/indicator.png)
The StochasticDiff indicator with the timeframe selection option available in input parameters.
![Monthly Weekly Levels](https://c.mql5.com/i/code/script.png)
The script displays the monthly and weekly levels on the chart.
![PricePosition](https://c.mql5.com/i/code/indicator.png)
PricePosition indicator provides the position of price in the point of angle when the price rises above (BUY) or falls below the angle section line (SELL).