無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

2009-04-01から1ヶ月間の記事一覧

標準エラー出力に文字列を出力

組み込み関数「warn 」で標準エラー出力に文字列を出力します。 warn "foo" 実行結果です。 fooこんなのがあったとは。ちなみに、$VERBOSEで警告の出力を抑制できます。たとえば以下のコードを実行しても何も出力されません。 # $VERBOSEをnilにすると出力さ…

GMailのSMTPサーバーを使ってメールを送信するサンプル

GMailのSMTPサーバーに接続し、メールを送信するサンプルです。 TMail利用してメールを作成。 これを使うと、日本語メールや添付ファイル付きメールもさくっと作成できるみたいです。 メールの送信はRuby付属のNet::SMTPで。 GMailのsmtpサーバーでは、TLSに…

aptの基本的な使い方

aptの基本的な使い方。 利用可能なパッケージ一覧を更新する。 $ sudo apt-get update定期的に実行すると吉。 パッケージを名前で探す。 $ apt-cache search rubygems パッケージをファイル名で探す。 $ dpkg -S gem「dpkg」ってなんだろ。 パッケージをイン…

自宅サーバー更新中

Ubuntu9がリリースされたので、自宅サーバーをリプレースするべく作業中。ここ2-3年はずっとCentOSだったので基本的なところで戸惑ったり。 rootでログインできない。というか、インストーラで入力した覚えがないんだけど、どうしろと! →Ubuntuでは「sudo」…

Object#freeze

Object#freezeで、インスタンスの変更(インスタンス変数の変更)を禁止できます。 class Kitten def name @name end def name=(name) @name = name end end mii = Kitten.new mii.name = "mii" #凍結。 mii.freeze #凍結後はインスタンス変数を変更できない。…

プラグインローダー

プラグインローダーを試作しました。 方針 プラグインはGemで。 せっかくなのでrubygemsを使って、プラグインを簡単に追加/削除できるようにしたい。 なので、gemの形式でプラグインを提供できるようにする。 gemにしておけばjijiへの組み込みも容易。jijiの…

String#%

今日見つけたコード。 puts "%-21s: %s" % ["key", "value"] String#%でフォーマットができるのか。ふむ。実行結果は以下です。 key : value

最新のgemのロードパスを取得する

Gem#latest_load_paths()で、インストールされているGemのロードパスの一覧を取得できます。 旧バージョンのGemのパスは含まれません。 $LOAD_PATHのパスも含まれません。 require 'rubygems' puts Gem.latest_load_paths() 実行結果です。 ... /usr/lib/rub…

今日見つけたコード

