インジケータでのOnDeinit - ページ 2

 
eevviill:

いいえ、そんなことはありません。普通に端末の電源を切っています。

DeinitをInitに入れると、それもうまくいかない。

カスタムオブジェクトの削除機能だけが役に立ちました。

まあ、削除されないなら、そこで何をしたかなんて誰にもわからないんだけどね :)

 
keekkenen:

まあ、これで削除されなかったら、何をしたのか誰にもわからないんですけどね :)

理にかなっている。しかし、チャートからインジケータを削除しただけでは、ゾーンが削除されてしまいます。端末の電源を切ると、そうではありません。initでゾーンを削除する関数を使うと(deinitでも同じ関数です)。

deinitが全ての人に有効であることが理解できた。また、端末を閉じたり開いたりするときに、どのようなタイミングでトリガーされるべきでしょうか?

 
int deinit()
  {

deinit2();

return(0);
}

//////////////////////

void deinit2()

{

  for(int i=ObjectsTotal()-1;i>=0;i--)

  {

  if(StringFind(ObjectName(i),Highest_vol_zones_name)!=-1)

  ObjectDelete(ObjectName(i));

  }

 

}
 
eevviill:

理にかなっている。しかし、単にチャートからインジケータを削除すると、ゾーンが削除されます。端末の電源が切れている場合は不可。initにゾーンを削除する独自の関数を入れた場合のみ(deinitにも同じ関数がある)。

deinitが全ての人に有効であることが理解できた。しかし、端末を閉じたときや開いたときに動作するようにするにはどうしたらよいでしょうか。

はい、端末を閉じた 状態でも動作します...。

もしかしたら、長い間、何らかの理屈をこねていたのかもしれませんね?

というのは、シャットダウンの瞬間に、インジケータが不気味に何かを計算し、端末がそれをすべてうまくいかないと予想し、および/または割り込み、そのOnDeinitが動作しないこと?

ヘルプデスクへの道は...と思う。

 
keekkenen:

はい、端末を閉じると動きますが...。

もしかしたら、何か長い時間プレイするためのロジックがあるのでは?

というのは、シャットダウンの瞬間に、インジケータが何か変な計算をして、ターミナルがそれを全部予想したり、割り込んだりして、OnDeinitが動作しないのでしょうか。

ヘルプデスクへの道は...と思う。

それが自分に合っているならば、それでいいのです。私のも見てみますね。
 

何も変わらず、さらに追加された

バッファーインジケーターです。操作 チャートを開く-M1インジケータを装着-端子を閉じる-数分で開通。結果はスクリーンショットで。

そして、コードにも書いたにもかかわらず、です。

//////////////////////////////////////////////////////////////////
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[])
  {
    //new bar
if (Time[0] != prevtime) 
{
 ArrayInitialize(body_up,EMPTY_VALUE);
ArrayInitialize(body_down,EMPTY_VALUE);
ArrayInitialize(shadow_up,EMPTY_VALUE);
ArrayInitialize(shadow_down,EMPTY_VALUE);
  ArrayInitialize(yell_body_up,EMPTY_VALUE);
ArrayInitialize(yell_body_down,EMPTY_VALUE);
ArrayInitialize(yell_shadow_up,EMPTY_VALUE);
ArrayInitialize(yell_shadow_down,EMPTY_VALUE);


prevtime = Time[0];
}

 

開発者の皆さん、問題を整理するつもりはありますか?

ここで、指標をご紹介しましょう。上の投稿で私がやったことを試してみてください。

チャートを開き、 M1インジケータを取り付け、ターミナルを閉じ、数分後に開く。

ファイル:
 
eevviill:

開発者の皆さん、問題を整理するつもりはありますか?

ここで、指標をご紹介しましょう。上の投稿で私がやったことを試してみてください。

チャートを開き、M1インジケータを取り付け、ターミナルを閉じ、数分後に 開く。

インジケーターの状況は解決されました。

ティックの到着時だけでなく、最初の描画時や欠落した履歴の到着時にもインジケータが計算されることです。

1.新しいティックが到着 - インジケータが計算されます。

2.欠落していたヒストリーが到着し、最後の端末のスタートから 最後のティックまでのデータの間の穴を塞ぎます。指標を算出しています。しかし同時に、新しいバーの条件もないのです

この問題を解決するためには、バーの数を確認する必要があります。このくらい

   if(Time[0]!=prevtime || Bars!=prevbars)
     {
      ArrayInitialize(body_up,EMPTY_VALUE);
      ArrayInitialize(body_down,EMPTY_VALUE);
      ArrayInitialize(shadow_up,EMPTY_VALUE);
      ArrayInitialize(shadow_down,EMPTY_VALUE);
      ArrayInitialize(yell_body_up,EMPTY_VALUE);
      ArrayInitialize(yell_body_down,EMPTY_VALUE);
      ArrayInitialize(yell_shadow_up,EMPTY_VALUE);
      ArrayInitialize(yell_shadow_down,EMPTY_VALUE);

      prevtime=Time[0];
      prevbars=Bars;
     }
 
stringo:

インジケーターの状況は解決されました。

ここがポイントなのですが、ティック到着時だけでなく、最初の描画時や欠落した履歴の到着時にもインジケータは計算されます。

1.新しいティックが到着 - インジケータが計算されます。

2.欠落していたヒストリーが到着し、最後の端末のスタートから最後のティックまでのデータの間の穴を塞ぎます。指標を算出しています。しかし同時に、新しいバーの条件もないのです

この問題を解決するには、バーの本数を確認する必要があります。このように

ありがとうございます。

しかし、それは私の指標に限ったことではありません。この問題を解決してくれるのは、あなたの方だと思ったのですが。

例えば、ターミナルを閉じる ときに、すべてのプログラムを実行するためにDeinitします。

 
eevviill:

ありがとうございます。

でも、それは私のインジケーターの中だけではありません。この問題は、あなたの側から解決してくれると思っていました。

例えば、ターミナルを閉じるとき、すべてのプログラムでdeinitする。

実際には、すべてのプログラムのdeinitは、ターミナルを閉じたときに呼び出されます。

deinitの理由には、 特別なコードも あります。REASON_CLOSE