範囲外の配列を回避する方法 -- mql4 フィールド と mt4 フィールド 関連 問題

How to avoid array out of range












2
vote

問題

日本語

長い数のバーを表示しようとしたときに array out of range を回避する方法を知っていますか?

英語

Does somebody know how to avoid the error array out of range when trying to display long number of bars (lets say 7000) in an indicator buffer?

</div
     

回答リスト

3
 
vote
vote
ベストアンサー
 

配列(問題)が似ている間は、大きな違いがあります

MQL4インジケータは、「通常の」アレイよりもアレイを取り扱うための「その他の」力学を使用しています。

<事前> <コード> ... Testing pass stopped due to a critical error in the EA ... array out of range in '!2015-09-08___!EA 2xAMA 01 2015-09-08_msMOD_0.00.mq4' (519,39)

はい、 MT4 誤った ptr <コード> -> < /コード> <コード> array[aStaticSIZE] のどちらかを気にする必要があります。ケース、または トリム <コード> ptr (低遅延循環バッファシナリオ)は、アレイ境界(アンダーフロー/オーバーフロー)を越えて直接直接しない extend <Image source={require('./Logo.png')} /> 0 <コード> <Image source={require('./Logo.png')} /> 0 は、PTRの成長(メモリが許すまで)を配列に保つために(メモリが許す)動的 <Image source={require('./Logo.png')} /> 2 として宣言されているが、 MQL4テクニカルインジケータ は完全に他の状況を持っています。


制限?はい。 。 。 。 。 (そして、それぞれの新しいMQL4.56789 Stealth Updateで見直す必要があります)

<コード> <Image source={require('./Logo.png')} /> 3 の時点では、 <Image source={require('./Logo.png')} /> 4 要素を超える の要素を持つことはできません。 /■メモリプールマネージャでは、より高い次元マッピングを使用しても、<コード> <Image source={require('./Logo.png')} /> 5 を使用しても、スペースがたくさんある必要があります。

年前のVEは、100K +行/ 2Dプレーンのスケールで高度に動的なエンティティを維持するための高速および<コード> <Image source={require('./Logo.png')} /> 6 (安全にカプセル化された)ヒープ/スタックハンドラのための多くの並列2D / 3Dアレイを使用しました。全ての職場でよく働いた旧<コード> <Image source={require('./Logo.png')} /> 7

だからいくつかの7K +要素はあなたに心配するべきではありません。


インジケータは、自動バッファハンドラこの意味で、あなたのコードはこれらの問題を気にかけない必要はありません。 <事前> <コード> <Image source={require('./Logo.png')} /> 8

 

While the arrays (problem) look similar, there is a major difference

MQL4 Indicators use "other" mechanics for handling arrays than "ordinary" arrays have.

...  Testing pass stopped due to a critical error in the EA ...  array out of range in '!2015-09-08___!EA 2xAMA 01 2015-09-08_msMOD_0.00.mq4' (519,39) 

Yes, MT4 throws Fatal Error on an attempt to handle a wrong ptr->array[aStaticSIZE] and one has to take due care to either avoid such case, or trim ptr ( alike in low-latency circular-buffer scenarios ) not to direct past the array boundary ( underflow / overflow ) or extend the array[] via ArrayResize() so as to keep pace with the ptr growth ( until memory allows ) ) on arrays declared as dynamic double Array[];, however MQL4 Technical Indicators have completely other situation.


Limits? Yes. . . . . . ( And one ought to review on each New-MQL4.56789 stealth update )

As of a "New"-MQL4.56789-Build-840, your "ordinary" array cannot have more than 2.147.483.647 elements, if O/S memory-pool manager allows, so you ought to have plenty of space, even if using higher dimensionality mappings { 2D | 3D | 4D }.

Years ago 've used many parallel 2D / 3D-arrays for fast and private ( safely encapsulated ) heap / stack-handlers for maintaining highly dynamic entities in scales of 100k+ rows / 2D-planes and all worked well-oiled in old-MQL4.

So some 7k+ elements should not make you any worries.


Indicators use array indirectly, via an automated Buffer-handler

In this sense, your code need not care about these issues.

/* #property "pragmas" help MQL4-compiler decide about setup of internal handlers           so this part of code "speaks" to MetaLang.exe at compile-time*/  #property indicator_buffers      3             // .DEF N-Buffs  #property indicator_color1       White         // .SET Buf[0].color #property indicator_color2       SeaGreen      // .SET Buf[1].color #property indicator_color3       FireBrick     // .SET Buf[2].color  #property indicator_width1       1             // .SET Buf[0].width #property indicator_width2       2             // .SET Buf[1].width #property indicator_width3       2             // .SET Buf[2].width           double   buffer_line_up[],            // .DEF Arrays as dynamic ...[]                   buffer_line_dn[],            //      with human-readable-names                   buffer_line_ax[];            //      and MT4 will take care  int   init()   {        SetIndexBuffer(   0, buffer_line_ax );   // .ASSOC IndexBuffer.0<-array[]       SetIndexLabel(    0, "SuperTrend"     );        SetIndexBuffer(   1, buffer_line_up   ); // .ASSOC IndexBuffer.0<-array[]       SetIndexLabel(    1, "Up Trend"       );       SetIndexStyle(    1, DRAW_LINE,                            STYLE_SOLID,                            1 + int( ATR_Multiplier / 5 ),                            SeaGreen                            );        SetIndexBuffer(   2, buffer_line_dn );   // .ASSOC IndexBuffer.0<-array[]       SetIndexLabel(    2, "Down Trend"     );       SetIndexStyle(    2, DRAW_LINE,                            STYLE_SOLID,                            1 + int( ATR_Multiplier / 5 ),                            FireBrick                            );        SetIndexDrawBegin(0, ATR_Period );       // .DEF initial depth of Buffer before 1st GUI output        IndicatorShortName( "xxxx[" + ATR_Period + "," + ATR_Multiplier + "]" );        IndicatorDigits( MarketInfo( Symbol(), MODE_DIGITS ) ); 
</div
 
 
3
 
