エラー、バグ、質問 - ページ 3030

 
Andrey Dik:

は0を返し、まだ何もカウントしていないことを示し、次のバーで1ずつ増加しない。

つまり、return(rates_total)するまで、古いファクターからのデータの要求を開始したバーにいることになります。

ヘルプより: 「関数呼び出しのprev_calculatedパラメータには 前の 呼び出しで OnCalculate()が 返した 値が含ま れます」。
 
mktr8591:
ヘルプより:"関数呼び出し時のprev_calculatedパラメータには 前の 呼び出し 時にOnCalculate()によって 返された 値が含ま れます。 "

しかし、このブランチは、ヘルプや常識と一致しないことが発見されることがあるからこそ存在するのです。

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

1.皆さんありがとうございます。インジケータのリテラシーが少し上がりました )))

アンドリュー、もし誰かがあなたの考えを理解しないなら(私も含めて)、それはたった一つのことだ。というか、多くの人に理解されないようにやっているのでは・・・。

真実はもっと重要です。しかし、残念ながら、それは誰にとっても明確なものではありません。

 

Andrey Dik:

は0を返すので、まだ何もカウントしておらず、次のバーでprev_calcが1だけ増加することはないことを示します。

では、return(rates_total)はprev_calcをrates_totalだけ増加させるべきでしょうか?

 
Andrey Dik:

は0を返すので、まだ何も計算しておらず、次のバーでprev kalkが1増加することはないことを意味します。

自ら計算をゼロにして、ゼロにすることに文句を言う )

 
Andrey Dik:

新しいバーを計算するのは一度だけで、毎回のティックではありません。

端末が "上位TF "の履歴データをオンラインで生成しないので、その余裕がない。

一般に、ここでは何らかの前提が必要である。

- OHLCをインジケータ内に自分で構築するか

- または端末自身がOHLCを構築する


もし後者であれば、端末はTFがどのように相互作用し、誰が何の倍数であり、「新しいバー」イベントで何が起こるかを全く知らないと考えるべきでしょう。が、端末に必要なTFを構築させるべきです。


このコードを2つ目のインジケータで試してみてください。

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がどのように相互作用し、誰が何の複数であり、「新しいバー」イベントで何が起こるかを知らないことを考慮する必要があります。


このコードを2つ目のインジケータで試してみてください。

あなたのコードはティックごとに計算を行うので、私には面白くありません、実行する気にもなれません。私は、使用するすべてのインジケータの各ティックではなく、各バーで1回だけ計算を行う必要があります。

 
Andrey Dik:

あなたのコードは、すべてのティックに計算を打ち込むつもりです、私は興味がありません、私はそれを実行することさえしません。私は、使用されているすべての指標の各ティックではなく、各バーで1回だけ計算を実行する必要があります。

私のコードは、あなたが書いたインジケータ#1だけを "tick bytick"します。

 if (rates_total == prev_calculated) return rates_total;

を使えば、端末が勝手に「高い時間軸」を構築してくれるようになります。

私のために - それは "古いTF "の歴史を同期させるときにあなたのコードで発生する指標№1の完全な再計算を実行するよりも "安い "です。

 
Andrey Dik:

Andreiさん、コードを実行していただけますか?でも、もうやめてよ、あなたとは戦えないんだから。

交換

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;
   }

とテストしてください。