【问题标题】:How to draw a Filling like a Rectangle, in MQL5?如何在 MQL5 中像矩形一样绘制填充?
【发布时间】:2016-11-28 17:14:14
【问题描述】:

任何人都可以提出一种方法来实现这种绘图,因为官方mql5 documentation没有指出这一点。

我已经完成了here提供的示例
但它只输出这个结果,
这不是我想要的。
有人有什么建议吗?

【问题讨论】:

    标签: lines mql5 graphical-programming metatrader5


    【解决方案1】:

    更简单的部分: ...最好忘记自定义指标(全部共享单线程/块)

    为了更快、更安全的 GUI,可以完全控制绘制这些正交形状,-MQL4/MQL5 语言可以使用如下内容:

    // --------------------------------------------------------------------
    #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
    // --------------------------------------------------------------------
    

    如果有疑问,请使用 GUI 对象对话面板手动进行实验,并在语言文档中得出缺失的语法解释。

    可能会使用更复杂且风险更大的方法:

    如果故事要基于自定义指标,玩具会变得更复杂。

    有一个硬编码引擎,用于处理所谓的 IndicatorBuffer 中的数据。

    如果某个特定数据元素恰好等于 EMPTY_VALUE,则会为这些特定柱提供特殊处理。

    这样的EMPTY_VALUE 常量信号向处理引擎发出未在图表中显示的指标值,这让您感到惊讶。

    例如,对于周期为 20 的内置指标标准偏差,历史中前 19 个柱的线根本不会显示在图表中,使用此功能技巧。可以在更远的地方使用相同的方法,一直到当前的 bar[0],甚至是动态的,以便模拟“振动”:o)(不要在生产中冒这个风险......)。

    这也可以在 aPriceDOMAIN 显示的自定义指示器中创建绘制区域的“丢弃”部分。

    要在两条通用自定义指标线“之间”(“振荡”曲线之间)绘制区域,必须使用更多技巧,使用:

    //--- 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
    

    无论如何:

    享受MQL4/MQL5

    的狂野世界


    有兴趣吗? May also like reading other MQL4low-latency trading posts

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 2018-12-25
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多