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

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

Ruby

レンジブレイク手法でのトレードをアシストするBotのサンプル

FXシステムトレードフレームワーク「Jiji」 のサンプルその3。 レンジブレイク手法を使ったトレードをアシストするBotを作ってみました。 FX Wroks さんのサイト に掲載されていた「レンジブレイクを狙うシンプルな順張り」手法を、そのままJijiに移植してみ…

トラップリピートイフダンのような注文を発行するエージェントのサンプル

FXシステムトレードフレームワーク「Jiji」のサンプル その2、として、 トラップリピートイフダンのような注文を発行するエージェントを作ってみました。 ※トラップリピートイフダン(トラリピ)は、マネースクウェアジャパン(M2J)の登録商標です。 トラップ…

インタラクティブにトレーリングストップ決済を行うBotを作ってみた

FXシステムトレードフレームワーク「Jiji」の使い方サンプル その1、ということで、 Jijiを使って、インタラクティブにトレーリングストップ決済を行うBotを作ってみました。 トレーリングストップとは 建玉(ポジション)の決済方法の一つで、「最高値を更新…

MongoDBのinsert/updateをまとめて、bulk insert/update に流すユーティリティを書いた

バッチ処理などでMongoDBに大量のinsert/updateを行うとき、Mongoidを使って1つずつ #save してると遅い。 ということで、複数の #save をまとめて bulk insert/update に流すユーティリティを書いてみました。 使い方 モデルクラスで、Mongoid::Document と…

nukeproof/oanda_api のコネクションリーク問題とその対策

