无法从 iBand 检索到上下限带。

huangapple go评论53阅读模式
英文:

Can't Retrieve Upper & Lower Bands from iBand

问题

我正在尝试从iBand获取上下值...

void OnTick()
{
    double upperBand[];
    double lowerBand[];
    double range;

    int handle = iBands(_Symbol, _Period, 20, 2, 0, PRICE_CLOSE);
    // 复制缓冲区(handle, 哪个波段, 周期, 值的数量, 存储位置)
    CopyBuffer(handle, 1, 0, 1, upperBand);
    CopyBuffer(handle, 2, 0, 1, lowerBand);
    
    
    // 使用upper_band和lower_band变量
    Print("上限带: ", upperBand[0]);
    Print("下限带: ", lowerBand[0]);
    range = upperBand[0] - lowerBand[0];
    Print("范围: ", range);
}

然而,打印函数始终返回相同的值,实际上似乎是中间带的值。

当然,x = x,所以范围始终为0。

由于我没有收到错误代码,并且数据集完整,我甚至不确定如何进行故障排除?

英文:

I'm trying to get the upper and lower values from iBand...

void OnTick()
{
    double upperBand[];
    double lowerBand[];
    double range;

    int handle = iBands(_Symbol, _Period, 20, 2, 0, PRICE_CLOSE);
    // CopyBuffer(handle, which band, period, no. values, where to store)
    CopyBuffer(handle, 1, 0, 1, upperBand);
    CopyBuffer(handle, 2, 0, 1, lowerBand);
    
    
    // Use the upper_band and lower_band variables
    Print("Upper Band: ", upperBand[0]);
    Print("Lower Band: ", lowerBand[0]);
    range = upperBand[0] - lowerBand[0];
    Print("Range: ", range);
}

However the print functions reliably return an identical value, one that appears in fact to be the middle band value.

Of course, x = x, and so the range is always 0.

As I'm getting no error code and the data set is intact, I'm not even sure how to trouble shoot?

答案1

得分: 1

你初始化指标的方式不正确。请尝试以下代码:

int   handle_iBands;

int OnInit()
{
   handle_iBands = iBands(_Symbol, PERIOD_CURRENT, 20, 2, 0.0, PRICE_CLOSE);
   return(INIT_SUCCEEDED);
}

void OnTick()
{
   double Upper[], Lower[], range;
   CopyBuffer(handle_iBands, 1, 0, 10, Upper);
   CopyBuffer(handle_iBands, 2, 0, 10, Lower);

   Print("上轨: ", Upper[0]);
   Print("下轨: ", Lower[0]);
   range = Upper[0] - Lower[0];
   Print("区间: ", range);
}

这是修正后的代码。

英文:

You are initializing the indicator incorrectly. Try the following

int   handle_iBands;

int OnInit()
{
   handle_iBands = iBands(_Symbol, PERIOD_CURRENT, 20, 2, 0.0, PRICE_CLOSE);
return(INIT_SUCCEEDED);
}

void OnTick()
{
   double Upper[], Lower[], range;
   CopyBuffer(handle_iBands, 1, 0, 10, Upper);
   CopyBuffer(handle_iBands, 2, 0, 10, Lower);

   Print("Upper Band: ", Upper[0]);
   Print("Lower Band: ", Lower[0]);
   range = Upper[0] - Lower[0];
   Print("Range: ", range);
}

huangapple
  • 本文由 发表于 2023年5月10日 22:59:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/76219944.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定