utf8でのコーディング

先日、FXの秒足履歴取得システムは、
暫定的に漢字コードを使わずに判定するように修正し、
とりあえず、停止当日中に再稼働させることができた。
しかし、根本的な解決には遠く、株式の取引シグナルを出す方は手つかずである。
ここは、すこし腰を据えて基本を勉強することにした。
現在のシステムの修正がてらなれるのも良いが、
あまりに修正項目が多くなると、修正作業自体が嫌になりそうなので、
サンプルシステムを作ることにした。
・ ヤフーニュースの要約を、携帯にメールで配信する。
・ マイヤフーに登録されているファイナンス情報を、携帯にメールで配信する。
の、二つをつくることにした。
実際の作業は一日もかからずに作成することができた。
実際の流れは、
・ ヤフーニュースの要約を、携帯にメールで配信する。
ヤフーのニュースサイト http://dailynews.yahoo.co.jp/fc/rss.xml などから、
RSSでニュースを取得して、タイトル部分を蓄積する。
蓄積した情報を、Perlからメール配信する。
技術的には Net::SMTP XML::RSS モジュールを利用した。
非常に良くできたモジュールで、苦もなく実装することができた。
・ マイヤフーに登録されているファイナンス情報を、携帯にメールで配信する。
マイヤフーに登録されている、株価情報を定時に携帯にメールする。
マイヤフーは当然に認証が必要だし、その後登録されている情報を解析して、
銘柄名、現在価格、前日比を抜き出して送信する。
マイヤフーをターゲットにしたのは、
・ 複数の証券会社での保有銘柄をまとめて閲覧できるように管理している。
・ 銘柄の追加削除が容易である。
・ 自分だけでなく、他の人も利用できる。(証券会社ごとのモジュール作るのは面倒ですし)
と、いうことである。
こちらは目新しい技術的な話はないが、
LWPのCookieをファイルに保存するようにして、ヤフー側のロボット規制にかかりにくくした。
(現実に数回テストをしたときに、画像認証になってしまった)
この二つのプログラムを書きつつ、utf8での文字列の扱いを覚えた。
やってみると非常にシンプルで、
外部からの文字列を、 decode で、utf8化
外部に文字列を出す時に、 encode で、非utf8化
と、いうことだけである。
あと、開発環境の問題(Eclipse + EPIC in MacOSX mini)で、
ソース上で直接漢字を判別などをさせると、
Malformed UTF-8 character
と、怒られる。
既知の問題でもないようであるが、一旦スカラーるか、エラーを無視すればいいので、
環境が改善されるまでは、しばし我慢することにする。
この二日くらいは、いろいろと実験をしていたが、
今後はPerlをする限りはさけてとおることができないutf8を、
さわれるようになったので良しとする。
あとは大量のファイルの修正が・・・
また、それはおいおいということで(^^;

FXシミュレート処理追加(戻り決済、逆シグナル決済、乖離率)

久しぶりに書き込みします。
ここ数日ばたばたしていましたが、
処理自体は順調に追加できていました。
でも、シミュレーションばかりしてもしかたないので、
そろそろ見切りで実地をしてみたいです。
ちなみにうちのひまわり証券には、デモ取引モードがないので、
いきなりぶっつけ本番になります(^^;
今回追加した処理は以下のとおり。
・ 戻り決済
 今までは、手仕舞いの決済には、利益確定と損切りをpips単位でしていしているが、
利益確定までの経過である程度の利益が出た場合に、一定の戻りがある場合に
決済をする機能を追加した。
 当然であるが、利益確定までのどの程度の割合まで上昇し、どの程度戻した場合に
決済をするのか、miniに解析させている。
・ 逆シグナル決済
 今までは、利益確定、損切りで決済していたが、逆のシグナルが出た時に、
決済をする機能を追加した。
 これも、当然、miniに最適解を解析させている(^^;
・ 乖離率シグナルの追加
 クロスでのしぐなるだったが、今回乖離率のシグナルを追加した。
 クロスも乖離率も共に、移動平均をつかうので処理の追加は容易であった。
 乖離率も同様に、各通貨ペアの最適解はminiにさせている。
シミュレーションの外注(Winなマシンにさせる)
 現在のシミュレーションはminiでさせているが、開発とシミュレーションの両方をminiでやると
さすがにしんどそうなので、開発をしている時や、長時間のシミュレーションには、Windowsマシンに
させている。環境は、MySQLとActivePerlで、miniとおなじはずだが、なぜか、シミュレーションの
途中で処理をやめてしまう・・。
 しかも、やめてしまうのに、処理状況は処理をしたふりをする・・・。
 処理結果を見て、初めてなにもしていないことが判明した。
 おそらくメモリが不足しているためだと思うが、せめてエラーで止まって欲しい・・・(–;

FXシミュレートスピードアップ

この週末に先週に課題であった「シミュレーション処理の速度UP」をした。
従来のシミュレーションと同じ内容を10分の1で処理できるようになった。
今までは、実際の運用時のロジックに流用できるように、移動平均の算出を
その都度行っていたが、あまりに時間がかかるので、必要な指標については、
事前にメモリ内に展開して、再利用するようにした。
そのため、ループの配置を変えたり、シグナルを発生させるモジュールを
対応させたりと、手間取ってしまった。
これで一晩で30通りの通貨の組み合わせの中で、最適な指標の算出ができる。
でも、現在は移動平均のクロスの中でシミュレーションしているので、
まだ最適解を見つけるまでは時間がかかりそうですけど・・。

Mechanizeおかしい・・

今日、家に帰ってみると、いつも日中足データを取得するシステムが、
Can’t call method “request” on an undefined value at /Library/Perl/5.8.6/WWW/Mechanize.pm line 430
と、言って止まっていた。
この土日でやったことといえば・・・そうCPANで全モジュールUpgradeしたこと・・
まさか、Mechanizeってば勝手に仕様変えてないよね・・とおもいつつソースを追いかけると、
いままで、一度もgetしていなくても、uriでundefを返してくれていたのに、
いきなりこけるようになっていた(–;
最初の判定でuriで判定をしている部分があって、そこで止まっていた。
結構、場所を特定するまで時間がかかってしまった。
日中足データ一日分取り損ねです・・・(–;
教訓!!
動いているモジュールは安易に最新にUpgradeするべからず!

デイトレシミュレーション実施

先日からデイトレのシミュレーションをコーディングしている。
なぜ、こんなにシミュレーションに時間がかかっているか・・
・ 日中足データをグラフ化するのに時間がかかった
・ グラフを見て法則性は見つけれるものの、
  それをプログラムにすると思い通りの場所でシグナルがでない
・ 仕事でへばってしまい、家に帰ってコーディングする気がおきない
と、いろいろと原因がありました。
今回は初心に立ち返り、
「法則性を見つけるのもやっぱりPCだ!」
と、いうことになりました。(^^;
このBlogを継続して見ておられる方はご存じのとおり、
今、スイング取引用のシグナルを出しているのは、
各銘柄ごとに最適な指標の組み合わせをシミュレーションで
割り出して、その指標に基づいて各銘柄のシグナルを出す仕組みです。
デイトレは指標などよりも、取引価格自体の動きや、気配値を基に法則性を見つければ、
結構簡単にシグナルがでるのではないかという、今から思えば
「そんな簡単ならみんなやってるし・・・・」
ということに気が付きました。
そんなわけで、今回は継続して取得している、1分ごとの取引値(気配値含む)を、
基に思いつく方法を様々な組み合わせでシミュレーションすることにしました。
今、Windowsマシンでシミュレーションしていますが、終わる気配がありません。
ただ、ざっとみてみると、
「取引直後からシグナルを出してばしばし取引する方が、動きが見えてきた10時すぎから
 始めるより有利」とか
「利益確定は早すぎると取引回数が増えるだけで利益率はおちる」とか
いろいろと見えてきました。
でも、これは一銘柄だけで、本当は実際に注視している、全銘柄にシミュレーションを
しなくては、わからないと思います。
もしかすると、黄金法則はなくて、銘柄ごとにパターンを切り替えることになるかもしれません。
実際の取引は年末に行いたいと思うのですが、どこまでできますか・・

デイトレシステムのシミュレート

自動書き込み以外では、久しぶりに書き込みできた。
ここ数週間、このシステム以外に優先すべきシステムが有り、なかなか更新することができなかった。
この数週間は、以前に作成したグラフ作成機能で作ったグラフを持ち歩きつつ、
デイトレでうまいシグナルをだすことができないか考えていた。
本屋にはたくさんデイトレの本が並んでいるが、それをまねしてもおもしろくないので、
とりあえず、グラフを見て検討すると、VMAPと高値安値の関係で、精神的な抵抗線を感じた。
そこで、今日、その考えをプログラムし、グラフ作成機能に落とし込んでみると、
結構、おもしろい結果になった。
信用取引なので、とりあえず、売り買いのシグナルをだすことだけを考えた。
実際は返済取引をその日のうちにしてしまうつもりなのでどうなるかわからないが・・
傾向的に、買いよりも売りの方がより、正確にでているようである。
また、取引開始直後は、うまくシグナルをだせていない。
これは、シグナルの性格上どうしょうもないことであるが、
Tickを取得できればもっと早い段階で、正確な判断ができると思う。
Kabuka998420061017ヤフーの17日のチャート
Kabuka998420061018ヤフーの18日のチャート
先週金曜日までシミュレートしたが、画像挿入がしんどいので二日だけ・・(^^;
このシミュレートは監視銘柄のすべてできるので、時間のあるときにゆっくり検討したい。

デイトレ検討用グラフ

先日から方針をデイトレに移し、デイトレのためのシステムを作っている。
ただ、本業が繁務でなかなか作業が進まない・・(–;
いろいろなスキームを考えるが、それで実際に動いて利益が出せるのか、
まったく予想も付かない。
その理由は、データをExcelにはき出して、演算式を入れ替え差し替え、
グラフを作ったりして検討しているからで、実際のデータを数多く試せない
ことが停滞の理由であった。
そんなわけで、プログラム側で自動でシミュレーションをし、その結果をグラフで
視覚的に検討ができれば、一石二鳥である。
Perlには、GD::Graphという便利なモジュールがあって、
配列にあるデータを、グラフ化してくれる。
シミュレーションなどは配列の中で作業をさせるので、
その結果を、そのままグラフにできれば、一目瞭然である。
そんなわけで、ある日のある銘柄のグラフを貼り付けてみた。
Kabuka998420060929
これは、1分ごとの取引データで、取引値、当日の高値、安値、取引高÷出来高(VMAPもどき)を
グラフ化している、実際のデータには、気配値などの情報もはいっているので、
シミュレーションで取引をしたタイミングを、上に載せて、その結果を表などで出力できるように
してみたいと思っている。
現在は、30銘柄ほどを常時監視している。
PCのパワーがあれば、もっと監視できるが、
このページのコンセプトの、Mac miniで、自動取引というものがあるので、
しばらくは、この環境でがんばりたい。

日中足データ取得システム不具合発見

最近は日中足データをいじって遊んでいる。
1分ごとの株価、気配値、出来高などから、
直近の株価の予想ができるか考えている。
これも銘柄ごとに癖があると思うので、とりあえず、いろいろと試してみたい。
そんな作業のなかで、前日比が0の場合に、
取引時間が出てこない不具合を発見した。
具体的には、
・ 前日比0でない場合
現在値 923 ↓ C
前日比 -3 (-0.32%) (15:00)
・前日比0の場合
現在値 1,225 ↓ C
前日比  0 (0%) (15:00)
と、こんな感じである。
htmlをみても、スペースは&nbspで書かれているし、タブや改行も同じ位置にある。
にもかかわらず、
Perlで、
split( /\s+/ )
すると、0の方だけがundefな項目を取得してしまっていた。
その結果、前日比0の場合だけ、取引時間が取得できていなかった。
幸い、実際の取得時間もデータベースに格納していたので、
前後関係などは問題ないが、自動化していたら、不具合がでていた可能性が高い。
今回はundefな場合には、shiftして先頭の不用なデータを削除したが、
なんだか気持ち悪さが残る。
とりあえず、この2,3日は、このデータを眺めて、ロジックを考えたい。

イートレ注文成功

やっと、注文を出すことができました。
昨晩午後8時までメンテで動きがわからないことから、
その周辺のプログラムをつくりつつ、メンテ終了から注文処理をコーディングした。
結局は、注文確認までいっていたので、確認をするところだけであったが、
実際の注文までには、重要な買い建てる株数や、成行か指値か、といった判断をしなくてはいけない。
今回は、1回辺りの標準取引価格をデータベースで定義し、その価格と取引価格から、
株式数の計算をした。
指値はデイトレでは必要であるが、スイングの場合は実際の取引値を見て発注することから、
成行で発注することにした。
テストでは、成行で価格に0を設定したら、エラーになったり、イートレのシステムに振り回された。
現在の日中足データは古いことから、明日から、うちのシグナルと現在保有している銘柄を、
監視するようにしたい。
発注は寸止めしつつ、メールなどで注文シグナルを出すことにする。
そろそろお盆休みの時期であるが、本業が繁務のためとれそうにない状況である。
こんな時に盆休みでザラ場をみれれば一気にすすむんですけどね・・
こればかりはどうしょうもないです。

イートレへの注文処理(未完成)

今日は、先日からやりたかった、イートレへの注文処理をコーディングしている。
結果的には、未完成である。
その理由は・・・臨時メンテ・・・日曜日の午後8時まで注文処理ができない。
(そのエラーが起こるところまでは、処理ができたということですが)
今回のプログラミングで、学んだこと、つまづいたことなど、
雑多に書いてみる。(もう少し時間ができれば、WEBにまとめたいです。)
・ まずは「取引」タブをクリックして、注文画面に変遷
 これが結構くせもん、普通リンクは、Aタグでリンクしてますが、ここはAタグでIMGをくるんでます。
Mechanizeでは、find_linkやfind_imageでリンクを探しますが、この機能が使えない・・。
Aタグの記号をURLなどで引っかけても良かったけど、いつイートレに変えられるかわからない。
そんなわけで、TreeBuilderで、IMGを探して、lookupで、AのURLを取得して、
MechanizeでGetすることにした。
・ 注文の入力
 「取引」タブから変遷すると、新規注文画面がでる。
 これは、このまま利用させてもらう。
 各フィールドに値を設定して、Submit・・・、標準は株価表示のボタンでした。
 そんなわけで、注文画面のボタンをSubmit!
 で、ここで先ほど書いた、臨時メンテの画面・・・
 実は通常の画面とほぼ同じで、一文が入っているだけ、気づくまで焦った・・(^^;
今回の作業の中で、うちのMechanizeのバージョンが古いことがわかった。
モジュールのドキュメントは原文を読んで作業しているが、
プログラムした時に、エラーで止まる。
エラーは関数が無いと言っている。
で、よく調べてみると、うちのは1.12・・最新は1.18・・で、CPANでUpdateすると、
あっけなく動作した。
Perlは、最近はやりの言語でないので、マニュアルがなかなか翻訳されていない。
新しいことをするときには、とりあえず原文を読むことをおすすめします。