ここでは、Tacticoのスクリプトで利用可能な組み込み関数について説明します。各関数の型は、(引数型, 引数型, ... ) -> 戻り値の型 というようになっています。
また、型の説明におけるT,SはJavaやC#のGenericsのように、ポリモーフィックにあらゆる型に適用可能な関数です。
関数名 | 説明 | 型と戻り値 | 実行例(*) |
---|---|---|---|
length | 配列の長さを計算 | T[] -> int | length(t) = 3 |
empty | 配列が空であるかどうかを判定 | T[] -> bool | empty(t) = false |
car | 配列の先頭要素 | T[] -> T | t.car() = 1 |
cdr | 配列の先頭以外の要素,配列の長さが1のときはnil | T[] -> T[] | t.cdr() = [2, 4] |
series | 整数の配列を作成する関数です。引数が1個のときは0からの、2個のときは開始値と終了値を指定しての配列が得られます。 | int -> int[] (int,int)->int[] |
series(3) = [0,1,2], series(2,5) = [2,3,4] |
rseries | seriesとは逆順に整数の配列を作成する関数です。 | int -> int[] (int,int)->int[] |
rseries(3) = [2,1,0], rseries(2,5) = [4,3,2] |
(*)"t"は[1,2,4]という長さ3の配列であると仮定して実行例を示します
関数名 | 説明 | 型と戻り値 | 実行例(*) |
---|---|---|---|
sum | 和を計算 | int[] -> int double[] -> double |
sum(t) = 7 t.sum()という書き方も可能です |
avg | 平均を計算 int[]の平均もdoubleになります |
int[] -> double double[] -> double |
avg(t)=2.333... t.avg()という書き方も可能です |
sdev | 標準偏差を計算 int[]の標準偏差もdoubleになります |
int[] -> double double[] -> double |
sdev(t)=1.914... t.sdev()という書き方も可能です |
min | 各要素、または2つの数値の最小値を計算 | int[] -> int double[] -> double (double,double) -> double |
min(t)=1 t.min()という書き方も可能です |
max | 各要素、または2つの数値の最大値を計算 | int[] -> int double[] -> double (double,double) -> double |
max(t)=4 t.max()という書き方も可能です |
rci | RCIを計算 | double[] -> double | 省略 |
"t"は[1,2,4]という長さ3の配列であると仮定して実行例を示します
関数名 | 説明 | 型と戻り値 | 使用例 |
---|---|---|---|
sqrt | 平方根 | (double)->double | sqrt(4.0) = 2 |
pow | べき乗 | (double,double)->double | pow(3.0, 2.0) = 9 |
log | 自然対数 | (double)->double | log(3.0) = 1.0986... |
abs | 絶対値 | (int)->(int) (double)->double |
abs(-3) = 3 |
round | 四捨五入で整数へ丸める | (double)->int | round(1.5) = 2 |
floor | 引数以下の最大の整数へ丸める | (double)->int | floor(-1.5) = -2 |
ceiling | 引数以上の最小の整数へ丸める | (double)->int | ceiling(-1.5) = -1 |
関数名 | 説明 | 型と戻り値 | 実行例(*) |
---|---|---|---|
nil() | 常にnilを返す | () -> nil | volume()>100000? volume() : nil() |
nilProof(E, n) | Eを評価し、それが非nilなら評価結果を、nilならnを返す | (T, t) -> T | nilProof(foo(), 0) nilのときは整数0として計算を続行 |
ここは関数を引数に取る関数が出てきます。他よりやや高度な内容です。
関数名 | 説明 | 型と戻り値 | 実行例(*) |
---|---|---|---|
map | 配列の各要素に関数を適用し、それらの結果からなる配列を返す | (T -> S) -> S[] | t.map(lambda((int x) x * x)) = [1, 4, 16] |
all | 配列の各要素にboolを返す関数を適用し、それらがすべてtrueのときのみtrueを返す | (T -> bool) -> bool | t.all(lambda((int x) x > 0)) = true |
any | 配列の各要素にboolを返す関数を適用し、それらにひとつでもtrueがあればtrueを返す | (T -> bool) -> bool | t.any(lambda((int x) x > 3)) = true |
count | 配列の各要素にboolを返す関数を適用し、それらがtrueを返した個数を返す | (T -> bool) -> int | t.count(lambda((int x) x > 3)) = 1 |
(*)"t"は[1,2,4]という長さ3の配列であると仮定して実行例を示します
いずれも、各要素に適用する過程でnilが返ると全体がnilになります。
これらはOmegaChartの頃には存在しないスタイルの関数でした。応用幅は広いので、使いこなすと便利です。
例 q.close(5).all(lambda( (double v) v > q.ma(25) )) 過去5日すべてで、25日移動平均を上回っている q.sublist(20).count(lambda( (Candle c) c.open() < c.close())) 過去20日間での、陽線の回数
ロウソク1本分を表現します。これは単純なオブジェクトです。
関数名 | 説明 | 型と戻り値 | 使用例 |
---|---|---|---|
open | 始値 | ()->double | |
high | 高値 | ||
low | 安値 | ||
close | 終値 | ||
volume | 出来高 | ||
tradeAmount | 売買代金(終値と出来高の積) | ||
shift | 引数に整数をとり、その距離だけ移動した位置にあるCandleオブジェクトを返します。引数に負の数を指定することもできます。該当データがなければnilです。 | (int)->Candle | c.shift(5) 5本前(日足なら5日前)の位置にあるCandle |
distanceTo | 別のCandleと何本離れているかを返します。日足なら何営業日離れているかになります。引数のCandleとこのCandleは同一のQuoteに所属していなければなりません。 | (Candle)->int | nがいくつであっても、c.distanceTo(c.shift(n))は常にc自身になります。 |
Quoteは、日足・分足などの「足」を表現します。Quoteは、Candleの配列としての役割をあわせもっているので、上記の配列に適用可能な関数もすべて使えます。
関数名 | 説明 | 型と戻り値 | 使用例 |
---|---|---|---|
open | 始値 | 3通りの形式があります。 1. ()->double 2. (int)->double[] 3. (int, int)->double[] |
1. q.close() 最新のロウソクの終値 2. q.open(5) 最新のロウソク5本のそれぞれの始値から成る長さ5の数値配列 3. q.high(5, 3) 最新のロウソク5本のうち、最初の3本のそれぞれの高値から成る長さ3の数値配列 |
high | 高値 | ||
low | 安値 | ||
close | 終値 | ||
volume | 出来高 | ||
tradeAmount | 売買代金 | ||
ma | 移動平均 | (int)->double | q.ma(5)はavg(q.close(5))と同じ意味です |
wma | 加重移動平均 | (int)->double | 直近の終値を重視する移動平均です |
ema | 平滑移動平均 | (int, int)->double | 最初の引数が日数、二番目の引数が平滑化を行う日数です。例えばema(5,20)の場合、20日前での5日単純移動平均をもとに20日間分の平滑化を行い当日の平滑移動平均を求めます。平滑化日数は計算時間に大きく影響するので長め設定をするときには注意してください。 |
sublist | 足を部分的に切り取って、新しいQuoteオブジェクトを返す | (int)->Quote (int, int)->Quote |
q.sublist(100) = 過去100本のロウソクから成るQuoteオブジェクト q.sublist(100, 50) = 過去100本のうちの先頭50本(日足なら、100日前から51日前までの50本) |
last | 指定した長さの、最後の足を切り取って新しいQuoteオブジェクトを返す | (int)->Quote | q.last(10) = 最新10本の足から成るQuoteオブジェクト |
candleAt | 指定したインデックスの位置にあるCandleオブジェクトを返す | (int)->Candle | q.candleAt(0) = 最後のCandleオブジェクト q.candleAt(3) = 3本前(日足なら3日前)のCandleオブジェクト |
lastCandleAt | 最後のCandleオブジェクトを返す | ()->Candle | q.lastCandle()はq.candleAt(0)と常に同じです |
shift | (int)->Quote | 最後を切り取ったQuoteを返す | q.shift(5) = 最後の5本を除いたQuote(日足なら、5日前の時点での最新Quote) |
each | (int, (Quote)->double)->double[] | ロウソクの位置をずらしながら順次計算 | スクリプトの概要の「繰り返し」の項を参照 |
いずれも、足の長さが不十分である場合は常にnilを返します。
グローバル関数stock()を呼ぶと、銘柄の情報を収録したstockオブジェクトにアクセスできます。チャート表示ではそのチャートを表示しようとしている銘柄、スクリーニングや自動売買検証ではそのときに評価しようとしている銘柄になります。Stockオブジェクトでは以下の操作ができます。
関数名 | 説明 | 型と戻り値 | 実行例 |
---|---|---|---|
unit | 単位株数(指数では便宜的に1が返ります) | () -> int | 終値で1単位の金額 stock().unit() * close() |
taisyaku | 貸借銘柄であるかどうかを取得 | () -> bool | スクリーニングでfilterに stock().taisyaku()の条件を追加すれば貸借銘柄のみに対象を限定できます。 |
market | 所属市場の判定 引数に下記の市場コードを文字列で指定し、所属をbool型で判定します。 市場コードは | 記号で連結でき、複数の市場に上場している銘柄は主市場についてのみ判定されます。 T:東証 T1:東証1部 T2:東証2部 TM:マザーズ O:大証 O1:大証1部 O2:大証2部 J:JASDAQ H:ヘラクレス |
(String) -> bool |
* stock().market("T") 東証であればtrue * stock().market("T1|O1") 東証・大証1部であればtrue * stock().market("TM|J|H") 新興3市場いずれかであればtrue なお、マザーズは東証の一部ですが、ヘラクレスは大証の一部ではありません。 |
関数名 | 説明 | 型と戻り値 | 実行例 |
---|---|---|---|
refbrand | 日足Quoteオブジェクト取得 | (String) -> Quote | code("8002") コード8002(丸紅)の日足を示すQuoteを取得 コードは文字列なので、""で囲む必要があります。また、これはチャート上の指標を定義する式では使用できません。スクリーニング・自動売買検証・スクリプトのテスト機能では使うことができます。 |
Quote#refbrand | 日足Quoteオブジェクト取得 | (String) -> Quote | Quoteオブジェクトのメソッドとしてのrefbrandもあります。その場合、ターゲットのQuoteと同一の最終日付を持った、指定した銘柄のQuoteオブジェクトが取得できます。例えば、shift(3).refbrand("8002")は3日前までの日付を持った丸紅の日足データになります。 |
関数名 | 説明 | 型と戻り値 | 実行例 |
---|---|---|---|
entry | ポジションを取った価格 | () -> Quote | シグナルが発生し、ポジションを取った価格を返します。利益確定/ロスカットの条件判定を書く式の中でのみ使える特殊な関数です。 |
daycount | ポジション日数 | () -> int | シグナルが発生してから何日経過したかを返します。シグナル発生当日が0、翌日が1、以降順に増えていきます。 |
関数の動作に不明な点がある場合、新規に追加してほしい動作がある場合、目的の動作をするためにはどのように書いたらよいかわからない場合、等はサポートまでお問い合わせください。
(C) 2010 Lagarto Technology, Inc. All rights reserved.