2009/01/22

繰り返し関数

MQL4の中には、2つの繰り返し関数が収録されています。
for( )と②while( )です。
まず、 ①for()関数の説明です。
よく、【for(i=0;i<=100;i++)】というコードを見ると思います。
これは、この後に続くコードをi=0からiが100以下の間繰り返すことを意味します。
※i++とは繰り返しが終わるごとにiに1を足していくことを意味します。
コードを書き換えるならば、『i=i+1』となります。
サンプル for(i=5;i>0;i--) { k=k+i } サンプルの答えは、『K=5+4+3+2+1=15』となります。
for()の( )の中身は、決まり事があります。
それは、(;;)セミコロンを2つ入れなければならないことです。
例) for(;;) { K=K+1 } と書くことができます。
しかし、このコードを使用すると、無限ループが起こります。
終了条件がないからです。
たとえば、  if(K==5)break; という文を追加します。
この分の意味は、kが5になったら繰り返すことをやめてくれというものです。
ちなみに、繰り返し関数の中によく使われるコードとして、以下の3種類があり、よく混乱しますので覚えていた方がいいものです。
break: (繰り返しなどから)脱出する。
continue;(繰り返しなどを) スキップする。
  return(); (自作関数などを)終了し( )内の数値を返す。
  (0)の場合は、そのまま終了という意味です。
例) for(i=0;i<=10;i++) { if(i==3)continue; K=K+i if(K==6)break;  }
答えは、K=0+1+2+スキップ+4+5+6+7+8+9+10=52になります。
※kが6になることがなかったために途中で脱出しませんでした。
(例題か?) これが、for()の繰り返し関数の基本です。
次に・・・・・・ ②while( )繰り返し関数です。
この繰り返し関数は、( )内に書かれた条件が真(true)の間繰り返しを実行するというものです。
例) int i=0; while(i<5) { k=k+i; i++; }
答えは、K=0+1+2+3+4=10です。
よくやってしまうのが、『i++;』を忘れてしまい無限ループになってしまう事と、while( )の( )内の条件がはじめから偽(false)になっていることで、処理されないことです。
※上記の条件で間違いがあっても、コンパイル時にエラーが出ません。
 そのため、無限ループに陥るか、処理しないコードになります。
後は、for()繰り返し関数と同じです。
では、なぜこの2つが収録されているのでしょうか?
※これは私の経験からこのように納得しています。 繰り返し関数の中に繰り返し関数を入れる場合、for()関数の中にfor()関数を入れても処理されません。
そのため、while()関数の中にfor()関数を入れるようなことを行うためにあるのだと理解しています。 (ごめんなさいこの内容には自信がありません) 今日は、ここまでです。

為替データがカオス時系列データである証明?

為替データがカオス時系列データだと思われる証明を少しだけ行いたいと思います。
まず、画像をご覧ください。











これは、USDJPY日足終値(2001.03.20~2009.01.20)のデータを加工したものです。
上は、横軸にN日縦軸にN日から14日過去の終値を記したグラフです。
下は、横軸にN日縦軸にN日から28日過去の終値を記したグラフです。












去年から今年に掛けて乱高下したデータもある一定の法則でまとまっていると思いませんか?
このグラフがカオスの定義のひとつだそうです。
3.何らかのポアンカレ写像により、テント写像が確認できる。】 に該当するそうです。
1.周期性を持たな】は、FXをやられている方なら身をもってご理解頂いてるはずです。
残りは【2.リアプノフ指数が0より大きい。】ですが、またの機会にしておきます。
(正直まだ理解できていなことが多々あるもので・・・・) 自由に動いていると思っていたデータが、ある法則に縛られて変動するデータであるとこがご理解いただけたでしょうか?