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

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

List comprehension

List comprehensionとかいう耳慣れない機能を発見したので使ってみます。
これを使うと、

  • 各要素を処理した結果リストの作成(rubyArray#map!みたいなこと)
  • 条件を満たす要素での絞り込み(rubyArray#reject!みたいなこと)
  • リスト同士の総当たりによるリストの生成

が簡単にできます。

形式

次の形式で書きます。

[ <処理> || <パターン> <- <リスト生成式>, <フィルタ式>... ].
  • 「<パターン> <- <リスト生成式>」の部分はgeneratorと呼ばれ、処理するリストを指定します。
    • 「<リスト生成式>」で生成されたリストの値が「<パターン>」の取り得る値になります。
    • generatorは「,」区切りで複数指定できます。複数のgeneratorが指定された場合、各パターンの積(総当たり)が処理の対象となります。
  • 「<フィルタ式>」で実際に処理するパターンを絞り込む式を指定します。
    • booleanの結果を返す式である必要があります。
    • trueを返すパターンのみ、結果のリストに含まれます。
  • 「<処理>」に結果となるリストの要素を生成する式を書きます。

サンプル

各要素を処理した結果リストの作成

配列の各要素を2倍した要素を作ります。

> [ X*2 || X <- [1,2,3,4] ].
[2,4,6,8]
条件を満たす要素での絞り込み

偶数のみに絞り込み。

> [ X || X <- [1,2,3,4], X rem 2 == 0 ].
[2,4]
総当たりリストの生成

二つのリストの積集合を取得します

> [ {X,Y} || X <- [1,2,3,4], Y <- [10,20,30] ].
[{1,10},
 {1,20},
 {1,30},
 {2,10},
 {2,20},
 {2,30},
 {3,10},
 {3,20},
 {3,30},
 {4,10},
 {4,20},
 {4,30}]

組み合わせたサンプル

二つのリストの組み合わせのうち、値の積が3の倍数となるもののリストを作成します。

> [ {X,Y} || X <- [1,2,3,4], Y <- [10,20,30], X*Y rem 3 == 0 ].
[{1,30},{2,30},{3,10},{3,20},{3,30},{4,30}]

参考: Erlang Reference Manual - 6.22 List Comprehensions