スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ArrayResize()関数による多次元配列のサイズ変更と内容の保証

MT4でEAなどを作るときにMQL4ではC言語のような構造体が作れないので、注文状態を記憶しておくために多次元配列を使うことにしている。

多次元配列を使う際、しばしば、宣言、要素の位置、データのアクセスで混乱することがあるのでメモしてきた。
一次元配列と多次元配列の宣言
多次元配列の宣言と初期化
多次元配列のアクセスとその関数例

注文が増えてくると管理するための配列を拡大したくなるので、ArrayResize()関数を使って配列のサイズを増やすことを考える。この関数には以下の制限がある。

・関数内で宣言されるようなローカルな配列は変更できない。
・可変であるのは、はじめに表記される次元についてのみ。

さらに、「ArrayResize()関数によって変更された配列は、変更によって削減されたり増加したりした要素以外の要素での内容が保証されているか?」ということが気にならないだろうか?    このことは、ヘルプには触れられてないので確かめてみた。

void ExtendSetArray3( int &ran3[][][] )
{
 int nRng0 = ArrayRange( ran3, 0 );
 int nRng1 = ArrayRange( ran3, 1 );
 int nRng2 = ArrayRange( ran3, 2 );
 ArrayResize( ran3, nRng0+1 );
 for ( int n1 = 0; n1 < nRng1; n1++ )
  for ( int n2 = 0; n2 < nRng2; n2++ )
   ran3[nRng0][n1][n2] = (nRng0+1)*100 + (n1+1)*10 + (n2+1);
}

自分向けのメモとして、多次元配列を引数に取り、はじめの次元の要素を一つ増やし、増やした要素にデータを書き込む関数を作ったのが上記。

・引数の宣言で、int &ran3[][][]として一般的な三次元配列の参照をとることで、配列のサイズを変更したりデータを書き足したりするので、配列を書き換えて反映することを示す。

・ArrayRange()関数により、渡された多次元配列の各次元の要素数を取得。

・ArrayResize()関数により、はじめの次元の要素を一つ増やすように配列のサイズを変更する。ここで、ArrayResize()関数の戻り値は、成功すれば配列全体の要素数(はじめの次元の新しい要素数を返すわけではないことに注意)、失敗すれば-1を返す。本当は戻り値をチェックしなければならない。

・for文では、新しく増やした要素についてだけ、増えたことがわかるように要素の位置関係を示すデータを書き込むようにしている。

int gan3[][2][2] = { 111,112, 121,122, 211,212, 221,222 };
int start()
{
 ExtendSetArray3( gan3 );
 Comment3( gan3 );
 return(0);
}

作成したExtendSetArray3()関数を動作確認するために記述したEAが上記。
前回記事で示した多次元配列の内容を読み取って表示するComment3()関数を使用している。

動作結果としては、チャート左上に以下のように表示された。

111,112,121,122,211,212,221,222,311,312,321,322,
// ↑EAをチャートに載せてから初めてのティックが来たときの表示。
111,112,121,122,211,212,221,222,311,312,321,322,411,412,421,422,
// ↑2回目のティックが来たときの表示。以降、ティックが来る度に同様に表示が増えてゆく。


Comment3()関数によって、結果が正しく表示されていることから、多次元配列の拡張が正しく行われ、拡張部分だけではなく毎回全ての要素を組み込みのComment()関数で表示できているので、多次元配列の拡張部分でない要素の値は維持されているといえそうだ。なお、逆にサイズを削減した場合についての動作は未確認だ。
スポンサーサイト

theme : MT4自動売買
genre : 株式・投資・マネー

comment

Secret

☆当ブログとFX取引に関するご注意☆

もし、当ブログを閲覧、参考にしていただいた上で、FXまたはその他取引に関心を持たれた方は、以下の点にご注意して下さい。

・FX取引(外国為替証拠金取引)は元本や利益が保証された商品ではなく、市場環境の変化や相場の変動により損失が発生する場合があること。

・FXおよびその他取引をする場合は、各種のリスクを理解し、十分に検討し、かつ慎重に行う必要があること。

・当ブログで掲載、紹介している情報は、FXおよびその他取引、投資に関する勧誘、助言等ではないこと。

・当ブログで掲載、紹介している取引手法、ソース・プログラム等を用いた結果、いかなる損害が生じても当方は一切の責任を負わないこと。

投資、取引をされる場合は、必ずご自身の責任で行って下さい。
よろしくお願いいたします。
プロフィール

Dr.ヘパ


Author:Dr.ヘパ

カテゴリ&検索
最新記事
最新コメント
最新トラックバック
RSSリンクの表示
月別アーカイブ
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
つぶやき
★DailyImpact(有償版)★
リアル口座で運用できる有償版
販売開始しました!

ご購入、お申し込み等の詳細については、下記リンク先のブログ右上にショッピング・カート「ブーボーのトレーディングキット工房」へのリンクがありますので、お手数ですがそちらをご参照下さい。

ブーボーの
トレーディングキット

Ⅰ.経済指標トレード向けEA、DailyImpactは、経済指標発表による突発的な値動きを捉えることで、利益を得ることを目指したセミオートEAです。

Ⅱ.経済指標トレードは、「指標トレード」「News Trading(ニューストレード)」とも呼ばれ、最近注目されている手法です。

Ⅲ.経済指標発表によるトレードは、いつ大きく動く可能性があるかわかっているので有利です。

Ⅳ.一方、瞬時に大きな値動きが発生するので、手動での仕掛け、手仕舞いは難しいことが多いです。

Ⅴ.高速に計算・発注可能なEAであるDailyImpactにより、手動よりも素早く、同時に多くの通貨ペアで、しかもその場にいなくても経済指標トレードができます。
★DailyImpact(DL版)★
ダウンロード版
期間限定で試用できます!!

ダウンロード、使用方法の詳細は
以下のブログを参照して下さい。



DailyImpact(ダウンロード版):ブーボーのトレーディングキット

   ☆ブーボーの
トレーディングキット

↓↓↓アンケートにご協力お願いします。↓↓↓
ブログ・ランキング
リンク&ブロとも申請
アクセス・カウンタ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。