Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
array out of range」エラーの対策方法について教えてください。まず、範囲外になった配列の要素を 印刷しようとすると、先にエラーメッセージが出て印刷できないので、Printを使うことができません。第二に、このエラーは体系的ではなく、好きなように表示されます。一度だけ表示され、インジケータが動作しませんでしたが(それでもチャートのインジケータリストには存在します)、その後はすべて発生せず、インジケータを再コンパイルすることもなく、その編集についても何も言いません。
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
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
2020.12.3015:25:38.629 Experts automated trading is enabled
2020.12.3015:25:39.159 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.297 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.397 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.499 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:40.725 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:42.781 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:43.129 Test1 (EURUSD,M1) 4752 Торговля для эксперта запрещена
2020.12.3015:25:43.758 Experts automated trading is disabled
結果は以下のようになるはずです。
2020.12.3015:29:58.406 Experts automated trading is enabled
2020.12.3015:30:02.247 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:02.368 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:02.486 Test1 (EURUSD,M1) 4756 Не удалось отправить торговый запрос
2020.12.3015:30:04.320 Experts automated trading is disabled
記述に誤りがあります。
貿易取引(MqlTradeTransaction)の構造。
このフィールドの名前は: time_type
インジケータ設定画面のメニューから、両方のタイムフレームとその数を選択できるようにしようとしています。
で、選択された期間がそのままPArrayに行くようにしたいのです。しかし、上記の例から、ユーザーが入力した値ではなく、プログラムであらかじめ設定した値を配列に代入していることがわかりました。また、コンパイラは警告を発生させます。
最後の行を入れ替えようとすると
の場合、コンパイラは完全にエラーを発生させます。
また、NO_PERIOD=0はPERIOD_CURRENTを 意味し、それは必要なく、falseやEMPTY_VALUEのようなものが必要ですが、全く合いませんね。
どうすれば直るのか?
ほぼ直った。
教えてください。"array out of range" エラーをキャッチして修正するために、どのような戦法が存在するのでしょうか?
配列の要素を書き込む前に ArrayResize() を実行し、配列に含まれるべき要素数を数えてそこに入力するか、それ自体が太る動的な 配列を使用します。配列の外に出ているだけです。例えば、100要素のサイズを指定しますが、最初の要素は#0なので、混乱する人がいます。数字を並べて書けば、0-99に収まりますね。私はどちらかというとプロのプログラマーではありません(でもできます)、最初に頭に浮かんだこと、それは動作します)))
配列の要素を書き込む前に ArrayResize() を実行するか、配列に含まれるべき要素数を数えてそこに入力するか、あるいは自ら成長する動的な 配列を使用します。
実は、とにかくダイナミックなんです。ヘルプより: 「この関数は、 動的配列にのみ 適用することができます。 SetIndexBuffer() 関数によって指標バッファとして割り当てられた動的配列は、サイズを変更してはならないことに注意すること。インジケータ・バッファの場合、サイズ変更操作はすべて端末の実行サブシステムで行われる。"しかし、インジケーターバッファーではないので、手と頭で考えなければならない...。
実は、もうダイナミックなんです。ヘルプより: 「この関数は、 動的配列にのみ 適用することができます。 SetIndexBuffer()関数でインジケータバッファとして割り当てられた動的配列は、サイズ変更できないことに留意する必要があります。インジケータ・バッファの場合、サイズ変更操作はすべて端末の実行サブシステムで行われる。"しかし、インジケーターバッファーではないので、手と頭で考えるしかない...。
このようなエラーをキャッチする問題は、アドレッシングをインターセプト するカスタム配列クラス などの「レイヤー」を使用することによってのみ解決されます。
アルゴトレーディングが無効の状態でEAを起動し、その後アルゴトレーディングをオンにした場合。
エラーコードに よると、TERMINAL_TRADE_ALLOWEDプロパティが真であるにもかかわらず、貿易禁止が残っています。
結果は以下のようになるはずです。
当然ながら、常にArraySize(Arr)=1であるべきです。これはコピーに成功した場合です。しかし、どのような場合にバーのコピーに失敗する可能性があるのでしょうか?Array out of range "エラーが発生した場合、端末は Arr[0]を指します。
やっぱりエラーをキャッチ、ヘルプから引用。
4401
要求された履歴が見つかりませんでした。
ログブックに印刷した - 了解しました。
これからどうしよう、どこに行こうか。私の腕が悪いのか、それとも......?結局、0から1までの1本のバーをコピーしているだけなんです。それ(歴史)がないわけがない。常にエラーが発生するわけではないので、なおさらです。それとも、事前に強制的に履歴を確認し、ダウンロードする必要があるのでしょうか?