can anybody suggest a way how to achieve this kind of drawing, as the official mql5 documentation does not point out this.
I have done the sample provided here
but it only outputs this result,
which is not what I wanted.
anybody has any suggestion?
For a faster and safer GUI, with a full control over painting these orthogonal shapes, the New-MQL4/MQL5
languages can use something like this:
// --------------------------------------------------------------------
#define GUI_aFontSIZE 10
#define GUI_aFontNAME "Courier New"
#define GUI_aTradeCOLOR C'80,0,80'
#define GUI_aTPed_COLOR clrDarkGreen
#define GUI_aSLed_COLOR clrDarkRed
#define GUI_isSELECTABLE True
long GUI_aMainWINDOW = CharID();
int GUI_anObjNUMBER = 0;
string anInterimObjNAME = StringFormat( "GUI.DEMO_RectangularOBJECT_[%d]", GUI_anObjNUMBER );
if ( ObjectFind( anInterimObjNAME ) == GUI_aMainWINDOW )
ObjectDelete( anInterimObjNAME ); //--- prevent collisions
ObjectCreate( GUI_aMainWINDOW, anInterimObjNAME, OBJ_RECTANGLE, 0, aTimeOfENTRY, anEntryPRICE,
aTimeOfEXIT, DBL_MIN
);
ObjectSetInteger( GUI_aMainWINDOW, anInterimObjNAME, OBJPROP_COLOR, GUI_aSLed_COLOR ); //--- set color
ObjectSetInteger( GUI_aMainWINDOW, anInterimObjNAME, OBJPROP_BACK, True ); //--- display in the foreground (false) or background (true) ~ FILL-IT ~
ObjectSetInteger( GUI_aMainWINDOW, anInterimObjNAME, OBJPROP_SELECTABLE, GUI_isSELECTABLE ); //---------------------------------------- MAY AVOID GUI interactions
ObjectSetInteger( GUI_aMainWINDOW, anInterimObjNAME, OBJPROP_SELECTED, False ); //--- set GUI-object as (non)-pre-SELECT-ed
ObjectSetInteger( GUI_aMainWINDOW, anInterimObjNAME, OBJPROP_HIDDEN, False ); //--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger( GUI_aMainWINDOW, anInterimObjNAME, OBJPROP_ZORDER, 1 ); //--- set the "layered" priority for receiving a mouse-click-event in the chart
// --------------------------------------------------------------------
If in doubts, use the GUI objects dialogue-panels to experiment manually and derive the missing syntax explanation(s) in the language documentation.
If the story is to become based on a Custom Indicator, the toys get a bit more complex.
There is a hardcoded-engine, that processes data in a so called IndicatorBuffer
.
In case, a particular data element there happens to equal to EMPTY_VALUE
a special handling is provided for those particular bars.
Such EMPTY_VALUE
constant signals to the processing-engine the values of indicators that are not shown in the chart, as did surprise you.
For example, for a built-in indicator Standard Deviation with a period of 20, the line for the first 19 bars in the history are not shown in the chart at all, using this feature trick. The same might be used anywhere further, all the way to the current bar[0]
, even dynamically, so as to emulate "vibrations" :o) ( do not risk this in production ... ).
This can also create "dropped" parts of the painted areas in aPriceDOMAIN
displayed Custom Indicators.
For painting area "between" two generic Custom Indicator lines ( between "oscilating" curves ), one has to employ a few more tricks, using:
//--- plot dual-line-filled----------------------------------------------
#property indicator_label "DEMO-Custom-2-Line-Filled-Indicator"
#property indicator_type DRAW_FILLING // THE MAGIC FILL-STYLING
#property indicator_color clrAqua,clrSalmon // THE MAGIC FILL-STYLING
#property indicator_width 2
//--- Custom Indicator buffers -----------------------------------------
double aCustomIndicatorLineDATA_buffer1[];
double aCustomIndicatorLineDATA_buffer2[];
//--- Next, fill DATA as usually and the GUI shows the magic FILL-STYLING
Enjoy the Wild Worlds of
MQL4/MQL5
Interested? May also like reading other MQL4 and low-latency trading posts