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

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

Ruby

画像内で使用されている色の統計を取るサンプル

RMagickを使って、画像内で使用されている色の統計を取得するサンプルを書いてみました。使用されている色ごとに割合を算出し、使用量の多い順に出力します。 require 'rubygems' require 'RMagick' imgs = Magick::Image.read("./kitten.jpg") img = imgs.f…

Google翻訳APIで文字列の翻訳と言語の判定を行うモジュール

昨日の続き。Google翻訳APIでは文字列の言語を特定する機能も提供されているので、それを利用して元の言語を自動判定してから翻訳するようにしてみました。これで言語を気にせずにがしがし変換できます。ついでにto_itやto_frなど翻訳可能な言語に対応する変…

Google翻訳APIで文字列を翻訳するモジュールを書いた

Google翻訳APIで文字列を翻訳するモジュールを書きました。 対象とする文字列と翻訳元/翻訳先言語を指定して呼び出すと、翻訳された文字列が返されます。 使用可能な言語はこの辺を参照。 プロキシが必要なら「Translate.set_proxy」で事前に設定してくださ…

画像にフィルタをかけるサンプル

RMagickを使って画像にエフェクトをかけるサンプルです。 require 'rubygems' require 'RMagick' imgs = Magick::Image.read("./kitten.jpg") img = imgs.first img = img.sketch( 5.0, 5.0, -45 ) # スケッチエフェクトを適用 img.write( "./sketched.jpg" …

RMagickで画像の種類とサイズを表示するサンプル

RMagickは画像処理ライブラリ「ImageMagick」のRubyインターフェイスです。これを使うと、 画像を解析して情報を取り出す。 画像を読み込んでエフェクトを適用する。 画像を新規に作成する。 といった操作がさくっと行えます。ということで、ローカルにイン…

余力情報の取得に対応

余力情報の取得に対応しました。 →Github - unageanu / clickclient_scrap モバトレ君の「口座/余力確認」ページで確認できる情報を取得できるようにしています。 サンプル $: << "../lib" require 'clickclient_scrap' require 'constants' # ログイン c = …

演算子式の戻り値

Rubyではいくつかの演算子はクラスのメソッドとして再定義することが可能です。ということは、演算子式の戻り値を変えてやれば、代入式の評価結果を変更できるんじゃね?と思いたって試してみましたがやはり不可でした。 class Foo def var=(value) return "v…

クロスアップ/クロスダウンを判定するユーティリティ

先行指標と遅行指標を受け取って、クロスアップ/クロスダウンを判定するユーティリティです。利用例と挙動の説明は以下。 require 'cross' cross = Cross.new # 先行指標、遅行指標を受け取って状態を返す。 # :cross .. クロスアップ、クロスダウン状態かど…

HTTPClient::Timeout

httpclient付属の「HTTPClient::Timeout」を使うと、処理が指定された期間で完了したかチェックして、完了しない場合エラーとする機能を簡単に実現できます。 同様の機能を提供する標準添付のライブラリとしてtimeout.rbがありますが、これと比較して以下の…

FireBugを1.4.0にするとWebrickサーバー上のJavaScriptファイルがデバッグできなくなった

FireBugを1.4.0にアップデートすると、Webrickサーバー上のJavaScriptファイルがデバッグできなくなってしまった。「スクリプト」タブからjsのソースを開こうとすると、 The resource from this URL is not text: http://127.0.0.1:7000/js/xxxx.jsとか言わ…

今日の罠

単純なif文ですが。 hash = {:a=>"a"} # ハッシュにキーがあり、且つ # 値がnilでなければ"aaa"を表示 if hash.key? :a && hash[:a] puts "aaa" else puts "bbb" end 実行結果です。条件を満たすハズなのにfalseと評価され"bbb"が出力されます。 bbb ぬー、…

Thread#raise

Thread#raiseで、任意のスレッドで強制的に例外を発生させることが可能です。 例外なので、スレッド内で捕捉(catch)して処理を振り別けることができます。 ensureブロックもちゃんと実行されます。 t = Thread.fork { begin p "start" i = 0 while true p i+…

includeしたmoduleのconst_missingが実行されるようにする。

昨日の続き。includeしたmoduleのconst_missingは実行されないわけですが、ふと思い立って以下のコードを試してみたら無事動作しました。戦略的には、 includeしたクラスでconst_missingを定義しておき、 その中で、includeしたモジュールから定義を探す。 …

includeしたmoduleのconst_missingは実行されないのか

モジュールで定義されていない定数を参照したとき、Module#const_missingが実行されます。 module A AAA = "AAA" def self.const_missing(id) return "BBB" if id == :BBB raise "not found." end end puts A::AAA puts A::BBB 実行結果です。 AAAは定数とし…

RSIを算出する

RSIを算出するクラスです。 module Signal #===一定期間のレートデータを元に値を算出するシグナルの基底クラス class RangeSignal include Signal def initialize( range=25 ) @datas = [] # レートを記録するバッファ @range = range end def next_data( d…

