カテゴリ未分類 0
■■■■■■↓以下は凍結カテゴリー↓■■■■■■ 0
全87件 (87件中 1-50件目)
今日は大発会ですが、KATSの運用は昨年末で一時運用停止したので、今日からは新ロジックの開発に向けて色々と作業するつもりです。売買ロジックより先に、信用取引用の発注の仕組みを作ろうと、調査をする事にしました。現在のKATSは現物売買しか出来ません。KATSどころは私は手動でも信用取引を全くした事がなく、勉強も全くしていません。なので手探り状態で調査です。SBI証券のバックアップサイトにログインし、メニューからまず見たのが「信用建余力」。現物の「購買余力」とは別の画面で余力表示するんですね(^^;こんな初歩の初歩の事も全く分かっていません。とりあえずクリックし、その画面を出すURLをメモ。そして、Webスクレイピングで信用建余力を取るプログラムを書けるように、画面のHTMLソースをコピーしておきます。次に、実際に信用買い、売りをしてみて、その発注URLやHTMLソースを取得する事と信用建玉一覧にどう表示されるのか、また返済注文はどうなるのか、など全く未知の手続きを体験しようと思いました。・・・でも、自分が本当に信用取引の事を知らないのを痛感しました。まず空売りしようとしてある銘柄の「信用新規売」を試してみようと思いました。すると「規制により制度信用新規売は発注できません」と表示。そう言えば「貸借」銘柄でないと空売り出来ないと聞いた事があります。信用取引する時には貸借銘柄のみを相手にするようにフィルタリングする必要があります。という事でまず信用買いしてみる事に。すると今度は違うメッセージが。「最低委託保証金を割り込んでおります」何かお金が足りないのか・・・と思ってネットで調べました。約10年間も株をしてきて「今更かい!!」と思われる方が多いと思いますがお許し下さい(笑)。口座に最低30万円が入っていないと信用売買出来ないんですね(^^;という事で、私の場合、20万円を増資しないと信用取引が出来ないという事です。いきなり敷居がガツーンと上がりました。どうしたものやら。。。現時点で増資はあり得ないので、買いからでも勝てるような売買ロジックの検討とシミュレーションに時間を掛けたいと思います。
Jan 4, 2016
コメント(2)
このブログのメインコンテンツでもある株の自動売買プログラム「KATS」によるデイトレですが売買頻度の低さや成績の悪さにより、2/6(金)をもって一時運用停止していました。それから4ヶ月ほど経ちましたが、毎日データの蓄積を行いながら、定期的にシミュレーションしKATSの最適な売買タイミングについて検討してまいりました。正直大幅なロジック変更は行いませんが、パラメータ調整により売買頻度や損益を最適化出来ると確信出来たので、来週からKATSの運用を再開したいと考えています。2/6(金)の日経平均の終値は17,648.5円です。KATSの運用を中断していた4ヶ月で3,000円近く上がったとか、ほんと間が悪いですね(笑)。とは言え、KATSは日経平均が上がれば利益を出す仕組みではなく個別銘柄をデイトレで仕掛けるプログラムなのであまり関係ありません。今後の日記では、タイトルだけ見て株関連と分かるようにタイトルに【KATS】を付けます。「開いてみたら関心のない株の日記だった」という事がないための配慮です(笑)。
Jun 6, 2015
コメント(2)
株の自動売買システム「KATS」の運用を2/6(金)で一時中断し、まだ半月が過ぎただけですが現在の状況についてここに記します。KATSの改善ポイントしては、まずは売買機会の増加を狙うべく、監視銘柄を増やす事。監視銘柄決定のためのフィルタリング条件を見直しています。そしてもちろん大事なのは売買ロジック。現在はこれと言った売買ロジックはまだ試せてないですが、売買ロジックを考えたらシミュレーション出来るように、毎日リアルタイムデータの取得を行っています。シミュレーションの精度を上げたいので、現在のKATSが売買条件に必要なパラメータは全て取得するようにしています。ちなみに、もし2/9(月)以降も中盤前の売買ロジック&パラメータのまま運用を続けていたとしたら、142,185円だった資金は142,770円になっている予定です。+585円です。でも、こんなのを望んでいるんじゃありません。新しい売買ロジックの試行までは出来ていませんが、現在の売買ロジックのまま、売買条件となるパラメータを変更したらどうなるかというのを何通りもシミュレーションしてみると、ある条件では資金が156,370円にまで増えました。+14,185円です。これは大成功のパラメータ修正ですが、たかが2週間程度のデータで「これでOK」なんてとてもじゃないけど言えませんし、パラメータ調整だけでなく売買ロジック変更も含めてこれから数か月「最も利益を上げそうなプログラム」を考え出したいと思います。
Feb 23, 2015
コメント(0)
今週でKATSの運用を一時中断し、ロジック見直しを図ります。まずはプログラム・ソースを修正しビルドし直さないと切り替え出来なかったSBI証券の「預り区分」を、GUIから変更出来るようにしました。売買限度額を超えるまではNISA預りで発注し、限度額を超えたら特定預りで売買するようにします。限度額までは手数料ゼロで売買出来ます。NISA口座の売買限度額は昨年同様、年間100万円です。来年以降引上げてくれれば有難いですが。KATSの新ロジックでは売買頻度も増加も当然視野に入れているので、100万円なんてあっと言う間に超えてしまうでしょう(^^;でも、1日の約定金額に対する現物株の手数料について証券会社を比較すると、現在使っているSBI証券は結構安いです。1日の約定金額が20万円までならトップです。但し売買頻度が上がり30万円、40万円、と約定金額が増えれば手数料がもう少し安い証券会社もありますので、そこは追々考えていきたいと思います。発注処理をWebスクレイピングで実装している事から、可能な限り証券会社の乗り換えはしたくないです。開発負荷や、実運用でのデバッグなどのオーバーヘッドが掛かるので。そもそもNISA口座はコロコロと変更出来ませんし。売買ロジックの検討も始めたいところですが、まず第一に行うのは、監視銘柄抽出です。前日の晩に行っている「明日の監視銘柄」抽出処理の条件見直しです。ソースを見直すと、このロジックでフィルタリングを掛け過ぎでした。。。本来は仕掛けや手仕舞いのロジックをシミュレーションでしっかり検証して「勝てる」ロジックを見つけ出さないといけないのに、監視する銘柄をふるいに掛け過ぎているせいで、売買頻度が非常に減っているのが実状でした。抽出対象は現物株全銘柄です。そこから、当然自分の資金で購入できない銘柄は外します。あと、株価が安い銘柄は1ティックの重みが大き過ぎるので自動売買向きではないという事で除外。あと出来高が少ない銘柄も板飛びしたり売りたい時に売れない危険性があるので除外です。ここまでは最低ラインだと思っているのですが、それ以外にやたらと「○○の銘柄は除外」と条件を入れすぎ、結局監視する銘柄が多くて10~20銘柄、少ない時には数銘柄、下手したら「明日の監視銘柄なし」になった事も。これじゃあ売買ロジック云々以前の問題です。勝てないのを「売買対象にしてはならない銘柄を相手にしてるから」とフィルタリングのせいにし色々条件を付与した事で、結局売買機会を極端に減らす事になってしまいました。この条件を見直し、かなりフィルタリングを緩くしました。すると現在のKATSだと来週の月曜日の監視銘柄が8銘柄だったのが、修正後の監視銘柄は27銘柄。これだけでも売買可能性がすごく高まりそうです。もちろん闇雲に売買数を増やしても損切を繰り返すだけになれば意味がありません。なので、仕掛けと手仕舞いのロジックをしっかり作り込み、売買機会を増やして買って行きたいと考えています。仕掛けより手仕舞いの方が遥かに重要で、それと同時に「何株買うか」というポジションサイズが非常に大事だという事は、以前の日記にも書いていましたが、改めてそう思います。新ロジックも、なるべく多く仕掛け、それを手仕舞うロジックをどう考えるかについて熟考したいです。その裏付けのためにはシミュレーションが大事ですが、KATSのシミュレーションのために「SimKATS」というソリューションを作っています。来週から毎日SimKATSを起動し、シミュレーション用の値動きデータを蓄積する作業も開始します。今までKATSの売買ロジック見直しについてかなり後ろ向きで、惰性で運用していました。でも、先日からコメント下さったうんこまんさんの言葉で、モチベーション再燃です。俄然やる気が出て来ました。勝てるロジックを考え直し、満を持して再開したいと思います。
Feb 7, 2015
コメント(5)
売買なし本日の損益:0円【保有銘柄】なし【総合損益】時価評価額 162,397円(-537,603円)/700,000円今日もKATSを起動しましたが売買はありませんでした。
Feb 28, 2014
コメント(0)
昨日日記を書いた後、KATSがおかしな動作をした原因を調査していました。PCのスペックがボトルネックになり処理が滞っていたであろう状態は今すぐには根本解決出来ないので、まずは楽天MarketSpeedからの情報配信をリアルタイムではなく1秒間隔で受け取るようにし、負荷を軽減しました。そして今日の監視銘柄の抽出条件を少し厳しくし、株価や売買代金の敷居を上げて監視銘柄数を75銘柄から56銘柄に少し絞りました。また、約定していない買い注文が3つも残っていました。KATSは買い注文を出して一定時間(確か20秒とか30秒)経っても約定しない場合はその注文を取り消す仕様なのですが、買い注文が残っていたというのは異常な状態です。手動でその買い注文を取り消しました。マシンスペック以外に問題となっている点が1点見つかりました。買い注文が約定して保有銘柄に追加されると、KATSは売り注文を出すためにその銘柄の株価を見守ります。買い注文の約定一覧を取得して、買い値を初期値として判断していくのですが、その購入株価の取得に失敗し、1円でも株価が下がれば即売ってしまうという間違ったシグナルが出てしまう現象が起きてしまっていました。中盤以降、購入後すぐに損切りするような小さな損切りが頻発しているのはそのせいです。理由を調べると、約定注文一覧の取得時に数が多すぎて、次ページまたがりしていたためでした。これまで資金が少なかったのと、(SBI証券を使うようになってから)ここまで売買数が多くなる事がなかったので、サイトの画面構成を把握し切れてませんでした。これはまさにWebスクレイピングにより自動売買している事の弊害だと言えます。クリック証券のAPIで取得していた頃には、約定注文がいくつあろうが一覧でデータを返して貰えましたから。Webページから数字を引っこ抜くのとは全然違います。。。次ページ処理を組み込んで約定一覧を完璧に取得するようなプログラム変更は時間が掛かりますので、購入株価の取得に失敗した時にはその瞬間に該当銘柄の現在の株価を取得し、それを購入株価に代替するようにプログラムを修正しました。さらに、持ち越した2銘柄の売り判断のための情報も上手く取得出来ていないままだったのでそのデータを修正し、2:00過ぎに作業完了。ひとまず対応完了という事で就寝しました。持ち越し銘柄の情報入力にミスがあり、KATSが売ってくれない事に今朝気付いたのですがそれは本日の結果に書きます。
May 24, 2013
コメント(0)
昨日から今日のログ中に、KATSが上手く動作していないと思われるものがありました。既に手仕舞いしているはずの銘柄を売っていなかったり。自宅で動作確認すると、自動売却処理を起動した途端、CPU使用率が100%に(汗)。最初意味が分からず、KATSの再起動に始まり、MarketSpeed、そしてパソコンの再起動まで行いましたが改善出来ず。SBI証券バックアップサイトに対する各種発注/情報取得処理の動作確認画面で各処理の確認をしていると、どうやら「当日約定一覧」の取得を行うと処理が返って来ない様子。。。デバッグすると、問題の行は正規表現によりHTMLソースから非常な情報を抜き出すWebスクレイピング処理で無限ループしていました。「今までちゃんと動いていたのに、何故今更。。。もしかしてバックアップサイトのデザインが変わった!?」などと焦ったのですが、テストをして分かりました。今回、購入した銘柄の名称に「225 投信」というのがありました。約定メールなどでは「日経225連動型上場投資信託」と書いてあるのですが、バックアップサイトでは略称で表示されています。で、その名称に全角スペースが含まれているのが私の想定外で、規定標準式にマッチしなくなっていたのです(´д`;データによりプログラムが無限ループするなんて悔しすぎますが、仕方ありません。式の書き方が堅牢で無かったと言えばそれまでですが、改めてWebスクリプティングという泥臭い手法でデータを取得している現実を思い知らされました。。。プログラムは修正しました。明日は大丈夫です。
Mar 16, 2011
コメント(0)
今年から制限値幅と呼び値に変更があった事を知ったのですが、KATSの運用再開はまだ先の話だと思って放置していました。相変わらず運用再開の目処は立っていませんが、いざ再開する時に対応出来ていなかったら面倒なので今回修正しました。実際運用再開する時にはMarketSpeedのバージョンも上がった事ですしまともに動作するか確認しないといけないとは思いますが、ひとまず対応完了です。それより、先立つものがいつ投入出来るかが問題です。早くKATSを再開したいです。
Jan 26, 2010
コメント(0)
この土日は、ずっと放置してたKATSの修正をしてました。土曜日は昼間と夜中。そして日曜日の晩。計4~5時間でしょうか。久しぶりに時間を掛けてKATSのソースと向き合いました。まずは先日9割がた完成していたSBI証券バックアップサイト用の発注プログラムにバグがあったので修正しました。そして、KATS本体の修正です。今までクリック証券WebサービスAPIを呼び出していた部分を全てSBI証券用に置き換える作業です。その時、必要なのに取得していなかった項目も見つかって新たに修正が入りました。この際なので、動いてはいるのですが非常に稚拙なコードになっている「正規表現」部分について見直しました。私はまだまだ正規表現の書き方がなってないので、ちょっと新しい表現を知ると今まで書いていたものが非常に恥ずかしく思えてきます。多分今書いているものももう少しスキルが上がったら恥ずかしいコードになるでしょう。置換作業は大体終わったのですが、まだ解決していない問題2つについて保留中です。(1)保有銘柄の株数のうち、既に売り注文を出している株数が何株か(2)未約定注文の注文時刻この2点をどう解決するか決めて実装しないと、KATSは本番運用出来ません。
Apr 19, 2009
コメント(0)
岡三オンライン証券が4/17(金)から「岡三RSS」なるサービスを提供開始するという事をWATTさんから聞きました。詳細はまだ分かりませんが、楽天RSSのようにExcelのアドインとして機能し、関数によってリアルタイム情報を取得出来ます。楽天RSSと大きく違うのは、当日の注文・約定情報や保有銘柄の取得。そして何と発注までもが可能になるという事です。楽天RSSを使って自動売買システムを開発していた人は発注の仕組みを別途考えないといけなかったのが、同じ環境下で全て開発出来るので画期的と言えます。詳細が分かるまで簡単に乗り換えは出来ませんが、今後の情報をチェックする価値は充分にありますね。あと1ヶ月ぐらい早く公開してくれてたらSBI証券バックアップサイトの操作を検証せずに済んだかも知れないのでちょっと悔しいです。最近バタバタと言うか踏んだり蹴ったりと言うか。。。ひとまずKATS本体にSBI証券の発注ロジックを組み込むのは保留します。岡三RSSが使えると判断したら乗り換える可能性大ですね。Webスクレイピングより、インターフェースが用意されている方が安心なので。約定代金10万円以下の手数料が無料というのもSBI証券に比べたら非常に大きなアドバンテージです。
Mar 19, 2009
コメント(8)
今日、評価した全ての昨日を本番用クラスに実装しました。懸念点2つがまだ残ったままですが。(1)保有銘柄の株数のうち、既に売り注文を出している株数が何株か(2)未約定注文の注文時刻どうやって解決するか考えないといけません。そして大きな修正はKATS本体です。今までClickSecProxyというクラスを使っていたのですが、今回開発したSbiSecProxyを使うように全面的に修正する必要があります。クラス名だけの変更ではなく使い方が大きく変わったので大幅修正です。開発は思ったよりは早く進んでますが、完成は今月末ぐらいになるでしょう。
Mar 7, 2009
コメント(8)
今日は何か体調的に疲れているのですがモチベーションは高かったので張り切って開発してました。本番用クラスではなくまだ試していなかった処理の評価です。(1)保有証券一覧 取れたのですが問題が1つあります。 保有株数のうち、既に売却注文中の株数が何株かバックアップサイトにはありません。 正式版Webサイトにはあるのですが。。。 バックアップサイトで把握するとしたら、ダミーで売り注文の準備をし、 「注文可」の株数を取得するしか無いかも知れません。(2)注文照会(当日約定一覧) 基本は未約定一覧の取得と同じなので、あとは正規表現との戦いです。 1銘柄につき無駄に行数が多いので面倒でした。疲れました。。。(3)注文照会(未約定一覧) 昨晩試した時には、まだ取引(売りか買いか)を取得するのを忘れてました。 今日もやってないので明日以降追加します。 「未約定株数の取得」って昨日問題にしてましたが、よく考えたら既に未約定一覧なので 何も考える必要はありませんでした(汗)。 発注時刻が分からない件については未解決です。(4)売り注文 問題なく出来ました!という訳で、あとは多分簡単な注文訂正と、懸念点が2点ほど残っているのをクリアすればあとは本番用のクラスにちゃんとしたコードで書くだけ。もしかしたら思っているより早く実装完了するかも!?・・・最近寝るのが遅くなって来てるので早く寝ないと駄目ですね。
Mar 3, 2009
コメント(0)
今日は、既に評価済みの「買付余力取得」を本番用クラスに作成しました。そして注文取消の評価と本番用クラスへの作成。注文取消もregist_idの採番が必要でした。リクエスト送信が2回必要です。多分注文訂正もそうなるでしょうね。ちなみに注文取消は意外とリクエストパラメータが多いように思いましたが最低限必要なのは、まず準備リクエストではtorihiki_kbnとorder_numだけ。実行リクエストはregist_id、torihiki_kbn、order_numです。それ以外のパラメータは無くても動きます。ここまで順調だったのですが、注文一覧の取得時に取得する項目について調べた時にちょっと問題にぶつかりました。クリック証券の時には受注日時というのがありました。また、注文数量に対して未約定数量が見えました。それがSBI証券バックアップサイトには見当たりません。通常のWebサイトで見ると「詳細情報」をクリックしたら見れました。「バックアップサイトには無いのか。。。」と探したら、一応注文一覧の銘柄コードをクリックした先にありました。一覧取得時に1つ1つの明細に対して次画面のリクエストを飛ばして確認!?これはかなり負荷が掛かる作業だと思いました。通常サイトでも同様です。問題はもう1つ。注文日は分かるのですが時刻が分かりません(汗)。通常サイトでは詳細情報を見れば注文履歴から拾えそうです。ですがバックアップサイトは時刻が無いと思います。KATSでは「買い注文を発注後、一定時間約定しなかったらその注文を取り消す」というロジックがあるのですが、注文日時が拾えなかったら自分で何か保持するしか無いかも知れません。注文日時の件と未約定数量の件。どうしようか悩みます。
Mar 2, 2009
コメント(2)
今日は昼までのんびり寝てました。起きてからも時間は充分あったのですが、パソコンの前でずっと集中する事は出来ず、何やかんやと気を散らしながら少しずつプログラミングを進めました。昨晩は注文一覧の取得が出来た(正しい応答HTMLを確認した)ところで中断していました。HTMLから肝心のデータを取得する部分はまだでした。今日はそこからスタートでした。まず私がまだあんまり分かっていない正規表現の勉強からです。ネットで色々なサイトを調べて入門から学んでいます。過去に仕事で本当にチラッとだけ調べた事はありますが、単純なようで奥が深くなかなか難しいのでちゃんと覚えていませんでした。今勉強し直しても結構悩みます。でも何とかリスト情報(繰り返し情報)を取り出す事が出来て安心しました。これでやりたい事は一通り出来る気がして「あとは応用だけだ」と思ったので、評価ではなく本番用のちゃんとしたユーティリティクラスを作成し始める事にしました。クリック証券WebサービスAPIの時に作ったClickSecというプロジェクトのCLickSecProxyというクラスを参考に、SbiSecプロジェクトを作り、さらにSbiSecProxyを作りました。クリック証券の時はWebサービスの戻り値を忠実に再現するために応答XMLを表すDataSetを戻り値にしていましたが、今回はもっと扱いやすくする事を目標にしました。例えばログインするLogin()メソッドは成功したかどうかを表すBoolean型。買い注文のBuyOrder()メソッドの戻り値は注文番号のString型。空文字だと注文に失敗した事を表します。先日書いた「ご注文を受付致しました」が応答HTMLに含まれるかという判定はやめました。成功してたら注文番号を取得する必要があるので二度手間だと分かりました。注文番号が取得出来なかったら注文出来ていないという方がスマートですよね(^-^;今の所、ログイン、ログオフ、買い注文とそれらに関わるクラスなどの改造は終了しました。購入余力取得と注文一覧はもう評価済みなので早いですし約定一覧も同じでしょう。あとは売り注文、注文訂正、注文取消あたりを実装すればOKです。当然テストには暫く時間を掛けたいですが。そして今までクリック証券のクラスを使用していたKATS本体の大幅修正が待っています。どんなに遅くとも4月中には完成させたいです。
Mar 1, 2009
コメント(6)
今日はWATTさんからも質問があったので実測してみました。ちなみに参考までに計測方法を書いておきます。処理に対応したメソッドの先頭でDim startTime As DateTime = DateTime.Nowと書いておき、処理が終わって一番最後にDim endTime As DateTime = DateTime.NowConsole.WriteLine(endTime.Subtract(startTime).TotalSeconds & "秒")です。終了時刻から開始した時刻を引いて、秒換算して表示しています。まずログインボタンを最初にクリックした時が0.6409216秒そして、ログインの2回目以降と購買余力の取得はほぼ同じぐらいのレスポンスで0.100144秒0.1201728秒0.0801152秒0.0901296秒0.1101584秒0.0600864秒0.0701008秒ぐらいな感じでした。そして2リクエスト必要な、注目の購入処理。0.5808352秒0.4206048秒0.4406336秒0.450648秒0.4406336秒5回ほど走らせましたが、大体0.5秒前後でした。うちのPCはシングルコアでDuron 900MHzというショボいマシンなので、HttpWebRequestとSBI証券のバックアップサイトはなかなか高速という事じゃ無いでしょうか。WebBrowserコントロールでは、ログイン処理のみ計測しました。2.1931536秒0.5307632秒0.200288秒0.2103024秒1回目はやはり遅いです。2回目以降はそれほど深刻なスピードではありません。ですがHttpWebRequestに比べると、やはりパフォーマンス低下はあるようです。・・・今日はパフォーマンスの計測のみで寝かせて頂きますm(_ _)m明日は真面目に開発したいと思います。
Feb 27, 2009
コメント(9)
今日は発注のテストが可能です。早速買い注文のテストを行いました。やはり懸念していた通り、発注画面から送信する「regist_id」はトークンのようです。要はブラウザの戻るボタン操作などにより同一画面から複数回送信を行った時にその歯止めを掛ける処理で、発注画面に遷移する際に採番され、証券会社側に保持すると共に発注画面にhiddenで埋め込まれます。発注画面からリクエスト送信されると、そのリクエストが正しく行われたものかを判断する為に、regist_idを照合します。Webアプリケーションでは一般的な制御です。これを回避するためには、正しいregist_idで送信するしかありません。つまり「発注には2回リクエストが必要」という事です。発注画面に遷移するリクエストを行い、応答HTMLからregist_idを取得。それを発注リクエストに埋め込みます。・・・バッチリ動作しました。ログイン、発注、発注、発注、・・・と連続で試しましたが正しく動作しました。これで買い注文はOKです。買い注文の成功判断は、応答HTMLに「ご注文を受付致しました」が含まれているかどうかにしました。次に注文一覧の取得を試そうと思ったのですが、今日はしんどいのでやめときます(^-^;一応10件を超えると次ページが発生する事だけ確認しました。APIだと「次ページ処理」なんてあり得ないので、残念な制御です。あと、注文一覧の条件によって当日約定一覧と未約定一覧を切り替える事もクリック証券とは違いますね。
Feb 26, 2009
コメント(14)
やっぱりWebスクレイピングは泥臭いですね。。。SBI証券に入金手続きを行いましたので、見た目上は購買余力を与える事が出来ました。発注すると「お買付余力が不足しております」と言われますが。発注は明日以降にやるとして、購買余力の取得はまともに作れますので早速Webスクレイピングを試みました。まあ一応取得出来ました。その後、Webサイトから手動でログインパスワードや取引パスワードなどを設定し直しました。その事を忘れていましたのでプログラムから与えたパスワードが間違っていました。・・・でもテストすると、ログインして購買余力の取得をしたら取れません。「あれ?」と思ったのですが、調べてみるとパスワードが間違っていてログイン出来てなかった事に気付きました。ダサい(汗)。WebサービスAPIだと戻り値のXMLからステータスを見たら成功か失敗か簡単に判定出来たんですよね。それが、わざわざログインが成功したかどうか確認する為にHTMLを解析しないといけないなんて。マジで「泥臭いなぁ」と落胆しました(´д`;ログインだけじゃなく、全てのリクエスト送信に対して「成功した時に、失敗した時と比べて明らかにそれと分かる判断基準」を考える必要があります。さすがに失敗したケースの全てを洗い出して判定するのは馬鹿らしいので、成功したか失敗したかだけ判定するようにします。・・・あぁ面倒臭い(-_-;ちなみにログイン判定については、応答HTMLソースの文字列中に「ログアウト」が含まれていたらログイン成功だとみなすようにしました。無ければ失敗。Webページを操作して発注していた皆さん、本当に大変な事をしてたんですね。HttpWebRequestクラスで実装しています。動作は比較的軽快です。WebBrowserクラスも試してみましたが、このクラスはShowしていないと動作しないというバグがあるようです。画面に見えないような座標にShowするという小細工もありますが、基本はブラウザ画面をFormに埋め込むようにして使う事になるでしょう。しかもレスポンスに対して画面描画が完了したDocumentCompletedイベントをハンドルして後続処理を行う必要があります。なのでやはり動作の遅さを感じます。試しにログイン処理で処理速度を計測したところ、HttpWebRequestだと一瞬なのにWebBrowserは少し遅いです。特に初めてのリクエストは1秒以上掛かる感じです。仮にFormにWebBrowserを埋め込まずコード内でインスタンス化してShowしてみたら実行時にIEが立ち上がりました。IEのプロセスが立ち上がる時間があるので体感速度は死ぬほど遅くなりました。。。パフォーマンスを気にするならHttpWebRequestを使うべきでしょうか。 ※これは私の個人的な感想です
Feb 25, 2009
コメント(12)
今日初めてSBI証券にログインする事が出来ました。はやる気持ちを抑えて、まず初期パスワードから自分なりのパスワードへの変更やその他一連の初期作業を終えて、いざバックアップサイトへ。まだ本サイトをほとんど見ないままにバックアップサイトにログインしてました(笑)。まずクリック証券のようなトリッキーなURL操作は不要で、コンテキストルート以降は全てFORMタグに埋め込まれていますし必要なパラメータもHTMLソースを見れば一式分かります。早速VB.NETでログインの処理を書いてみるとあっさり。続けて買付余力の表示も。難なく。と思いきや、口座に資金が入金されていないのではっきりと分かりません。受渡日ごとの購買余力は(0円ですが)表示されていますがその直近を見れば良いのか。あるいは入金されていれば別の場所に表示されているのか。とにかく入金しないと分からないです。同様にして「保有証券一覧」「注文照会」も確認出来ませんし「約定一覧」は「注文照会」のバリエーションの1つっぽいですが分かりません。これらは追々、資金を入れたり実際注文してから確認したいと思います。実際発注出来ないものの、発注画面からのリクエストを擬似的に行う事は出来ました。「取引/株価照会」で検索するか「登録銘柄」から対象となる銘柄をクリックすれば「取引/株価情報」が表示され、下の方にある「現物買」をクリックする事により「注文入力(現物買)」の画面が表示されます。この画面で発注に必要なリクエストパラメータを全て用意してリクエストを投げる行為をログイン後に直接行う事が出来るかを試したいんです。出来なければ、ログイン後に面倒な画面遷移の手順を踏む必要があるので。取りあえずINPUTパラメータを全て用意して送信してみたら「お買付余力が不足しております」のエラーメッセージが。上手く送信出来てるやん!・・・と思っているのですが、甘いかも知れません。パラメータの1つに「regist_id」というのがあるのですが、もしかしたら正しい画面遷移を経ないとエラーになるように仕組まれているトークンかも知れません。実際入金したらエラーになるとか。また、この画面でのボタン名が「確認」なので、次に「この内容で発注します。宜しいですか?」みたいな画面が出てくるような気がします。そうなったらまた厄介ですね。何にせよ入金しないとこれ以降は先に進まなさそうです(汗)。ちなみにパラメータで扱われる市場「market」について、絶対後々調べないといけないと思い、取りあえず4市場のコードを調べておきました。・東証:TKY・大証:OSK・JASDAQ:OTC・ヘラクレス:NDJとなっているようです。クリック証券や楽天証券とは全く体系が違いますね。今日はここまで。資金を入れるまでは焦らず検証を続けます。
Feb 23, 2009
コメント(14)
あと4営業日でクリック証券のWebサービスAPIは提供を終了します。APIを使っていた自動売買プログラムの開発者は、再来週以降は嫌でも別の発注方法を選択するしかありません。いくつかの代案が存在する中、私はモバイルサイトのスクレイピングを採用すると思います。鴉揚羽さんのブログでも書かれていた通り、約定番号が一意にならない点?や保有銘柄一覧などが5銘柄ずつ次ページ処理になる点などがあるようで単純にはいかないという事は分かっていますが。鴉揚羽さんは一覧などの取得にPC用Webサイトを利用しているらしく、モバイルサイトと併用する事によってデメリットをうまくカバーしているようです。私は今の所、岡三オンライン証券のモバイルサイトを操作するつもりでいます。理由は単純に、手数料がクリック証券より安いからです。ただ、まだ口座開設申し込みが終わったところなので、実際にアカウントが出来てログインしてみないとスクレイピング出来そうかどうか分からないので、判断はもう少し後になりそうです。まあ最近はKATSの運用はしてなかったので、それほど焦らず構えようと思います。シミュレーションにはWebサービスAPIは必要ないので、日々のデータ取得やロジックの検証は引き続き行う事が出来ます。岡三オンライン証券の口座開設を待っている間、何もしないのはもったいないのでそれまでにスクレイピングについて検証してみようという事で、今はクリック証券のモバイルサイトを使って色々試したりしています。私はスクレイピングは初めてで、どうやるのがセオリーなのかも分からないのですが、自分なりに感じたポイントや方法についてちょっと書いてみます。リクエスト送信は基本的にWebサービスAPIを呼び出していた時と同じだと思います。問題は返って来るのがXMLではなくHTMLページそのものなので、その中から自分が必要な情報をどう見つけて取得するのかがポイントです。ではクリック証券モバイルサイトで余力情報を取得するのに私が取った方法を書いてみます。経験者の方は是非「そうじゃない!」「こうすべきだ」等、ご意見頂けたらと思います。まずはモバイルサイトのログイン画面のURLをWebブラウザに入力します。「https://sec-sso.click-sec.com/mk/」です。するとログイン画面が表示されますが、マウスの右クリックで「ソースの表示」とし、ログイン画面のHTMLソースをテキストエディタ(メモ帳など)で開きます。・・・ちなみに、HTMLが全く分からない人はスクレイピングは不可能だと思います。このソースを見ればクリック証券にログインするためのデータが盛り込まれています。HTTPリクエストを送信する時に必要な情報はINPUTタグとして入っています。例えばユーザー名は「j_username」、パスワードは「j_password」です。必要なリクエストパラメータを全て与え、URLを「{ログイン画面のURL}+"sso-redirect"」として送信すればトップページが表示されます。表示されない場合はURLが間違っているかリクエストパラメータが足りないのでしょう。HTTPリクエストの送信が分からない人は、僭越ながら私が連載していた「VB.NETで自動売買」入門の「クリック証券Webサービスで発注する」で紹介したHttpPost()メソッドを参考にして下さい。Webブラウザで実際にログインし、トップページから「株式取引メニュー」をクリックして下さい。すると次のページに「余力確認」があります。このリンクをクリックするのと同様の操作をプログラムにさせる訳ですので、また「ソースの表示」でHTMLソースを覗いてみましょう。すると、リンク(Aタグ)にURLが書いてあります。しかも余力情報の取得をするのにパラメータはありません。じゃあこのURLを送信するだけで簡単に余力情報のページに飛ぶ事が・・・出来るのですが、そんなに甘くはありません(苦笑)。このURLはログイン時に動的に変更されるのです。ログイン後のブラウザのURLには「https://sec-sso.click-sec.com/mk/xxxxxx/dispKabuMenu.do」と表示されていますが、「xxxxxx」(sec~)の部分は毎回変わります。WebサービスAPIの時にもありましたよね。つまり、ログイン後のURLから「dispKabuMenu.do」を取り除いた部分を「baseURL」として保持し、次以降のリクエストではそれを使います。実装方法については私の連載記事を読んで頂ければ分かると思います。なので、余力情報の表示でプログラムが送信するURLは「{baseURL}+"/dispPaUserSheet.do"」です。Webブラウザでリンクをクリックすると余力確認のページが表示されます。今回はページの中で「現物買付余力」を取得する事にします。例の如く、HTMLソースを開いてみます。これまではリクエストパラメータやURLなどエッセンスを目で読み取って活用すれば良かったですが今回は違います。HTMLページにある文字列をプログラムで抽出しないといけません。これは煩雑です(^-^;HTMLソースで現物買付余力の部分はこんな感じになっています。<li>現物買付余力 <div align="right"> 82円 </div></li>・・・ここからどうやって金額を取りましょうか?正直、手掛かりはラベルやHTMLタグしか無いと思います。まずはHTMLソースから「現物買付余力」という文字列の位置を取得します。次にその位置以降で「>」を検索します。DIVタグの開始タグの終了位置です。この次以降が金額の入っている部分ですね。さらに今度は金額の「円」を探しましょう。「円」の位置までが金額です。金額の前には思いっきり空白が入っているので、それを取り除けば取得出来ます。ソースコードはこんな感じになります。Dim infoIndex As Integer = html.IndexOf("現物買付余力")Dim startIndex As Integer = html.IndexOf(">", infoIndex) + 1Dim endIndex As Integer = html.IndexOf("円", startIndex)Dim yoryoku As Integer = CInt(html.Substring(startIndex, endIndex - startIndex).Trim)「html」はHTMLページの文字列を表す変数です。以上のように、Webブラウザ上で操作するのと同様のリクエスト送信をプログラムで行うために調査する作業と、戻って来たHTMLページを目で確認する代わりにプログラムがそれを解釈する作業。大きく2つの作業が必要です。余力の確認は比較的簡単ですが、発注部分についてはもう少し複雑になりそうです。URLやHTMLソースを見る限り間違いなくStrutsというWebアプリケーションフレームワークを使っています。「注文入力(銘柄情報)」をクリックしてHTMLソースを確認すれば分かりますが、「org.apache.struts.taglib.html.TOKEN」というINPUTタグが埋め込まれています。これはトランザクショントークンと呼ばれるもので、正しい画面遷移でオペレーションが行われている事を保証するためのもので、いきなり発注画面の操作を行おうとしても上手くいきません。携帯画面で操作するのと同じ手順で画面遷移させないと受け付けてくれない仕組みになっています。なので、正しい画面遷移の手順を踏み、HTMLページに含まれているトークンを次のリクエストでちゃんと送信してあげないと画面遷移エラーになる恐れがあります。・・・とか言いながらWebブラウザで操作を確かめると、暗証番号入力後に実際発注が行われた後で「戻る」ボタンによりもう一度暗証番号を入力するなど、限られた条件以外ではエラーを返さない事が分かりました(汗)。トークンは埋め込まれているものの、クリック証券サイドでのエラーチェックは最小限になっているかも知れません。以上、私がWebスクレイピングを試してみた結果です。識者から色々アドバイスを頂けたらなぁと期待していますwあと、私に答えられる事であれば答えたいと思っていますので、もしご不明な点があれば遠慮なく質問して頂けたらと思います。
Feb 7, 2009
コメント(31)
クリック証券WebサービスAPIが使えなくなる今、代替手段として良いと思ったのはやはりモバイル用Webサイトをスクレイピングする方法でした。モバイルサイトが優れている点は、過去に何人かの人にアドバイスして頂いた内容も含めてこんな感じ。・サイズが小さい携帯でやり取りする事が考慮されているので画面レイアウトがシンプルで大きな画像も無いので通信量が少なく、レスポンスも速いです。・複雑ではないJavaScriptなどを使っておらずフレームも無し。ポップアップを出したりする事も稀ですし、HTMLソースを見ると何をしようとしているのか大体分かります。デザイン変更の可能性もPC用Webサイトに比べたら少ないでしょう。あと、私が勘違いしていた事がありました。例えばクリック証券のモバイルサイトを携帯で操作する事を考えます。余力情報を参照する時には(1)ブックマークでログイン画面を表示(2)ユーザーID、パスワードを入力しログイン(3)「株式取引メニュー」のリンクをクリック(4)「余力情報」のリンクをクリックという4回の操作を行う必要がありました。でもリンクのURLを直接入力出来るので、実際は画面遷移の手順を踏む必要はありませんでした。(2)ユーザーID、パスワードを入力しログイン(4)「余力情報」のリンクをクリックに対応するリクエスト送信さえ行えば余力情報のページがHTMLで返って来ました。これは私の誤解ですね。勉強になりました。さらに、ログインした時のクッキーを保持していれば、実質1回のリクエストで必要な発注が掛けられるのでは無いかと思いました。買い注文や売り注文で何回のリクエストが必要か等、まだ確認して無いのでこれからですが。動作検証するために、「VB.NETで自動売買」入門の中で使用していたSampleApplicationのHttpPost()メソッドを使用しました。バッチリ動作しました!戻り値のWebResponseに対しDim html As String = ""Using sr As New IO.StreamReader(res.GetResponseStream, Encoding.GetEncoding(932)) html = sr.ReadToEnd()End Usingとすれば、HTMLページの文字列が取得可能です。さて、ここまで実現可能だと分かりました。あとはHTMLページから必要な情報を抜き出し解釈する、いわゆるスクレイピングの部分だけです。続きは明日考える事にします(^-^;
Feb 3, 2009
コメント(4)
マジですか!?今気付いた!!(´д`;クリック証券ログイン後のトップページにある「会員のみなさまへ」という欄に今日付けで【重要】クリック証券Webサービス サービス終了のお知らせというメッセージが(滝汗)。以下が内容です。----------------------------------------------------------------------------当社では、お客さまにご満足いただけるサービスを目指し「Webサービス」を提供してまいりましたが、お客様のご利用状況等を踏まえ、2009年2月14日をもちましてサービスの提供を終了させていただくこととなりました。 これまで当社Webサービスをご愛顧いただきましたお客様には心より感謝いたします。今後もお客様への一層のサービス向上に取り組んでまいりますので、何卒ご理解を賜りますよう、よろしくお願い申し上げます。<サービス終了スケジュール>■2009年2月2日(月)19:00より ・Webサービス開発キットのダウンロードを終了させていただきます。 ・Webサービス利用設定の新規受付を終了させていただきます。■2009年2月14日(土)メンテナンス後より ・すべてのお客様においてWebサービスがご利用いただけなくなります。※クリック証券Webサービスは、当社のオンライントレードシステムの機能の一部を、XML/HTTPベースのプロトコルでアクセスできるように公開したものです。今後とも、クリック証券をご愛顧賜りますようお願い申し上げます。----------------------------------------------------------------------------急すぎる!!!あとあと2週間切ってるし。8営業日しか無いし。もしKATSを本番運用してたら気絶してたかも知れません(苦笑)。シミュレーション中だからまだマシですが、どちらにしても発注系の仕組みを完全にイチから作り直す事になるんでしょうか。辛すぎです。最近プログラムをリファクタリングして息巻いてたのに。。。(T-T)そりゃないっすよ、クリック証券さん。泣いてる自動売買プログラム開発者は沢山いるのでは!?代案の検討と設計~開発。道のりは長そうです。。。辛すぎ。・・・あ。「VB.NETで自動売買」入門の「クリック証券Webサービスで発注する」編は1/12に書き終えたばかりなのにたった1ヶ月で無意味な情報になる事にも今気付きました(死)。アホ~~~~
Feb 2, 2009
コメント(15)
10/24(金)から始めたKATSシミュレーション用のデータ取得が、今日で20営業日目となりました。10/27(月)が前場のみ。10/31(金)は14:00まで。11/11(火)が9:55まで。この3日を除いてまともにデータが取れています。一番データが連続しているのは11/12(水)~今日11/21(金)の8営業日なのでまだ信頼性が高いとは言えない状態ですが、この間の相場の動きは高騰あり暴落あり乱高下ありの貴重な値動きをしてくれました。その中、順調に利益を出してくれる設定が大体固まってきました。まだ日は浅いですが、大きな下げもあった中、8営業日で10万円の資金を104,900円に増やしています。たかが5%足らずと言ってしまえばそれまでですが、私は今の相場でちゃんと利益を出すこのロジックを信頼しています。引き続きシミュレーションを続け、今のロジックにもっと自信が持てたらと思います。あとは資金を投入し、本当に売買して資金を増やせたら嬉しいですね。
Nov 21, 2008
コメント(0)
今日は1日、徹底的にKATSのシミュレーションを行いました。取得出来ているデータはたった6日分ですが、購入判断に用いるロジックのパラーメタを数段階。何株購入するかを判断するパラメータを2種類。そして売却判断用のロジック(トレーリングストップ)に用いるパラメータを数段階。そしてその計算を一定額にするのか一定率にするかという計算方法を2種類。それら全ての組み合わせを色々変え、数100通りのロジックについて何度もシミュレーションを繰り返しました。疲れました。。。結果により、とんでもなく資金が減るものは今後も期待出来ないので排除していってますので、かなり候補を絞る事が出来ました。10数~数10通りの候補を毎日検証しながら候補を減らし、最終的に数種類のパラメータで暫くシミュレーションを重ねたのち、期待値が一番大きなロジックを本番に採用して実運用を再開出来ればと思っています。ちなみに今の候補ロジックは大体、6日間で100,000円の資金を大体105,000円ぐらいに増やしてくれています。最高では111,624円というロジックもありますが、ややオーバーフィッティング気味なパラメータかも知れません。
Nov 3, 2008
コメント(0)
今朝楽天RSSデータ蓄積のプログラムを起動して出社しましたが、帰宅するとPCがシャットダウンされていませんでした。慌てて画面を見ると、楽天RSSの「ネットワークが切断されました」みたいなダイアログが。金曜日は大丈夫だったのですが、今日は昼休みに一旦楽天RSSが停止したんでしょうか。KATSのように楽天RSSの再起動を組み込んでいませんでしたのでそこでプログラムは中断し、前場のデータしか取得する事が出来ませんでした。KATSから楽天RSSの再起動ロジックを再利用します。ちくしょ~~あと「KATSを売る話」ですが、帰宅途中に先方に電話をしてみました。すると「実は話が止まっていまして、来月初めにも会議をする予定なのですが。」という事でした。要は話が前に進んでおらず、まだ依頼出来る状態ではないと。一応無くなった訳ではないのですが「状況が分からないので、まだ延びるとかいつ頃になるとか定期的に連絡をもらえませんか?」と頼んでおきました。「こちらから頼んでおいてすみません。ちゃんと連絡を入れるようにします」と言われました。こちらから連絡を取らないと状況が分からないのはちょっとおかしな話だと思うので。・・・まあ、金を取られた訳じゃないし無料でプログラムを渡してしまった訳でもないので私は物理的に何も損はしていません。精神的に残念なだけで。なので「無くて元々」の気持ちで待っていようと思います。
Oct 27, 2008
コメント(12)
KATSのシミュレーション用ロジックの開発がそこそこ進みました。取得しているデータが1日分なので動作確認レベルのテストしか出来ませんが、売買シミュレーションして損益計算出来るようになってきました。画面から数種類のパラメータを設定して、どんな設定だとどれぐらいの損益になるかをシミュレーション出来るので、今まで何となくで決めていた設定値がもっと自信を持って設定出来るようになると思います。設定値のマトリックスを作り、何度もシミュレーションしてベストな設定の組み合わせを検証してみたりしました。今は1日分のデータしかないのでそれで最適値を求めても全く意味が無いのは分かっていますが、今後もっと大量なデータでテスト出来るようになれば大きな意味を持ちます。シミュレーション時間ですが、50銘柄×1日分を処理して10~15秒で可能になりました。設定値による売買頻度にも影響を及ぼします。また、詳細なログを取れば数10秒になります。明日もバッチリRSSデータを蓄積したいと思います。2日分あればオーバーナイト部分のテストも可能になります。ちなみに先月話題にした「KATSを売る話」ですが、まだ具体的になっていません。先方会社さんから、開発方針が変更になった事により、仕様など具体的な依頼は今月中旬まで待って欲しいと言われていました。でも既に中旬を過ぎているので、現在の状況だけでも聞かせて欲しいと思って先週メールを送りましたがまだ返信をもらっていません。もしかしたら話がポシャる可能性もありそうですね。。。
Oct 26, 2008
コメント(0)
前日持ち越し銘柄の結果・クリード(8888) 24,450円×1株→21,450円(S安)でさらに持ち越し・パイオニア(6773) 349円×100株→340円売り(9:04)(-900円)・ダヴィンチHD(4314) 6,900円で買いシグナル(9:11) 売買予想 7,030円×3株→7,210円売り(9:22)(+540円)持ち越し銘柄・クリード(8888) 21,450円×1株(-3,000円)概算損益 -3,360円(手数料考慮なし)シミュレーションを始めてからずっとクリードをS安で持ち越してます。普通だったら週末を期限に成行き売りを入れっぱなしにすると思うのでこんな事にはならないと思いますが。。。今日は32銘柄を監視してたのにシグナルが出たのはダヴィンチのみ。これも珍しいです。資金は約78,500円になったという計算です。4営業日でとんでもないドローダウンです。・・・だからという訳ではありませんが、KATSの仮想売買報告は一旦中断します。というのも、実は土曜日からKATSのバックテストシミュレーション用プログラムの開発を始めました。土曜日は卓球の試合前だと言うのに1:30頃まで作ってました。大体の大枠までは作りました。残り数日で多分ほぼ完成するでしょう。そしてそのシミュレーションを行うためのバックデータ蓄積用のプログラムも開発しないといけませんし、開発出来たらそれ以降は毎日データ蓄積のためにCPUを使います。なのでリアルタイムの仮想売買シミュレーションをする余裕がありません。たった4日で投げ出してしまった申し訳ないですが、KATSのロジック精度向上のためにご理解下さい。m(_ _)m新しいPCを購入する事も検討しましたが、もちろん嫁に「アホか」と言われました(苦笑)。今うちにはそんな余裕はありません。今のパソコンにCPUを増設するorデュアルコアを載せ替える等が可能かどうか、この後調べてみたいと思います。
Oct 20, 2008
コメント(0)
前日持ち越し銘柄の結果・クリード(8888) 27,450円×1株→24,450円(S安)でさらに持ち越し・アトリウム(8993) 313円×100株→324円売り(9:20)(+1,100円)・ダヴィンチHD(4314) 8,090円で買いシグナル(9:33) 売買予想 8,150円×3株→7,790円売り(9:36)(-1,080円)・フルキャストホールディングス(4848) 4,800円で買いシグナル(9:33) 売買予想 4,850円×6株→4,730円売り(9:42)(-720円)・アトリウム(8993) 305円で買いシグナル(9:54) 売買予想 315円×100株→298円売り(10:00)(-1,100円)・ダヴィンチHD(4314) 7,400円で買いシグナル(10:24) 売買予想 7,500円×3株→7,570円売り(12:39)(+210円)・アルデプロ(8925) 1,726円で買いシグナル(10:00) 売買予想 1,750円×17株→1,670円売り(10:30)(-1,360円)・極東証券(8706) 430円で買いシグナル(10:46) 売買予想 430円×100株→417円売り(13:24)(-1,300円)・ガリバーインターナショナル(7599) 1,351円で買いシグナル(12:43) 売買予想 1,351円×20株→1,311円売り(13:39)(-800円)・パイオニア(6773) 350円で買いシグナル(13:35) 売買予想 352円×100株→349円で持ち越し・東急リバブル(8879) 328円で買いシグナル(13:45) 売買予想 328円×100株→314円売り(14:07)(-1,400円)・インデックス(4835) 10,500円で買いシグナル(14:11) 売買予想 10,500円×2株→10,650円売り(14:52)(+300円)持ち越し銘柄・クリード(8888) 24,450円×1株(-3,000円)・パイオニア(6773) 349円×100株(-300円)概算損益 -9,450円(手数料考慮なし)これまた大負けです。クリードの2連続S安張り付きで売れないというのも痛いですね。約定代金はちょっと辛口に判定しすぎかも知れませんが、どちらにしてもよく負けてます。今日は1万円負けたと考えて、資金は82,000円。同銘柄の2回目の購入が本当にダヴィンチとアトリウムだけなのかはちょっと微妙。あと購入後上がった時の売値については、本当はしきい値を超える度に動的に縮めていって積極的に利益確定する仕組みなのですが、どこまで実際に近づけて結果を書けてるかは難しいところです。どの銘柄をどのタイミングで売買するかで余力が変わり、シグナルが出ている他の銘柄を余力不足で無視するという判断も今は頭の中でやってます。ちゃんとシミュレーションロジックを作らないと、本当にどう売買するか見えませんね。。。3日動かして2日は大敗。3日で判断は出来ませんが、厳しい状況です。
Oct 17, 2008
コメント(0)
前日持ち越し銘柄の結果・クリード(8888) 31,450円×1株→27,450円(S安)でさらに持ち越し・レーサム(8890) 29,380円×1株→26,680円売り(10:24)(-2,700円)・アイネス(9742) 302円で買いシグナル(9:05) 売買予想 301円×100株→290円売り(9:27)(-1,100円)・日本シイエムケイ(6958) 363円で買いシグナル(9:31) 売買予想 363円×100株→346円売り(9:43)(-1,700円)・アトリウム(8993) 300円で買いシグナル(14:45) 売買予想 304円×100株→313円で持ち越し持ち越し銘柄・クリード(8888) 27,450円×1株(-4,000円)・アトリウム(8993) 313円×100株(+900円)概算損益 -8,600円(手数料考慮なし)さすが日経大暴落の日は強烈に食らいました。。。「仮想売買で良かった」って感じです(汗クリードは大引けの比例配分なので売れません。KATSは寄り付かないと注文を出しません。レーサムはS安で寄り付いた時にすぐ成行売りが入ると思いますが2約定目はGUなのでこうなっていたでしょう。それにしても強烈なGDです。2銘柄で資金拘束されているのとあまりシグナルが出なかったのもあり残りの売買は昨日より少なめです。アイネスの売値290円は今日の大底です。買い値が1円でも安ければ引っ掛かっていないので、もしかしたら実際はこんな結果ではなく307円ぐらいでの利益確定かも知れません。それ以外については言い訳は申しません。アトリウムは14:45にシグナルが出て購入し、そのまま持ち越しです。恐いです。今日は大体9,000円負けた事にします。資金は昨日時点で101,000円だったので今日で92,000円。-8,000円になってしまいました。この負けはイレギュラーであって欲しいです。P.S.明日は飲み会なので、明日も報告は遅くなると思います。
Oct 16, 2008
コメント(4)
今日はKATSがバッチリ動作しました!昨日の不具合は、嫁さんに勝手にPCを落とされたのが原因か、それとも監視銘柄が190銘柄と多過ぎて処理出来なかったのか。真相はまだ分かっていませんが、今日は51銘柄の監視で正常に動作しました。シミュレーションは、資金が10万円あると仮定して監視銘柄を抽出し、売買シミュレーションします。ログに残っているのは買いシグナルの情報なので、それを元に日中足を見て売値を予想するという地道な作業で書きます(苦笑)。・テレウェイヴ(2759) 12,110円で買いシグナル(9:17) 売買予想 12,400円×2株→13,520円売り(9:42)(+2,240円)・フルキャストホールディングス(4848) 5,870円で買いシグナル(9:18) 売買予想 5,700円×5株→5,830円売り(9:22)(+650円)・クリード(8888) 32,000円で買いシグナル(9:27) 売買予想 31,450円×1株→31,450円(S安)で持ち越し・アセット・マネージャーズHD(2337) 7,500円で買いシグナル(9:54) 売買予想 7,630円×4株→7,300円売り(12:32)(-1,320円)・アイフル(8515) 614円で買いシグナル(9:56) 売買予想 614円×50株→604円売り(10:41)(-500円)・ビックカメラ(3048) 31,100円で買いシグナル(10:41) 売買予想 31,150円×1株→31,400円売り(13:31)(+250円)・アトリウム(8993) 353円で買いシグナル(13:34) 売買予想 353円×100株→346円売り(13:42)(-700円)・レーサム(8890) 28,510円で買いシグナル(14:01) 売買予想 28,510円×1株→29,380円で持ち越し持ち越し銘柄・クリード(8888) 31,450円×1株(0円)・レーサム(8890) 29,380円×1株(+870円)概算損益 +1,500円(手数料考慮なし)8銘柄の売買をして資金の1%以上の利益を上げているのでまあまあです。但し問題はS安で持ち越してしまったクリードですかね。引き続きシミュレーションしないとどうなるか分かりません。一応現在の評価資金は101,000円になり、2銘柄を持ち越したという事で明日引き続きシミュレーションしたいと思います。・・・結果をただ載せるだけじゃないので、非常に疲れます(´д`;追記デイトレシステムのバックテストって、リアルタイムで動かさないと結果が出せなくないですか?日足での寄りや引けでの売買システムなら数ヶ月や数年のデータでのバックテストも数10分とか数時間とかでテスト可能だと思いますが、デイトレシステムってリアルにその時間必要な気がします。1日分のバックテストをするのに4.5時間掛かると思ってます。どんなに頑張っても1日で5日分(1週間分)。1か月分のテストをするのに1週間。1年分のテストをするのに12週間!?かなり厳しいですね。。。デイトレの自動売買システムを開発してバックテストをしている方がいらっしゃればその方法をご教示下さい。宜しくお願いします。
Oct 15, 2008
コメント(4)
期待して下さっていた皆さんすみません。m(_ _)m残っていたログは開始ログだけでした。8:23にKATSを開始させました。190銘柄の監視開始はログに残っていますが、買いシグナルに関するログが残っていません。9:01時点もログを残しているのでその時点まではまともに動いていたと思います。いくらKATSが反応しない値動きだったとしても、190銘柄もあれば1つぐらいはシグナルが出るかなぁと思ったのですが、出ないのが正しいのか、190銘柄も扱ったからボトルネックになったのかは不明です。・・・と言うのも、数ヶ月ぶりにPCを起動して出勤した私。15:20を過ぎたらKATSが自動シャットダウンしますが、嫁さん曰く「15:00ぐらいに見たら画面が真っ暗で電源切れてるように見えたから電源タップ切ったで」と(´д`;画面は省電力モードで真っ暗になっていたと思いますが、多分PCは必死に動いていたと思います。15:00頃、勘違いによって電源を落とされたんだと思います。。。もし処理が糞詰まっても、メインスレッドの自動シャットダウンだけはいつも生きててちゃんと終了ログを残してPCの電源を切るのに今日はそれも残っていなかったので。下手したら「15:00というのは嘘で、もしかしたら俺が家を出てしばらく経った時に電源落としたんちゃうんか!?」という疑いさえ持ってしまいます(-_-;まあ過ぎた事は仕方ないので、明日はもう少し監視銘柄を減らして、さらに嫁さんには15:30を過ぎるまではPCを触らないように念押しして、明日のログを確認しようと思います。明日にご期待下さい(汗)。すんませんっ!!
Oct 14, 2008
コメント(0)
私の株の売買結果を1週間遅れで報告する話ですが、何だか面倒臭くなってきたのでやめます。ブログを見て頂いている方も全く楽しくないですし。資金は5,000円を切りましたしね(^-^;今週からブログにもう少しマシな内容を載せようと考えました。実際は資金が無いのでKATSの売買結果を報告したいのですが、それが出来ません。なので、架空ではありますが「KATSがこの荒れた相場で、もし資金を10万円投入して運用を再開したら、どんな売買をするか」を日記に書こうと思います。「資金さえあればKATSは勝てるとか言ってるけど、本当のところはどうなんだ!?」という疑問にお応えする事が出来るかも知れません。但し、細かい売買(シミュレーション)結果は載せる事が出来ません。例えばKATSが買いシグナルを出したとしても何円で約定するか分かりませんし、約定するかどうかすら分かりません。なので実際運用したらブレが出るかも知れませんので。KATSの自動売却ロジックはクリック証券に保有銘柄が発生しないと監視しない仕組みですし。なので日記には、KATSが出した買いシグナルを載せる事にします。どの銘柄をいつ何円で何株買おうとしたかを。もし可能なら、その銘柄をどんなタイミングで売る事になっていたかを推測して載せたいと思います。この企画もいつまでやるかは分かりませんが、モチベーションが続く限り頑張ろうと思います。初日は10/14(火)です。ちなみに資金10万円で監視銘柄の抽出を行うと、監視対象銘柄は190銘柄でした。KATSで過去監視した事がある銘柄は恐らく30銘柄ぐらいだと思います。190銘柄もの数を扱ってKATSのパフォーマンスが追いつくかも楽しみなところです。
Oct 12, 2008
コメント(8)
先週末に売却額について電話で話をし「追って連絡します」と言われていたKATS。月曜日に「この休みにご提供出来る形に準備しました。ご連絡お待ちしてます」というメールを送りました。ですがそのメールに返信が無いし、火曜日も音沙汰無し。そして今日水曜日にも特に連絡が無かったので、やはり不安になりました。昨日時点で「もしかしてこの話、現実じゃないんじゃないか」度は、私の中では30~40%でした。つまり、現実だと思っている気持ちは6~7割だという事です。仕事を終え、帰宅中に電話をしてみました(笑)。最初に私のブログにメッセージをくれ、メールや電話でやり取りをしていた人です。「プログラムの件ですが、今どんな感じでしょうか?」と。すると「先週末に金額について話した人間が居ますよね?彼が現在決済手続きを進めているんですが、それがバタバタしているようです。すぐに掛け直しさせますので一旦電話を切ります。宜しくお願いします。」という事でした。掛け直してくれるというのは、先週末に金額の提示をする時に電話をくれた人です。私に接触している人は2名です。暫くするとその人から電話が掛かって来ました。「もう購入するために手続きをしているのですが少し時間が掛かっています。恐らく数日中には準備出来て、ご連絡差し上げる事が出来ます。お支払いの方もすぐに出来ますので。」と言われました。何か私が早くお金を欲しくて催促の電話をしたような感じになってると嫌なので「あの・・・別に急かしている訳ではなくて、連絡が無かったのでどういう状況だったか知りたかっただけですので(苦笑)。ところで引渡しの時に説明とかした方が良いんですよね?」と逆に質問しました。夜遅くまで仕事をしている会社だそうで、私が仕事を終えてそのままプログラムを届けに行っても大丈夫な感じです。ちなみに先方の会社は、私の会社から電車で移動出来る場所にあります。その時に手渡しでプログラムを渡すと同時に簡単なプログラムの説明や操作方法の説明などをして、代金を頂く(振込みじゃなくて手渡し?)という流れになるようです。「あとは決済準備が整った時に具体的な話をさせて頂きますので。」と言われたので「了解しました。ではご連絡お待ちしてます。」と言い、電話を切りました。私の一番の関心事は「この話、本当か!?」ですが、今回のやり取りで、先ほど書いた「現実だと思っている気持ち」は8~9割に変わりました。まだ取引が終了するまでは完全には安心しませんが、ほぼ本当の話だと思いました(笑)。では、先方に言われた通り連絡を待ちたいと思います。KATS運用再開の日もそう遠くないです。
Sep 10, 2008
コメント(0)
今日は昨晩のライブの疲れやその他心身の疲れから、もう何もしたくないような状態でした。夕方からはプレステで懐かしいゲームを引きずり出して無意味に頑張ったりテレビを見たりして過ごしましたが、朝から昼過ぎぐらいまでの3~4時間はKATSに費やしてました。一応KATSを買って下さるという話があるので、今週中のいつ言われても渡せるようにしておきたいと思ったので。まずはKATSのソリューションをコピー。そしてメインプロジェクト名の「KATS」を別の名前に変更。あとは名前空間やクラス名、リソース名、ソース内のコメント、DB名、Formのキャプション、アイコンなど「KATS」という名前が入っている部分は変えました。また私のクリック証券ユーザーIDやパスワード。またメールアドレスが入っている設定ファイルもダミーのデータに変更。あとは評価の為に作っていた仮のFormやボタンも消して、設計中には作ろうと思っていた実装されていないメニューバーの削除など。それと別の環境に配置した時に設定しないといけない項目などをreadme.txtにまとめました。そして、変更されていたのは分かっていたのですが私の資金では関係ないだろうと思ってほったらかしてた呼び値の取得メソッドも修正しておきました。これで準備万端です。あとは先方会社からの連絡を待つのみ。本当に連絡あるんでしょうかね(笑・・・今、株やFXなどの自動売買プログラムを本業ではなく趣味で開発されている方。万が一そのプログラムを「欲しい」と言って下さる会社や人のために、綺麗に組んでおいた方が良いかも知れませんよ?w例えば誰もが理解しやすいソースになっているかどうか。適切にコメント書いているかどうか。変更に強い設計になっているかどうか。再利用しやすい設計になっているか。環境依存やユーザー依存の内容は設定ファイルにまとめるか設定画面で設定出来るようになっているか(オンコーディングしていないか)。そんな事を考えながら作ると、後から自分が機能拡張や修正をする時にも楽になりますし、決して損はしないと思います。まあ、私は他人にエラそうに言えるほど綺麗にコーディング出来ていませんが(汗)。
Sep 7, 2008
コメント(0)
昨日日記に書いた件、もう少しだけ現実味を帯びてきました。今日、先方の会社の人から電話をもらいました。見積り金額の事ですが、相手からは「出来るだけ安く買いたいというのが本音です」と。そりゃそうですね。で、どちらから希望額を言うかによってお互い総定額から大きく外れていたら色々あるので言い出しにくい状態です。その人から「もし想定されている額と大きく違っていたらおっしゃって下さい」とひとこと付け加えた上で、額を提示されました。その額は、私が想定していたものに結構近いものでした。私は自分の月々の外売り単価は大体想像がつきますが、私が業務でKATSを開発したとしてどれぐらいの期間掛かるか。もちろんその額をいただけるなんて思っていません。今回は依頼者の要求通りの仕様でプログラムを作っている訳じゃありませんし、更には何の品質保証もありません。基本的にはソースコードを渡しっぱなしで責任放棄なのでそれらを考えると、プログラムの価値は相当低くなると思われます。なので私が外売りで業務アプリを開発する水準の10分の1ぐらいを想定していました。ある程度の想定額の範囲を考えていて、それよりかなり高い額だと即OK。逆にその範囲より大きく下回るようでしたらお断りしようと思っていました。相手から提示された額に対し、正直に「私が想定していた額に近いです。私は○~×円ぐらいが妥当だと考えていたので」と答えました。私が想定していた額の方が幾分高かったですが。すると先方は「大きく外れていなくて良かったです。そういう事でしたら、そちらが想定されている額の最低ラインにはなりますが、○円で売って頂くという事で結構です」と言って頂けました。誠意を見せてもらったので私も嬉しくなり「それで構いません」と言いました。ソフトやお金の具体的な引渡し方法については追って連絡して下さるとの事でした。まだ現実なのか信じられません(^-^;私が自分のために完全に趣味で作ったプログラムが他の会社からオファーを受けて売るなんて。しかもオープンソースでの売り切りで品質保証責任なし。だから価格も格安になる訳ですが、私にとっては充分満足な額です。実際に代金を頂いた時に「本当だったんだ」と思う事にします。もし本当にKATSが売却出来た時には、その資金の大半は家計に回すと思いますが一部を株のために資金投入します。そして、その資金での売買は全てKATSに任せます!今までKATSで勝てなかった原因を「資金が少ないので手数料率が高いから」という理由にして言い訳していましたが、それなりの資金があればKATSが通用するという事を証明する為にちゃんと運用します。現実だったら良いのに。もし現実になったら、KATSでの運用を期待しているブログファンの皆様。楽しみにしていて下さい!!(居るのかな。。。苦笑)
Sep 5, 2008
コメント(10)
先日、ふと気付いたらブログにメッセージが届いていました。内容は「株自動売買の開発依頼を受けてもらえますでしょうか?」という内容でした。私は過去に、KATSでも使用している部品のソースを単体で無償提供した事はありました。楽天RSSからリアルタイム情報を取得する部分とクリック証券に発注する部分です。提供者を数えるとちょうど10人です。ですが今回は違います。自動売買プログラムの開発依頼です。依頼を下さるのは非常に光栄ですが、私には荷が重すぎます。まず依頼者の要望に叶うプログラムが組めるかどうか。スキルの問題と時間の制約です。私は会社員ですから、大規模開発を副業で出来る余裕なんてありません。もう1つ大きな問題は保証です。バグが出たらどうするのか。不具合があれば早急に対応する義務があるのか。あるいはペナルティなどあるのか。個人でソフトウェアの売買を行った事が無いので非常に不安です。そう言った懸念点を挙げながら、要件と保証、納期と金額によるという事を回答しました。すると、すぐにその方から返信を頂きました。話によると、その人個人ではなく会社として私のプログラムを販売して欲しい、と。しかも要件を出して今から作るのではなく「既存プログラム(KATS)をカスタマイズして売ってくれないか?」という事でした。その会社がOEM製品として販売したいという事でした。それにはちょっとびっくりしました。KATSは第三者に販売する目的などないので自己都合で設定画面など作ってますし、売買ロジックも画面からロジックを決める事など出来ず、自分が作った売買ロジックを選択する事しか出来ません。いくらカスタマイズしても販売なんて・・・と思いました。それらを説明したのですが「電話でお話をさせて下さい」という事だったので、会社帰りに電話してみました。するとKATSの仕組みや仕様を細かく質問されて、説明すると「購入を前向きに検討させて下さい。出来れば画面キャプチャを頂けますか?」と言われました。KATSは設定画面や監視銘柄抽出画面、監視銘柄確認画面、持ち越し銘柄確認画面以外はほぼメニューバーから自動売買を起動するぐらいしか機能が無くてメインはバッチ処理だと説明したのですが、画面キャプチャを送付すると「素晴らしいと思います。是非お願いします」と。帰宅してメールのやり取りをしていると今度は向こうから電話が掛かってきて、KATSに必要なソフトウェアや起動条件、インストール方法、配布方法など細かく質問されました。そして「概算を見積もってもらえますか?」と言われました。・・・私は会社員なので、自分の仕事に対して会社対会社でいくらぐらい動くかはおぼろげに分かっていますが、個人として自分が趣味で作ったソフトをいくらで売れば良いかなんて全く想像もつかないので「正直分かりません。そちらの大体の希望額を聞かせてもらえますか?」と逆に質問しました。そして今日、私のソフトを購入する主旨を改めて詳しく聞きました。それによると、先方の会社にはFXで自動売買ソフトを開発しているチームがいて、今回はその株版を開発したいという事で、参考に株の自動売買プログラムを入手する必要があったそうです。で、素人さんが作った自動売買プログラムを購入し、それを元にしてソフトウェアを開発し、販売したいという意図があるとの事でした。その説明を聞いて、何となく納得しました。いくつか確認しましたが、・KATSにバグなどあっても問わない・大幅修正などあれば、私の時間の許す限り別途費用で変更を依頼する可能性はある・ソフト名は変更して使用する(KATSは名乗らない)・私が別の個人あるいは会社にKATSを売却あるいは一部無償提供しても問わないという条件で、オープンソースでKATSを提供するという話が進んでいます。渡したソースは先方会社に好きに使ってもらって結構ですが、KATSは名乗らないので、元のKATSのソースは私が保持しており、その著作権を放棄する事は無いです。そして一番の関心事は「KATSをいくらで買ってくれるか」という事です。本日見積りを回答してくれるという事だったのですが、連絡は頂いていません。果たしてボツになったのか。それとも買ってくれるとしたらいくらなのか。私は、一応自分の中で「○円以上だったら即OKして売ろう。×円以下だったらお断りしよう」と額を決めました。それに大きく反する額だったらどうしましょう。色々悩ましいです。でも、趣味でプログラムを作ってブログを書いているだけで、こんな話も来るもんですね。ちょっと驚いています。もし実際KATSを売る事になれば報告させて頂きます。
Sep 4, 2008
コメント(0)
土日のどちらかで続きが書けたらと思ってます。昨日まで3日連続で書いてしまったので待ってらっしゃる方が居たら申し訳ないと思って一応報告しました。今後は「今日は書きます」とか「書きません」とかは報告せず気まぐれでやるのでご了承下さい。書かない替わりに・・・という訳でも無いですがひとこと。KATSではNDdeのバージョンはNDde v2.00.0410を使用していました。今回入門編では最新のNDde v2.01.0563を使用しています。パッと見は全然違いが無いように思えましたがメソッドが増えたり、今まであったメソッドも少しだけシグニチャが増えたりと変化してました。あと、新バージョンは「.NET Framework2.0から使用するためには必須」と書かれているっぽい(英語なので微妙)ので、とりあえず意味も分からずKATSで使用しているNDdeのバージョンを上げておきました。私が気付いたNDdeClientの新しいメソッドのうち主なもの2つを紹介しておきます。・TryConnect()サービス名+トピック名がサポートされているかをサーバーに確認します。サービス名の「RSS」は固定なので間違えないとして、もし仕組みとしてトピック名が間違っている可能性がある場合(例えば手入力させる場合)に、このメソッドを呼び出せば正しいかどうか判断出来るという事です。戻り値はint(VBだとInteger)で、0だと成功。間違っていると0以外が返るようです。トピック名の妥当性チェックに使えますね。KATSの場合はトピック名を手入力しないので間違わないという事から使用しませんが。・TryRequest()こちらはTryConnect()同様、アイテム名が間違っているかチェックするメソッドです。アイテム名とは、例えば現在の株価なら「現在値」という項目名の事です。誤入力したまま普通にRequest()を呼び出すと例外が発生するので、もしアイテム名を間違える可能性があるなら有効なメソッドだと思います。ではでは。
Apr 11, 2008
コメント(2)
取引なし【保有銘柄】なし【総合損益】時価評価額 41,722円(-458,278円)/500,000円(うちクリック証券への入金額:111,055円)今日は昨日の値動きがいまいちだったせいで監視銘柄が5銘柄でした。「こりゃ、今日は約定ないかも」と思ったら、やっぱりそうでした。休むも相場だと思ってます。KATSを起動しての約定なしは納得いきます。明日はどうでしょうね。
Apr 8, 2008
コメント(0)
皆さん、対応しましたか?https://www.click-sec.com/corp/campaign/url_change/もう新しいURLじゃないと動作しなくなっています。私はPCサイトと携帯サイトのブックマークは並行期間に切り替えていましたが、この休みに切り替えないといけなかったものも結構あります。(1)Webサービスの開始URLクリック証券のWebサービスを使って発注している人!変更しないと明日から取引出来なくなりますよ!もちろんKATSは今日切り替えました。(2)モバトレ君アプリiアプリですが、旧バージョンと取得元が違うので、自分で削除した後でダウンロードしなおさないといけません。自動バージョンアップはしませんよ!今回は夜間取引にも対応しています。私はまずこの2つを行いましたが、はっちゅう君、はっちゅう君+、その他ツールを使われている方は切り替えが必要です。お早めに!!
Mar 30, 2008
コメント(0)
職場に.NET Frameworkによる株の自動売買プログラムを開発しようとしている後輩がいます。「株はストライクと思った球だけ振れば良い」と教えてくれた後輩です。彼はC++/CLIを使って開発していますが、私が先に開発したというのもあるので「こんな時はどうれば良いか」など質問される事があります。会社帰りに同じ方面の電車に乗るのですが、今日は職場を出るのが同じタイミングだったので自動売買プログラムの話で盛り上がりました。最初に話題になったのは楽天RSSの情報をDDEから取得する話。自分から一定間隔でリクエストを行い情報を取得する方法と、更新通知を開始してイベントハンドラで処理する方法についての違いなどについて話しました。リクエスト方式は自分のプログラム内でタイマーやループなどを仕込んで一定間隔で自分から情報を取得する方法です。組み方によってはマルチスレッドを意識しなくて済むのでコーディングが簡素になるのと理解しやすいソースになるのがメリットだと思います。デメリットは、全く更新していないかも知れない情報も必ず取得してしまうので無駄な負荷が掛かるのと、私が一番気になるネックが「11:00過ぎになると楽天RSSが一旦停止するが、その時リクエストを送るとタイムアウトで例外が投げられる」です。それを回避する為に、皆さん昼休みには自動売買プログラムを止めて再起動したり、結構面倒な運用が付きまといます。これに対しイベント通知型は、更新があるたびにイベントハンドラが呼び出されるので同時並行的に処理が流れるから厳密にマルチスレッド処理を行わないと異常終了したりします。私はかなり苦労させられました。。。当然ロック制御などコーディングの敷居も高くなります。逆に大きなメリットとして「更新通知を開始したままでも昼休みをそのまま通せる」事があります。KATSは昼休みに停止していませんが、昼休みの間はイベント通知が起きないだけで異常終了する事はありません。後輩は「そんな事ってネットで調べてもあんまり書いてないんで参考になりますわ」と喜んでました。他にHashTableやListの話題など色々話したのですが、その後後輩が素朴な疑問として聞いてきた事は「指値で注文しようとする時って、株価によって呼び値があるじゃないですか?あれってどうやって計算してるんですか?」でした。私は元々Accessのテーブルに株価の範囲と呼び値を登録し、必要な時に検索していました。でもよく考えると呼び値ってそうそう変わるものではないので、いちいちDBを検索しているのはあまりにも効率が悪いです。という事で、staticクラス(VBだとSharedクラス)でユーティリティを作り、株価を引数にして呼び出せば呼び値を返してくれるメソッドを作りました。インスタンス化する必要なく使えないと不便ですもんね。ソース内は単にCase文が羅列しているだけの至って低次元なものです。ちなみに制限値幅についても同様の方法で取得しています。そんな感じで色々な話題で盛り上がっていたらすぐに駅に着いてしまいます(苦笑)。彼との自動売買談義はずっと終わらないでしょう。本人曰く「MATS」の開発は、徐々にですが進んでいるようです。いつになるか分かりませんが、MATSが早く完成する事を心から願ってこの日記を書いてます。
Mar 25, 2008
コメント(6)
今回は昨日に引き続き、自動売買をネタに私の思いを綴ってみます。私はネットではなくリアルで知り合いの、ある男性とトレードの話をしています。私より年輩で、会社の人ではありません。仮にTさんと呼びます。Tさんはデイトレーダーで、本業ではないのですがザラバ中にそれなりに時間が取れるので合間を見てトレードをしています。そして最近は戦績も良いらしいです。今まで色々なチャートを試していましたが、今はRSI、RCI、DMIを駆使した方法で買うべきタイミング、買ってはいけないパターンを見極めています。監視するのは当日のランキング情報で、ランキング外から入って来た銘柄やランキング内で順位が大きく変動するような銘柄です。Tさんは私が自動売買プログラムを開発している事を知っています。Tさんも究極は自分が今手動で行っている事を自動売買で出来たらどれだけ幸せだろう、と思っていまして、私に自分のルールについて力説します。それをプログラムに組み込んで欲しい、と。ちなみにTさんはコンピューターについてはインターネットやトレーディングツールを操作出来るぐらいの知識で、プログラミングのプの字も分からない人です。例えばTさんの説明はこんな感じです。「RSIのこの線が青で、DMIの○○が赤で、RCIが水色です。青は比較的敏感に反応して上がりますが水色がX%ぐらいまで一緒に着いていったらいい感じなんです。でも、その時の赤色が2線の右にあったらそれは高値掴みになる可能性があるから買ってはいけません。左にあったら買いです。」こういう説明を数時間延々とし、その根拠となる(と本人が思っている)日中足チャートを何枚も印刷して来て、これが急騰パターンだの、これは高値掴みになるパターンだの、というのを教えてくれるのです(^-^;教えてくれるのはとてもあり難いんですが、私にとってはあまり意味の無い説明に思えてきます。だって、私はそのロジックをプログラムにする能力はないので。。。自動売買には、向いているロジックと向いていないロジックがあると思います。向いていないロジックの例として1つ目は、今回のエピソードにあるような「チャートの形など」をシグナルにするような場合です。他にも例えば「ダブルボトムを形成してリバウンドを始めたら」「ある程度上昇した後、押し目を付けたら」など、チャートの形を判断するもの。あるいは株価、その他指標の「推移」を元に判断するものは非常に難しいと私は思っています。チャートの現在値を計算する為に過去データの蓄積と複雑な計算が必要なものも多いですし、さらには「どういうデータ値推移を辿れば押し目とみなすの?ダブルボトムと言えるの?」などプログラムで扱うには非常にファジーな判断材料です。チャートの形をパターン認識するなんて事も非常に難しいと思いますし。。。そういう意味で、推移を捉えてタイミングを見計らう方法よりも、断然現実的なのがスナップショット方式です。ある瞬間に「株価が○円以下になったら」とか「出来高が○株以上なら」とか。そういう、その時々の数値などによって判断出来るものならプログラムにしやすいでしょう。なので、感覚的なルールで売買している人がそれをプログラムにする時には苦労すると思います。普段当たり前のように直感的に考えている事が、プログラムにするとなると本当に色々な事を考慮しないとマズいという事を身を持って分かります。向いてないロジックの2つ目は、私も最近皆さんからのコメントを頂いたり本を読んだりしてつくづく感じている事です。「検証可能なロジックであるか」という事です。私がつい数ヶ月前まで運用していたKATSの購入ロジックの1つはやたらと複雑でした。もう使わないと思いますが、どんなものだったか簡単に紹介します。「購入するか?」の判断ロジックに入るきっかけは、株価の上昇です。(1)その銘柄の購入必要額を計算。余力が足りなければ余力不足で買えない(2)一番安い売り板の気配値が無ければ買わない(3)歩み値4時刻(4つ前の約定時刻)がmだなければ歩み値が少なすぎる(寄り付き直後)ので買わない(4)株価が前日終値とS高の中間より高ければ高値圏なので買わない(5)現在値、歩み値1~3が順に上がっているか同値(下がっていない)で、現在値が歩み値3より 5%以上高くないと「急騰していない」とみなして買わない(6)この銘柄の購入余力を計算(当日のその銘柄の約定代金を余力から引き、購入後売れなくならない 余力を計算)し、余力が無ければ買わない(7)保有銘柄一覧を取得し、その銘柄を既に保有していたら買わない(8)VWAP乖離率を計算し、-3%を下回っていたら買う (8)以外の時は以下に続く(9)歩み値4時刻が現在値時刻より1分以上前なら「商いが少ない」と判断して買わない(10)株価が本日安値より2.5%以上高かったら買わない(11)VWAP乖離率を計算し、1%を超えていたら買わない(12)ここまでクリアしたら買う・・・とまあ、最大12個の判断材料があって、やっと「購入する」と決まります。この後、購入株数の計算を行ってから発注処理になります。ちなみに判断ロジックに入ってから実際発注するまでの間は2秒は絶対掛かりません。大体1秒ぐらいと思って良いです。問題はロジックが複雑だから処理が遅いとかを懸念している訳ではありません。要は「このロジックって結果出せるの?それとも勝てないロジックなの?」と言われた時に誰が答えられるかって事ですよね(^-^;このロジックを動かす為に、楽天RSSでは1銘柄につき12項目の監視を行っていました。そのデータがリアルタイムで残っていない限り、このロジックの検証は出来ないのです。いくら頑張って数ヶ月データを取ってもせいぜい数銘柄でしょう。このロジックの正当性を証明するなんてとでも出来ません。。。なので、ロジックは出来るだけシンプルで、過去データをあさればそれを使って検証出来るレベルのものにするのが色んな意味で優れていると思います。今日はここまでにします(^-^;ご意見のある方はコメント宜しくお願いします!
Mar 24, 2008
コメント(2)
まずタイトルの内容の前に横道にそれた話からします。俗に言う「システムトレード」って、自動売買という意味で使われない事が多いです。感覚的なトレードではなく「こうなったら買う」「こうなったら売る」というルールがしっかり決まっていて、それに基づいて売買を行う事を言うようです。自分内ルールがあって、それを守ってトレードしている人はシステムトレーダーなんですね。専業ではない一般トレーダーがシステムトレードを行う場合には、逆に自動売買の仕組みが必然になってくるとは思いますが。また「自動売買」という言葉についても若干の個人差があるそうです。私が自動売買と書く時には、プログラムなどのツールで株式を自動的に売買してくれる仕組みやそれを使って売買をする事を指しています。でも、証券会社が用意している逆指値注文やその他の便利な注文も「自動売買」と名前を付けている事があります。確かに、買い注文が約定したらその銘柄の売り注文も続けて出してくれたり、トレーリングストップまでしてくれる証券会社もあります。ですが私は、それらを自動売買とは呼びたくないです。どんな注文形態であったにせよ注文は自分が手動で入れないといけないので。そこまでやってくれて初めて自動売買と呼びいたいのです。逆に逆指値注文などを自動売買と呼ぶ方達は、私がいう自動売買の事を全自動売買と呼んだりする事もあるようですが。私が今後「自動売買プログラム」と書いた時には、起動して(何らか操作したとしても)売買する銘柄の選択から売買タイミング、株数等を全て自動で考えて行動してくれるプログラムの事を指します。ここまでは前置きです。私は自動売買プログラムKATS(KNIGHT's Auto Trade System)を開発しました。VB.NETで、リアルタイム株価の取得は楽天RSSから。発注はクリック証券から行っています。このインターフェースがベストかどうかは分かりません。ですが、私は少なくとも発注に関しては国内の株式売買ではクリック証券がベストだと思っています。自動売買プログラムには大きく何種類かに分類されると思います。(1)HTTPプロトコルを使った証券会社のWebサイト操作型(2)画面やアプリケーションをツールを使って操作する型(3)公開されているAPIを呼び出して操作する型(1)は、最も人口が多い方法では無いかと思います。HTTPプロトコルは自動売買に非常によく用いられるExcel/VBAからも利用可能ですし、元々楽天RSSからのデータ取得はExcelにアドインを入れて関数を書けば取得出来ますので親和性が高いです。プログラミング言語としての垣根も低いので皆さんから選択される方法です。ですが、発注を行うためには証券会社のWebサイトを操作する形になります。その度にブラウザの起動、ログイン、画面遷移(何ステップか踏む)、・・・が出てしまうのでは無いでしょうか。やりたい事に対して手順が多く、通信量も多いです。毎回画面全てのHTMLを受信しますので効率も悪いです。また、一番のネックは「Webサイトの仕様が変わればプログラムを作り直さないといけない」事です。そんなに頻繁に行われないかも知れませんが、これは大きな問題です。私はある株の自動売買のメーリングリストに参加していますが、先日「楽天証券のWebサイトのデザインが変わって売買出来なくなった」などという書き込みが多数見られました。これって悲惨ですよね・・・?しかも、誰にも文句言えません(-_-;別に証券会社がWebサイトのデザインを変えてはいけないという縛りはどこにも無いので。(2)は、例えばMarketSpeedなどのツールを画面操作系のツールで操作してしまう方法です。売買判断をどうするかは色々な方法が考えられますが、(1)と発注系の差別化を行うために書いています。こちらはまだ(1)よりリスクは少ないのかも知れません。ですが、話によると急なお知らせや何かでいつもと違うダイアログが表示されたり、ウイルスチェックソフトの起動など想定しないウィンドウがアクティブになる事によって誤動作が起きてしまうなど、(1)と同じように確実性を高いレベルに持っていけないというのがあると思います。・・・(1)と(2)について「いや、違う!!」とおっしゃる方は是非反論コメントを下さい。勉強させて頂きますm(_ _)m(3)については自分が取っている方法なので憶測ではなくある程度実体験に基づいて書けます。クリック証券(GMOインターネット証券)は、国内で唯一発注のAPIを公開している証券会社だと思っています(間違っていたら指摘して下さい)。今簡単に調べたら、カブドットコム証券がAPI公開を「検討している」そうですね。但し、自動売買プログラムの為だけに使用するなら手数料体系が高すぎるので、もし自動売買にしか使用しないという事であれば手数料の安いクリック証券をお勧めします。ちなみに私はクリック証券とは何の関係もありません(汗)。発注はWebサービスのAPIが公開されています。Webサービスと言っても難しくは無く、HTTPリクエストを送信したらXML形式でレスポンスが返るだけです。必要なデータはパラメータで指定します。レスポンスは必要な内容のみなので非常に軽量で高速です。画面を描画する為の、売買とは無関係な情報をごっそり受信する必要はありません。また、公開されたAPIが簡単に変わる事はありませんし、変更されるなら事前に仕様が公開され、対応可能です。「いつの間にか変更されててある日動かなくなった!」という事態は起きません。ちなみにクリック証券のAPIはExcel/VBAからでも充分操作可能です。Web操作型から、API呼び出し型にしませんか?これから作る人は、クリック証券で作りませんか?またこの機会を使って募集です。VB.NET+楽天RSS+クリック証券で自動売買プログラムを開発している方、開発しようとしている方。是非情報交換しましょう! <結局そこかい
Mar 23, 2008
コメント(6)
新ロジックを過去データに照らし合わせて見ていますが、過去のロジックに比べて勝率が格段に上がっていると思います。但し昨日も書いた通り売買頻度がかなり少なくなると思うので「今日は取引なしでした」という日が増えてくる気がします。手動売買なら我慢出来なくなる気がしますが、KATSが買わないと判断したのだからそれは良しとして我慢出来ると思っています。いつの日か職場の後輩が教えてくれた「ど真ん中だと思った球だけ振れば良い。株は野球と違うから見逃してもアウトにならない」の考えを思い出しました。昨日から、KATSがしょーもないコーディングミスやオペミスにより異常終了するリスクを軽減するためにリファクタリングしています。売買ロジックを指定する画面で存在しないロジック名を入力した時には実行時にエラーになるのですが、実行時ではなくて設定の保存を行う時に存在チェックをするようにしたので「実行してみたらエラーになった」という事もなくなりました。また、楽天RSSから取得する項目(いわゆるDDEのITEM)名は今までベタで書いていました。例えば「現在値(現在の株価)」を取得する時には client.StartAdvise("現在値", 1, True, 60000)と書いてました。それに対しイベントを拾って判断させる側は Select Case e Case "現在値"など。こういうコーディングが結構多いのですが、もし入力ミスで「現在地」などと書いてしまったら大変です(笑)。上の例だとエラーは出ず、株価の監視も行ってくれませんし、もちろんそれに対するアクションもいつまで経っても呼び出されません。「おかしいなぁ」と調べて、後になってから分かります。そのミスを防止するため、楽天RSSの項目をDdeItemというクラスにまとめました。こうする事によってケアレスミスの可能性がかなり減ります。コーディングは client.StartAdvise(DdeItem.現在値, 1, True, 60000) Select Case e Case DdeItem.現在値という風に変わり、リテラルのベタ書きが無くなります。名前を間違えるとコンパイルエラーになります(そもそもインテリセンスでコーディングするので名前を間違えないようになりますし)。クリック証券の発注に使う売買区分("1"が売り、"2"が買い)なども、今まではそのまま「"1"」と使用していたために間違う可能性が高かったのですが、今回「Order.買」という感じでコーディングするようにしたので直感的になりました。その他、バグとは関係ないですが、無駄に何箇所も出てきたリテラル文字列をリソースとして登録し、一本化しました。KATSのソースから文字列リテラルがかなり減りました。これからも修正や拡張を頻繁に行っていくKATSですので、ただ「動けば良い」だけでなく修正容易性や生産性、バグの温床の低減のために積極的にリファクタリングすべきだと思っています。新ロジックについては引き続き過去データで検証したいと思います。
Mar 22, 2008
コメント(0)
今気付いたのですが、新しいWebサービスの仕様が公開されていました。3/31(月)の取引から従来の19:00~23:59という夜間取引に24:30~26:00が追加されるのと、何やらURLが変更になるそうです。そう言えば私が開発時にダウンロードした仕様書には夜間取引は含まれていませんでした。。。って言うか開発を始めた頃は夜間取引がありませんでした。KATSのリアルタイム情報取得は楽天RSSから行っていますが「そもそも楽天証券から夜間取引の情報が取れないから、対応する必要ないし」って思いました。ですが、無視出来ないようです。----------------------------------------------------------------------------08/03/14(金) Webサービス(URL変更対応、夜間取引時間延長版)についてのご案内2008年3月15日(土)定期メンテナンス後より、URL変更に対応した【ログイン編】Ver.2.1.0および夜間取引の時間延長に対応したWebサービス仕様書【株式取引編】 Ver. 1.2.0を公開いたします。 これに伴い「Local API Server」、「Local API Server インストールガイド」を更新いたします。 ※3月31日より、従来の夜間取引時間(毎営業日19:00~23:59)に24:30~26:00の取引時間が追加されます。取引ルールの変更内容等は、改めてご案内させさせていただきます。 なお、Webサービス(夜間取引の時間延長対応版)からの注文受付開始は、3月29日(土)のメンテナンス終了後を予定しております。 【ご注意】 当社サーバーは3月29日(土)のメンテナンス終了後に、新しい仕様に対応したバージョンとなります。Webサービス仕様書【ログイン編】Ver.2.0.0および【株式取引編】 Ver. 1.1.0に基づくプログラムはご利用いただけなくなりますのでご注意ください。 なお、変更点の詳細は、Webサービス開発キットダウンロードページの「リリースノート」をご参照ください。----------------------------------------------------------------------------注目すべきは【ご注意】。旧仕様に基づいたプログラムは利用できなくなる!?慌てて仕様書のバージョンを見たら、ログイン編/株式取引編ともにVer. 1.0.0!!全く古いです(滝汗)。今から仕様書を見比べで変更対応しないと、再来週からKATSが動かなくなるかもです。クリック証券のWebサービスをお使いの皆さんもご注意下さい。
Mar 20, 2008
コメント(2)
私が開発している自動売買プログラム「KATS」の紹介を不定期で行っています。今回は文章を打つのが面倒なので前回のリンクでご勘弁下さい(^-^;2008/01/19の記事「改めてKATSの紹介。」自動購入のロジックと自動売却のロジックはこの時書いているものから変わっています。試しては修正し、新しい物を作り・・・の繰り返しであまり成果が出ていません。今も新しいロジックを設計中ですが、まだ実装には取りかかっていません。・・・話は全く変わるのですが、Googleで「KATS」を検索したらこんなものも出てきました(汗)。私とどちらが先に命名したのか不明ですが、同じスペルで同じ読みでネーミングした別のモノって結構存在するもんなんですね。もちろん私のKATSはこの商品とは何の関係もございません(笑)。
Mar 15, 2008
コメント(2)
先日届いた「投資家のためのマネーマネジメント」を読み終わり、気になる部分を何度か読み直したりプログラムで実際に最適なポジションサイズを計算しようと試みています。でも、それに対して「ん?」という感じを抱いてます。というのは、自分がざっくり計算する限りでは、どう計算しても全力買いしてもなお余りある購入株数になってしまいます。。。オプティマルfの絶対条件として、トレードロジックの期待値が0より大きくなければいけません。つまり勝算のあるロジックでないといけません。そうでないと、どんなにポジションサイズを駆使しても最終的には絶対に破産に向かいます。で、そのギリギリの期待値を作ってみても、全力買いOKになってしまいます。・・・何か計算間違ってるんですかね???(滝汗元々オプティマルfの元となってるケリーの公式は、負けると掛け金を没収されるようなギャンブルの計算を前提にしています。株については、買ったら売る余地を与えず倒産してしまうケースですが、そんな事は無いと考えて良いと思います。そうすれば、例えば掛け金(という言い方がふさわしいか分かりませんが)の20%の負けを最大損失として計算したとしても、ポジションサイズはそれほど小さくなりません。オプティマルfって、信用や先物オプションのようなレバレッジを効かせる事が出来る商品に対してしか有効ではない!?と半信半疑になってきています。「いや、違う!!」とおっしゃる方。恐れ入りますが、具体例を出してポジションサイズの有効性を私にご教授頂けたらと思います。
Mar 10, 2008
コメント(8)
現状のKATSがどうなっているかまとめた事がありませんでした。仕様書を書く前に、せめてクラス図だけでも書いておこうと思います。会社のPCならモデリングツールが入っていますが自宅PCには無いので、フリーのUMLツールをダウンロードして書いてみました。まずはシステムコンテキストダイアグラムから。皆さんご存知だとは思いますが、KATSの構成はこんな感じになっています。ザラバ中に楽天RSSからリアルタイムデータを取得したり、監視銘柄抽出の時に銘柄一覧を取得したりするためのクラス群は「RakutenRss」という名前空間です。メインのDdeManagerというクラスが、NDdeというクラスライブラリのラッパーです。全てのPublicメソッドはstaticです。RequestStockItem()メソッドは全銘柄一覧を取得するメソッドです。Request系メソッドは取得するデータ型毎にメソッドがあります。IsArive()メソッドは楽天RSSの生死確認用メソッドです。StartAdviceするのはStart()メソッドで、更新通知を開始する項目はIDdeAdviceというインタフェースで渡します。監視する項目が変わってもDdeManagerを修正しないで済むように、また煩雑なIF文を書かないようにStateパターンで実装しています。余力情報、保有銘柄一覧、約定一覧などの取得や発注はクリック証券のWebサービスAPIを呼び出していますが、それらは「Gmo」という名前空間です。こちらはGmoProxyというクラスがクリック証券のWebサービスのラッパーです。KATSはGmoProxyを使う事によってWebサービスを意識せずに各種情報の取得や発注を行う事が出来ます。GmoProxyのPublicメソッドは全てWebサービスのURLに準じています。Webサービスの結果は全てXML形式で返るのですが、そのままだと扱いにくいので画面に表示するにもプログラム中で使うにも都合が良いようにDataSetの形に変換しています。そしてKATSのメイン部分です。メイン画面から開く各サブ画面(メインのバッチ処理以外)はこんな感じです。設定画面はSettingFormです。各種設定をapp.config.xmlに読み書きする画面です。購入候補登録画面は購入候補登録のバッチ処理を非同期で起動します。その時、RakutenRssやGmoの名前空間を使用します。購入候補はKATSDataSetを使ってRDB(Access)に登録します。TableAdapterも使っていますが省略しています。購入候補や売却候補の画面はKATSDataSetの内容を確認したり手直ししたり出来る画面です。メイン処理のクラス図も一応書きました。でもうまくまとまりません(^-^;自動購入処理と自動売却処理はそれぞれ別のBackGroundWorkerで非同期に実行されます。実際に起動されるロジックは設定画面で指定したロジックでTradeLogicFactoryがapp.config.xmlを見てインスタンス化し、起動します。名前の通りFactoryパターンを使用しています。売買ロジックを切り替える時にはプログラムを修正しなくても設定画面から修正すれば良いようにしています。各売買ロジックは色々なクラスを呼び出していますがロジック毎に違いますのでまとめて書いてます。ざっとこんな感じです。
Feb 9, 2008
コメント(2)
多分最近このブログを初めて見て頂いた方もいらっしゃると思います。なので、気が向いた時に不定期でKATSの紹介をしようと思います。KATSとは「KNIGHT's Auto Trade System」の略で、私が開発している株の自動売買プログラムに付けた名前です。カッツと読みますが「勝つ」という意味と、私が卓球でカットマンをしているのでそれにもちなんでいます。日記でも「KATSは」などと普通に使いますので、自動売買プログラムの事だと解釈して下さい。(1)KATSを作成したきっかけ私は会社員なので本来ならデイトレは不可能です。KATSを作成する前はフレックスで10:00出勤をしており9:15頃まで自宅に居ました。朝15分間だけリアルタイムでデイトレをしていました。楽天証券のMarketSpeedです。会社に着くまでは携帯からもトレードしていました。でも資金が少額な私にとって楽天証券の手数料はとても安いとは言えず、もったいないので松井証券に移行してデイトレを続けていました。ところが電車の時刻表が変わり(苦笑)、9:15まで自宅に居る事が出来なくなって9:10頃までの10分間のリアルタイムデイトレと、職場に着くまでの携帯トレードをしていました。なかなか寄り付かない日は全然トレード出来ませんし、携帯を含めても30分ちょっとしかトレード出来ない環境はかなりストレスが溜まりました。職場に着く時まだ保有している銘柄については逆指値の変更は出来ませんし、まだ約定してない買い注文が勤務中に約定し、逆指値売りを出していないのでそのまま下がり続けたり。会社員の私が手動でデイトレを続けるのは限界だと思いました。それならスイングにすれば・・・と思うのですが私はデイトレが好きです。また、デイトレにせよスイングにせよ私が全く結果が出せないのは「優柔不断なメンタルのせいで自分内ルールを簡単に破ってしまう事にある」と自己分析していたので、機械的に売買してくれる自動売買プログラムは理想の存在でした。(2)KATSの構想最初は自動売買プログラムについて勘違いしていました。自動売買は、証券会社のWebサイトをプログラムで操り、まるで手動で操作しているように扱う方法しか無いと思っていました。確かにその方法は巷でも主流な方法のようです。でも私は「Webサイトのデザインが変わったら修正が発生するんじゃないか」「無駄に処理時間が掛かるんじゃないか」などの理由で敬遠していました。でも調べると「注文のAPIをWebサービスで公開している証券会社が国内にある!」という事が分かりました。GMOインターネット証券(現クリック証券)です。早速口座を開設してWebサービスのAPI仕様書とテストサーバーの環境をダウンロードしました。期待しすぎていたのか、それを見てちょっと残念な気持ちになりました。それは「余力情報/注文一覧/約定一覧/保有株一覧などの取得や発注の機能はあるけど、株価などのデータ取得に関するAPIは公開されていない」事でした。「それやったら使われへんやん。。。」と。で、他の人がどうしているのか調べたら、結構な人が楽天証券のRSS(RealtimeSpreadSheet)を使ってリアルタイムデータを取得していると分かりました。証券会社2社が提供する方法を合わせないと実現出来ないですが、それが一番良い方法だと判断しました。あとはどんなプラットフォームで開発するかです。元々私は、この構想を練っていた去年の夏頃は主にJavaの開発を行っていました。なので必然的にJavaで組もうと思っていました。でも私はJavaはWebアプリケーション主体でGUIは得意ではなく、結局ユーザビリティの高いGUIを開発するのは.NETの方が良いという結論に達しました。(3)KATSの開発環境/動作環境PC:NEC VALUE STARCPU:AMD Athlon 900MHz(かなり頼りないです)Memory:1GBOS:Windows XP Home Edition SP2IDE:Microsoft Visual Basic 2008 Express Edition今思えばC#で開発した方が良かったかなぁと思うのですが、ちょうど開発を始めた去年の夏、本来業務でもVB.NETを勉強しないといけなかったので「これは好都合だ」という事でVB2005で開発しました。今はIDEをVB2008に上げていますが、.NET2.0ベースで開発しています。MarketSpeedのリアルフィードを使用してKATSを起動するとCPUネックで処理が遅延します。出来ればもっと速いマシンにしたいですが資金がありません。。。(4)ソフトウェア構成MarketSpeed(楽天証券):銘柄のリアルタイム情報取得用RealtimeSpreadSheet(楽天証券):銘柄のリアルタイム情報取得用Market Speed Shortcut(mss):MarketSpeed/RealtimeSpreadSheetの起動/終了・ログイン用UWSC Free版:Market Speed Shortcutの操作用NDde:.NET FrameworkからのDDE通信を実現するクラスライブラリlog4net:Javaで超有名なlog4jの.NET版。ログ出力に使用Microsoft Access:購入候補銘柄、売却候補銘柄のデータ保存に使用(5)KATSのコンセプト私は一応IT業界の人間なので、プログラムはなるべく綺麗に組みたいと思っています。VB.NETはオブジェクト指向言語なのでオブジェクト指向でデザインし、クラス間の依存度も減らし、再利用しやすく修正や拡張に強い構造にしようと考えています(考えてるだけかも)。GUIは主に設定変更や購入候補登録・確認、売却候補確認のみで、あとは自動購入/自動売却の開始ぐらいしか機能はありません。プログラム構成としては、大きく・楽天RSSからリアルタイムデータを取得する部分(名前空間:RakutenRss)・クリック証券のWebサービスを操作する部分(名前空間:Gmo)・共通部品(名前空間:KATSCommon)・KATS本体部分(名前空間:KATS)の4つに分けられています。売買ロジックについては自動購入/自動売却を完全独立で起動出来るようにしていて、例えば「手動で購入するけど売却は自動で行いたい」という事も実現可能です。手動で購入して保有銘柄に追加された銘柄を自動売却処理が自動で監視し、売ってくれます。万が一自動購入や自動売却のどちらかが異常終了した場合でも、その部分だけ単独で再起動しますし一定回数以上再起動しても問題が発生する場合は再起動を諦め、異常終了していない部分のみ引き続き動作させます。また、自動購入/自動売却ロジックはインターフェースさえ合わせれば部品としていくらでも作る事が出来ます。そしてKATS本体のプログラムを修正する事無く設定画面からロジックの切り替えも可能になっています。(6)KATSの主な機能・メール送信購入した事、売却した事を伝える通知メールと、プログラムの異常や再起動を伝える異常報告メールの2系統があり、設定画面でそれぞれにメールアドレスを指定する事が可能です。私の場合、購入/売却通知はhotmail、異常報告は携帯メールに送るようにしています。・ログ出力後から「どうしてこの銘柄を買ったのか(買わなかったのか)」「どうしてこのタイミングで売ったのか」また異常時のスタックトレースを見直せるようにログ出力しています。1日単位でファイルを分け、月単位でフォルダを分けて整理しています(log4netの機能)。余談ですがlog4netは非常に高機能です。フォーマット、ファイル分け、ログレベル、など細かく設定可能ですし、本プログラムのスレッドとは非同期でログを書き込むので本処理に影響を与える事無くログ出力出来ます。・購入銘柄抽出設定画面に「自己資金」「最低取引金額の上限」「最低株価」「最低値動き」「最低売買代金」を設定して、明日監視する銘柄を全銘柄から自動抽出して購入候補銘柄として登録します。前日にボラが高く出来高も多い銘柄を登録します。・自動リカバリーKATS本体が異常終了しない限り、例えば楽天RSSやマケスピが反応しなくなったり自動購入/自動売却が異常終了した場合は自動的にリカバリー(部分再起動)します。再起動しても改善出来なかった場合はリトライを諦めます。・自動シャットダウンザラバが終わったらKATSを終了し、PCをシャットダウンします。・自動購入(現在採用しているロジック)購入候補銘柄を監視し、買いシグナルが出て余力があれば、2単位(10株単位なら20株)の倍数で買います。2単位買えない場合は買いません(「2単位ずつ」は自動売却との兼ね合いです)。また設定している「分散購入係数」を見て、全力買いしない考慮も行います(最低単位の購入で結果全力買いになる場合はこの限りではありません)。・自動売却(現在採用しているロジック)購入した銘柄の株数のうち半分を指値注文します。値段は設定するトレーリングストップ率の半分だけ上の株価です(TS率が5%なら購入値より2.5%高い株価)。そして残りの株数をトレーリングストップ率により監視します。指値注文が約定しても残りの株数はトレーリングストップ監視を続けます。逆にトレーリングストップにより売却する時、まだ指値注文が約定していなかったらその注文を成行に変更して売ります。こんな感じです。個人的には、買い注文のタイミングはそれほど重要視してません。アホみたいにガンガン買いまくってしまったり全然エントリーしないという状態だけ避けたいと思っています。基本的には下落後の底打ちリバウンド時や単純に上昇時(でも高値は不可)を狙って買おうとしています。売り注文に関しては色々試行錯誤しています。手仕舞い方で結果は大きく変わると思っています。トレーリングストップを3ヶ月近く採用し、率を変えたりしてみましたが、利益が少なくなったり損切りを繰り返す事が多かったりしてなかなか結果が出なかった事で、単純なトレーングストップに限界を感じて今のロジックにしました。まだどうなるか分かりませんがこれまでよりはリスクを減らした売買が出来るのでは無いかと期待しています。
Jan 19, 2008
コメント(2)
・インボイス(9448) 3,010円×4株買い(14:45)・手数料 230円本日の損益:-2,455円【保有銘柄】・ニイウスコー(2731) 2,820円×17株(-2,465円)・インボイス(9448) 3,070円×4株(+240円)【総合損益】時価評価額 63,865円(-436,135円)/500,000円(うちクリック証券への入金額:111,055円)ニイウスは2740円になった12:59付近に売却通知メールが届きました。でも実際には売られていませんでした。帰宅後に確認すると、売り注文の株数が間違っていました。何日か持ち越しましたが、プログラムを修正して入れ替えた時に持ち越したニイウスコーの株数計算が間違っていました。と言うか、毎晩売却候補銘柄の株数を作り直さないと合わなくなる事に気付きました。運用での対処法は分かったのですが、起動時に持ち越し銘柄のDBの株数を合わせる作業はこの休みに修正出来るかどうか分かりません。3日とも予定が入っているので。。。ニイウスは結果オーライで2,820円までリバウンドしてました。来週どうなるかですね。どっちにしても結果オーライです。。。あと、余力でインボイスを購入して手数料程度の含み益で持ち越しました。年末からずっと一度も買わなかった新購入ロジックが初めて購入しました。なかなか悪くないタイミングで買ったと思います。しかし・・・ここまで日本株が落ち込むとは予想してませんでした。びっくりです。
Jan 11, 2008
コメント(14)
KATSはVB2005で作成しています。たまたま業務上VB.NETを覚える必要があったので良い勉強になると思ってVB.NETで作成しました。でも私は元々Javaメインですので、どちらかと言えばVB.NETのソースコードよりJavaに似たC#のソースコードの方が自然で読みやすいです。「VB.NETよりC#の方が速い(?)」と誰かに聞いたのかどこかで見たのか。よく分かりませんがそう思っていました。なので勉強がてら「KATSをC#に移植してみようかな」と思いました。早速「Visual C# 2008 Express Edition」をインストールしました。楽天RSS関連、クリック証券関連、はDLLファイルに切り出し、KATSソリューション内の別プロジェクトとして分けました。そしてまず楽天RSS関連(DDEクライアント関連)のクラスについて移植完了。次にクリック証券関連のクラスを移植しようと始めていたのですが・・・何故かここまで来て今更ふと疑問に思ったのが「本当にC#ってVBより速いの!?」でした。全然確かめていませんでしたから(汗)。Googleで色々なWebサイトを眺めましたが、今の所出た結論が「どちらも同じ中間コードにコンパイルされるんだから、同じ処理を移植しただけならパフォーマンスは全く同じ」です。何かモチベーションが低下しました。詳しい方、「その通り」「いやそんな事無いよ」等教えて下さい!(´д`;
Dec 29, 2007
コメント(8)
掲題の件、興味のある方も多いんじゃないかと思います。先日楽天証券に質問メールを投げた回答が返ってきましたよ!ご紹介します。【質問メール】---------------------------------------------------------------------------いつもMarketSpeedとRealtimeSpreadSheetを使用させていただいています。掲題の件ですが、分からないので質問させて頂きます。マーケットスピードのリアルフィードの設定がRSSにも関係するのでしょうか?PCのマシンスペックが低いのでリアルフィードを解除して使おうと思いますがRSSからの更新もそれで抑制されるのかどうか知りたいです。宜しくお願いします。---------------------------------------------------------------------------【回答メール(抜粋)】---------------------------------------------------------------------------平素より楽天証券をお引き立ていただきまして、誠にありがとうございます。お問い合わせにつきまして、ご案内申し上げます。リアルタイムスプレッドシートの情報取得タイミングは、マーケットスピードの「リアルフィードを使用しない」状況とほぼ同期であり、マーケットスピードの環境設定によってリアルタイスプレッドシートの情報取得タイミングが変化されることはございません。ただし、Excel上にて情報を取得している関係上、パソコン動作や利用中のプログラムなどにより読み取りが時間かかる可能性を否定できません。何とぞご了承いただきますようお願いいたします。---------------------------------------------------------------------------要約すると、楽天RSSの更新イベント間隔はリアルフィードの設定には関係なく「リアルフィードを使用しない」時とほぼ等々のタイミングである、と。でも納得出来ないです。Ver6.3からリアルフィードを使用しない時の更新間隔を設定出来るようになりましたから「使用しない時とほぼ同等」と言われても何秒なのか分かりません。何だかはっきりしないので、楽天証券に電話して、回答内容を伝えた上で追加質問をしました。するとメールの内容とは少し違う回答を得ました。【電話で確認して分かった仕様(要約)】---------------------------------------------------------------------------・楽天RSSの更新イベント間隔はMarketSpeedのリアルフィードの指定に影響を受ける・但し「リアルフィードを使用する」に設定しても、楽天RSSは全てのデータ更新 タイミングで通知を受け取る訳ではなく「リアルフィードを使用しない:更新間隔1秒」と 同様のタイミングで通知される(つまり1秒間隔)・MarketSpeed Ver6.3で「リアルフィードを使用しない:更新間隔1秒」にした場合も同様。 1秒間隔でイベント通知される・MarketSpeed Ver6.3で更新間隔を2秒や3秒等の長い時間に設定した場合はそれが 反映され、楽天RSSのイベント通知間隔もそれと同様のタイミングになる---------------------------------------------------------------------------です。皆さん、すっきりしましたでしょうか?(笑納得いかない方はご自分で確かめましょう。ちなみに私は先週まで「リアルフィードを使用する」でした。楽天RSSからのイベント通知は1秒間隔ですが、恐らくMarketSpeedの更新により低スペックのマシンではCPU負荷が高過ぎてKATSの処理が追いつかなかったのでしょう。今週から「リアルフィードを使用しない:更新間隔1秒」にしました。楽天RSSのイベント通知間隔は変わっていないはずですが、処理がこなせるようになったのはMarketSpeedの負荷が激減したからでしょう。低スペックマシンでのリアルフィード使用にはご注意下さい。
Dec 27, 2007
コメント(8)
全87件 (87件中 1-50件目)