排他制御 |
|
| 自動売買の注文処理は、売買シグナル発生時にスレッドを作成して、そのスレッド中で発注をしようと考えています。そこで、同時に発注をするときにオブジェクトの同期がうまくかみ合うかどうかを調べるため、試しに5つのスレッドを作って、5つ同時に発注をしてみました。するとページ遷移のエラーが返されてきました。 そこで、synclockでWEBにアクセスするクラスを排他制御してみると、エラーは発生しなくなりました。でもこれではHTTPWebRequestやHTTPWebResponseを使う意義がさらに薄れてしまいます_| ̄|○(昨日触れたように、WebBrowserよりもむしろ遅いので)。まあ、もともと株価のログをとったり売買アルゴリズムを計算させているスレッドと発注のスレッドは別スレッドなので、あまり影響は無いといえば無いのですが。 ページ遷移のエラーの問題はクッキーの問題だろうと考えて、HTTPWebResponseで得られたクッキーをHTTPWebRequestのCreate時に渡して、クッキーをインスタンス化してみようと考えたのですが、色々やってみてもちょっとうまく行きませんでした(というかCookieContainerオブジェクトを複製する方法がみつからなかった)。もしクッキーを複製できれば、ログイン時に得られたクッキーと同じものを持つ複数のHTTPWebRequestオブジェクトを構築して、スレッド1つごとにそれらのオブジェクトを割り当てて同時に発注できそう……とか考えたのですが、ダメっぽいです。となると、同時に発注するには複数回ログインしなければならないのか?ということになりますが、あほらしいのでやめておきます。 マケスピはこのごろあまり停止しないのですが、今日はマケスピもRSSも停止していないのに、ごく一部の銘柄(日経先物と株価指数)の取得が9時26分に停止してしまいました。このように何故か先物だけが止まるケースがたまにあるのでちょっと困っています。マケスピ全体が止まるのならば、netstat等に相当する処理を適用すればマケスピ停止を発見できそうなのですが、ごく一部の銘柄のみとなると、本当に止まっているのか、それとも実際に売買されていないだけなのかという区別がつきません。DDEのイベントによる取得処理のほかに、RSSに直接アクセスして値をとってくるような処理も必要なのかもしれません。
チャーハン!!チャーハン!! ゚・ 。 ・。 ゚・ 。 ・。 ゚・ 。 ・。 ゚・ 。 ・。 ゚・ 。 。・゚・⌒ヽ 。・゚。・ ゚・ 。 。・゚・⌒) ...................... -=≡ (( ヽニニフ━o _ _ o━ヽニニフ )) ・。 ...................... -=≡((ヽニ(⌒。・゚。・ ミ ( ゚∀゚)彡。・゚。・⌒) ニフ )) ....................... -=≡ ((ヽニニフ━o o━ヽニニフ )) ゚・ ............................ -=≡((.ヽニ(⌒・゚・。彡 ( ⌒) ミ 。・゚・⌒)フ )) ゚・ 。 ・。 ゚・ 。 -=≡((ヽニニフ━o c し' o━ヽニニフ ))
| |
|
7月25日(火) | トラックバック(0) | コメント(0) | 日記 | 管理
|
発注のテストをやってみた |
|
| ウダウダとルーチンワークを繰り返していたら一応プログラムから証券会社への発注をすることができるようになりました。とはいっても今の段階ではまだ、テスト用に用意した一種類の銘柄に対して決まった数量で決まった値段で買い注文を出せるようになったという程度の段階で、洒落た機能どころか銘柄を選ぶことすらできない状態ですが。 証券会社のサイトにアクセスするのにHTTPWebRequestとHTTPWebResponseを使っていますが、発注の全体的な処理としてはブラウザで1回アクセスするのと同程度の時間がかかります。遅いですが、これには原因があります。 ブラウザでPC用サイトでの発注をすると、銘柄検索や発注内容の確認が無い分、アクセス1回で発注できます。それに対して、HTTPWebRequestを使う方法だと、複雑なJavaScriptが存在するPC用サイトで発注処理をするのは難しいので、携帯サイトを使って発注するということになります。携帯サイトの方を使うと、銘柄検索も発注内容確認もあって、3回くらいアクセスしなければなりません。さらに、ページの読み込みごとに変化する項目があって、これを拾う処理をすると(多分不要な処理だと思いますが一応やっておく)、合計で4回アクセスしなければならなくなります。上記で「同程度の時間がかかる」と記述したのは、この4回分のアクセスを含めてのことです。 全体の時間は同じでも、証券会社のサーバーに注文が届くまでの時間で考えれば、ブラウザの方がかえって有利な結果になってしまいます_| ̄|○。まあAPI化されればHTTPWebRequestを使う方法にもそれなりに有利な点が出てくるとは思うので、これはこのままにしておきます。でも色々遠回りをしてしまったかも。 今日は、現物株を保有していたり、信用建玉がある場合にどういう約定履歴になるのかを確認する意味で、はじめてGMOインターネット証券で株を買ってみました。物凄い少額で。 本当は信用全力使い切ったあとでどうなるのかとか、色々調べてみたい部分もあるのですが、リスクが高すぎるので、そういう実験はあえてやらないことにします。 . ☆ |\_/ ̄ ̄\_/| + * \_| ▼ ▼|_/ ψ ♪ \ 皿 /´ / ゜ ☆ 、_ <´ヽWノフつ . ミ≡=_、_(,ノ(,, _,-、ゝ____ -、 . 彡≡=-'´ ̄ ̄`~し'ヽ) ̄  ̄ ゙̄"′ ´ ☆ . ☆
| |
|
7月24日(月) | トラックバック(0) | コメント(0) | 日記 | 管理
|
うがああああ~またくだらないバグだあああ~ |
|
| うげぇええぇぇぇぇえまたくだらないミスで時間を費やしちゃった……。2日連続。 なんというか、バグの箇所を類推する能力が著しく落ちてきている……というよりは、その点の能力が元から著しく酷いということを今更認識し始めたというか。 ログイン直後のトップページから各ページへのURLを抜き出す処理を書いていたら、ローカルではうまく行くのに実際に本物のWEBサイトで試してみるとうまく行かない。何でだろうと思って2時間ぐらい悩んでデバッグしまくり。ローカルではページ全体を検索対象に入れていたのに対して、本物のWEBサイトの方ではその一部分のみを切り出して調べていたのですが、どうも全く関係のない部分を切り出していた模様。普通だったら簡単に気付くミスなのですが、HTMLソースの文字列を全部タグに分解してから処理しているので、どの辺りを切り出しているのかがわかりにくいという状況になっていました。てっきりまた証券会社のサイトがバージョンアップしたのかよ~と思ってた。 あと、指定した属性を持つタグを検索してその部分を切り出すという処理をしていたのですが、そのタグの検索ロジックにもバグが潜んでいて、これまではうまく行っていたのに特定のページではうまく行かないという状況になっていました。 これらのバグを直しても、今度は何故かトリミングがうまく行ってない、と思って悩んでいたら、今度はせっかくトリミングした文字列を新しく代入するのを忘れていたというこれまたくだらないミス。hoge=hoge.Trim()と書くべきところをhoge.Trim()としか書いていなかった。うがああああ~ まあ、潜んでいたバグを早期に潰すことが出来たと考えればいいか…… ところで、HTTPWebRequest、HTTPWebResponseを実行すると、何故か私の環境では1回目のアクセスにかなり時間がかかります。2回目以降はまあまあなのですが、1回目は10秒くらいかかってしまいます。 どうも.NET Framework 1.1では大丈夫らしいのですが(試してない)、.NET Framework 2.0だと環境によっては滅茶苦茶遅くなるみたいです。何か解決策ないのかな? ,.-─-、 / /_wゝ-∠l ヾ___ノ,. - > /|/(ヽY__ノミ .{ rイ ノ パトラッシュ、疲れたろう。僕も疲れたんだ……
| |
|
7月23日(日) | トラックバック(0) | コメント(0) | 日記 | 管理
|
J('ー`)しGMOインターネット証券ごめんね |
|
| GMOインターネット証券のモバイルサイトの方へのログインは簡単にできたのですが、PC用サイトの方へのログインが何故かできなくて3時間ぐらい悩んでしまいました。原因はとても単純なことでした_| ̄|○。 WEBサーバーにpostをする場合に、まずpostをするデータが記述されたフォームの内容(input要素のname属性やvalue属性)を読み込んで、そこにデータを突っ込んでからpostする、という処理をしているのですが、button要素の処理をすっかり忘れていたということが原因でした。モバイルサイトの方はログインの送信ボタンにinput要素が使われていたのできちんとデータを取得できていたのですが、PC用サイトの方はログインの送信ボタンにbutton要素が使われており、このname、value値が送信されていないからログインできないという状態になっていたようです。 そんなわけで、多分GMOインターネット証券のサーバーのログには、私のIDによる怪しいログがかなり残っているに違いない_| ̄|○。
何でこんなことに3時間も悩んでしまったのかというと、Operaを使ってログインしようとするとログインできなかったので、ブラウザ依存の挙動か、もしくはHTTPヘッダーの内容が足りないからとか、クッキーのせいなのかも知れないと考えてしまったからでした。Internet ExplorerのJavaScriptを無効にした状態でもログインできるので何か変だなあとは思っていたのですが。まあそのおかげで他の問題も幾つか見つけることもできたのですが。 HTTPWebRequestは、Createメソッドで作った直後の状態では、HTTP_USER_AGENTやHTTP_ACCEPT、HTTP_ACCEPT_LANGUAGEヘッダーが全く設定されないようです。てっきりUSER_AGENTはIEの奴が設定されると思っていたのですが、送信内容を見てみたら全く設定されていませんでした。 あとbutton要素に関するIEの実装が滅茶苦茶だということは聞いていたのですが、実際に使ってみてその壮絶さにあきれ返りました。button要素のvalue属性ではなく内容が送られるということは知っていたのですが、button要素内にimg要素があると、img要素のタグ部分も含めて全て送信されるみたいです。気持ち悪すぎ。てっきりinnerTextだけが送信されるのだと思ってた…… とりあえずGMOインターネット証券のPC用サイトはFirefoxでもログインできるので、button要素の情報の送信にはvalue属性値を参照することにしました。
J( 'ー`)し たけしへげんきですか。いまめーるしてます
(`Д) うるさい死ね メールすんな殺すぞ
J( 'ー`)し ごめんね。おかあさんはじめてめーるしたから、ごめんね
(`Д) うるさいくたばれ、メールすんな
J( 'ー`)し お金ふりこんでおきました。たいせつにつかってね 食事はしていますか?
(`Д) 死ねくそ女
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄○ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ o __ ゚ た | け | し | ∴ J('A`)し たけし.......... ──┐ ∀ << )
| |
|
7月22日(土) | トラックバック(0) | コメント(0) | 日記 | 管理
|
GMOインターネット証券の注文ページが変わった |
|
| GMOインターネット証券への発注部分をこれから作ろうとしていた矢先に、PC用サイトの発注ページが改訂されてしまいました_| ̄|○。 まあ、まだログインすら手をつけていない状態なのであんまり影響はありませんが。 改訂前の発注ページのHTMLでは、入力フォーム中に存在する全ての送信用の要素にname属性値がつけられていましたが、改訂後のページでは取引区分などのselect要素からname属性値が無くなっています。WebBrowserオブジェクトを使わずにHTTPWebRequestを使って発注するプログラムを書いているので、この変更の意味は結構大きいです。 パラメータも幾つか変わっていて、改訂前での注文確認画面で見られたパラメータが、そのまま発注ページに組み込まれたような形になっているようです。つまり、改訂前での注文確認画面に入力機能そのものを付け加えて、確認はJavaScriptでやってしまうというような感じなのだと思います。 送信する内容については、input要素にはname属性とid属性がそれぞれ同じ値で指定されていて、select要素にもid属性は記述されているので、多分その値をname属性値の代わりとしてpostしてやれば発注できるのではないかと思うのですが、もしかすると送信前にjavascriptで値が改竄されてからサーバーに送られる仕組みになっているのかもしれないので、今はちょっと手が出せません(自分のPCからPOSTしようとしている内容だけを取り出せるようなパケットモニタリングソフトって無いのかな?)。 まあ、もともとこの証券会社はWeb2.0を目指すと以前から公言しており、PC用の発注サイトにもJavaScriptがふんだんに使われていたので、そのうちこうなるであろうとはある程度予想していました。 で、それならば携帯用のサイトを利用しようと考えたのですが、こちらは注文するときに銘柄検索、入力、確認という3段階を経なければなりません。まあ機械がやるのと人間が手で入力するのは全然違うわけですが。あと、携帯サイトとPC用サイトで比較してもPOSTのパラメータはかなり違うみたいなので、あまり参考にはなりませんでした。 ∧_∧ _,,..,,,,_ (・ω・` )___./ ,' 3 `ヽーっ O┬O ) / ヽ ⊃ ⌒_つ ◎┴し'-◎ ≡ `'ー---‐'''''">>>>
今週入出金=-181,128 週末資産=1,008,306
前週比=-12,624 取引全然やっていないんだけど、以前使ってた証券会社の税金分とか色々を加味してマイナス。出金とか入金とかでお金のやり取りが結構あったので、自分自身が混乱しないようにメモ。
| |
|
7月21日(金) | トラックバック(0) | コメント(0) | 日記 | 管理
|