2008年12月31日水曜日
「身も蓋もない」を少し修正
実用上の問題はありませんが、必要ならば修正版を詳細サイトのファイル置き場からダウンロードしてください。
2008年12月30日火曜日
今日の戦績
現在LV1.00(整数部=225mini発注可能枚数の半分(端数切り上げ))
---------------------------
---------------------------
トータル損益は-19624円です。
このうち手数料の支払いが624円含まれます。
買い注文回数は7回, 売り注文回数は6回です。
未返済の建て玉0枚の見込み損益は手数料を含まずに±0円です。
---------------------------
OK
---------------------------
マイナスだけど、これは褒められてしかるべき成績だろう。本当に「身も蓋もない」は強い動きの時のデイトレには強みを発揮する。今月は持ち越し玉によって製作者がその利点を自ら放棄してしまったという阿呆な一月でした。それでは皆さん良いお年を!
ちなみに、一番最後の取引は8865Sから、「身も蓋もない」を使わずに、返済買いを8850で指値して年末持ち越しを避けるように引成を指定していたのだが、引けで笑った。成り買いが集中したのだろう。買いの呼値が置いてけぼり。
ええ、無事、引け直前の8850で約定しましたとも。そうでなかったら憤慨していただろう。
2008年12月29日月曜日
気配値表示の実地テスト
昨日アップした画像はシミュレーションモードでの物だが、本日前場の途中までの画像を改めて。ちゃんと動いている。実は少しだけ高速化も施してある。最近の環境では初めから十分なパフォーマンスで動いているだろうから、この高速化の恩恵が得られるのって結局は製作者だけなのだけれど。
ダウンロードは詳細サイトのファイル置き場からmimohuta.zipを。
それから、今回の微高速化はEQATEC Profilerを使ってボトルネックを調べながら行った。.netのプロファイラはなかなかこれ!という決め手がない中で、一部で何気に使い易いとして紹介されていて私もインストールだけはしていたのだが、それが先日Version 2.0になったというメールのお知らせが来た。今まではプロファイルの結果ファイルの出力先が分かりにくかったのが直接指定できるようになったなど細かい改善がなされている。無料の.net用プロファイラとしてはほとんど最高の選択肢だと思うので皆さんも使ってみてはいかがでしょうか。
ただしガベージコレクト付きオブジェクト指向言語では当然の要求のヒープの使用のされ方、ガベージコレクトの頻度などは調べられない。そっちはCLR Profilerとやらがあるらしいが良く分からん。
で、だ。8530での売り建て玉がまだ処分できていない。今日も寄り付きの後微上げした後は少しずつ下げてさき8700を割るという流れ。こっから景気良く上がりますよーというポイントがあれば損きりの後買い建てできるのだが、ショートしている以上は下げているならば見ている事しかできない。本当に、大納会で大暴落してくれないと許さないぞ
2008年12月27日土曜日
VFRなmp4のaviへの変換方法
で、VFRだとこういう変換がmediacoderやsuper Cのような全部入りフロントエンドを使っても上手く行かないがどうにかならんか⇒現状ではどうしようもない、という質疑応答を各所で見かけたのだが以下の方法で上手くいった。
まずCombined Community Codec Packを入れておく。必要なのはこれに含まれるHaali Media Splitterなのだけど、こういったコーデック関係はごちゃごちゃしてしまいがちなのでmp4だoggだmkvだの最新コンテナを駆使するエンコード職人でもない限りはこういったコーデックパックで済ませた方がシステムがごちゃごちゃしないで良いと思う。
とにかくCCCPの設定でHaali Media Splitterがmp4を扱うようにする。
それで、Super CでDirectShow Decodeにチェックを入れた上で適当な設定でデコードする。
ffdshowやHaali Media Splitterがトレイアイコンを出すようにCCCPで設定しておくとこれらがデコードに使われている事が確かめ易い。
これでOK。
マルチコアでもハイパースレッディング対応でもないCPUを使っている身としてはSuper Cよりもmediacoderの方がスレッドのプライオリティを下げて使用できるので好きなのだが、mediacoderでvideoのsourceにWM Decoderを設定しても上手く行かなかった。Super Cではここまでに書いた方法で上手くいった。
Haali Media SplitterはMKVにも対応しているので、試してないけれどVFRなMKVなんかでもこの方法でいけると思う。
追記:
せっかくタスクマネージャの代わりにSlightTaskManagerを入れているのでこれ使ってプロセスの優先度下げればSuperCも軽くなるんじゃね?と思ってやってみたらちゃんと軽くなった。バックエンドで動いているmencoderなりffmpegなりの優先度も下げるのもお忘れなく。
2008年12月26日金曜日
これでよいのか?
しかも、xaml中にリソースとして記述したマテリアルであるdataPointsMaterialから、記述をそのままコピーしてaskBidPointsMaterialを作ると、気配値を表示するメッシュにdataPointsMaterialを割り当てると落ちずにaskBidPointsMaterialを割り当てると時々落ちる。これひょっとして、ビデオメモリが足りてなくてテクスチャが格納できてない?仕方がないのでaskBidPointsMaterialのBrushをSolidColorBrushにして様子を見る事にした。
追記:
結局、RadialGradientBrushを使ったアンチエイリアスもどきを止めて全部SolidColorBrushにしたら問題は起きなくなった。VistaではWPFの3Dではアンチエイリアスがかかるらしいので、これで良しとしよう。
多分やっぱり自分の環境固有の問題で、ビデオメモリが潤沢にある環境なら起きない問題だったのだろうけれど、自分の環境で動かないのは気持ちが悪すぎるのでまあ直ってよかった。
たまには大きなサイズで。
気配値の表示をするようにしました。成り行き注文ですので、買い建て時には左側の黄色い丸の場所で、売り建て時には右側の黄色い丸の場所で、それぞれ約定するのが基本となります。ただし、成り行き注文の性質上これが保証されるわけではありません。注文が処理されるタイミングまでに気配値が動く可能性もありますし、ネットワークの事情で注文が遅延する可能性もあります。成り行き注文の特性をご理解の上でアドイン「身も蓋もない」をご使用ください。
気配値が表示できるようになったアドイン 「身も蓋もない」 は詳細サイトのファイル置き場から mimohuta.zip というアーカイブファイルとしてダウンロードできます。
で、だ。8530の売り建て玉どうしよう・・・。午前に起きてたら逃げ場もあったものを。
大幅に上昇した上で俺が見始めてからは下げているだけとなると見ている事しかできない。
えー、「身も蓋もない」の使用者の皆様は、是非、ザラ場中のトレンドフォローに徹するよう、製作者を反面教師として心がけてください(白々しい)。「身も蓋もない」ユーザは基本的に、商いが少ない時は休むも相場なりを実践するべきです。一応、ボックスの上限でショート・下限でロングするようなスタイルでもワンクリックの注文インタフェース(ドテンもワンクリック!!)のご利益はあります。でもやはり成り行き注文なのであまりに小さな値幅での揉みあいに無理やり参戦すると細かい損が積み重なってしまいます。それを取り戻そうと、日中の動きが少ない分持ち越しで大きな利益を出そうなどとファンダメンタルの知識もテクニカルの知識もない人間が博打を打つとさらに損を広げてしまいます。製作者が身を持って示した教訓でした。
本当、今日、ノーポジで朝からザラ場を見ていればどれだけ利益を出せる場面があったかと思うと泣きたくなる。まあ今日も商いが戻ってきたとは言いがたいのでノーポジなら基本は休みだったかもしれないけれど、前場で一二回はやれたよなあ。はあ。
気配値表示については、色はまだ検討の余地があるな。
それにしても、一週間ほど何も手に付かなかったので、こうやってまだやれる事があると確認できるだけでとても嬉しい。
2008年12月25日木曜日
気配値
いつもならテストしていない状況でもアーカイブしてファイル置き場におくのだが、実はgoogle sitesのファイルストレージの履歴機能には、サイト運営者しかアクセスできない事が分かった。つまり一般の閲覧者は最新バージョンしかダウンロードできない。そういうわけで、テストしてから置く事にしたのでもう少しお待ちください。
あと、そんな事情なので最新バージョンをダウンロードして何か動きがおかしいという場合には知らせてくださいね。過去バージョンでうまく動作するかもしれないので。
2008年12月24日水曜日
損益計算機のバグ
修正したので必要な人は「身も蓋もない」のサイトのファイル置き場からどうぞ。
2008年12月22日月曜日
戦績
12/22分と12/24分の合算。ちょっとフェアじゃないけれど、12/22の損がちょっと目をつぶりたくなるありさまだったので。今日も一度は22日との合算でプラスになったんだけど、すごい小さな値幅での揉みあいの下限でのショートから損きりを繰り返して損を広げてしまった。禁じ手の持ち越し玉が大きな利益を出した以外は小さな利益と大きな損を繰り返してしまった感じ。ただ、一度8500でロングした後利益が出てからのドテンが完璧にはまった。ボックスの下でロング、上でショートってのは自分のスタイルからは外れるけれど、珍しく「ドテンがワンクリック」という特徴のご利益があった事になる。やはり揉みあい時に細かい取引を繰り返すスタイルにもこのアドインは超有効です!!と宣伝してみよう。
そして掟破りの持ち越しを8530S。まあクリスマス相場で大きく下げるも良し、大納会までに一波乱あるも良し。ここから9000回復なんて演出があったら、それはもう公的資金を相場操縦と訴えるしかなかろう。でもありそうだよなあ。今日も変に強かったし。何で平均線を割らないのかさっぱり分からん。
---------------------------
---------------------------
トータル損益は-3756円です。
このうち手数料の支払いが2256円含まれます。
買い注文回数は23回, 売り注文回数は24回です。
未返済の建て玉1枚の見込み損益は手数料を含まずに-1048円です。
---------------------------
OK
---------------------------
まあせっかく一度一昨日とのトータルでプラスになったのをフイにしてしまったのは悔しいけれどこうして見ると損失のほとんどは手数料分で実質はとんとんだ。ランダムウォークを知っている人ならば、これだけ売買を繰り返して損益トントンにするのは簡単な事じゃない事は分かるはず。数字的に華々しくないけれど、しっかり宣伝にはなっている。まあ持ち越し玉で大きな利益を出してごまかした部分もあるんだけれど。
敗因
いや本当、上手な人ならこのアドインは凄い強みを発揮するはずなんで皆さん使ってくださいね。製作者の私に才能がないだけですから。
あと、今日みたいな高ボラティリティの日でも極限に単純な注文インタフェースは役に立つはず。スキャルピングはともかくボックスの上下でショートとロングを繰り返すような人には有効だろう。俺のスタイルじゃないけれど、てか、ボックスの上下がどこかなんて分からんけれど。
さてそれにしてもアドインを公開していて製作者が大負けじゃ縁起が悪い事この上ないのでもうしばらくホールドのつもりで8690でショート。オーバーナイトなし+超短期トレンドフォローのスタイルを完全に放棄してしまったけれど、さすがにこれを放っておいてやばくなるなんて事はないと思うんだが、ただもう年内に大暴落は来ないとしたら今日の負けを取り戻せるわけでもないのだろうなあ。
というわけで、今日があまりにひどくて損益を見たくないので、明後日との合算で戦績エントリーは出します。それで明後日爆上げしてたりして。
今日
追記:上げていて、かつ自分がショート寄りのバイアスがかかってるから散々。やな感じだなあ。でもこの上げについていける相場環境じゃないよな。だったら休めばいいわけで、それができずにトレンドフォロースタイルを言い訳にして参加して損を膨らませているのは自分の駄目さだ。学ばなければ。
追記:他の証券会社でデータ配信がストップして阿鼻叫喚らしかったのだが、ああ、出来高が減るな、くらいにしか思わなかった。でも、2chのスレでボラが小さくても流動性が高い方が良い、という書き込みを読んで気が付いた。トレンドフォロースタイルにとってそれって最悪じゃん。初めからクリスマス直前+年末で今週は動きが乏しくなるのは警戒していたのに何でそんな当たり前の事を失念していたんだ。やっぱり上げの動きが強すぎたので冷静になれていなかった。まあとにかく、商いが少ない時は休もう。トレンドフォローと言っても相場環境にトレンドが逆行している時も休もう。というか、ランダムウォークでもかなり一方的に動くというのは俺の「身も蓋もない」をシミュレーションモードで動かせば直ぐに分かる事。休むも相場なり。
追記:さらにさらに、今日の嫌な所は今日の損を当分とりかえせる日がない事だよなあ。クリスマスまでは商いは細るばかりのはずだし。それで、今日の損を今日中に取り戻そうとしたらむしろ損が広がるんだろうなあ。やっぱトレードは上手い人に任せるべきだわ。
2008年12月21日日曜日
トレードアイランド
脛の筋肉痛が全くひかない。
風邪のような症状も本格的に強まっている。というか、これは本当にただのはやりの風邪をひいているだけなのだが。こういった症状があるからある時期までウイルスないし細菌の感染症が疑われたそうだが、結局神経系と免疫系に異常をきたすが原因は不明の疾患という決着となったわけで、ぶっちゃけ免疫力が低下しているので風邪をひきやすいというそれこそ身も蓋もない話らしい。
とにかく辛くてしようがない。日経225先物取引で一生遊んで暮らせるだけの資金が作れたら将来の不安はなくなるわけで、それで生計を立てると思いつめる事は避けるようにしているが、そうなったら良いなあとは思う。まあ今はとにかく危ない橋は渡らず小遣い稼ぎに徹するしかないのだが。
2008年12月20日土曜日
2008年12月19日金曜日
夕場まで通して見れるようになった
fsdRwl.EnterUpgradeableReadLock();
try {
if (seq.Footer.Prev[0].IsHeader ||
(seq.Footer.Prev[0].Item.Performance < item.Performance
&& seq.Footer.Prev[0].CompareTo(item) < 0)) {
fsdRwl.EnterWriteLock();
try {
try {
seq.Insert(item);
} catch (InvalidOperationException) {
//showTrace("Confliction!");
}
} finally {
fsdRwl.ExitWriteLock();
}
}
} finally {
fsdRwl.ExitUpgradeableReadLock();
}
こういうコードを書いていた。なお、最終時刻より時刻が真に増加した場合にのみ追加するコードになっているので、ロジカルにはInvalidOperationExceptionのキャッチは要らない。
で、これだと後場から夕場までを通してみる事ができない。一度出来高がリセットされるから。
というわけで選別する条件を
seq.Footer.Prev[0].IsHeader ||
(seq.Footer.Prev[0].Item.Performance != item.Performance
&& seq.Footer.Prev[0].CompareTo(item) < 0)
に直した。これで夕場まで通して見れるようになった。
今日の戦績
---------------------------
---------------------------
トータル損益は+8040円です。
このうち手数料の支払いが960円含まれます。
買い注文回数は10回, 売り注文回数は10回です。
未返済の建て玉0枚の見込み損益は手数料を含まずに±0円です。
---------------------------
OK
---------------------------
夕場にちょっとだけやったけどまたスキャルピングもどきになってしまった。利益が出たというよりも動きがなくなったので手仕舞ったのが+5が二回になっただけ。損きりでもおかしくなかった。
今回からラベルに「取引記録」とつけます。
今日の体調
とにかく、薬のお陰で睡眠のリズムができたのと、体の状況に抵抗せず自然に休めるようになったのは嬉しいのだが、症状はむしろ悪化しているんだよなあ。ずっとこれと付き合っていかなきゃならないと思うとやはり辛い。薬の副作用による眠気のような目の奥が強烈にツーンとする感じは体が慣れれば収まるというのでそちらはただ我慢するのみ。
先物で利益が出続けてくれないと精神的な支えを失いそうだが、そうやって思いつめてると絶対大損食らう。今日みたいに+5%の日が100回続くと100倍になる。一ヶ月のトレード日数を10日もとれば一年で十分達成だ。気楽に行こう、気楽に。あくまで小遣い稼ぎ。
今日の戦績
---------------------------
---------------------------
トータル損益は+7232円です。
このうち手数料の支払いが768円含まれます。
買い注文回数は8回, 売り注文回数は8回です。
未返済の建て玉0枚の見込み損益は手数料を含まずに±0円です。
---------------------------
OK
---------------------------
この戦果。はじめの下げの後のトレンド転換についていけずに大きめの損を出して、その上で始値と終値の値幅と同程度の利益が出せているんだから全く満足OKOK。なお、LV1(ミニ発注可能枚数)。
なんとなくオーバーランチで大GDの気がするが、そういうのは気にするな。
相場はこんな感じでした(一度損益計算機を修正したために再起動して寄り後の下げは見えていない)。
このアドインで取引すると、一方的に動く時に、予めその動きを予想するのでなく動きの中で細かいトレードを繋いでいくというスキャルピング以上短期スイング以下くらいの戦術がめちゃくちゃうまくはまる。基本的に、持っている時のランダムウォークによるリバや動きが乏しくなって気配値が変化しなくなった場合には、その後リバするかトレンド継続かは当然予測不能 なので直ぐに手仕舞う。持っていない時でトレンドが明確な時はランダムウォークの範疇の大きめのリバでポチッとなする。後はトレンド転換にうまく対応できればもうちょっとリスクを減らして大きい損を減らせるだろうから上手い人ならもっと上手にできるだろう。
2008年12月18日木曜日
よし、記録をつけよう
いきなりの大損でアドインのネガティブキャンペーンみたいだが、可視化されれば自分にとっての教訓にもなる。
現在LV1(ミニ売買可能枚数の事)で
でした。ちなみに損きり後+5なんてスキャルピングもどきをしているので少しだけ損が小さくなった。
あと、自己ルール:
- 大きく方向感を持って動いていて利益が出し易い時にだけトレードする。人生ドロップアウト気味だからといってもこれで生活費にするなんて考えない。確実にとれる時の小遣い稼ぎと認識する。
- オーバーセッション禁止。オーバーナイト以ての外
- トレンドフォローで売買
- 1日で+5%行ったら頭を冷やす。
---------------------------
---------------------------
トータル損益は-12644円です。
このうち手数料の支払いが144円含まれます。
買い注文回数は2回, 売り注文回数は1回です。
未返済の建て玉0枚の見込み損益は手数料を含まずに±0円です。
---------------------------
OK
---------------------------
今度からはこれで。
ネガティブキャンペーンにならないように、このアドイン使い出してから、たった二日で20000円くらい稼いだ上で阿呆をしてのこれです。阿呆をしたからなのか才能がないからなのかはこれから分かるだろう・・・ガクブル。
損益計算アドイン
でも、これらの処理、頭が回っていない状況ではとてもまともにコードできなくて、多分ちゃんとできていない。
技術的な問題が存在しているわけではなくて、ちゃんとしたコードを書けば必ずちゃんと動くようになるはずなので、もしこの損益計算アドインを使いたい人がいて、うまく動かなければ、すぐにあきらめずに情報を下さい。
ただし、持ち越し玉の情報が記録されていない状況で初めてコマンドを実行した日には、現物引取りをした事がない人には心臓に悪いくらいの額が表示されると思います。気にしないでください。私が書いたコードがちゃんとしていれば次の日からはちゃんと損益が表示されます。それでもおかしな点があればご相談ください。それは直せるバグのはずですので。
フィナンシャルなポストをしてみる
救われた、でも救われなかった
で、帰ってきたら吹いた。寄りで+40出せたじゃん。何でその後爆リバしてんだよ。でも鬼ホールドするぜ。年内大暴落来るぜ。トレンドフォローが何じゃ。俺は天の声を信じるぜ。
駄目だこいつ。自分のアドインが否定したトレードスタイルを実践してしまっている。
2008年12月17日水曜日
ヤバイ
でも、これだけ騰がる理由なんてこれぽっちもないんだよな。経済対策を好感?経済対策の発表ってどう考えても悪材料じゃん。そりゃ何もしないのも困るけど。
とりあえず夕場寄りでびびったけど、許容できる損の水準になった上に短期的な下げトレンドは継続中だし、と理由付けしてオーバーナイト決定。ないとは思うけど+1500とかされると退場です。サーキットブレーカ+値幅下限張り付き希望。
トレンドフォローなんか知るか。鬼ホールドするぜ。今週中に8000突破するはずだぜ。
リボトリール
でも、リボトリールで身体的症状以外(そっちは無自覚だったにも関わらず確かに改善して少なくとも一日を過ごしやすくなった)が改善したのは確かだが、それで直ちに改善したのが睡眠の問題だったわけでこの上就寝前に量の多いリボトリールを飲んでも一日中続く眠さが強まるだけなのだが意味があるのだろうか。主治医は、睡眠の質が改善して色々改善したという認識で、もっと睡眠の質を改善する方向で考えているのかもしれない。
しかし覚醒直後の辛さはむしろ強まって重力10倍。それでもすごし易くはなっているんだから、気付いていないだけで抑鬱症状もちゃんとあったんだなあ。
今日のトレード
ぐわー。既に+140なのでちょっとくらいの損はどうという事はなくなったからとリバしたら直ぐノーポジに戻す前提で既にずっと下げ続けている状況での追い討ち売り建てした状態でこのエントリを書 いたりしてたら-50になりやがった。動き早すぎ。やっぱり俺自体にはトレードは向いていない。まあ+100くらいにまとめよう。
トレンドフォローって難しいなあ。スキャルピングもどきになってしまう。それと一度大きな損を出したのが痛かった。えーと、新規、返済区別するのが面倒なので
-8735+8705
+8705-8680
+8675-8655
+8665-8630
+8590-8560
+8555-8530
+8490-8455
+8440-8515(Fuck!!)
-8515+8535
-8555+8565
=95
でもって+9500円でした。手数料引くとどうなるのかとか、クリック証券は損益を簡単に見れないので本当の損益は不明。
とにかく心臓に悪いので、やっぱり自分でのトレードはあんまりやらない事にしよう。
一応勝った場合だけ書くのは不公平な気がするので書いておくと、前回+110だった時の後は、昨日だか一昨日だかに一回だけトレードをしてて、それは-15でした。
で も俺の能力と少ない資金(始めた時は-50くらうと最低証拠金額を割る状況だった)でこれだけ勝てるんだから、本当、一方向に大きく動く相場環境なら誰で も勝てるぞ、「身も蓋もない」を使えば。難しい理論を背景にした高度な自動売買でもない、投資家が当たり前の事を当たり前にやる事を支援するだけのツール なのに。
トレードし易すぎ
下げている時にショートポジションを取れば利益になる。この当たり前の事が普通のトレードツールだとすごく難しい。大きく下げた所で戻りを待ってエントリーしようと思って指値をすると板がどんどん動く。機械損失という言葉が頭にちらついて慌てて成り行き注文にする。すると、最後に大きく下げた所で約定する。その後大きくリバウンドして損きりせざるを得なくなる。でもトレンドの読みが間違っていたわけではなくてその後順調にだらだらと下げ続ける。誰でもこんな経験しているだろう。ひどい場合だと、リバウンドに対する損きりの後、損を取り戻すためにドテンをする。往復ビンタって奴だ。
そんな貴方に「身も蓋もない」。ランダムウォークが視認できるのは相反する二つのメリットがある。
- トレンドが定まっているように見えて実は相場が方向感を決めかねている時に待ちの姿勢を取れる
- 大きく動いている時にランダムウォークの範疇でのリバウンドを待ってエントリーできる。
3Dの設定について
もし同様に昔のIntelの統合チップの内蔵グラフィック機能を使っている方がいれば、
http://oshiete1.goo.ne.jp/qa2602593.html
この内容が参考になると思います。劇的ではありませんが、結構早くなります。まあその分ゲームなどでは画質は下がるわけですが。
えーと、メモしておこう。
非同期反転: オフ / オン
トリプルバッファ: デフォルト / オフ / オン
フリッピングポリシー: フリップ / ブリット
深度バッファ ビット深度: デフォルト / 16ビット深度バッファ / 24ビット深度バッファ
S3TC テクスチャ圧縮の強制: オフ / オン
FXT1 テクスチャ圧縮の強制: オフ / オン
ドライバメモリフットプリント: 標準 / 低 / 高
テクスチャ色深度: デスクトップ色深度 / 16ビットテクセル / 32ビットテクセル
異方性フィルタ: アプリケーションコントロール / オフ / オン
のそれぞれで
オン、オン、フリップ、16bit、オン、オン、低、16ビット、オフ
同じような内容をWPF関係の記事が多くポストされているブログで見かけた記憶があるのだがちょっと見つからなかった。確かテクスチャ圧縮についてはオンにした方が良いという内容だったので、上の通りにしないまでも、テクスチャ圧縮の設定をオンにするのだけはやるのが吉という事だろう。一見負荷になりそうだけど、普通(それもノートPCのメモリだと)メモリがボトルネックになるので有効という事なのだろう。
追記:
いやむしろ劇的に早くなってるぞ。超嬉しい。フォームを最大化、現在値比表示範囲を最小化(これで描画面積が大きくなる)してもFPSが下がらない。もっと早くやっておけばよかった。いままでは最大化すればFPSは1くらいだったけれど、今は10弱は出ている。元々、負荷をかけないために、描画の準備-描画にかかった時間と同じだけの時間を空けてから次の描画を行うようにしていて、つまり全力描画の半分程度のFPSになるようになっているわけなので、これだけ出ているという事は上に書いたグラフィックドライバの設定のおかげで描画のオーバーヘッドはほとんどなくなったという事だ。良かった良かった。
フロート状態とか
こんな感じではっちゅう君プラスを最小化するとスタンドアロンというか最近はやりのサイドバーガジェットのようにも使えるようになった。.netはReflectorがあるおかげではっちゅう君プラスのドキュメント化されていない部分も調べられて助かる。トレイメニューの設定の仕方はreflectorで内部にある総合的な.AddInファイルの中身を調べた。
どうしてだか、起動時に復元されたウィンドウの最前面表示設定が有効にならない事がある。必要なら一度ドッキングさせてからフロートし直せば最前面表示になります。最前面表示がうまく行かない現象って自分のアプリに限らず昔からWindowsで良く経験するのだが(はっちゅう君プラスのフロート注文ウィンドウもそう)、何か知られていない問題でもあるのだろうか。
それと前のエントリの末尾にも書いたけど本日前場の様子を「身も蓋もない」で表示させてキャプチャした動画を作った。小さいけれど前と違って超短期トレンドフォローに忠実に行動した結果としての+15の利益付き。サイドバーからYoutubeまたはニコニコ動画で見れます。
2008年12月16日火曜日
はっちゅう君プラスのAddInFormの使い方
改めてAddInFormに関する一番基本事項(しかしろくにドキュメント化されていない)の覚書き。これらを実行すると
- フロート状態のウィンドウのサイズがちゃんと復元される。
- フロート状態のウィンドウははっちゅう君プラスにつられて最小化されたりせず独立している
- フロート状態のウィンドウは何も設定していないとはっちゅう君が最小化していても上下左右へのドッキングアイコンが現れてうざいのだがそれが出なくなる
結局
public class MimohutaForm : AddInForm
{
#region メソッド
private void decideAllowEndUserDocking()
{
if (ClickSec.Trading.Core.Main.ApplicationHost.Instance == null) {
this.AllowEndUserDocking = false;
} else {
if (ClickSec.Trading.Core.Main.ApplicationHost.Instance.Workbench.WindowState
== System.Windows.Forms.FormWindowState.Minimized) {
this.AllowEndUserDocking = false;
} else {
this.AllowEndUserDocking = true;
}
}
}
private void setIndependentWindow()
{
decideAllowEndUserDocking();
this.TopMost = true;
this.TopLevel = true;
this.ShowInTaskbar = true;
}
private void setDependentWindow()
{
decideAllowEndUserDocking();
this.TopMost = false;
this.TopLevel = false;
this.ShowInTaskbar = false;
}
#endregion
#region カスタムしたメソッド
protected override void OnDockStateChanged(EventArgs e)
{
if (this.DockState == DockState.Float) {
setIndependentWindow();
} else {
setDependentWindow();
}
base.OnDockStateChanged(e);
}
protected override void OnSizeChanged(EventArgs e)
{
if (this.DockState == DockState.Float) {
this.ClientSize = this.ClientSize;
}
base.OnSizeChanged(e);
}
protected override void OnLoad(EventArgs e)
{
if (ClickSec.Trading.Core.Main.ApplicationHost.Instance == null) {
setIndependentWindow();
} else {
if (this.DockState == DockState.Float) {
setIndependentWindow();
} else {
setDependentWindow();
}
ClickSec.Trading.Core.Main.ApplicationHost.Instance.Workbench.Resize += delegate {
decideAllowEndUserDocking();
};
}
base.OnLoad(e);
}
#endregion
}
こんな感じにAddInFormを拡張して、例えばMimohutaMainクラスのインナークラスとして定義、コンストラクタでmimohutaFormとして生成し、パブリックなFormプロパティから参照できるようにしてビルダークラスはサンプルどおりに
class MimohutaBuilder : IAddInFormBuilder
{
public IAddInForm AddInForm
{
get
{
return (new MimohutaMain()).Form;
}
}
public string Value { get; set; }
public void Dispose() { }
}
としてやるべきらしい。ビルダークラスにおいてFormを返す前に勝手にShow()などをしてはいけないみたい。
なお、上の例でClickSec.Trading.Core.Main.ApplicationHost.Instanceの実体があるかどうかをチェックしているのかは私のアドインはデバッグの利便性のためにスタンドアロンでも動けるようにしているから。ただのアドインでよければ削れる。
さて、その上で.Addinファイルの中で<AddIn>要素の中に
<Path name="/AddIn/Forms">
<Form id="Tomorrowplusplus.Mimohuta.MimohutaMain+MimohutaForm"
builder="Tomorrowplusplus.Mimohuta.MimohutaBuilder" />
</Path>
とフォームの型のフルネームとビルダークラスを紐付けする。これではっちゅう君プラス起動時にフォームが復元される。
それから、AddInFormの拡張でGetPersistStringを拡張したければ
protected override string GetPersistString()
{
return base.GetPersistString() + "," + ほにゃらら.ToString();
}
みたいにすると、ビルダークラスのAddInFormのget時にはValueプロパティに","以降の文字列が入っているのでにゃんにゃんすればフォーム毎の設定の保存・復元ができる。
以上。これでフロート状態では独立して振舞うなど、フロート注文ウィンドウと同じような動作になるし、フロート状態でサイズが復元されない問題も対処できる。
あと、本日前場の動画をまた作ってしまった。貼り付ける必要はないだろう。サイドバーのリストから見てね。ニコニコ動画ならmp4で綺麗。youtubeなら&fmt=18オプションを付けると綺麗になる。
はっちゅう君プラスのアドインフォームのまとめ
もろもろの問題を解決するためには(using WeifenLuo.WinFormsUI.Docking;した上で)
public class MimohutaForm : AddInForm
{
public MimohutaForm()
{
if (this.DockState == DockState.Float) {
setIndependentWindow();
} else {
setDependentWindow();
}
ClickSec.Trading.Core.Main.ApplicationHost.Instance.Workbench.Resize += delegate {
decideAllowEndUserDocking();
};
}
private void decideAllowEndUserDocking()
{
if (ClickSec.Trading.Core.Main.ApplicationHost.Instance.Workbench.WindowState
== System.Windows.Forms.FormWindowState.Minimized) {
this.AllowEndUserDocking = false;
} else {
this.AllowEndUserDocking = true;
}
}
private void setIndependentWindow()
{
decideAllowEndUserDocking();
this.TopMost = true;
this.TopLevel = true;
}
private void setDependentWindow()
{
decideAllowEndUserDocking();
this.TopMost = false;
this.TopLevel = false;
}
protected override void OnDockStateChanged(EventArgs e)
{
if (this.DockState == DockState.Float) {
setIndependentWindow();
} else {
setDependentWindow();
}
base.OnDockStateChanged(e);
}
protected override void OnSizeChanged(EventArgs e)
{
this.ClientSize = this.ClientSize;
base.OnSizeChanged(e);
}
}
と拡張して使う。どの道フォームの自動復元をするためにはAddInFormを拡張したクラスを作ってその名前を指定しなければならないんだからついでにいつも上のようにすれば良いだろう。
それで、初期化時に、TopMostやTopLevelの設定が確実に行われるようにフォームビルダーは
class MimohutaBuilder : IAddInFormBuilder
{
public IAddInForm AddInForm
{
get
{
MimohutaMain mimohutaMain= new MimohutaMain();
mimohutaMain.Form.Show();
mimohutaMain.Form.DockState = mimohutaMain.Form.DockState;
return mimohutaMain.Form;
}
}
public string Value { get; set; }
public void Dispose() { }
}
}
とする。ただしここでは、MimohutaMainクラスのインナークラスとしてMimohutaFormクラスが定義されていて、MimohutaMainクラスのコンストラクタでMimohutaFormのプライベートなインスタンスが作られ、それがパブリックなFormから読み取れるようになっているのでこういう実装になっている。実際にはケースバイケースだろう。
これらの方針に従うと、
- フロート状態のウィンドウのサイズがちゃんと復元される。
- フロート状態のウィンドウははっちゅう君プラスにつられて最小化されたりせず独立している
- フロート状態のウィンドウは何も設定していないとはっちゅう君が最小化
していても上下左右へのドッキングアイコンが現れてうざいのだがそれが出なくなる
などのご利益がある。
ついでに、AddinFormを継承したクラスで
protected override string GetPersistString()
{
return base.GetPersistString() + "," + isFakeDataEnabled.ToString();
}
とデフォルトの永続化文字列に","に続けて文字列を連結して永続化文字列として返すと
上記フォームビルダーのValueプロパティにセットされた上でAddInForm.getが呼び出される。
これでフォーム毎の設定の保存、復元ができる。こういった部分が中途半端にしかドキュメント
化されていないのでReflectorでにらめっこしながら四苦八苦しなくてはならなくて大変だった。
ついでだからこのフォームビルダーの仕組みもメモしておく。
.addinファイルの<AddIn>要素の中に
<Path name="/AddIn/Forms">
<Form id="Tomorrowplusplus.Mimohuta.MimohutaMain+MimohutaForm"
builder="Tomorrowplusplus.Mimohuta.MimohutaBuilder" />
</Path>
と、上で例にしたようなAddinFormを拡張したクラスのフルネームとビルダークラスのフルネームを登録する。なお、私はAddinFormを継承したクラスを作成するのはこのようなビルダークラスと一意に紐付けするためだけの形式な物に思えたのでインナークラスとして定義してしまった。この場合"."ではなく"+"で外クラス名に繋ぐ。でも、上で書いたくらいに大幅に実装の拡張をするならば、インナークラスにするというのは正しい選択ではないかもしれない。そのうち修正しよう。
でも、いずれにせよ、本当に一段落したという感じだなあ。しばらくは細かい調整のみ。
再開したらまずやるのは注文リストを定期的に監視して新規建て注文約定-返済注文それぞれの時刻と値を調べてトレードの様子と損益を視覚化する事だろう。このようにこちらから連続して情報を身に行く方法以外に約定を知る方法はないみたい。休んでいる間に約定通知の方法が出来上がればいいな。
今日の後場の動画
だんだん、自分の「身も蓋もない」への認識が、ただのビジュアライゼーションツールになってきた。
あんまりこういう撮影を繰り返すのも不毛だけど、歴史的暴落みたいなのを一度でも通日で記録できたらいいな。
で、なぜかYoutubeではmp4動画がサムネイル生成までは行くんだけどその後処理中でずっとそのまま。面倒は嫌なのでニコニコ動画とYoutubeで同じ動画ファイルをアップロードするようにしたいんだけどなあ。まあflvを作るのもmp4を作るのもこれくらいの時間なら対してかからないんだけど。
追記:
一晩で見れるようになりました。一度flvを作ってアップロードしたけれどmp4版に変更。
まあYoutubeではどのみち再エンコされるので、私の方でニコニコ動画とyoutubeでアップロードするファイルを共通にできるという利便性が確保されてだけです。
2008年12月15日月曜日
マホー
そして再起動すると、ウィンドウのサイズは初期値で、中身だけ以前のサイズが再現されて気持ちが悪い。これ、はじめから入っているアドイン全てなのでどうしようもないのかと思ったが、
protected override void OnSizeChanged(EventArgs e)
{
this.ClientSize = this.ClientSize;
base.OnSizeChanged(e);
}
このオーバーライドだけで直った。
また、フロート注文ウィンドウがはっちゅう君を最小化しても消えない&最上位にい続けるのだが、これと同じ動作をさせるには
protected override void OnDockStateChanged(EventArgs e)
{
if (this.DockState == WeifenLuo.WinFormsUI.Docking.DockState.Float) {
this.TopLevel = true;
this.TopMost = true;
} else {
this.TopLevel = false;
this.TopMost = false;
}
base.OnDockStateChanged(e);
}
でOK。これでフロート時にははっちゅう君本体と一緒に最小化される事がなくなり、はっちゅう君を最小化しておけばあたかもスタンドアロンアプリのように振舞わせる事ができる。
追記:これだと最初の起動時にうまくいかなかったりして、結局、
public class MimohutaForm : AddInForm
{
public MimohutaForm()
{
if (this.DockState == DockState.Float) {
setIndependentWindow();
} else {
setDependentWindow();
}
}
private void setIndependentWindow()
{
this.TopMost = true;
this.TopLevel = true;
}
private void setDependentWindow()
{
this.TopMost = false;
this.TopLevel = false;
}
protected override void OnDockStateChanged(EventArgs e)
{
if (this.DockState == DockState.Float) {
setIndependentWindow();
} else {
setDependentWindow();
}
base.OnDockStateChanged(e);
}
protected override void OnSizeChanged(EventArgs e)
{
this.ClientSize = this.ClientSize;
base.OnSizeChanged(e);
}
}
こんな感じにするとアドインの内容と関係なしに、フォームの振る舞いとして、望ましいものとなると分かった。皆さん、どんなアドインを作る場合にもAddInFormはこう拡張して使いましょう。
2008年12月14日日曜日
確率的な発注枚数
C:\Documents and Settings\ユーザ名\Local Settings\Application Data
\CLICK-SECHatchukunPlus.exe_なんちゃら\なんちゃらのuser.config
の中の<configuration>要素内の<usersettings>要素内の<tomorrowplusplus.mimohuta.properties.settings>要素内に
<setting name="TransactionQuantityDecider" serializeas="String">
<value>
using System;
using System.Linq;
namespace Tomorrowplusplus.Mimohuta{
public class TransactionQuantityDecider{
Random random=new Random();
public int decide(int max){
int min=(int)Math.Ceiling(max/2.0);
return min+Enumerable.Repeat(1,max-min)
.TakeWhile((i)=>random.NextDouble()<0.5).Sum();
}
}
}
</value>
</setting>
<setting name="TransactionQuantityDecider_RequiredAssemblies" serializeas="String">
<value>System.Core.dll, mscorlib.dll</value>
</setting>
と記述します。
Linqが便利すぎて泣けてくる。それにC#コードで直接動作をカスタムするなんて高級な機能がいとも簡単に実現するCODEDOMとか本当C#って素敵。C#コードとは言えxml中に記述するので不等号や&を文字実体参照に置き換えなければいけないのが面倒だけど。
出た当初には見向きもせずにV3.0になってから使い出したから手放しに絶賛できるんだろうなあ。
37.7度
ただ、リンパ節の腫れがないのと微熱が軽度(~37.2)という事で橋本先生の分類でいう身体表現性障害類似型に分類されて(のと実際に鑑別不能型でなくいずれかの類型にあてはまる身体表現性障害の可能性も検討しての事だろうけれど)坪井先生を紹介されたんだけど、やはり激しい咳・痰の慢性化が全ての始まりだったのがいつも気になっていたので、橋本先生の分類で言う感染症類似型の類型の可能性が自分では今でも気になっている。このままリンパの腫れとかまで出て来たりして。まあ、通常の身体表製障害だったとしたら特に、そうでないとしてもやっぱり、気にしすぎで逆に症状が出る・悪化する事もあるわけだから、辛くないかぎりは気にしない事にしよう。
2008年12月13日土曜日
ティックの透明度
ティックの透明度を変えられるようにした。これで直近についてもティックよりも四本値&秒間出来高を見たいというニーズに対応できる。さらに、四本値の四辺形があまり太らないようにした。一つしかデータ点がないような状況(ローソクがただの横線になるような状況)でエッジしか見えなくなるのが嫌で四辺形の頂点を少しオフセットしていたのだが、それを調整して小さめにした。
あと、readme.txtに書いておいた発注枚数決定方法のカスタマイズ例が間違っているのを直しておいた。これ、スクリプトなんかを組み込む労力をかける気になれなかったのでC#コードの動的コンパイルをしている。なので自分が書いたコード的には超シンプルだが、内部的にやっていることは超大げさ。
100%pure .net OS
アセンブリは名前とバージョン番号を持つ。それらはバージョン番号でソートされた適当なデータ構造のリストに格納され、このリストはさらに名前をキーとするハッシュテーブル(辞書)に格納される。
#ハッシュテーブルでは全項目のリストアップにハッシュテーブルサイズだけの時間がかかる。でもはっしゅテーブルのサイズは普通アダプティブに増加させていくものだし、この場合アセンブリの個数というのは高速化を考慮しなければいけない程の量にはならないだろうから、現状の.netのDictionary.Keysにforeachするみたいな方法で全ての保持しているアセンブリをリストするなんて事は気軽にできるはずだ。
#ここでハッシュテーブルというデータ構造を選択しているのはハッシュテーブル特有の種々の高速なO(1)操作が使いたいわけではなく、要するに、フォルダを指定してインストールという意味のないインストール操作を排除できる事が超超超重要なのだ。あれ、本当に意味が分からないよね。
アセンブリからアセンブリへの参照は名前及びバージョンに対して対応状況を判定するデリゲードによって指定される。Enumerable.Lastメソッドみたいな感じで見つかった最新の対応バージョンを参照する。
ユーザも仮想的なオブジェクトとしてアプリケーションのエントリポイントを持つアセンブリへの参照をやはり名前とバージョンの対応状況判定デリゲードで持つ(常に最新バージョンを使うor必要なバージョンのリストを指定する、みたいなGUIによる設定が必要だろう)。
後はガベージコレクションでアンインストールは自動だぜ!!。インストール時にフォルダを指定するなんて一般のユーザにやらせるには低級でレガシーすぎる操作はもう要らないぜ!。ディレクトリツリーベース(あるいはタグベース)のファイルシステムはユーザが作成するドキュメントファイルのためだけに使うぜ!!
技術的問題点は皆無なのが空恐ろしい。しかしこんなのがオーバーヘッドの問題なく実現するのは一体いつの時代なのだろうか。
しかも、これで、ハッシュテーブルをインターネットに置くようにすれば・・・。バージョン管理システムや入依存関係解決付きのパッケージ管理システムがおもちゃのように見えてくる。開発初期段階のアルファバージョンだろうと、技術的な問題のテストとして作ったトイライブラリだろうと、世界中のどこかで誰かがまだそれを必要としている限りはガベージコレクトされずに生き残り、誰も必要としなくなった後にいつのまにかガベージコレクトされてひっそりと消えていくわけだ。
はじめnetびいきで書き始めたけど、こうやって書いてみると、むしろグーグル向きのアイデアだなあ。
ジー
しかも風邪気味の症状が強まるし。今はそれでも辛いほどではないけれど、全ての始まりがここからだったのと、高校~大学の頃は声がかれる程の咳と痰が慢性化して本当に苦しかったので、その状況が再び訪れたらちょっと耐えられそうにないぞ。でも、今年の7月くらいからこの風邪気味の症状が再発してからは、以前ほどの強さじゃなくて、ゲホゲホ言いながら医者に行ってこれは関係ないので気にしないでくださいと言うわけにもいかないから一応申告するだけという感じの不気味な感じで、やっぱり以前とは違うんだよなあ。この部分については少しだけ体が適応したのかも去年までの二年間はパタリと止んでいたわけだし。
2008年12月12日金曜日
あれ?
ただ利益を出すのも難しいのに、宣伝のために勝つ事前提でCamStudio動かしながら取引するって本当大変だなあ。今度同じような事をするのならば、一日中録画した上でおいしい所だけを切り出すって方法でやるべきだろうな。
実はムービー編集ツールを全くもっていなくていつもエンコードしてアップロードするだけだったのが、そういえばWindows Movie Makerがあるじゃんとようやく気が付いて、4倍速に編集したのが今回のムービー。だから次からは長めに録画した上でおいしい所だけ切り出すなんて事もできるはず。でも、録画しながらの取引なんて精神的な消耗がすごすぎる。二度とごめんだ。何であんな勝ちまくれたのだろう。
デモ
実際こういった一方的に大きく動くような``誰でも勝てる相場''において、普通のトレードツールを使っていると妙にうまく行かないという経験をする人が多いと思いますが、このアドインは超短期トレンドフォロー型の、そういった''誰でも勝てる相場''でちゃんと勝てるトレードツールを目指しています。投資とはギャンブルではなく資産の形態を主体性を持って選ぶ事でありその基本は先読みではなくトレンドフォローですから。でもアメリカと違って日本は方向感なく動く事が多いんですよね。早く主体性を持った相場に育ってくれないと未だに日本の経済はアメリカにおんぶに抱っこなのかと心配になります。
見ての通りの大きな下げですが、この後に大きくリバウンドしています。利益を出すためのトレードとしてやったら私には才能がないので最後でやられていたでしょうが、はじめからデモのためと割り切っていて、何度か利益を出すのに成功した時点で頭を冷やして終了したので助かりました。相場は怖いですね。トレードはユーザの皆さんに任せます。
ムービーも後でアップします。実際の取引を以下にリストします。
- 12:45:54 8340S 12:53:05 8310C
- 12:58:03 8275S 13:08:55 8255C
- 13:10:29 8185S 13:11:07 8175C
- 13:19:28 8155S 13:30:23 8105C
で、厚顔無恥にも宣伝。このアドインを使うとこーんなに簡単に利益がばんばん出ますよー
で、ムービー。まあ恥ずかしい事に返済注文のタイミングを逃した後損きりできずに損が膨らみその後戻ってきて無事利益になったなんていう、超短期トレンドフォローが羊頭狗肉も良い所な行動をとったりしているのが丸分かりなのですが。結果だけ見ると何故か連勝になっているので宣伝としては言う事なし。ムービーには二回分の取引くらいしか映ってないのが惜しいですが。
Analyticsはうまくいった
それにしてもクッキーってドメイン、パスに紐付けされるものだから無条件で暗号化されていて発行元からの発行によってのみ生成されるものだと思っていたけれど、暗号化されていないクッキーはユーザ側で作れるんだねえ。一つ勉強になりました。firefoxがsqliteを使っていてくれたから編集するのが容易だったのも幸運だった。
で、昨日の異様な肉体的疲労は一日で消えた。個別の症状よりも、昨日と同じように今日が暮らせないという、人間形成期から自分に対してインストールしてきたプログラムが次から次へと無効になっていく、というのが一番辛いので、短期間で元にもどるのなら症状の悪化も別にどうという事はない。
人は行動を選択していると思いたがる。だからこういう状況は理解してもらい難い。麻生太郎みたいな阿呆な事を言う奴がいる。でも本当は自分の自由意志は限られている。それを幼少の頃に幸運にも認識できたからこそたくさんのプログラムを自分に仕込んできて、こんな状況でもまだまだ自動的に動ける事がたくさんある。プログラミングもその一つだ。自分の所でコミュニケーションがターミネートされてしまう事態をブログへの投稿によって回避するのもその一つだ。長い間かかって整備されていったカウンセリングという制度がブログという技術一発で簡単に代替できてしまう。この時代に生まれたという理由によって齎されているそれらの選択肢に感謝を。
2008年12月11日木曜日
google analytics
はトラッキングIDを設定するだけでGoogle Analyticsで解析してくれるのだが、自分のアクセスを除外するのが難しい。色々情報はあるのだが、どれも、トラッキング用の.jsファイルをロードしてトラッキングコードを実行した後にこの.jsファイルに含まれる__setVar関数を呼んでユーザ定義フィールドを作成するようになっている。で、google sitesではjavascriptはなぜか徹底して使えないようになっている。調べてみたらfirefoxのクッキーはsqlite形式で保存されていたのでFirefoxのアドオンとして動作するsqliteデータベースツールのsqlite managerをダウンロードして自分でクッキーを設定した。実際には、トラッキングが有効になっている状態でサイトにアクセスすると
サイト:sites.google.com,
パス:/site/tomorrowpluspluspublic/
名前:__utma, __utmb,__utmc, __utmz
というクッキーがいくつか作られる。これらは全て、内容が
数字.なんちゃら
となっている。これらの数字は全部共通なので以下でも``数字''と書いてあるのは同じ数字の事。どれからのレコードをコピーして名前を
__utmv
に変え、内容を
数字.tomorrowplusplus
に変える。idとかの項目もあってどう設定すれば良いのか良くわからないが、なぜか__utma
から__utmcまで連番の後、__utmzで一つ飛んでいたので間のidにした。また、期限をめちゃくちゃ長くした。
で、google analyticsの方で
フィールド:ユーザ定義
パターン:tomorrowplusplus
という除外フィルタと一致フィルタを作りそれぞれを適用したプロファイルを作った。
これで、自分のアクセスとそれ以外のアクセスが振り分けられれば成功なのだけど、果たしてうまく行くのだろうか。google analyticsは反映されるまでにタイムラグがあるためこういう試行錯誤が必要な問題の解決が難しい。
指数分布
private double canonicalDistribution(double average)
{
double beta = 1.0 / average;
return Math.Log(1 - randomForFakeData.NextDouble()) / (-beta);
}
これをカノニカル分布と名づけたのはちょっと恥ずかしすぎる。あれは離散分布だし、暗黙の状態数という重みに由来する状態の実現確率で、幾何分布の連続化とは意味が全く違う。つまり確率過程が背後にない。exp(-beta X)っていう関数形が同じなだけだ。指数分布と呼ぶべきだろう。というかwikipediaにはそう書いてあった。物理で言えば確率的にかつ無記憶的に消滅する粒子の寿命に関する分布とかだ。まあ、メソッド名なのでそのうちリファクタリングで修正しておけばすむ話で使う側には何の関係もない。
本日の前場のデモ画像
本日の前場です。出来高を伴って流れが変わるというのが良く分かる結果になっている。天辺の赤は寄り付きだから出来高は桁違い(対数とってLinearGradientBrushで視覚化しているんだら文字通りの意味だ)に大きく、他に節目節目でオレンジ~赤になっている。こういう情報は直近(縦軸の1/4(時間にして1/16)だけティック表示をする)のティックに対しても見れた方が良いだろうと思ったので四本値は全部表示するようにした上でベータ版にしたが、やはりティックに隠れてしまう。ティックの丸の大きさをカスタマイズできるようにするのは容易なので、そうすれば大きなモニタを使っている人にとってはティックと四本値が同時に見やすくなるかもしれない。
それにしても今日は肉体的な疲労が突然異常に強まった。ちょっと辛い。
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))));
}
2008年12月9日火曜日
カプセル化内部のバグ?
出来高の可視化の虫を殺した
受信した相場情報データのうち約定に関係しないもの(Ask, Bidなど)もとっていたために内部的な出来高データが秒間10万とか異常な事になっていた。はっちゅう君プラスのライブラリ的にはCurrentPriceStatusを見るべきなのだが、CurrentPriceStatus.Contractだけを許容すればよいのか自信がないので、出来高が増加した場合のデータだけをとるようにした。正しい処理ではないけれど問題も起きないと思う。
そうすると現在の相場環境では秒間数10程度なので、100を底とする対数程度がちょうど良い。
サーキットブレーカ発動時とかのめちゃくちゃ取引が活発な時の秒間出来高の平均や瞬間最大風速は調べておくべきだろうけれど、とりあえず最大で1000000を底とする対数までいけるようにしたので、まあ十分だろう。
これで問題が起きなければ本当に年内は完全休息モード。休息したから回復するわけではない体でも休息しないわけにもいかない。
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#だけど)。
体調
最近の開発も屍のように機械的にやっているだけだし。
でも、日が出ている間=活動時間という状態がとてもとても嬉しい。俺は吸血鬼なんじゃないか、とか、実は夜な夜な悪と闘っている記憶がないのではないだろうか、と思った事すらあったからなあ。
昨日は嫌な雨が降ったけど最近は天気が良いし、ただ生きている事が楽しい。
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日金曜日
2008年11月27日木曜日
アルファバージョン完成
はっちゅう君プラスのアドイン
ベータバージョンに向けてのTODO:
1.建て玉や返済注文の情報の表示
2.トレード回数や損益の情報の表示
3.引け前のワーニングや強制決済
4.暇だったらグラフィックを無駄に凝る
5.暇だったらxamlを外部から読めるようにしてデザインをカスタマイズできるようにする。
6.さらに暇だったらはっちゅう君のリフレクションを下にスタンドアローン版を作る
7.さらに暇で、しかも利益でVista搭載のPCが変えたらサイドバーガジェット版を作る。
8.さらに暇で、タッチパネル搭載型のvista sideshowデバイスが入手しやすくなったらsideshowガジェットを作る
でもしばらくは今のままでいいや。
それにしても、動きのない日だったので、デバッグで証拠金の10%が飛んだ。成り行き注文恐るべし
2008年11月24日月曜日
注文処理を実装した
まだ枚数を一枚に固定しているが、注文処理を実装してしまったぞ。
テストをまったくしていないというか、そもそもクリック証券の先物の口座はまだ開けていないのだが。
今日開けるかと思ったら振り替え休日かよ。
アドイン
チェックボックス五つをチェックしないとロック解除にならないのでお気軽にお試しください、と言いたいところですが、ロック解除していないときでも返済注文は行うようになっている+そもそもぜんぜんテストしていないのでご注意ください。何があっても免責ね。
それにしてもLINQのノリが楽しい(ステートメントを使っているわけではないけれど)。五つのチェックボックスが全てチェックされているのを確かめるのに
private bool isOrderLockReleased()
{
return mimohutaPanel
.ChkLockRelease
.Children
.OfType<checkbox>()
.All((chk) => (chk.IsChecked.HasValue && chk.IsChecked.Value));
}
これですむのだ。
また、五つのチェックボックスのうちひとつでもチェックが外されたら全部を外すコードは
foreach (CheckBox chk in mimohutaPanel.ChkLockRelease.Children.OfType
chk.Unchecked += delegate {
foreach (CheckBox _chk in mimohutaPanel.ChkLockRelease.Children.OfType<checkbox>()) {
_chk.IsChecked = false;
}
};
}
簡潔、簡潔。
2008年11月22日土曜日
マケスピ in はっちゅう君
2008年11月20日木曜日
途中経過公開
はっちゅう君アドイン
今の所注文操作は実装していませんので、お気軽にお試しください。
インストール方法:解凍して出てくる.addinファイルをはっちゅう君のアドインマネージャ画面にドラッグアンドドロップ。インストールボタンが出てくると思うので指示に従う。
なお、.Net framework3.5が必要な気がします。
また、アドインの実体は通常dllファイルとして作成しますが、私のアドインの場合デバッグの利便性のためにexeファイルとして作成してあります。はっちゅう君プラスと同じディレクトリに置くと直接実行できて、ブラックショールズモデルに基づいたシミュレーションデータが表示されます。
2008年11月17日月曜日
わりと形になってきた
デバッグ用にブラックショールズモデルのオイラー法による離散化をシミュレートしてフェイクのデータを生成できるようにした。
(こんな事が可能なのはこの人のおかげというその伊藤先生が先日亡くなられたそうですが・・・。ご冥福をお祈りします)
さらに下1/4を経過した後には一定の時間間隔でデータをまとめるようにした。それぞれの時間間隔における始値、高値、終値、安値を頂点とする四辺形を表示しているので、ローソク足と比べて一般的な方法ではないけれど、四本値の情報はちゃんと入っている。なお、高値、安値の頂点はVWATの時刻に表示するようにしているので、ヒゲをちょうど中央に書く普通のローソク足と比べて少しだけ情報量が多い。
さらに、なんと、まとめる時間間隔をリアルタイムにグリグリできるのだ。区間に加法的に関連付けられる量を任意の区間に対して効率的に計算できるツリー状のデータ構造(スキップリストを使用)の本領発揮である。
さて、後は注文機能を付ければ完成というところまできてしまったが、注文機能の実装で危険のないようにするにはどうすれば良いのだろうか。
2008年11月15日土曜日
2008年11月13日木曜日
プロトタイプ
ようやく技術的なテストが全部終わった。
1.はっちゅう君のアドインの作り方と相場情報の受け取り方-完
2.ビジュアル-インタフェース面をWPFで作るやり方-完
3.時系列データの管理、特に合計値、平均値など時刻の区間に関連付けられる量のスキップリストによる効率的な管理-完
4.WPFのオブジェクトベースの描画モデルが昔のVBのシェイプコントロールのパフォーマンスの悪さを引き継いでいないか-OK
そして実際に時刻は平方根を取り値は対数を取って表示させたのがこの画像。
今日は比較的激しい値動きだったので一般的かどうかはわからないが、期待通り
様々なスケールでの等速運動が抽出されているように見える。
ここまでできたので、スキップリストのライブラリ以外の部分は、一度フルスクラッチで書き直そうと思う。
2008年11月5日水曜日
2008年10月29日水曜日
目標
- ティックが値軸を左右、時間軸を上下としてリアルタイムに全画面表示される。
- 座標系は常に現在の値のドットが中央最下方に表示されるように調整される。
- 値軸は対数目盛り。時間軸は平方根目盛り。
- 値動きに関する情報は(値も含めて)一切表示しない。また、起動される度に左右と値の上下の対応をランダムに定める。(*対数目盛りなので人によっては判別できてしまうかもしれない。日経平均が指数関数的に推移するとは考え難いので対数目盛りは止めても良いかもしれない)
- zキーで左ポジション。xキーでノーポジ。cキーで右ポジション。(ショート、ロングとの対応はランダムなのだ)特に、ドテンをワンタッチで行える。
- ポジションは常にfloor(証拠金額/30万円)枚(miniの場合)を建てる事とする。注文は全て成り行き。
- 右上辺りに勝ち回数/利益合計/負け回数/損失合計を表示する。
- 前場、後場それぞれ終了10分前にアラート、5分前に強制手仕舞い。完全セッショントレード。
- また、(含み)損失が前日比で10%に達した場合および(含み)利益が50%に達した場合にも、「頭を冷やしましょう」というアラートとともに強制手仕舞い。翌日まで起動不能。
- 練習モード搭載。
画面表示やキーボードの処理とかゲーム的な部分はリッチなライブラリを使ってうまく楽をしたいので色々検討中。
先に裏切ったのは相場の方だ、そうだろう?もう相場を愛する事なんかできやしないのさ。