2008年12月7日日曜日

ベータ版

一時開発停止する前に、メッセージボックスを出さずに画面上に情報を表示するように改良した。
あとシミュレーションモードでは発注をしないとか(うそのデータを信じて発注したら悲しすぎるので)。

いずれにせよ、建て玉の情報は画面に表示されないので今の所建て玉リストとの併用が必要。
この点で手間取る人はいないだろうけれど、はっちゅう君プラスがレイアウトファイルを書き出せるようになっているのでそれも含めてアップしておいた。

めでだくベータ版だ!(休みなのでテストできていないけど)

それにしてもWPFのおかげで堅気のハッカー達がコンソールプログラムを呼吸するように書くのと同じのりでGUIを書く事ができる。趣味のプログラムという物がようやく現実的になったという事か。インターネットを見ていてもGUI込みでスケルトンやサンプルが盛んにやりとりされている。こういう状況が俺が高校の頃にあればなあ。

というわけで、メッセージボックスの代わりの情報表示はアニメーションによって時間をかけて消失するのだ。こんなのがフレーム描画とかグラフィック周りのアレコレの面倒を見ずに

TextBlock newText = new TextBlock() {
Text = DateTime.Now.ToString("[HH:mm:ss]") + str,
Style = (Style)mimohutaPanel.Resources["textStyleMessage"],
};

DoubleAnimationUsingKeyFrames relaxationAnimation = new DoubleAnimationUsingKeyFrames();
relaxationAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(1.0, TimeSpan.FromSeconds(0)));
relaxationAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(1.0, TimeSpan.FromSeconds(9)));
relaxationAnimation.KeyFrames.Add(new LinearDoubleKeyFrame(0.0, TimeSpan.FromSeconds(10)));

Storyboard relaxationStoryBoard = new Storyboard();
relaxationStoryBoard.Children.Add(relaxationAnimation);
Storyboard.SetTarget(relaxationAnimation, newText);
Storyboard.SetTargetProperty(relaxationAnimation, new PropertyPath("Opacity"));

messageArea.Children.Insert(0, newText);
relaxationStoryBoard.Completed += delegate {
messageArea.Children.Remove(newText);
};
relaxationStoryBoard.Begin();

こんなコードで済むのだから良い時代すぎる。VisualBasicという道は間違っていなかったんだなあ、と実感する(できあがったのはC#だけど)。

体調

リボトリールのおかげか夜強いが自然な睡魔によって自然に寝られ、朝5~6時には起きられるようになった。しかし日中眠いのは変わらず。いつも夜まで待つと眠気が若干晴れてそれで少しだけ人間らしい生活ができていたのが、状態が改善しているにも関わらず生活の密度はめちゃくちゃ下がってしまった。

最近の開発も屍のように機械的にやっているだけだし。

でも、日が出ている間=活動時間という状態がとてもとても嬉しい。俺は吸血鬼なんじゃないか、とか、実は夜な夜な悪と闘っている記憶がないのではないだろうか、と思った事すらあったからなあ。

昨日は嫌な雨が降ったけど最近は天気が良いし、ただ生きている事が楽しい。

2008年12月6日土曜日

スキップリスト

スキップリストのファイルを置いておいた
.netのLinkedListNodeと違って属するListへの参照をNodeに持たせていないからほとんどの操作は局所的に可能。つまりheaderやfooterを持たずとも一つのNodeさえあればあらゆる事が可能(O(log N)でheader, footerにたどり着けるので保持しているのと大して変わらない)。

という実装にしておいたにも関わらずSkipListクラスは作ってheader, footerを保持させ、検索メソッドなどはNodeクラスにstaticメソッドとして実装するのではなくSkipListクラスに持たせるという折衷様式。
実装は歪だが、SkipListクラスがheader, footerを持っているために一部の処理が簡単にかけるし、その上で例えば複数のSkipListをマージしたいなどという時にも高速に実行できる。ちょっとコードを書く気になれないが。

こういう記事があるくらいなので、メソッドをオーバーライドする事で区間の和に関して加法的に合成される量(区間における要素の個数というのは最も単純な例にすぎず、可換半群の総和計算なら何でもOK)を効率的に計算できるという汎用性を持ったスキップリストのコードというのはネットで入手しやすいものとしては珍しいのではないだろうか。そのくせLINQのおかげで実装は意外と単純明快だった。

それにしても、こうしてみると、balanced treeに関する小難しいあれこれは一体なんだったのだろうという気になる。シーケンシャルでないケースではピボットをランダムに選ぶツリーを使えばいいだけだし

スキップリストのすごいのは大局的な操作によってbalancingを保つのとは間逆の、独立試行のその独立性によって全く局所的にbalancingが満たされる事。だから、局所的にremoveなんかをしても``おおよそ''二分木であるという性質は全くの不変。まあ、一応headerとfooterの高さを下げられるなら下げるという処理はいれたけどさ。

そういえばこのグラフィックインタフェース
は本来SkipListのライブラリに含めていて呼び出しをしない限りはUIコンポネートはnew()さえされないのでちょっと使わない参照が増えるだけどいう形だったのだが、それにしてもデータ構造のコードの配布に含めるのは気が引けたので外しておいた。もともと.csファイルとしては分離されていたし。

出来高の視覚化



デバッグ用のシミュレーションデータで出来高をどう生成するのか悩んだが、ポアソン分布にした上で単位時間あたりの平均出来高を一様分布でランダムにしてみた。

本当は最低限、建て玉-約定の情報と損益を画面に出すようにしないとこのアドインだけでトレードが簡潔しないんだけど、はっちゅう君プラスの建て玉リスト機能なんかがあるのでとりあえずは困らないだろう。

まあ、はっちゅう君プラスには建て玉リストの自動更新がないとかいう皆が文句言っている欠点以上の、注文履歴を見ても損益が分からないという最悪の欠点があるのだが。

まあ、今の体調的には後は年明けてからだなあ。
本当に死に掛けたまま、何もしない日々もそれはそれで耐えられないから機械的に作業をしていたという感じ。プログラミングってやらない人には意外だろうけれど、9割方は機械的な作業なんだよね。

それまでに100万円くらいぽーんと寄付してくれる人いないかなあ。
1000万円あれば後はコンスタントに増やしていく自身があるんだけどなあ。
証拠金はあくまでも担保だという事を最近ようやく実感した。
証拠金余力ぎりぎりどころかその半分程度での取引だって本当は正しい事ではない。

2008年12月2日火曜日

3Dグラフィックのハードウェアアクセラレーションが効くようになった


Vista搭載マシンなどディスクリートGUIを搭載してなくてIntelチップセットだけという環境でもあるていど3Dアクセラレーションが効く環境では劇的にパフォーマンスが向上したはず。

自分の環境ではほとんど変わらないんだけどね。

詳しいこと&寄付は紹介サイトまで。

2008年11月28日金曜日

はっちゅう君 プラス アドイン 「身も蓋もない」のサイト

サイトを作った

でも、サイトの編集者しかコメントができないようなのでコメントなどはこのブログにお願いします。

あと、浅ましくもPaypalでの寄付受付なんかをしてみた。

2008年11月27日木曜日

イベントの削除

ところで、各種サンプルで

何かのイベント+=メソッド名

何かのイベント-=メソッド名

っていうコードを見るけれど、これ、イベント削除されないよね?それぞれ右辺で暗黙に別々のデリゲートオブジェクトが生成されてそれを追加したり削除したりしているから。


以前ここに書いてあった内容はデタラメでした。このエントリをご参照ください。