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

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

Scala

クラスを取得する。

Scalaにはクラスリテラルはありませんが、代わりに組み込み関数「classOf[]」を使って指定した型のjava.lang.Classを取得できます。 println( classOf[String] ) println( classOf[List[Object]] ) println( classOf[List[String]] ) 実行結果です。 class j…

性能計測ユーティリティ

だいぶ前にScalaで書いた性能計測ユーティリティを発掘しました。ScalaなのでJavaクラスの性能計測で使えます。以下はサンプル。 // 関数を5回実行して、処理時間の平均・最大・最小を出力する。 print( Perf.perf( "test", 5 ) { Thread.sleep(500); }.toSt…

Compound Types

<継承元の型> { <追加の定義...> }で、継承元の型に合致し、さらに追加の定義を持つ型を作成?できます。例えば // Cat派生でかつmeowメソッドを持つ何かを引数として受け付ける関数 def meow( foo: Cat { def meow:Unit } ) = { foo.meow } みたいなCompound…

@serializable

アノテーションを使ってシリアライザブルであることを明示できます。 // アノテーションを使ってシリアライザブルであることを明示 @serializable class Foo {} // ↑は↓と同じ class Var extends java.io.Serializable {} // 確認 println( "Foo: " + new Fo…

関数を連結する

Function#chainで複数の関数を連結して、1つの関数にできます。 // 連結する関数の配列 var fs = Array( (i:Int)=>i+2, (i:Int)=>i*3, (i:Int)=>i-2) // 連結した関数を実行。 println( Function.chain(fs)(4) ) 実行結果です。 16

配列に指定の要素が含まれているか評価する

existsが簡単。 val array = Array("a", "b", "c") if ( array.exists( i=> "a".equals(i) ) ) println( "exist" ) else println( "not exist" ) findして、isEmptyで評価するとか。 if ( array.find( i=> "a".equals(i) ).isEmpty ) println( "not exist" )…

任意の長さの文字列を返す式をさくっと作成したい。

Scala でも「*」が使えます! println( "a"*20 ) 実行結果です。 aaaaaaaaaaaaaaaaaaaa

Int配列中の最大、最小、平均を得る

こんな感じで書いてみた。 var datas = Array(9,3,5,7) // 最大 println( "max:" + datas.reduceLeft( (max,i) => i max max ) ) // 最小 println( "min:" + datas.reduceLeft( (min,i) => i min min ) ) // 平均 println( "avg:" + datas.reduceLeft( (sum,…

By-Name ParametersでJavaライクなsynchronizedを作る

