初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 76

 
FinEngineer: エラーは1つだけ残っています 2012.12.22 00:56:44 Pair_delta_RSI (EURGBP,M1) RSI1_Handle のデータが全て計算されていません (-1bars )。Error4806

このエラーはコンパイル時には出ず、インジケータをチャートに貼り付けた時や、タイムフレームを変更した時に出ます。

このエラーメッセージは ずっと流れるのですか、それとも時間とともに消えるのですか?

 
みんな!MT5はどのようなDCにも接続できるのですか?
 
net:
みんな!MT5はどこの証券会社でも接続できますか?

MT5での取引は、VTB24やAlfa forexなど、このプラットフォームで取引する可能性を提供しているブローカーを通じて可能です。

Условия для трейдеров
  • www.alfa-forex.ru
Если у вас уже есть опыт работы на валютном рынке, то вы по достоинству оцените преимущества работы с Альфа-Форекс Самые узкие спреды на рынке: EUR/USD — от 0,7 пункта Отсутствие минимального депозита Быстрый ввод и вывод средств Исполнение ордеров без проскальзываний и реквот Альфа-Форекс входит в банковскую группу в составе Консорциума...
 
Yedelkin:

このエラーメッセージは 常に再生されるのでしょうか、それとも時間が経つと消えてしまうのでしょうか?

一度だけ、グラフにインジケータを付けると...。
 
Yedelkin:

このエラーメッセージは ずっと流れるのですか、それとも時間とともに消えるのですか?

2012.12.22 11:40:32 Pair_delta_RSI (EURGBP,M1) 'Pair_delta_RSI.mq5' の配列は範囲外 (92,37)です。
このエラーは、2つあることがわかりました。
 
Yedelkin:

このエラーメッセージは 常に再生されるのでしょうか、それとも時間が経つと消えてしまうのでしょうか?

alphaforexで試し、alpariで試したところ、同じエラー...。
 

FinEngineer:

Yedelkin: このエラーメッセージは ずっと表示されるのですか、それとも時間が経つと消えてしまうのですか?

一度だけ、インジケータをチャートに貼り付けると...。

それなら大丈夫です。プログラムをチャートに貼り付けたり、タイムフレームを変更しただけでは、ターミナルにRSIインジケータなどの新しい計算データがありません。そして、端末は必要なインジケータ・バッファを 計算するためにある程度の時間を必要とします。あなたのコードをよく見てください(他の人のサンプルに従って書かれていることは理解していますが、それでも):RSIの計算データが十分でないとき、関数OnCalculate()は 動作を停止し('return(0);')、新しいティックを待ちます。次のティックでRSIのインジケーターバッファが 計算されるとすぐに、あなたのインジケーターは通常モードで動作し始めます。あなたの発言から察するに、そうなのでしょう。

また、OnInit()関数にBarsCalculated()によるチェックを挿入することができます - そうすれば、エラーが発生することは非常に稀です(まったくない場合)。BarsCalculated()関数の 説明で例を挙げています。

 
FinEngineer: 2012.12.22 11:40:32 Pair_delta_RSI (EURGBP,M1) 'Pair_delta_RSI.mq5' の配列は範囲外 (92,37)です。
というエラーが表示されることがわかりました。
この誤りについては、昨日すでにお手紙を差し上げました。(コードを 正しく挿入することを忘れないでください :) )
 
Yedelkin:
このエラーについては、すでに昨日お知らせしたとおりです。(コードを正しく挿入することを忘れないでください :) )

データ不足の原因となっていたコードの一部を削除(下図)

int calculated=BarsCalculated(RSI1_Handle)。

if(calculated<rate_total)

{

Print("RSI1_Handleの全てのデータが計算されていません(",calculated, "bars ).Error",GetLastError());

return(0)です。

}

calculated=BarsCalculated(RSI2_Handle)。

if(calculated<rate_total)

{

Print("RSI2_Handleの全てのデータが計算されたわけではありません(", calculated, "bars ).Error",GetLastError()。

return(0)です。

メッセージ中のコードフラグメントをマークする方法を教えてください。

現在、エラーが出るようになりました。

2012.12.22 15:14:00 Pair_delta_RSI (EURGBP,M1) RSI1 の取得に失敗しました!Error4806

 
FinEngineer: メッセージ内のコードスニペットを選択する方法を教えてください。

コードを 正しく挿入してください。

FinEngineer : データ不足の原因となっていたコードの一部を削除 (下図)
   int calculated=BarsCalculated(RSI1_Handle);
   if(calculated<rates_total)
     {
      Print("Not all data of RSI1_Handle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
   calculated=BarsCalculated(RSI2_Handle);
   if(calculated<rates_total)
     {
      Print("Not all data of RSI2_Handle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);

そこでうまくいったのが、その「データ不足を解消するためのコードの一部」です。そして、RSIの最初のティックデータがまだターミナルによって計算されていないことを正しく報告しました。エラーメッセージが出るのが嫌な場合は、上記の ように、OnCalculate()だけでなく、OnInit()でも計算データの有無を確認するようにしてみてください。つまり、OnInit()で選択したテクニカル指標のデータ算出を待ち、指標のデータ算出が保証された時点でOnCalculate()でのティック処理に移行するようにしてください。

追加する。結局、チェックコードの一部を削除しても、算出される指標データの数は増えません :)

理由: