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

 

どう違うのですか?

CHART_WIDTH_IN_BARS Ширина графика в барах
от
CHART_VISIBLE_BARS Количество баров на графике, доступных для отображения
 
Urain:

どう違うのですか?

インデントが設定されている場合、右側に空のフィールドがある場合があります。この場合、CHART_VISIBLE_BARS はCHART_WIDTH_IN_BARS よりも小さな値を表示します。
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков - Документация по MQL5
 
Urain:

どう違うのですか?

文字通り、違うんです。


削除済み  
Rosh:
質問は何ですか?

1.ポストにねじ込まれたスクリプトを取り、チャート上で実行する。スクリプトは、一定数のバーを コピーし、最も古い20本のバーの 巻き戻しを実行する必要があります。

この方法は、(チェックがなく、エラーのトラップがいろいろあるのはわかるのですが、それでも)

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   int              start_pos,         // откуда начнем 
   int              count,             // сколько копируем
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

そのため、私が指定したパラメータ(バーの数とM1)でスクリプトは実行されますが、時々、正常に動作することを拒否します。ある一定の小節数(368700以上出た)で発生する。

368800では、バーがかなり少なくなります(ただし、368732 / 368735 / 368736など、常にこの近辺の異なる数値が返されます)。

しかし、360000でも常に正しく動作するわけではなく、10000本のバーをコピーしただけの場合もありました。

2.2つの日付が指定されるバリアントは本当にショックでした。 最初の日付として0を受け入れないだけでなく(私の意見ではそれは理にかなっています)、10000までコピーされます。

0がstart_timeの ようにintで あれば理解できるのですが(私も経験があります)、関数のオーバーロードとコンパイラがあることを「理解していない」ことが問題なのです。しかし、だからこそ、10000本の棒は「100万分の1」と呼ばれる別問題なのです。

私たちが理解している10000分足は、私の理解が正しければ、2011年を超えることはありません(そして、上記のすべてから明らかになるように、少なくとも360000は確実にロードされます)。

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   datetime         stop_time,         // по какую дату
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

追記

同時に、ノーマルと「バギー」(スクリプトが10000本しかコピーしない場合)では、速度が何倍も違うのです。

ピーピーエス

曖昧さなどの「バカ」な状況を避けるため、ヘルプのある部分(というかその例)を論理的な結論に導くようにしてください。

チェックは追加で入れるべき、など。また、この場合、パラメータの記述にクロスリファレンスがなく(少なくともtimeframeでは)、start_timeと start_posの 型が何であるかは不明である。私はdatetimeと推測しています(そうでなければ、なぜコンパイラは start_timeとして0を誓うのでしょ うか

//Код по третьему варианту, может я что-то упустил?
//Так ругается - 'CopyRates' - ambiguous call to overloaded function
Copied = CopyRates(Symbol(),PERIOD_M1,0,TimeCurrent(),Rates);
//Так нет, но копирует только 10000 баров
Copied = CopyRates(Symbol(),PERIOD_M1,(datetime)0,TimeCurrent(),Rates);
 

これはバグなのか、私の技量不足なのか?

void OnStart()
  {
//---
   long chart_id=ChartID();
   ChartSetInteger(chart_id,CHART_AUTOSCROLL,false);   // отключаем автоскролл
   while(!IsStopped())
     {
      //------------------      
      ChartNavigate(chart_id,CHART_END,-2410); // делаем навигацию, поставим константу
      //------------------
      Sleep(500);
      ChartSetString(chart_id,CHART_COMMENT,ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR));
      ChartRedraw(chart_id);// отображаем первый бар чарта после навигации
      Sleep(500);
     }        
  }


ゼロバーからナビゲートすると、チャートがカクカクする。ナビゲーションとアップデートの間にわざとスリップを挿入して、問題点を浮き彫りにしました。しかし、スリップが無くてもバグは存在します。ChartNavigate()は、まずチャートをゼロに移動し、その後元に戻すことが判明しました。また、毎回行うわけではありません。

少なくとも、ChartNavigate()を呼び出す たびにバグがあるわけではなく、スリップせずに実行したときに現れるということです。

Документация по MQL5: Операции с графиками / ChartNavigate
Документация по MQL5: Операции с графиками / ChartNavigate
  • www.mql5.com
Операции с графиками / ChartNavigate - Документация по MQL5
 
Urain:

これはバグなのか、私の技量不足なのか?


ゼロバーからナビゲートすると、チャートがカクカクする。ナビゲーションとアップデートの間にわざとスリップを挿入して、問題点を浮き彫りにしました。しかし、スリップが無くてもバグは存在します。ChartNavigate()は、まずチャートをゼロに移動し、その後元に戻すことが判明しました。また、毎回行うわけではありません。

少なくとも、ChartNavigate()を呼び出す たびにバグがあるわけではなく、スリップせずに実行したときに現れるということです。


ChartNavigate関数が動作しない例から試してみてください。
 
Rosh:
ChartNavigate関数が動作しない、助けてください。

では、この例の中で、私のコードと根本的に異なる点は何でしょうか?

ただ、あなたのコードではナビゲーションが一度呼ばれるだけですが、私は(ユーザーのアクションに関係なく)常に目的のバーでチャートを保持する必要があります。

あなたの例を試して、チャート更新なしで私のコードを実行しましたが(プログラムは多くのグラフィック変換を使用するので、それは私にとっては重要ですが)、それもうまくいきませんでした。ジャークが残っている。やはり同じポイントまでナビゲートして、ゼロバーまでナビゲートしています。

また、現在のバーからのナビゲーションは、プログラム実行中にユーザーが不注意にチャートを動かしてしまう可能性があるため、受け入れがたいものだと思います。

 
もしすぐに理解できないなら、説明しましょう。上記のコードは、与えられたバーでの自動スクロールをエミュレートしようとするものです。
 
Interesting:
ストーリーは全部ひっくるめて?
もちろんストーリーはあるのですが、すべてのワームが拡散するわけではないのです
 
Urain:

では、この例の中で、私のコードと根本的に異なる点は何でしょうか?

ただ、あなたのコードではナビゲーションが一度呼ばれるだけですが、私は(ユーザーの操作に関係なく)常に目的のバー上にチャートを維持する必要があります。

あなたの例を検討した後、私のコードをチャートリフレッシュなしで実行しましたが(プログラムも多くのグラフィック変換を使用するので、私にとっては重要ですが)、それも役に立ちませんでした。ジャークが残っている。やはり同じポイントまでナビゲートして、ゼロバーまでナビゲートしています。

また、現在のバーからのナビゲーションは、プログラム実行中にユーザーが不注意にチャートを動かしてしまう可能性があるため、受け入れがたいものだと思います。

私のインジケーターにも同じ問題があり、ティックが来るとすぐに再描画されてしまうのですが、どうすれば直るのでしょうか?