「By-Name Parameters」を使うと、 foo { println("aaaa") } みたいな感じで呼び出せる関数を作成できます。関数fooの定義は以下のような感じ。 def foo[R]( proc: => R ):R = { try { println("before...") proc // 引数のprocを評価して実行 } finally { p…

NodeSeq#\

NodeSeq#\、NodeSeq#\\で遊んでみた。 // XML リテラル var xml:scala.xml.Elem = <kittens type="animal" xmlns="http://kittens.com" xmlns:t="http://tigers.com"> <kitten age="1">mii</kitten> <t:tiger age="2">tora</t:tiger> <kitten age="3">shiro</kitten> <foo> <kitten age="3">kuro</kitten> </foo> </kittens> // ルート直下のk…

XMLリテラル

XMLリテラルとかあります。 // XML リテラル var xml:scala.xml.Elem = <kittens xmlns="http://kittens.com"> <kitten>mii</kitten> <kitten>tora</kitten> <kitten>shiro</kitten> </kittens> // kittens/kitten要素を探してきてそのテキストを表示する。 // -filterのところは「Node.xmlType」を使うのがよさげ。 // -「Node.\」でもっとシンプルにかけそう。…

Prefix Operations

クラスやTraitに、 def unary_<演算子(- or + or ! or ~)> = ... のようなメソッドを定義しておくと、 <演算子> <レシーバ> の形式でメソッドを呼び出すことができます。 // テスト用クラス class Foo( value:Int ) { override def toString = value.toStrin…

sbazでパッケージをインストールする

最近気付いたのだけど、scalaの世界にも「Scala Bazaars」というパッケージ管理の仕組み(rubyのRubyGems的なモノ)があります。「sbaz」というツールが提供されていて、これを使ってパッケージの追加/削除が可能。基本的な使い方は次の通りです。 # インスト…

Scala+SpecsでMavenなJavaプロジェクトのテストを書く

Specsは、Scalaで使えるBDDなテスティングフレームワークです。JUnit4アダプタが提供されており、Mavenに組み込んで使うことが可能!ということで、MavenなJavaプロジェクトのテストをScala+Specsで書く手順をまとめてみます。 といっても基本的には、 pom.xm…

Mavenでscaladocを作る

maven-scala-pluginでは、scaladocの作成もサポートされています。手順は次の通り。 pom.xmlの「reporting」にmaven-scala-pluginの設定を書く 「mvn scala:doc」! 1.pom.xmlにmaven-scala-pluginの設定を書く。 pom.xmlの「project/reporting」に以下の設定…

複数行文字列リテラル

"""<文字列>""" で改行を含む文字列リテラルとなります。 // 改行を含む文字列リテラル。 var strs = """aaa bbb ccc""" println(strs) 実行結果です。インデントもそのまま残ります。 aaa bbb cccインデントうぜー、とか思う人は、RichString#stripMarginを…

MavenでScalaのソースコードをコンパイルする

Mavenを使ってScalaのソースコードをコンパイルする簡単なサンプルです。maven-scala-pluginを使ってさくっとコンパイルできます。 Scalaのソースコード置き場を作成し、ソースコードを配置 pom.xmlにmaven-scalaプラグインの取得先とか、scalaでコンパイル…

型キャスト

オブジェクトを指定の型にキャストするには、Any#asInstanceOfを使います。また、指定した型と互換性があるか評価するにはAny#isInstanceOfを使います。 どちらもAnyのメソッドです。 型パラメータとして、変換or評価したい型を渡します。 var i = 10 var st…

派生クラスでtype aliasの指定を強制する

abstractなclass or trait に、型指定のない名前だけのtype aliasを書くと、派生クラスでこのtype aliasの定義を強制することができます。 abstract class Foo( ) { // 派生クラスで明示する必要があるtype alias // このクラスの派生クラスでは、Xのtype al…

type alias

type <名前> = <型> で、型に別名をつけることができます。 別名をつけた型は、別名でパラメータの型指定などに使えます。 複雑な型パラメータを持つ型を複数回使うような場合に便利。 // 「Array[Int]」の別名としてXを作る。 type X = Array[Int] // X型の…

MailBox

MailBoxは、複数スレッド間での同期制御とメッセージの送受信をさくっとできるようにするユーティリティクラスです。 要は、Javaにおけるjava.util.concurrent.BlockingQueueです。メッセージ送付側はブロックしないようなので、容量制限のないjava.util.con…

スレッドの同時実行制御(synchronized)

synchronizedで複数スレッドの同時実行制御ができます。 機能はJavaのsynchronizedと同じで、指定された処理が、1スレッドからのみ実行されるようになります。同時に複数スレッドから実行されることはありません。 Javaと違って、すべての参照型の基底クラス…

spawnで処理を並列実行する

scala.concurrent.opsで定義されているspawnメソッドを使って、任意の処理を別スレッドで並列に実行させることができます。 処理は引数で渡します。 内部的には、処理を実行するだけの専用のスレッドが1つ生成されるようです。スレッドは処理の実行完了後に…

世界のナベアツに Scala で挑戦する

今更ですが、世界のナベアツに Scala で挑戦してみました。 Scalaだと、 <レシーバ> <メソッド> <引数>でメソッドを呼び出したりできるので、「.」とか「()」とかを排除できてやばいことになるんじゃね!と思って始めたのだけど、0にするのは無理でした。 imp…

正規表現

Regexを使うのがよさげです。 使い方はAPIドキュメントを見ればだいたいわかるかと。 なお、古いScalaには含まれていないので注意。scala-2.7.0には入っておらず、scala-2.7.1.finalを落としてくると入ってました。 以下は簡単なサンプルです。 // 正規表現 …

View Bounds

「暗黙」シリーズ3つめ。型パラメータの指定で [<型パラメータ名> <% <クラス>] 例) [X <% String] とすることで、「に暗黙的に変換可能ななにか」を受け付ける関数が作成できます。 上の例だと、Xは「Stringに変換可能な何か」になります。 なので、実行時…

Implicit Conversions

「暗黙」シリーズ二つめ。「implicit」をつけた型変換用関数を定義しおくと、暗黙の型変換が行われるようになります。 型変換は、必要なときに自動的に変換関数が実行されることで行われます。 型変換用の関数は「implicit」をつけて定義しておく必要があり…

Implicit Parameter

関数のパラメータに「implicit」をつけておくと、関数の呼び出し時にその引数を省略できるようになります。省略された引数には、メソッドの呼び出し元コンテキストで一番それっぽいimplicit付きの値をコンパイラが選択して挿入してくれます。 「implicit」は…

lazyで値を遅延評価する

「val」で不変の値を定義する際に、「lazy」修飾子をつけると、値が遅延評価される(最初にアクセスされたときにのみ評価され、定義時には評価されない)ようになります。 「lazy」は「val」にのみ設定できます。「var」や「def」に設定することはできません。…

Iterator

要素を必要になったときに作成して返す仕組みとしてはStreamのほかにIteratorもあります。hasNext(),next()を持つアレです。Java使いにはこっちの方がわかりやすいかも。以下はフィボナッチ数を順に返すイテレータのサンプルです。 Iteratorを継承した無名ク…