错误、漏洞、问题 - 页 3030

 
Andrey Dik:

我们返回0,从而说明我们还没有计算过任何东西,并且在下一个柱状图上不会增量1。

也就是说,我们将在我们开始请求老因素的数据的那一栏,直到我们返回(rate_total)。

从帮助中可以看出:"函数调用中的prev_calculated参数包含 OnCalculate() 前一次 调用返回的 "
 
mktr8591:
来自帮助:"函数调用时的prev_calculated参数包含了 OnCalculate() 前一次 调用返回的 。"

是的,帮助中写了很多,但并不总是很清楚,不幸的是(不是为了报复开发者),你必须学习、学习、学习。 但这个分支的存在是因为有时会发现一些既不符合帮助也不符合常识的东西,A100是我们的英雄,因为它甚至可以去到没有人愿意自己爬的地方))。

 
Сергей Таболин:

1.谢谢大家--我对指标有了更多的了解 ))))

安德鲁,如果有人不理解你的想法(包括我),这只意味着一件事:你没有正确地画出这幅画!这就是你的想法。或者说,你以这样一种方式来做,使许多人不理解......。

真相更重要。不幸的是,并不是每个人都清楚。

 

Andrey Dik:

返回0,从而说明我们还没有计算过任何东西,而且prev_calc在下一个交易日不会被增加1。

那么return(rate_total)应该使prev_calc增加到rate_total?

 
Andrey Dik:

返回0,从而说明我们还没有计算出任何东西,而且在下一个交易日,前一个kalk将不会增加1。

他自己在计算中归零,并抱怨他归零 )

 
Andrey Dik:

我们可以只计算一次新的条形图,而不是在每个tick上计算。

我们负担不起,因为终端不会在线生成 "较高TF "的历史数据。

一般来说,这里需要一些假设。

- 要么我们自己在指标内构建OHLC

- 或者终端自己建立了OHLC


如果是后者,那么我们应该考虑,终端根本不知道TFs是如何互动的,谁是什么的倍数,以及在"新栏"事件中会发生什么。但我们应该让终端建立必要的TF


在你的第二个指标中试试这个代码。

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   double buff [];
   if(prev_calculated == 0)
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
         return 0;
      }
   }
   else
   {
      if (rates_total == prev_calculated)
      {
         if(CopyBuffer (Handle, 0, 0, 1, buff)<0) return 0;
         return rates_total;
      }
   }

   ulong t = GetMicrosecondCount ();

...... далее без изменений
 
Andrei Trukhanovich:

本身重置了计算,并抱怨说它正在重置 )

安德烈,运行代码,请...但你不要开始,我不能和你打。

 
Igor Makanu:

我们负担不起,因为终端不会在线生成 "旧TF "的历史数据。

一般来说,这里需要一些假设。

- 要么我们自己在指标内构建OHLC

- 或者终端自己建立了OHLC


如果是后者,那么我们需要考虑,终端不知道TF是如何互动的,谁是什么的倍数,以及在"新酒吧"事件中会发生什么。


在你的第二个指标中试试这个代码。

你的代码会在每一个刻度上进行计算,这对我来说毫无意义,我甚至不打算运行它。我需要在每个柱子上对所有使用的指标只做一次计算,而不是在所有使用的指标的每个刻度上。

 
Andrey Dik:

你的代码要在每个刻度上敲出计算结果,我不感兴趣,我甚至不会运行它。我需要在每个柱子上只做一次计算,对所有使用的指标进行计算,而不是对所有使用的指标的每个刻度进行计算。

我的代码只对你的指标#1进行 "tick-by-tick",其中你写的是:

 if (rates_total == prev_calculated) return rates_total;

它将允许终端自己建立 "更高的时间框架"。

对我来说,这比对指标№1进行完全的重新计算要 "便宜",在你的代码中,当在 "旧TF "上同步历史时,会发生这种情况。

 
Andrey Dik:

安德烈,你能不能运行代码,请...但你不要开始,我不能和你打。

替换

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return 0;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return 0;
   }

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return prev_calculated;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return prev_calculated;
   }

并测试它。