どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1177

 

こんにちは。

バーオープン時のみ動作するように設定する方法と、全履歴を通じて 毎回(新しいバーごとに)動作しないように設定する方法を教えてください。

今までのインジケーターの代わりとして使いたい。

ロスチスラフ


 
Rost17: バーオープン時のみ動作するように設定する方法と、全履歴を通じて 毎回(新しいバーごとに)動作しないように設定する方法を教えてください。
Datetime t;
まず、バーについて。新しいバーが 形成されると、新しい値がTime[0](バーが開く時間)に書き込まれます。
OnCalculate(...)
{
if(Time[0] == t) return(0); // このバーを処理したら→終了
t = Time[0];

これで全体の履歴は:遅くなります。
 
STARIJ:
datetime t;
まず、バーについて。新しいバーを 形成するとき、Time[0]に新しい値を書き込みます - バーが開く時間 です。
OnCalculate(...)
{
if(Time[0] == t) return(0); // このバーが処理された場合 --> exit
t = Time[0]です。

さて、その全貌はというと、「遅くなる

早速のご返信ありがとうございます。新しいバーが 表示されたときに、スローダウンしたり履歴をたどったりせず、新しいバーを処理する方法について質問しているのです。

今のところ、for(int i=limit-1; i>=0; i--)という構成で、私の理解では、バーが開くたびに、履歴全体のすべての値を再計算し、最後のバーだけを使って作業すればいいということですが......。

 
Rost17:新しいバーが 表示されたときに、動作が遅くならないように、また、履歴をすべて表示させずに、新しいバーのみを処理する方法を教えてください。

最後のバーではこのように計算されます。

//| Bears Power                                                      |
//+------------------------------------------------------------------+
int OnCalculate(.....)
  {
   int limit=rates_total-prev_calculated; // Количество баров, которые будем считать = ВсегоБаров - РанееПросчитано
   if(rates_total<=InpBearsPeriod) return(0);

   if(prev_calculated>0) limit++; // Если давно считаем, то захватим и предыдущий бар для точности
   for(int i=0; i<limit; i++)
     {
      ExtTempBuffer[i]=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE,i);
      ExtBearsBuffer[i]=low[i]-ExtTempBuffer[i];
     }
   return(rates_total);
  }
 
STARIJ:

まず、行を見てみましょう

をわかりやすくするために、このように書き直しました。

アハッ!!!今になって分かってきた...。ループの中で、変数aが1から6に変化する。この変数の値が1、5、6の場合、動作はありません。では、ちょうど

あるいはあなたのスタイルで。

結果は同じですが、より高速に実行されます

今度は、Statistic関数を取り除き、その本体を3回続けて書き、3つの部分の形式パラメータを それぞれ実際のパラメータに置き換え、重複する変数宣言を削除する必要があります。コード全体は少し長くなりますが、実行速度は速くなります。print()を投げ出すのは理にかなっている - この時、一体誰がメッセージログに目を通すのでしょうか?- またはAlert()に置き換えて画面に表示します。 また、namZz2という変数がありますが、その値は変化しますか?


stats()の代わりにstats()を使いたいのですが。バカなことに、おっしゃるとおり3回書き直せばいいのはわかっているのですが、問題は、ほとんどの場合、統計をとった結果、さらに配列を追加しなければならず、遅かれ早かれ元のものに戻ってしまうということです。だからこそ、私がすでに知っている簡単な方法を提供するのですが、それは残念ながら私を最初に導いてくれるでしょう。だからこそ、将来的に戻らなくてもいいように、先を見据えているのです

for(int a=1;a<6;a++)
{
   if(a==2){Statistic(mZz2,namZz2);}
   if(a==3){Statistic(mZz3,namZz3);}
   if(a==4){Statistic(mZz4,namZz4);}
}

このコードをどのように統計学者に置くか!? 私は質問を述べたように、冒頭で単一のプロシージャにするために見てください!?

 
STARIJ:

最後のバーでどのように計算されるかを説明します。

ありがとうございました。非常に古いインジケーターのソースを持っています。毎回全ての履歴を再計算せず、バーの終値のみで動作し、シグナルが現れた後のバー上にのみ矢印を表示するように修正していただけませんか?さて、そして新しいスタイルで、OnCalculateを使って...。時間的なコストを補うためにも......。そう思うのであれば、どのような方法があるのでしょうか。プライベートメッセージで送りたいのですが、どこで送れますか?
 
Игорь:

以下は、動作中のコードからの抜粋です。中間的なボイドスタットなしで、1つのボイドスタットに集める方法!すべての配列をひとつにまとめて、そこからスクラッチするために、コード全体を作り直さなければならないのです !

あなたの作業コードから引用した抜粋は、間違っているか、あなたの Statistic() 関数が Stat() から呼び出されたときに何もしないか、表示されるかのいずれかです。

いずれにせよ、帰国後すぐに停止します。

何をしたいのか理解するために、コード全体を教えてください。

 

念のため。MQL4で初心者を助けるスレッドがフォーラムに多すぎる。

このスレッドはサポートが 終了したため、閉鎖しました


すべての質問は、以下のアクティブなスレッドのいずれかに直接お寄せください。

https://www.mql5.com/ru/forum/160683

https://www.mql5.com/ru/forum/160587

このスレッドへの以降の書き込みはすべて削除されます。


 
購入済みの注文が2時間以内に購入価格を変更することができます。
 
マインクラフトのキャラクターとツルハシを持って儲けてる写真が欲しいのですが、どうすればいいでしょうか?