最小二乗法で配列内の値の傾きを得る関数

最小二乗法で配列内の値の傾きを得る関数です。このサイトを参考に実装しています。 #===最小二乗法で、配列内の値の傾きを得る。 #datas:: 値の配列 #戻り値:: 傾き。0より大きければ上向き。小さければ下向き。 def vector( datas ) # 最小二乗法を使う。 …

クリック証券アクセスプラグインのメモリリークをデバッグ中

先週公開したjiji用クリック証券アクセスプラグインですが、連続で2,3日動かしているとメモリ使用量が酷いことに・・・。申し訳ありません。 原因 ※注: 以下はWWW::Mechanize0.9.0 のソースを対象に調査した結果です。ということで、ツールを作って調査して…

Math#max

あれ、Math#maxってないんだっけ。どっかで見た覚えがあるんだが・・・と思ったらこれでした。最大の整数が欲しい場合は、これを使ってこんな感じで書くのがスマートかな。 a=3 b=7 c=5 # 最大の整数を得る。 p [a,b,c].max 実行結果です。 7

インスタンスの所有者を探索するクラス

任意のインスタンスの所有者(インスタンス変数としてインスタンスを保持するインスタンス)を探索するクラスを書いてみました。 ObjectSpaceを使ってインスタンスを列挙して、全ての所有インスタンスのIDを記録。 記録したデータを元に、逆引きで所有者の一覧…

クラスごとのインスタンスの数を数える関数

クラスごとのインスタンスの数を数える関数を書きました。 #インスタンスの数を数える def count_instance count = {} ObjectSpace.each_object {|object| clazz = object.class.to_s count[clazz] ||= 0 count[clazz] += 1 } return count end #インスタン…

指数移動平均を算出する

指数移動平均を算出するライブラリです。 ちょっとリファクタして、移動平均や加重移動平均と共通部分を親クラスに移動しています。ファイルも1つに統合して、APIも微妙に修正してます。 あと、加重移動平均の加重が逆(古いものを重視)だったのも修正してま…

加重移動平均を算出する

移動平均もいろいろあるなー。→Wikipedia - 移動平均普通の移動平均は作成済みなので、その次の加重移動平均を実装。 # 一定期間の加重移動平均を得る class WeightedMovingAverage def initialize( range=25 ) @rates = [] # レートを記録するバッファ @ran…

ボリンジャーバンドを算出する

クリック証券のスクレイピング版プラグインもだいぶできつつある(現在稼動テスト&デバッグ中)ので、ぼちぼち組み込みのライブラリを充実させて簡単にエージェントを作れるようにしていきたい。ということで、とりあえずボリンジャーバンドを算出するライブラ…

WWW::Mechanizeで「can't modify frozen object」のエラーが発生する

久々にちょっと早く帰れたので、jijiのクリック証券プラグインを作っていたわけですが、レート情報を取ってくるところで以下のエラーが起きる。 , [2009-06-03T02:25:04.651000 #7420] ERROR -- : can't modify frozen object (TypeError) /usr/lib/ruby/1.8…

WWW::Mechanizeを0.9.2でIconv::InvalidEncodingエラー

WWW::Mechanizeを0.9.2にupdateすると、以下のエラーになってクリック証券スクレイピングライブラリが動作しなくなった・・・。 Iconv::InvalidEncoding: invalid encoding ("Windows-31J", "UTF-8") /usr/lib/ruby/gems/1.8/gems/mechanize-0.9.2/lib/www/m…

%記法

Rubyには「%記法」と呼ばれる文字列リテラルや正規表現リテラルを記述する別の記法があります。名前は聞いたことあったけど使ったことはなかったのですが、説明を読んでみると使いこなせばスマートな記述ができそう。ということで、便利そうな使い道をまとめ…

今日見つけたコード

なんだこのrescueと思ったら、 def foo # 処理 rescue LoadError # なんだこれ end メソッド定義の一部でした。こういう書き方もできるのかー。 def foo puts "start" raise "test" puts "end" rescue puts "rescue" ensure puts "ensure" end foo 実行結果…

今日見つけたコード

↓の場合は改行が文の区切りにならないのか。ふむ。 puts "<abc>". gsub(/</, ''). gsub(/>/, '') 実行結果です。 abc

Sinatraを0.9.2にupdateするとWEBrickで動作しなくなった

Sinatraを0.9.2にupdateすると、以下のエラーになって組み込みのWEBrickで動かなくなってしまった。 /usr/lib/ruby/gems/1.8/gems/sinatra-0.9.2/lib/sinatra/base.rb:930:in `detect_rack_handler': Server handler (thin,mongrel,webrick) not found. (Run…

今日見つけたコード

ヒアドキュメントの識別子の後(↓の例では「 puts (<<-HTML).gsub(/^ {2}/, '') <html> <head>...</head> <body>...</body> </html> HTML 実行結果です。「gsub(/^ {2}/, '')」により先頭のインデントが消えています。ふむ。 <html> <head>...</head> <body>...</body> </html>