今日見つけたコード。 for ( String path : paths ) try { // 処理1 // 処理2 } catch (Exception e) { // 例外発生時はログだけ出力して継続 } んー、そこまでしてインデント減らしたいとは思わないかな。

Gemプラグインの仕組み

RubyGemsにはプラグインの仕組みがあって、以下のようにプラグインを検出してロードするとのこと。 Gem の rdoc より。 RubyGems PluginsAs of RubyGems 1.3.2, RubyGems will load plugins installed in gems or $LOAD_PATH. Plugins must be named ‘rubyge…

インストールされているファイルを探索する

Gem#find_filesを使うと、指定したパスにマッチするファイルを探索できます。 パスにはワイルドカードが使えます。(Gem::GemPathSearcherと同じく、Dir#globしている様子。) 同じGemの別バージョンに含まれるファイルは、それぞれ別のファイルとしてヒットす…

jiji 1.0.3 をリリース

不具合1件を修正した jiji 1.0.3 をリリースしました。→オープン・フリーのFX自動取引システム「jiji (ジジ) 」 →Github - unageanu/jiji 変更内容 「グラフの色を変更してもリロードすると元に戻る」不具合を修正。 原因: 色のデータを示すMapのキーが、「…

ハッシュのキーをシンボルに変換しようとして

ハッシュのキーをシンボルに変換しようとして、↓のように書いたが動かず。 hash = {"a"=>"aaa", "b"=>"bbb"} p hash.map{|entry| [entry[0].to_sym, entry[1]] } 実行結果です。 [[:a, "aaa"], [:b, "bbb"]]RubyリファレンスマニュアルのEnumerable#mapによ…

特定のファイルを含むGemを探索する。

Gem::GemPathSearcherを使うと、ローカルにインストールされたGemの中から、特定のファイルを含むGemを探索することができます。 findで最初に見つかった1つを、 find_allでマッチするもの全てを取得できます。 find_allの方は旧バージョンのものもヒットす…

デモサイトのレート情報取得が止まってるなー

デモサイトのレート情報取得が昨日の10:20分頃から止まってますなー。orz。 ログを見る限りでは関連しそうなエラーは出てないんだけど・・・。どうも、その頃に実行されたテストが怪しい感じ。んー、なんかバグがあるのか。あと、「グラフの色を変更してもリ…

キャメルケースを単語に分割する

キャメルケースを単語に分割したいときには、「ゼロ幅の肯定先読み」を使うとさくっとできます。 // 分割する文字列 String str = "StringIndexOutOfBoundsException"; // 小文字と大文字の間で分割 String[] strs = str.split( "(?<=[a-z])(?=[A-Z])" ); fo…

Rubyスクリプト内でインストールされているgemのバージョンを取得する。

GemのAPIで取得可能です。 require か Gem::activate でGemを有効化すると、 ロードされた gem の Gem::Specification が Gem.loaded_specs に保持されます。 あとは、Gem::Specification からバージョンを取得すればOK。 バージョンの型はGem::Versionです…

"\"に続かない","で文字列を分割したい

","で文字列を分割する。 ただし、"\"に続く","はエスケープされていると見なして分割しない。といったときには、「ゼロ幅の否定的後読み」というのを使えばOKです。 // 分割する文字列 String str = "\\,a\\,a,bb\\,,cc\\,,\\,\\,,"; // 「\に続かない,」で…

不具合4件を修正

初版リリース後に気がついた不具合を4件ほど修正しました。 システムを再起動すると、動作中のエージェントが全て停止状態となる。 リアルトレードで建玉にエージェント名が設定されない場合がある。 リアルトレードで追加したエージェントのグラフ設定がで…

OCO注文に対応

OCO注文に対応。 →Github - unageanu / clickclient_scrap 成行注文も実装してみましたが、休日は成り行きでの注文は停止中らしく動作確認ができていません。 サンプル $: << "../lib" require 'clickclient_scrap' # ※sample.rbと同じディレクトリにuser,pa…

為替レートをJSON-RPCで取得するサンプル

jijiで収集された為替レートを再利用するには、CSVファイルに保存されたデータを利用するほか、jijiが提供するJSON-RPCインターフェイスを利用して取得することもできます。 具体的には、以下のような本文を、「http://:/json/rate」にpostすればOK。 {"meth…

モジュールの依存関係リポートを作るサンプル

Ivy

reportタスクで、モジュールの依存関係リポートを作成できます。 <project default="report" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant"> <property name="ivy" value="ivy"/> <target name="report" depends="download-ivy" > <ivy:resolve /> </ivy:resolve></target></property></project>

タイプセーフなjava.util.Observableを書いてみた

オブザーバーの仕組みはjava.util.Observableを使うとさくっと作れますが、パラメータで渡されるイベント?などがObject型になっていてちょい使いにくい。そこで、イベントの型をパラメータで指定できるようにするラッパーを書いてみました。 /** * タイプセ…

jarとivy.xmlを別々の場所から取得する

Ivy

dual リゾルバを使うと、jarとivy.xmlをそれぞれ別のリゾルバを使って取得することができます。非ivyなjarがあってアクセス可能なURLで公開されている場合、ローカルにivy.xmlを用意しdualリゾルバでURL上のjarとローカルのivy.xmlをそれぞれを取得すること…

デバッグ情報や追加の情報を出力する

Ivy

Ivyでエラーになると [ivy:retrieve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILSとかいわれます。こういう場合は、Antの起動オプションで、-vとか-dとかつけるとOK。 $ ant -d -v retrive「-d」「-v」ともにantの機能で、それぞれデバッグモー…

設定ファイル「ivysettings.xml」を明示する方法

Ivy

Ivyで設定ファイル「ivysettings.xml」を明示する方法について。 変数「ivy.settings.file」で指定する方法 「ivy:settings」タスクで設定する方法 の2つがあります。 1.変数「ivy.settings.file」で指定する。 「ivy.settings.file」の値として、ivysetting…

為替レートをCSV形式で収集する

「jiji」を起動すると為替レートが定期的に収集され、ローカルにCSV形式で保存されます。CSV形式なので、コピーして他のアプリケーションでさくっと利用することが可能。ローソク足チャート表示機能がついた為替レート収集サーバーとして「jiji」を使うこと…

案はあるけど実装できていない機能一覧

先週公開したオープン・フリーのFx自動取り引きシステム「jiji」ですが、時間の都合もあって、ネタとしては考えたけど実装できなかった機能などがいろいろあるわけです。 デモトレード以外の証券会社のサポート クリック証券Webサービスの公開停止もあって、…

依存モジュールの取得時に複数のサーバーに問い合わせる

Ivy

Ivyで依存モジュールの取得時に複数のサーバーに問い合わせるようにする方法ですが、chain リゾルバを使えば良さげです。そのままずばりな解説がこちらにあります。具体的には、 <ivysettings> <settings defaultResolver="chain"/> <resolvers> <chain name="chain"> <url name="url-resolver"> </url></chain></resolvers></settings></ivysettings>

任意のURLで公開されているライブラリを取得する

Ivy

URLリゾルバを利用すれば、特定のURLで公開されているモジュールを、依存モジュールとしてIvyで取得することができます。 具体的には、 「ivysettings.xml」を作成し、URLリゾルバの設定を追加。 artifact要素の値として、取得先URLを指定。[revision]や[art…