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

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

Can't Retrieve Upper & Lower Bands from iBand

问题

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

  1. void OnTick()
  2. {
  3. double upperBand[];
  4. double lowerBand[];
  5. double range;
  6. int handle = iBands(_Symbol, _Period, 20, 2, 0, PRICE_CLOSE);
  7. // 复制缓冲区(handle, 哪个波段, 周期, 值的数量, 存储位置)
  8. CopyBuffer(handle, 1, 0, 1, upperBand);
  9. CopyBuffer(handle, 2, 0, 1, lowerBand);
  10. // 使用upper_band和lower_band变量
  11. Print("上限带: ", upperBand[0]);
  12. Print("下限带: ", lowerBand[0]);
  13. range = upperBand[0] - lowerBand[0];
  14. Print("范围: ", range);
  15. }

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

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

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

英文:

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

  1. void OnTick()
  2. {
  3. double upperBand[];
  4. double lowerBand[];
  5. double range;
  6. int handle = iBands(_Symbol, _Period, 20, 2, 0, PRICE_CLOSE);
  7. // CopyBuffer(handle, which band, period, no. values, where to store)
  8. CopyBuffer(handle, 1, 0, 1, upperBand);
  9. CopyBuffer(handle, 2, 0, 1, lowerBand);
  10. // Use the upper_band and lower_band variables
  11. Print("Upper Band: ", upperBand[0]);
  12. Print("Lower Band: ", lowerBand[0]);
  13. range = upperBand[0] - lowerBand[0];
  14. Print("Range: ", range);
  15. }

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

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

  1. int handle_iBands;
  2. int OnInit()
  3. {
  4. handle_iBands = iBands(_Symbol, PERIOD_CURRENT, 20, 2, 0.0, PRICE_CLOSE);
  5. return(INIT_SUCCEEDED);
  6. }
  7. void OnTick()
  8. {
  9. double Upper[], Lower[], range;
  10. CopyBuffer(handle_iBands, 1, 0, 10, Upper);
  11. CopyBuffer(handle_iBands, 2, 0, 10, Lower);
  12. Print("上轨: ", Upper[0]);
  13. Print("下轨: ", Lower[0]);
  14. range = Upper[0] - Lower[0];
  15. Print("区间: ", range);
  16. }

这是修正后的代码。

英文:

You are initializing the indicator incorrectly. Try the following

  1. int handle_iBands;
  2. int OnInit()
  3. {
  4. handle_iBands = iBands(_Symbol, PERIOD_CURRENT, 20, 2, 0.0, PRICE_CLOSE);
  5. return(INIT_SUCCEEDED);
  6. }
  7. void OnTick()
  8. {
  9. double Upper[], Lower[], range;
  10. CopyBuffer(handle_iBands, 1, 0, 10, Upper);
  11. CopyBuffer(handle_iBands, 2, 0, 10, Lower);
  12. Print("Upper Band: ", Upper[0]);
  13. Print("Lower Band: ", Lower[0]);
  14. range = Upper[0] - Lower[0];
  15. Print("Range: ", range);
  16. }

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:

确定