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

 

記述に誤りがあります。

エラー

このフィールドの名前は: time_type

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

インジケータ設定画面のメニューから、両方のタイムフレームとその数を選択できるようにしようとしています。

で、選択された期間がそのままPArrayに行くようにしたいのです。しかし、上記の例から、ユーザーが入力した値ではなく、プログラムであらかじめ設定した値を配列に代入していることがわかりました。また、コンパイラは警告を発生させます。

最後の行を入れ替えようとすると

の場合、コンパイラは完全にエラーを発生させます。

また、NO_PERIOD=0はPERIOD_CURRENTを 意味し、それは必要なく、falseやEMPTY_VALUEのようなものが必要ですが、全く合いませんね。

どうすれば直るのか?

ほぼ直った。

 
テスターのシンボル設定が保持されない、取引セッションが 木曜日と金曜日にカットされ、このため、常にエラーマーケットが閉じ、ポジションが開かれない、最適化が不可能で、ロボットが正常に動作しない、他のブローカーは問題ありませんが、これは必要です、どうすればよいですか?よくわからないが、こんなことは初めてだ。よくわからないのですが、取引ロボットの登録が済んでいるのか、ポジションを開くことができないのです。誰が何をすればいいのか?新しいアカウントを登録し、端末から一時ファイルを削除し、別の端末を試したが解決しない。ビデオの問題 https://radikal.ru/video/1HA3UfUNVZt
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
SymbolInfoSessionQuote - Получение рыночной информации - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
array out of range」エラーの対策方法について教えてください。まず、範囲外になった配列の要素を 印刷しようとすると、先にエラーメッセージが出て印刷できないので、Printを使うことができません。第二に、このエラーは体系的ではなく、好きなように表示されます。一度だけ表示され、インジケータが動作しませんでしたが(それでもチャートのインジケータリストには存在します)、その後はすべて発生せず、インジケータを再コンパイルすることもなく、その編集についても何も言いません。
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:
教えてください。"array out of range" エラーをキャッチして修正するために、どのような戦法が存在するのでしょうか?

配列の要素を書き込む前に ArrayResize() を実行し、配列に含まれるべき要素数を数えてそこに入力するか、それ自体が太る動的な 配列を使用します。配列の外に出ているだけです。例えば、100要素のサイズを指定しますが、最初の要素は#0なので、混乱する人がいます。数字を並べて書けば、0-99に収まりますね。私はどちらかというとプロのプログラマーではありません(でもできます)、最初に頭に浮かんだこと、それは動作します)))

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
freelancerAntonyan:

配列の要素を書き込む前に ArrayResize() を実行するか、配列に含まれるべき要素数を数えてそこに入力するか、あるいは自ら成長する動的な 配列を使用します。

実は、とにかくダイナミックなんです。ヘルプより: 「この関数は 動的配列にのみ 適用することができます。 SetIndexBuffer() 関数によって指標バッファとして割り当てられた動的配列は、サイズを変更してはならないことに注意すること。インジケータ・バッファの場合、サイズ変更操作はすべて端末の実行サブシステムで行われる。"しかし、インジケーターバッファーではないので、手と頭で考えなければならない...。

 
x572intraday:

実は、もうダイナミックなんです。ヘルプより: 「この関数は 動的配列にのみ 適用することができます。 SetIndexBuffer()関数でインジケータバッファとして割り当てられた動的配列は、サイズ変更できないことに留意する必要があります。インジケータ・バッファの場合、サイズ変更操作はすべて端末の実行サブシステムで行われる。"しかし、インジケーターバッファーではないので、手と頭で考えるしかない...。

このようなエラーをキャッチする問題は、アドレッシングをインターセプト するカスタム配列クラス などの「レイヤー」を使用することによってのみ解決されます。

MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
  • 2016.11.08
  • www.mql5.com
Today we're starting a patchy subject, which will combine many different things. This is why I decided to split it into parts. Out final goal is exception handling, but before we can address it, we
 

アルゴトレーディングが無効の状態でEAを起動し、その後アルゴトレーディングをオンにした場合。

エラーコードに よると、TERMINAL_TRADE_ALLOWEDプロパティが真であるにもかかわらず、貿易禁止が残っています。

#include <Greshnik\\ErrorDescription.mqh>
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      return;
     }
   MqlTradeRequest tr;
   MqlTradeResult r;
   ResetLastError();
   if(!OrderSend(tr,r))
     {
      int err=GetLastError();
      Print(err,"  ",cLng::CodeDescription(err));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
2020.12.30 15:25:38.629 Experts automated trading is enabled
2020.12.30 15:25:39.159 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.297 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.397 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.499 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.725 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:42.781 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.129 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.758 Experts automated trading is disabled

結果は以下のようになるはずです。

2020.12.30 15:29:58.406 Experts automated trading is enabled
2020.12.30 15:30:02.247 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.368 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.486 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:04.320 Experts automated trading is disabled
 
CopyTime(_Symbol,tf,0,1,Arr);
当然ながら、常にArraySize(Arr)=1でなければならない。これはコピーに成功した場合です。しかし、どのような場合にバーのコピーに失敗する可能性があるのでしょうか?なぜなら、"array out of range "エラーが発生したとき、端末は Arr[0]を指して いるからです。
 
x572intraday:
当然ながら、常にArraySize(Arr)=1であるべきです。これはコピーに成功した場合です。しかし、どのような場合にバーのコピーに失敗する可能性があるのでしょうか?Array out of range "エラーが発生した場合、端末は Arr[0]を指します。

やっぱりエラーをキャッチ、ヘルプから引用。

4401

要求された履歴が見つかりませんでした。

ログブックに印刷した - 了解しました。

2020.12.31 14:45:20.474 test (EURUSD,H2)        ArraySize(Arr)=0; copied=-1; TF=PERIOD_H2
2020.12.31 14:45:20.474 test (EURUSD,H2)        Error Code = 4401

これからどうしよう、どこに行こうか。私の腕が悪いのか、それとも......?結局、0から1までの1本のバーをコピーしているだけなんです。それ(歴史)がないわけがない。常にエラーが発生するわけではないので、なおさらです。それとも、事前に強制的に履歴を確認し、ダウンロードする必要があるのでしょうか?