OANDA fx Trade APIのRubyクライアント「nukeproof/oanda_api」には、TCPコネクションリークの問題があり、長時間連続で利用しているとファイルディスクリプタが枯渇します。 内部で利用している persistent_http の古いバージョンにある不具合が原因(最新の…

OANDA fx Trade API を使って、リアルタイムな為替レートを取得してみる

今さらですが、OANDA Japan から FXトレードAPI が提供されているのを発見。 www.oanda.jp レート情報の取得から、取引、建玉情報の取得などのFX 取引に必要なAPI一式が提供されています。 初期費用、月額利用料金は無料。ただし、口座残高が25万円以上必要…

設定値管理ライブラリ Figaroを使う

Figaro は Rubyアプリ用のシンプルな設定値管理ライブラリ です。 laserlemon/figarogithub.com 設定ファイル(YAML)の値を読み込んで、アプリから参照できるようにします。 設定ファイルは1つ。その中に、環境(development,production,test)ごとの設定も書く…

Code Climate + Circle CI でRubyプロジェクトのコードカバレッジを計測する手順

Code Climate + Circle CI でRubyプロジェクトのコードカバレッジを計測する手順です。 試したのはCircle CIですが、テストが実行できる環境であればTravis CIやJenkinsでも同じ仕組みでできるはず。 概要 テストに SimpleCov を仕込み、コードカバレッジを…

キャッシュしたデータが消える!?prefork型HTTPサーバーUnicornでドはまりしたメモ

HTTPサーバーUnicornを使っていてドはまりしたのでメモ。 主に、Unicornで動かすRackアプリでの変数スコープとpreload_appについて。 サマリ Uncornは、RackアプリケーションのためのHTTPサーバーです。 HTTPリクエストを、メインプロセスからforkした子プロ…

resqueで非同期分散処理を試す

resqueは非同期処理の仕組みを提供するライブラリです。 Webアプリで、画像変換とかメールの一括送信のような重たい処理を行うときに使ったりします。 Railsに組み込んで使うこともできる模様。 複数ノードでの分散処理にも対応。 管理コンソールがついてい…

Rakeの基本的な使い方まとめ

Rakeの基本的な使い方のまとめです。 インストールから、Rakefileの書き方、組み込みライブラリの使い方まで。 忘れたときに見返す用に。 Rakeって何? rubyで処理内容を定義できるビルドツール。「xmlでなくrubyでbuild.xmlを書くAnt」ですな。 ruby専用とか…

一定期間経過するとログアウト状態になる問題に対応したsbiclientをプレリリース

tana さんよりご報告頂いた、「起動後一定期間経過するとレート情報が取得できなくなってしまう」問題に対応したsbiclientをプレリリースします。→Github - unageanu / sbiclient →Gemcutter.org - sbiclient 原因 ログイン後一定期間経過すると、強制的にロ…

Javaメソッドの呼び出し元をツリー表示するスクリプト

JavaClassを使って指定メソッドの呼び出し元を探索しツリー表示するスクリプトを書いてみました。 引数で指定されたパス以下の*.class,および*.jarに含まれるクラスファイルを解析し、 メソッドの呼び出しコードを収集。 収集した情報を再帰的に探索し、呼び…

JSON-RPCで転送するJavaオブジェクトをさくっと作成するユーティリティ の続き

昨日作成したJSON-RPCで転送するJavaオブジェクトをさくっと作成するユーティリティですが、Ruby→JSONへのシリアライズだけじゃなく、JSON→Rubyへのデシリアライズもサポートしてればさらに便利じゃね?と思い立って実装してみた。API呼び出しの結果として返…

JSON-RPCで転送するJavaオブジェクトをさくっと作成するユーティリティ

JSON-RPCインターフェイスにRubyから接続するときに、Javaオブジェクトをハッシュでちまちま作るのはあまりにもメンドイと思って、ユーティリティを書いてみた。これを使うと # json-rpcでKittenオブジェクトを送付 client = JsonRpc::Client.new( "testServ…

今日気づいた勘違い

Rubyのクラス変数ってクラスとそのサブクラスでも共有されるんですね・・・。 # 親クラス class Parent # クラス変数 @@class_var = "parent" def class_var @@class_var end end # 派生クラス1 class SubClass < Parent @@class_var = "child" end # 派生ク…

jabsorbのJSON-RPCインターフェイスにRubyで接続してみる

昨日、jabsorbで作成したJSON-RPCインターフェイスにRubyで接続してみる例です。仕様どおりのJSON RPCなので、以下のような感じでさくっと接続できます。 #!/usr/bin/ruby -- require 'rubygems' require 'uri' require 'httpclient' require 'json/lexer' r…

サイトの仕様変更に対応したclickclient_scrapをリリース

またサイトの仕様が変わったらしくレート一覧の取得ができなくなっていたので、変更後のサイトに対応したclickclient_scrap-0.1.9をリリースしておきました。→Github - unageanu / clickclient_scrap →Gemcutter.org - clickclient_scrapあと、これは仕様変…

javaclassでCode属性とStackMapTable属性の解析をサポート

javaclassにCode属性とStackMapTable属性の解析機能を実装してコミットしましたよ。 →GitHub - unageanu/javaclass以下はjavaclassを使ってクラスの解析結果を表示する例です。Code属性の解析をサポートしたので(昔と違って)javapに近い結果が得られるように…

デモトレードに対応させてみた

体調不良につき今日は有休なのですが、2-3時間昼寝したらだいぶ回復したので少しだけコーディング。clickclient_scrapをデモトレードでの取引に対応させてみました。といっても アクセス先URLをデモサイトの方に変更。 デモサイトのほうはログイン後のJSでの…

今日の「お前は何をやっているんだ?」

今日見つけたコード。 class Test class << self def foo puts "foo" end end end ↓と一緒と考えて意味を理解。特異メソッドを定義しているわけですねー。「def self.」とか「module_function」を使う以外にもこういう方法があるのか。ふむ。 class Test; en…

罫線を使ったツリーを書く為のユーティリティ

微妙に汎用的に使える(かもしれない)、罫線を使ったツリーを書く為のユーティリティができあがったので公開。実装とサンプルは以下です。 #罫線を使ったツリーを書く為のユーティリティ class Node def initialize( name ) @name = name @children = [] yiel…

”-rwxrwxrwx”形式のパーミッション文字列を8進数の値に変換する関数

"-rwxrwxrwx"形式のパーミッション文字列を8進数の値に変換する関数を書きました。 # "-rwxrwxrwx"形式の文字列を8進数の値に変換する。 def to_oct( permition ) raise "illegal format" unless permition =~ /[\-dbclps]([\-r])([\-w])([\-sxS])([\-r])([\…

サイトの仕様変更に対応したclickclient_scrap & jiji をリリース

「サイトの仕様変更により、成り行き注文ができなくなっている」というご報告と修正パッチを頂いたので( ありがとうございます!助かります。 )、それを適用したclickclient_scrapをリリースしました。→Github - unageanu / clickclient_scrap →Gemcutter.org…

修飾子の優先順位

if修飾子とrescue修飾子を両方つけるとどうなるか、という話。以下のコードを実行すると、 puts "aaa" if true rescue puts "xxx" puts "bbb" if false rescue puts "xxx" raise "aaa" if true rescue puts "xxx" raise "bbb" if false rescue puts "xxx" pu…

TAI64N形式の文字列をTimeに変換する関数

ログを抽出する際にtai64nlocalするのを忘れたため、rubyで解析する羽目に。ということで、いろいろ手抜きしつつTAI64N形式の文字列をTimeに変換する関数を書きました。 「@40000000」ではじまる文字列のみ解析可能。(つまり1970-1-1以前の日時は解析できま…

CouchDBにRubyでアクセスしてみる

RubyでCouchDBにアクセスし、データの登録や取得を行うサンプルです。 CouchDBのインターフェイスはHTTPになっていて、GETやPUTで値の取得や登録ができます。 Ruby用のアクセスライブラリもいくつかあるようですが、HTTPでアクセスするだけならhttpclientで…

OpenSTAのTimers.csvを解析するクラス

OpenSTAの「Timer List」-「Export」で出力できるTimers.csvを解析するクラスを書きました。 処理時間をTimerごとに集計し、以下の値を算出します。 平均 最大 最小 スループット 計測期間のうち、前後の指定された期間のログをカットする機能付きです。 req…

成行で決済するサンプル

成り行きでの決済機能を実装しました。 →GitHub - unageanu/sbiclient以下は、すべての建玉を成行決済する例です。 $: << "../lib" require 'sbiclient' require 'common' # ログイン c = SBIClient::Client.new c.fx_session( USER, PASS, ORDER_PASS ) {|s…

形態素解析を行うサンプル

Yahoo! Developer APIの形態素解析サービスを利用して、テキストの形態素解析を行うサンプルです。昨日の特徴語抽出クラスに機能を追加する感じで作成。 例によって 依存モジュールとして「httpclient」が必要です。 また、実行時には、Yahoo! Developer API…

特徴語抽出を行うサンプル

Yahoo! Developer APIのキーフレーズ抽出サービスを利用して、テキストから特徴語を抽出するサンプルです。といってもhttpclientでサービスにアクセスして結果を解析し返すだけですが・・・。 依存モジュールとして「httpclient」が必要です。 また、実行時…

建玉一覧を取得するサンプル

建玉一覧取得に対応。 →GitHub - unageanu/sbiclient require 'sbiclient' require 'common' # ログイン c = SBIClient::Client.new c.fx_session( USER, PASS, ORDER_PASS ) {|session| # 建玉一覧を取得 rates = session.list_positions rates.each_pair {…

Ubuntuでローカルのpostgresに接続する手順

Ubuntu9.0.4で、Rubyからローカルのpostgresに接続する手順のメモです。 Ruby/DBIのインストール Ruby/DBIはrubyから各種DBへの接続を透過的に行う為のインターフェイスです。Javaの世界におけるJDBCみたいなものと理解。Ubuntuではパッケージが用意されてい…

トレール注文を行うサンプル

SBI証券のサイトより。トレール取引は 逆指値注文に値幅指定機能を追加する注文です。逆指値を注文するときに値動きによって売り逆指値価格を引き上げたり、買い逆指値価格を引き下げたりする注文です。 つまり、以下のような時にトレール注文で発注しておく…

IFD-OCO注文を行うサンプル

IFD-OCO注文の動作確認も完了。 →GitHub - unageanu/sbiclient IFD-OCO注文は、指値or逆指値での注文と、それの決済注文x2を同時に行う発注方法です。 決済注文は、以下の2つを同時に指定できます。 利益確定のための指値決済注文 損失限定の為の逆指値決済…

IFD注文を行うサンプル

IFD注文の動作確認ができたので、サンプルをば。 →GitHub - unageanu/sbiclient 通常の注文に加えて、決済注文のレートと執行条件を指定することでIFD注文になります。 require 'sbiclient' require 'common' # ログイン c = SBIClient::Client.new c.fx_ses…

rescue修飾詞

rescueって修飾詞もあるんだ。へー。 raise "test" rescue puts "error!" これは、以下と同じです。 begin raise "test" rescue puts "error!" end 実行結果です。 error!マニュアルによると「捕捉する例外クラスを指定できない=(StandardErrorの派生クラス…

OCO注文を行うサンプル

GitHub - unageanu/sbiclientを使ってOCO注文を行うサンプルです。 通常の注文に加えて、2つめの注文レートと売買種別を指定することでOCO注文になります。 require 'sbiclient' require 'common' # ログイン c = SBIClient::Client.new c.fx_session( USER,…

例外がスローされることをチェックする

例外がスローされることをチェックするには、「raise_error」マッチャーを使用します。 「proc { }.should raise_error」のような形式で使用します。 raise_errorの引数として、期待される例外の型やmessageの値を指定して詳細なチェックを行うことが可能で…

Global beforeとafter

beforeやafterを定義するには、 各テストに個別に設定する it_should_behave_likeを使って設定を共有する ほか、「Spec::Runner.configure」を使って定義することもできます。この方法で定義されたbefore,afterはすべてのテストで有効となります。以下は、「…

複数のRspecを一括実行する

「spec」コマンドの引数でディレクトリを指定すれば、そのフォルダ以下のspecを一括で実行してくれます。 $ spec <ディレクトリ> スペース区切りで複数のディレクトリを指定することも可能。 $ spec <ディレクトリ1> <ディレクトリ2> 探索するspecは「-p」オ…

同じexampleを複数のテストで共有する

RSpec documentationの「Shared Example Groups」に説明がありますが、「shared_examples_for」を使用して同じexampleを複数のテストで共有することが可能です。 「shared_examples_for 」で共有するexampleのグループ(「Shared Example Groups」と呼ばれる…

指値注文、逆指値注文を行うサンプル

荷解きも落ち着いてきたので、ぼちぼちライブラリの実装を再開。以下の機能を実装しました。 指値/逆指値での注文 注文一覧の取得 注文のキャンセル →GitHub - unageanu/sbiclient以下は、指値/逆指値で注文して即座にキャンセルするサンプルです。なお、SBI…

標準入力を処理するプログラムを書く

ARGFは引数がなければ標準入力からデータを読み込むので、これを使うのが楽なのかな?IOオブジェクト派生?なので、readとかgetsが使えます。以下は、標準入力のデータをBase64でエンコードして出力するフィルタの例です。 #!/bin/ruby puts [ARGF.read].pack(…

Regexp#union

Regexp#unionで複数の正規表現のいずれか一つにマッチする正規表現を作成できます。 reg = Regexp.union( /[a-c]+/, /[l-m]+/, /[x-z]+/ ) # 以下はすべてマッチする。 puts reg =~ "aaa" puts reg =~ "bbb" puts reg =~ "ccc" puts reg =~ "lll" puts reg =…

%

ヒアドキュメントもありますが、%を使っても複数行文字列をさくっと定義できます。 puts %( 複数行の 文字列です。 式展開もされます。→#{1+1} ) 実行結果です。 複数行の 文字列です。 式展開もされます。→2識別子を考えなくて言い分便利かも。 なお、同じ…

sprintfでObject#inspectの結果を出力する

「%p」指示子で、Object#inspectの結果を出力することができます。 class Kitten def initialize( name, age ) @name = name @age = age end end puts Kitten.new( "mii", 3 ).to_s puts Kitten.new( "mii", 3 ).inspect puts "%p" % Kitten.new( "mii", 3 )…

String#%

String#%はsprintfなのか。 puts "aaa %s ccc" % "bbb" 実行結果です。 aaa bbb cccふむ。

GemcutterでRuby Gemを公開する手順

Gemcutterはruby gemのホスティングサービスです。 gemのホスティングのみに特化したサービス rubyforgeやGitHubと違ってソースコード管理やプロジェクト管理の機能はなく、gemのホスティングのみに特化したサービスです。シンプルなぶん、使いやすい感じで…

クリック証券で提供されている為替レートのヒストリカルデータをjijiに取り込むスクリプト

クリック証券で提供されているヒストリカルデータをダウンロードして、jijiで使えるCSV形式にコンバートするツールを作ってみました。 使い方 $ ruby rate_data_importer.rb <クリック証券のユーザーID> <パスワード> <取り込む年> <開始月> <終了月>具体例…