有没有办法让指标更新图表一次,对于后续版本,它会记住旧结果,而不是更新每个刻度或蜡烛?
我问这个问题,因为我只让start()
使用以下代码运行一次:
bool first = True; // .DEF GLOBAL lock
int start(){
if ( first ){ // .TST ?
first = False; // .SET ! ( lock forever )
... // .RUN my code here
..
.
}
...
..
.
return( 0 );
}
我用缓冲区设置了指标。每次更新蜡烛后,指示器移动到旁边的另一个蜡烛(因为缓冲区阵列已更新)..
我希望他们永远留在那个蜡烛上。我该怎么办?
答案 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 );
}