2008年12月10日水曜日

ぐったり

さて年末までぐったりしよう。
これが一番難しい。負荷をかけてダメージを受けると元以上に回復するというのが生命のすごい所で負荷をかけ続けると必ず壊れる通常の自然界の物質(例えばやわらかい金属も金属疲労を起こす)と根本的に異なるわけだが、そこに異常が生じてしまった状態で人間は自動的にがんばってしまう。別に私が気合と根性に満ち満ちた人間であるというわけではない。人であるからそうあらざるを得ないのだ。だからこそこんな風に自分の身体に無理やりやるべき事を与えてみたわけだが、ようやく、しばらく自然に休めそうだ。そろそろ年末だ。ゆっくりしよう。

youtubeからの動画

それからニコニコ外部プレイヤをbloggerで無理やり使うとやはり時間が経過するとはねられてしまうので、動画はyoutubeから張る事にして、ニコニコ動画のリストをサイドバーに置くようにした。youtubeの動画のリストもサイドバーにあるけれど、クリックして見に行くならニコニコ動画の方が画質が良い。youtubeでは自分でfmt=18オプションをつける必要がある。エントリに動画を張る時は自分でfmt=18のオプションをつけるのでyoutubeでも画質が良い。というわけでベータ版のデモ動画を掲載。






そして過去の動画をyoutubeで改めて掲載







以前に書いた
--------------------------------------
512x384でCamStudioで記録した動画をSuperCでflvにするとかなりサイズが小さくかつ静止した文字列等に特化して品質が良くなる。さらにニコニコ動画なら再エンコなし。youtubeだと内部動作は良く分からないけれど&ap=%2526fmt%3D18で(多分再エンコなしの)高画質になる。
--------------------------------------
の方針はそのままで良いだろう。

ベータ版としよう



安定性、実用性とも最低限を実現できたので以前のベータ版宣言を撤回し、改めてベータ版を宣言する事にした。はっちゅう君プラス アドイン 「身も蓋もない」のサイト のファイル置き場からmimohuta.zip v.40のアーカイブをダウンロードしてください。



それと、サイトにも書いたけど、データの表示中にフォームのレイアウトをいじると稀にはっちゅう君が落ちる現象が確認されています。サイズ変更は問題ありませんがドッキング状態やフローティングなどのレイアウト変更はログインする前に行うようにしてください。建て玉が存在する状況での「身も蓋もない」フォームのドッキング・フローティング変更操作は返済注文に関する機会損失を生む可能性があります。このアドインの使用及び投資活動は常に自己責任で行ってください。


なおこの問題は、プログラム開発時にバックグラウンドで動作する``なんちゃら.vshost.exe''の悪さが原因である可能性がありそうです。これを使わずにもプログラムの開発はできるのですがそうすると問題は起きなくなりました。よってユーザの皆さんの環境ではこの問題は起きない可能性があります。フィードバックをお願いします。



すぐには対応できないかもしれないけれど使ってみてのフィードバックをお待ちしております。

解決策

リフレクションを使って
WeifenLuo.WinFormsUI.Docking.DockContentHandler.SetDockState(Boolean, DockState, DockPane)
を書き換える、なんて事ができるならどうにかなりそうだ。
やれるのかもわからないしやる気にも全くならない。
とりあえずフロートを禁止にしておいたけど、他の場面で落ちる事もある。
トレードツールとしては、異常終了というのは一番避けるべき事だよなあ。
まあ、いつもの枕詞、このアドインの使用と投資活動は自己責任で。

出来高シミュレーションの結果

で、出来高は
double averagePerformance = canonicalDistribution(30);
double thisPerformance
= Math.Round(Math.Max(1.0, poisonDistribution(averagePerformance, nextDueTime)));
というコードで決定した。

出来高は桁数がコロコロ変わるような感じで変動するので、平均値0の一様分布でも良かったんだけど、桁数が変動しているんだよー、という感じでこんな感じにしてみた。

ただ無記憶過程なのでバーストなどは起きず、よほど小さな時間間隔で見ないと平均化されてしまう。せっかくカラフルに視覚化したのにつまらない。もちろん、あくまでランダムウォークであって、大きな出来高を伴って大きく動くという事もない。でも、デバッグ用データに凝っても意味がないのでとりあえずこれで。



それにしても、リボトリールが効いているのか体内リズムは正常化して、その癖日中の辛さは相変わらずだから改善しているのに生活密度はよけい落ちているという変な感じ。そういう状態でも、遊んでいるのと変わらないとは言え一応一日を無為に過ごさずにやれる事があるという事に感謝を。

しかしこんな屍のような状態で作ったトレードツールを、投資は自己責任で、の枕詞で公開してしまって良いのだろうか。まあ良いのだろう。ジョインベストがそう言っている。全部ユーザの自己責任さ。

分布いろいろ

ね、眠い。意識がもーろー。

やっぱり3D描画中にドッキング状態を変更すると落ちる問題は保留するしかなさそう。

出来高は、デバッグ表示させた出来高とはっちゅう君にはじめから入っている相場情報表示ツールが表示する出来高が完全に一致するようになったのでもう問題はないだろう。

これらの作業の最中にシミュレーションで出来高を少しそれらしく生成する必要が出てきたので分布を作る関数を一通りそろえた。幾何分布はスキップリストの時に作ったけど。実務アプリでここまで確率論するとは思わなかった。

private double normalDistribution(double average, double standardDeviation)
{
double R = Math.Sqrt(-2 * Math.Log(1.0 - randomForFakeData.NextDouble()));
double T = 2 * Math.PI * randomForFakeData.NextDouble();
double X = R * Math.Cos(T);

return X * standardDeviation + average;
}
private int geometricalDistribution(double p, int n)
{
return Enumerable.Repeat(1, n)
.TakeWhile((i) => (randomForFakeData.NextDouble() < p))
.Sum();
}
private double canonicalDistribution(double average)
{
double beta = 1.0 / average;
return Math.Log(1 - randomForFakeData.NextDouble()) / (-beta);
}
private int poisonDistribution(double perSec, double milliSec)
{
//発生数の平均値
double lambda = perSec * (milliSec / 1000.0);
//正規分布で近似
return (int)Math.Round(Math.Max(0.0, normalDistribution(lambda, Math.Sqrt(lambda))));
}