如何通知数字增加& MQL4代码减少了吗?

时间:2014-09-07 11:08:51

标签: mql4

任何人都可以帮助我,如何编写MQL4代码以了解结果是增加还是减少..

  

示例
  如果结果是0.0543,然后增加到0.1342,然后减少到0.10345,我想将其实现到下面的代码中:

int start()
{       
    double val = iCustom( NULL, 0, "SS2009_B", 0, 0, 0 );

    ObjectSet(     "TimeLable11", OBJPROP_CORNER, obCorner );
    ObjectSetText( "TimeLable11", "Result : " + val,
                                  fsize,
                                  "Microsoft Sans Serif",
                                  Yellow
                                  );
    return( 0 );
}

我希望结果增加或减少通知

  

示例:

Result : 0.1849  Increasing
Result : 0.01324 Decreasing

2 个答案:

答案 0 :(得分:1)

有一个简单的例子:

//------------------------------------------------------------------
#property copyright "Copyright 2015"

//------------------------------------------------------------------
// Standard Variables (define a variable to store previous value)
//------------------------------------------------------------------
double  viIndicatorValuePrev            = 0.0000;

int start() {
    double viIndicatorValueNow = iCustom(NULL,0,"SS2009_B",0,0,0);

    //------------------------------------------------
    //Decide on direction (increasing or decreasing)
    //------------------------------------------------
    string vsDirection         = "Same";
    if( viIndicatorValueNow>viIndicatorValuePrev)
        vsDirection         = "Increasing";
    if( viIndicatorValueNow<viIndicatorValuePrev)
        vsDirection         = "Decreasing";
    //------------------------------------------------

    //------------------------------------------------
    // Do your thing here (ie, display stuff)
    //------------------------------------------------
    ObjectSet( "TimeLable11", OBJPROP_CORNER, obCorner);
    ObjectSetText(
        "TimeLable11"
        , "Result : " + viIndicatorValueNow + " (" + vsDirection + ")"
        , fsize, "Microsoft Sans Serif", Yellow
    );

    //------------------------------------------------
    // Store current value for future comparison
    //------------------------------------------------
    viIndicatorValuePrev = viIndicatorValueNow;
    //------------------------------------------------
    return(0);
}

希望这个例子有所帮助。

答案 1 :(得分:0)

监控解决方案&amp;显示 start() 的每个 aMarketEVENT 调用的增量(在aMarketQUOTE即Tick到达时)

首先您需要一种方法来存储和保留一个值,在此期间变为&#34; old&#34;同时,在 start() (实际上 new -MQL世纪中的 OnTick()

static double 是一种明智的选择:

static double previousVALUE = EMPTY;                   // initialised to EMPTY

下一步,根据自定义指标&#34; SS2009_B&#34;

的前进步骤逻辑对其进行初始化
if ( previousVALUE == EMPTY ) {
     previousVALUE  = iCustom( NULL,                  // a Symbol
                               0,                     // a TimeFRAME
                               "SS2009_B",
                               0,
                               0,                     // a Buffer# to get value from
                               1                      // step-back one Bar
                               );
    }

有关语法详细信息,请查看MQL4文档

double  iCustom(
                   string symbol,    // symbol
                   int    timeframe, // timeframe
                   string name,      // path/name of the custom indicator compiled program
                   ...               // custom indicator input parameterA (if 
                   ...               // custom indicator input parameterB (if 
                   ...               // custom indicator input parameterC (if necessary)
                   int    mode,      // line index
                   int    shift      // shift
                   );

最后计算delta&amp;在UI&amp;随时准备接下来的电话

double currentVALUE =  iCustom( NULL, 0, "SS2009_B", 0, 0, 0);
double   deltaVALUE =  previousVALUE - currentVALUE;
      previousVALUE =   currentVALUE;    // shuffle [1]<-[0] before RET/next call

if ( deltaVALUE > 0 ){
     ObjectSetText( "TimeLabel11",
                    "RESULT: " + NormalizeDouble( deltaVALUE, Digits ) + "|^|",
                    fsize,
                    "Courier New",
                    Yellow              // can be deltaVALUE specific too :o)
                  );
   }
if ( deltaVALUE < 0 ){
     ObjectSetText( "TimeLabel11",
                    "RESULT: " + NormalizeDouble( deltaVALUE, Digits ) + "|v|",
                    fsize,
                    "Courier New",
                    Cyan               // can be deltaVALUE specific too :o)
                  );
   }

关于浮点数精度的一些评论

您可能会注意到NormalizeDouble()

的使用

这是相当重要的一步,以避免浮动比较的问题。

如果标准浮点数(MQL4 double )的精度不够,您可以选择在MQL4中使用扩展精度数。检查文档。

然而,总是要小心浮动比较

最佳做法,更安全的一面是同时使用NormalizeDouble()(作为预防措施) 和 与某些thresholdDELTA相比,例如if ( MathAbs( floatA - floatB ) < anEqualityTresholdDELTA ){ ... }而不是if ( floatA == floatB ) {...}