如何使指标更新一次,永远不改变外观?

时间:2017-05-16 12:58:10

标签: mql4

有没有办法让指标更新图表一次,对于后续版本,它会记住旧结果,而不是更新每个刻度或蜡烛?

我问这个问题,因为我只让start()使用以下代码运行一次:

bool first = True;              // .DEF GLOBAL lock

int start(){
    if (  first ){              // .TST ?
          first = False;        // .SET ! ( lock forever )
          ...                   // .RUN my code here
          ..
          .
          }
    ...
    ..
    .
    return( 0 );
    }

我用缓冲区设置了指标。每次更新蜡烛后,指示器移动到旁边的另一个蜡烛(因为缓冲区阵列已更新)..
我希望他们永远留在那个蜡烛上。我该怎么办?

1 个答案:

答案 0 :(得分:0)

这样的想法是完全可行的:

详细信息取决于您的实际用例。

如果在全局范围内使用 bool first = True; // .DEF GLOBAL lock ,则锁定机制是明确的&完全在你的控制之下。不是解决一次预先计算(和预先存储)的值,注入 IndicatorBuffer[] -s,这是反向的TimeBased-shifting的主题,所以你的存储在单元索引 [0] 中的最新值将在每个 aNewBarEVENT 到达时变老并转移到“左”(在时间),在每个这样的新蜡烛开始时成为[++i]

这是一个问题吗?

如果是,可以更改基于iCustom(...)的指标值检查的方法。

冻结全局范围寄存器上的时间或使用智能访问索引函数就足够了:

bool first = True;                    // .DEF GLOBAL lock

double iCustomFrozenInTime( const int cellINDEX = 0 ){
    static int Bars_onFirst = Bars;   // .DEF STATIC first_Bars
    if (  first ){
               Bars_onFirst = Bars;   // .SET STATIC first_Bars
       }
    return( iCustom( _Symbol,
                     PERIOD_CURRENT,
                     ...,
                     cellINDEX + ( Bars - Bars_onFirst )
                     )
            );
    }

int start(){ 
    if (  first ){                    // .TST ?
          iCustomFrozenInTime();      // .SET   ( Bars_onFirst )
          first = False;              // .SET ! ( lock forever )
          ...                         // .RUN my code here
          ..
          .
          }
    ...
    ..
    .                                 // .GET values literally "Frozen in Time"
    aFrozenCELL_0 = iCustomFrozenInTime( 0 )
    aFrozenCELL_1 = iCustomFrozenInTime( 1 );
    aFrozenCELL_2 = iCustomFrozenInTime( 2 );
    return( 0 );
    }