vote

私は常に私のバッファの1つに対して常に " <Image source={require('./Logo.png')} /> 9 "エラーを持っていました。 import Logo from '..' // set image path <Image source={require(Logo)} /> 0 で確認しました。これは、 import Logo from '..' // set image path <Image source={require(Logo)} /> 1 を返します。

import Logo from '..' // set image path <Image source={require(Logo)} /> 3 私の指標の

描画線なしで内部バッファを使用していたので、 import Logo from '..' // set image path <Image source={require(Logo)} /> 4 関数を最初に増やしてからを使って登録した。 <コード> import Logo from '..' // set image path <Image source={require(Logo)} /> 5

<事前> <コード> import Logo from '..' // set image path <Image source={require(Logo)} /> 6
 

I had a similar issue, that I always got "Array out of range" errors for one of my buffers. I checked with ArraySize(), which returned 0.

In the end I just forgot to call SetIndexBuffer(...) for this buffer array in onInit() {...} of my indicator.

Since I was using an internal buffer without drawing lines, I used the IndicatorBuffers() function to increase the amount of buffers first and then registered my additonal buffer using SetIndexBuffer(...).

//+------------------------------------------------------------------+ //| Custom indicator initialization function                         | //+------------------------------------------------------------------+ int OnInit()   { //--- indicator buffers mapping     IndicatorBuffers(5);  //buffers with #properties settings    SetIndexBuffer(0,Buffer1);    SetIndexBuffer(1,Buffer2);    SetIndexBuffer(2,Buffer3);    SetIndexBuffer(3,Buffer4);  //additional buffer without #properties     SetIndexBuffer(4,AdditionalBuffer); 
</div
 
 

関連する質問

4  ontick()でEAを強く停止する  ( Forcebly stop ea in ontick ) 
私はバックテストのためにEAを作っています。 通常プログラムはこのように機能します。 <コード> Ontick() は、一定期間終了するまで呼び出されます。 <コード> OnDeinit() OnTester() が呼び出されます。 しかし私は be...

0  ループが一貫していない間はPython Infinite  ( Python infinite while loop not consistent ) 
無限ループのためにPythonで書いたコードは初めて成長します。ただし、2回目の実行時に次のメッセージが表示されます。 トレースバック(最後の最後のコール): ファイル "c:/users/dell/pycharmprojects/pythonproject/...

0  MySQLインサートエラー1064  ( Mysql insert error 1064 ) 
MySQLラッパーを使用してlibmysql.dllを介してMT4からデータを挿入しようとしています。データベースを作成して選択し、テーブルを作成し、テーブルからエントリを取得することができました(MySQL Workbenchのテーブルに入力されました)。...

0  MQL4からMQL5への送信注文を変換する方法  ( How to convert send order from mql4 to mql5 ) 
下記は以下の方法で、通過しない場合は3分後に注文を配置する方法です。私はその大部分をMQL4からMQL5に変換しました。 MQL5でMQL5に変更する方法がわからないというコメントされた部分では、MQL5の送信順序はBOOLを返し、intはintです。この残り...

0  MQL4アレイに値を割り当てます  ( Mql4 assign a value into array failed ) 
これは私のコードであり、ADCクラウドインジケータを生成しようとしています。 最初は、クラウドを生成するだけでうまくいくことができます。 現在、ゼロを超えるとヒストグラム緑色にしようとしています。次に、CAN配列を2つのバッファ、greenBuffer、および...

0  JSONテキストからのキャリッジリターンを取り外します  ( Remove carriage return from json text ) 
私はAPI呼び出しからJSONテキストを返し、ここからスクリプトJSONシリアル化とデシリアル化をトラフ実行します。 https://www.mql5.com/en/code/13663 私の問題は、JSON構造内のラインブレイク/キャリッジを信じるものの...

0  MT4マネージャAPI => .NET CLRWrapper  ( Mt4 manager api net clrwrapper ) 
.NET CLRラッパーでmtmanapi.dllを使用しています。 rows2 nameの特殊文字のないシンボルの rows1 値 - (例: rows3 <) / code>、<コード> rows4 など)は、シンボルに特殊文字がある場合(例:<コ...

1  AndroidのMT4 API  ( Mt4 api on android ) 
API(正確にはMT4)を使用してAndroidアプリを作成するために使用することが可能なかどうかを尋ねたいですか? MT4 APIはヘッダファイルとDLLファイルで構成されています。 ありがとうございました。 ...

0  カスタムデータソース、市場データをMT4サーバーに埋める方法は?  ( Custom data sources how to fill the market data into the mt4 server ) 
カスタムデータソースを持っていますが、市場データをMT4サーバーに埋める方法はわかりません。 だから私は新しい市場データをMetaTrader 4サーバーに挿入するのですか? データ付けAPI( 998877611 関数)をドキュメントに入手しましたが、MIT...

1  なぜMT4 - ChartSetSymbolPeriod() - プラットフォーム遅くなりますか?  ( Why mt4 chartsetsymbolperiod slows down the platform ) 
私が使用しようとするのの ChartSetSymbolPeriod() のの私の[カスタムインジケータ]について、私は別の[エキスパートアドバイザー]でそれを使用しようとする私のMT4プラットフォームダウンこのインジケーターが遅くなります。 特別しばらく '...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有