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

 
Vict:

CJValはどのように作成するのですか? おそらく、新しいCJVal()でしょう?

端末がこれをキャッチすることはまずないでしょう。

いや、聖書の著者の例のように、スタックの上で

CJAVal js(NULL, jtUNDEF);
 

ビジュアルテストモードでは、SymbolInfoTick()は 1つの値を返しますが、Close[0]の時系列は異なる値を持っていることがわかりました。

私の勘違いでしょうか?私は何か間違ったことをしているのでしょうか?

同じ値であるべきだと思われます。

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[])
  {
//---

   MqlTick mtLastTick;
   SymbolInfoTick(Symbol(),mtLastTick);
   
   ArraySetAsSeries(close,true);


   Comment("Close[0] = " + DoubleToString(close[0],5) + "\nLastBid = " + DoubleToString(mtLastTick.bid,5));
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }

通常は1〜2ポイントの差ですが、鋭い動きではそれ以上になることもあります。

私だけでしょうか?

これまでは時系列を「より正しい」と捉えていましたが、SymbolInfoTick()がClose[0]と異なる値を返すことが判明した場合、正しいのはClose[0]と仮定し、SymbolInfoTick()が返すスプレッドそのままにすることにしています。

しかし、どの価格が正しいのか、Close[0]なのかSymbolInfoTick()なのかを知りたいのです。

ファイル:
TestTick.mq5  2 kb
 
Georgiy Merts:

ビジュアルテストモードでは、SymbolInfoTick()は 1つの値を返しますが、Close[0]の時系列は異なる値を持っていることがわかりました。

私の勘違いでしょうか?私は何か間違ったことをしているのでしょうか?

同じ値であるべきだと思われる。

通常は1〜2ポイントの差ですが、鋭い動きではそれ以上になることもあります。

私だけでしょうか?

今のところ時系列を「より正しい」としていますが、もしSymbolInfoTick()がClose[0]と異なる値を返すことが判明したら、正しい値はClose[0]と考え、スプレッドはSymbolInfoTick()が返した値のままにしています。

しかし、SymbolInfoTick()かClose[0]か、どちらの価格が正しいのかを知りたいのです。

また、SymbolInfoDouble(_Symbol,SYMBOL_BID)もあります。

 
Andrey Barinov:

SymbolInfoDouble(_Symbol,SYMBOL_BID)というのもあります。

はい、SymbolInfoTick() と同じものを返します。

 

グローバル変数に関するいくつかのアドバイス。Market Watchからティックを保存する際の問題を解決しました。

新しいティックが入るたびに、対応するグローバル変数が1つずつ増加します。目視では、Market Watchは1秒間に約100回のティックを受信しています。

合計で100Hzの速度でグローバル変数が更新される。SSDに悪影響を与えないか気になるところです。

ティックそのものを1000回ごとに書き込んでいる(1週間で〜1Gb)。だから、大丈夫なんです。しかし、グローバルでは、アップデートのたびにSSDに書き込まれるとは、以前は考えもしませんでした。

だから、そんな疑問を持ったんです。

 
fxsaber:

グローバル変数に関するいくつかのアドバイス。Market Watchからティックを保存する際の問題を解決しました。

新しいティックが入るたびに、対応するグローバル変数が1つずつ増加します。目視では、Market Watchは1秒間に約100回のティックを受信しています。

合計で100Hzの頻度でグローバル変数が更新される。SSDに悪影響を与えないか気になるところです。

ティックそのものを1000回ごとに書き込んでいる(1週間で〜1Gb)。だから、大丈夫なんです。しかし、グローバルでは、アップデートのたびにSSDに書き込まれるとは、以前は考えもしませんでした。

だから、そんな疑問を持ったんです。

更新のたびにディスクに書き込まれることはない

 
fxsaber:

グローバル変数に関するいくつかのアドバイス。Market Watchからティックを保存する際の問題を解決しました。

新しいティックが入るたびに、対応するグローバル変数が1つずつ増加します。目視では、Market Watchは1秒間に約100回のティックを受信しています。

合計で100Hzの速度でグローバル変数が更新される。SSDに悪影響を与えないか気になるところです。

ティックそのものを1000回ごとに書き込んでいる(1週間で〜1Gb)。だから、大丈夫なんです。しかし、グローバルでは、アップデートのたびにSSDに書き込まれるとは、以前は考えもしませんでした。

だから、そんな疑問が湧いたのだ。

グローバルターミナル変数は、定期的にディスクに自動保存されるリソースを介して実装されていると思います。オートセーブが3秒に1回以上の頻度で起こるとは思えませんし、もっと少ない頻度かもしれませんし、deinitイベントが発生したときだけという可能性すらありますね。

 

ターミナルのグローバル変数について、かつてヘルプで読んだことを調べる気はありませんが、ターミナルを閉じたときに保存されるようです - 読んでからずいぶん時間が経っているので忘れているかも知れませんが

Windowsのタスクマネージャに、ハードディスクの使用状況の図があり、確認しやすくなっています。


 
Igor Makanu:

ターミナルのグローバル変数について、かつてヘルプで読んだことを調べる気はありませんが、ターミナルを閉じたときに保存されるようです - 読んでからずいぶん時間が経っているので忘れているかも知れませんが

Windowsのタスクマネージャに、ハードディスク使用量のグラフがあるので、簡単に確認できます。


おそらく、ここの脚注にあるのでしょう。

 
回答してくれた皆さん、ありがとうございました。フラッシュ機能によって、曖昧さは一気に解消されました。