この機能の何が問題なのか、説明してください。 - ページ 4

 
Alexey Viktorov:

ウラジミール、テスターでは問題が発生しないのですが...。なぜ、このような問題が起こるのでしょうか?それとも、テスターにはExpert Advisorが1つしかないからですか?

SDでは、2つ目のEAを別のペアにしただけの変更も提案したのですが...。

テスター内の取引環境はすべて事前に用意されています。すべてがお皿の上。ご心配なく。実際の取引環境は異なっており、標準的でない動作(他の人のタイムフレームや他の人のシンボルで動作する)の場合、取引環境との関連性を心配しなければなりません。
 
Karputov Vladimir:
あるターミナル(M15タイムフレームにEAがあった)では、1つのシンボルで動作しませんでした。問題は、他の人のタイムフレームを使用する場合、常に履歴を「ジャーク」する必要が あることだと99%確信しています。CopyTime()でやったほうがいいと思う。
そしてCopyRates()は 履歴をジャマする。構造上、時間がある...
 
Karputov Vladimir:

これは間違いではありません。他人の時間軸で動いている。そのような場合、他人の時間軸のデータを自分で管理して、最新の状態にする必要があります。

私自身は、代替案はないと思っています。

SERIES_LASTBAR_DATE の 動作がわからないということはありません。指定したシンボルのTimeCurrent()で最後のバーの時刻が計算できるので、何も更新する必要がないのかもしれません。開発者に聞く必要がある。

しかし、これまでのところ、明確な議論の余地のない事実は、2つの変数が真に設定されている場合、これらの変数が一緒に(&&をチェックした場合)真を与えるということである。

 

他のツール/TFのキャッシュが落ちる問題は存在します。

エラーをチェックし、ロードするためにループで待っても、必ずしもうまくいきません。サービスデスクに相談しても、MQは1つのヒントを出すだけで進展がない。

Support Team 2016.02.29 11:45

履歴データがタイムアウトでアンロードされている疑いがあります。

解決策は2つあります。

1. 3 分に 1 回以上の頻度でデータにアクセスする。

2.データにごく簡単な指標をつける。ボリュームなど。計算がなく、1つのバッファだけがビジー状態になっている。インジケータは、アクセス頻度に関係なく、履歴キャッシュをメモリに保持します

2番目のチップは機能しません。インジケータは常に呼び出されていますが、ある時点でキャッシュが失敗し、データを取得することができなくなります。

私はこの方法で問題を解決しました。

bool CheckTimeSeries( string symbol, ENUM_TIMEFRAMES period )
{
   double array[];
   if ( CopyClose( symbol, period, 1, 1, array ) <= 0 )
   {
                int err = GetLastError();
                Print( " * Can't refresh timeseries (", symbol, ", ", period, ")! ERROR #", err, "!!!" );
                return(false);
   }
   return(true);
}

動作は十分速く、エラー4806はこのアップデート後に消えたようです。

 

またまた誤解を招くようなコメントをお願いします。

Bars

履歴に含まれるバーの本数を、対応する期間記号で返します。この機能には、2つのバリエーションがあります。


2番目の選択肢だけが注目される。

指定した区間のバーの本数を要求 する
int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );

エキスパートアドバイザーのテキスト

/*******************Expert initialization function*******************/
int OnInit()
{
   return(INIT_SUCCEEDED);
}/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
{
  datetime dtarr[], date = D'2016.06.22';
  ArraySetAsSeries(dtarr, true);
  CopyTime(_Symbol, PERIOD_D1, 0, 5, dtarr);
  Print(dtarr[0]);
  Print(" ", Bars(_Symbol, PERIOD_D1, date, dtarr[0]));
  Print(" ", Bars(_Symbol, PERIOD_D1, date+1, dtarr[0]));
   
}/*******************************************************************/

/******************Expert deinitialization function******************/
void OnDeinit(const int reason)
{
}/*******************************************************************/

時間00:00:00は、時間00:00:01と同じように、一日に属すると理解しています。

でも ...は、それに同意していません。

2016.06.24 22:18:56.450 TestTime (EURUSD,M15)    2
2016.06.24 22:18:56.450 TestTime (EURUSD,M15)    3
2016.06.24 22:18:56.450 TestTime (EURUSD,M15)   2016.06.24 00:00:00

2016.06.22 00:00:00 から 2016.06.24 00:00 の間は日足が3本、2016.06.22 00:01 から 2016.06.24 00:00 の間は2本しかないことが判明した...。

それとも私が何か誤解しているのでしょうか?

ファイル:
TestTime.mq5  2 kb
 

そして、現在のバーの時間に1秒を足すと

  Print(" ", Bars(_Symbol, PERIOD_D1, date, dtarr[0]+1));
  Print(" ", Bars(_Symbol, PERIOD_D1, date+1, dtarr[0]+1));

を取得します。

2016.06.24 22:26:48.602 TestTime (EURUSD,M15)    3
2016.06.24 22:26:48.602 TestTime (EURUSD,M15)    4
2016.06.24 22:26:48.602 TestTime (EURUSD,M15)   2016.06.24 00:00:00

2016.06.24 00:00:01という時刻は、次の小節に属するようですが、それとも何でしょうか?

 
上限時間は、バー数を 決定する区間に含まれない。
 
Dmitry Fedoseev:
上限時間は、バー数を 決定する区間に含まれない。

ディミトリ、変じゃない?新しいバーが出現しましたが、まだカウントしません。

あのさ、SeriesInfoInteger(_Symbol, PERIOD_D1,SERIES_LASTBAR_DATE); がこんな挙動をするのは、そのせいじゃないの?新しいバーが出現し、ティック利用可能なコードが実行されますが、時間はまだ考慮されていません?

 

まあ、ドラマーが萎縮して・・・完全に無視されちゃってるんですけどね・・・?

ウラジミール、せめてこの質問に答えてくれないか?

Alexey Viktorov:
CopyRates()はストーリーを引っ張るのか?構造上、時間がある......?
 
Alexey Viktorov:

まあ、ボケは萎えるし・・・完全に無視されてるし・・・。

ウラジミール、せめてこの質問に答えてくれないか?

サービスデスクで何をアドバイスされたのか、教えてほしい。そこで話を続けたのではないのか?