letlambdaは関数を定義するためのものでしたが、letはローカル変数を定義するための特殊構文です。)という書き方をします。)は15という結果になります。)のように書くことができます。f()としてもよいのですが、letを使うとfの呼び出しが1回で済むため、効率的です。ボリンジャーバンドここまでの知識を使うと、ボリンジャーバンドが定義できるようになりました。}これはボリンジャーバンドの幅を求める関数です。求め、終値の配列の各要素にmapを適用してmaとの差の配列に変換し、最後にsdev関数でその標準偏差を求めます。nil値nilは、値が無効であることを示す特殊な値です。JavaやC#のnullに近い概念ですが、「nilを含む演算の結果は常にnilになる」という点が大きく異なります。整数やbool値の演算についても例外ではなく、nilは何と演算してもnilになります。このとき、エラーにはならないことに注意が必要です。その点では、浮動小数値のNaNに近いふるまいをします。関数呼び出しについては、引数のどれか一つでもnilであれば関数の実行結果もnilになります。配列については、配列の要素のどれか一つでもnilであれば配列の値もnilになります。このような仕組みになっている理由は、以下のようになります。30分間の移動平均と現在値の差を求める場合を考えてみます。分足を示すオブジェクトをqとすると、30分間の移動平均は、q.ma(30)となります。q.close()となりますが、「q.ma(30)」は取引開始から最初の30分間は当然算出は不可能であるため、nilを返します。なり、q.close()が何かの値を持ったとしても全体が必ずnilになります。q.close()と書くところで足の長さが十分かどうかをチェックするための条件分岐が必要になってしまい、記述が煩雑になってしまいます。私は、検討の結果、このような動作であるほうがテクニカル指標の記述には好都合であると判断しました。これは既存のプログラム言語でなく独自のスクリプトを用意した理由の中でも大きなものとなっています。繰り返しTacticoのスクリプトは文が書けないため、C言語のforやwhile文のような形で繰り返しの処理をすることはできません。そのかわり、配列に対して関数を引数にメソッドを呼び出して類似のことができます。eachは、足の位置を1日ずつずらしながら関数を実行します。q.close(25).avg()))は、過去5日間のそれぞれについて25日移動平均を計算し、結果として長さ5の配列が生成されます。eachの最初の引数は繰り返しを行う長さ、2番目の引数は日にちをずらしたそれぞれのQuoteについて実行する関数です。他にも、関数を引数にとる関数を呼ぶことで通常なら繰り返し処理が必要になる処理が実行できます。詳細は関数のリファレンスをご覧ください。||の論理演算ではショートカットが行われます。さきに演算子の左辺を評価して、その結果右辺の評価が不要であれば右辺はスキップします。どちらの記述をするかを選択すると(実行結果は変わりませんが)パフォーマンスが向上します。複雑な式を書くときには留意してください。その先に進むために以上でスクリプト言語の解説は終わりです。使用方法についての質問、期待どおりの動きでない場合の原因究明のサポート、組み込み関数の追加の要望、などに関してはメーリングリストに質問する弊社のテクニカルサポート契約を申し込む(有償)ソースコードを見て独自に分析するなどでお願いします。テクニカル指標をいろいろと分析して試行錯誤するのは楽しいものです。ご意見お待ちしています。