1次元ランダムウォーク  (Silverlight)

2次元ランダムワークのプログラムをこちらで示しましたが、1次元ランダムウォークのプログラムも作成してみました。

ある時刻 t の時の値を V(t) で表した時、V(t+1)の値が、±5%の範囲で動くようにしています。
V(t+1)は、V(t)+1 あるいは V(t)-1 のいずれかとなるように値が遷移するようにするのが一般的なのかもしれませんが、株価や為替レートがランダムワークに従って動くという説を確かめてみたいということもあり、ここでは、±1 に固定するのではなく、動く範囲を±5%にしてみました。5%という数字にはほとんど根拠はないです。

時間軸を横軸に、変化する値を縦軸として表しています。


描画には、Silverlight3からサポートされたWritableBitmapクラスを使い、線を描画しています。
線を描画するには、Lineオブジェクトを生成し、そのオブジェクトをWritableBitmapクラスのRenderメソッドに渡すことで描画をしています。なお、実際に描画を画面に反映させるには、その後、Invalidateメソッドを呼ぶ必要があります。

DispatcherTimerクラスは、WindowsFormsのTimerクラスに該当するもので、一定時間おきに、指定したメソッドを呼び出せます。 UI と同じスレッドで動きますので、WriteableBitmapにアクセスできます。
DispatcherTimerクラスのサンプルとしてもご利用いただけるかと思います。

以下、C#のコードです。

■Walker.cs
■MainPage.xaml.cs
  
■MainPage.xaml