TraderポデローザFXセンチネルUIコンサルティング会社情報スクリプトの概要Tacticoでは、スクリプト言語を用いて機能を拡張することができます。これによって、チャートに独自のテクニカル指標を搭載する自作の条件でスクリーニングをするといったことができるようになります。Tacticoの前身であるOmegaChartにも同様の機能はありましたが、そのときに分かったメリット・デメリットを踏まえたうえで改良を加えたスクリプトになっています。OmegaChartユーザの方には申し訳ありませんが、スクリプトの互換性はありません。形式は似ているのでわずかな書き換えで動くと思いますが、そのままでは動かないのでご了承ください。要望次第では、互換性を高めた特別なスクリプト動作モードを用意するかもしれません。この非互換は、主に静的な「型」の概念を導入したことが理由です。前提となる知識このドキュメントはスクリプト言語の入門という位置づけですが、一般のプログラム言語についての理解がある程度あることを前提としています。Rubyのいずれか1つでも経験があれば比較的容易に理解できると思いますが、ひとつも知らないと理解は難しいかもしれません。言語の特徴この言語の特徴を簡単にまとめると次のようになっています。文ではなく式を書く一般のプログラム言語との大きな違いはこれになります。文が書けないため、目的の動作を式とその中での関数呼び出しで達成する必要があります。株価の分析のためであれば、経験的にはこれでほとんどの場合はカバーできます。この方針の利点は、スクリプトを書くのも実行エンジンを作るのも易しくなることです。型付きOmegaChartのスクリプトとは異なり、型を意識したスクリプトになっています。スクリプトの実行エンジンは、最初に型を見てスクリプトを実行速度の速い形式に内部的にコンパイルします。これにより、OmegaChartの時と比べて実行速度・消費メモリとも大幅に改善されました。スクリプトの書き間違いの発見にも役立ちます。文ではなく式を書くスタイルの必然でもありますが、関数型言語の影響を受けています。関数を値として扱って、「関数を引数にとる関数」などが使えます。以下では、簡単な構文からはじめて言語の詳細に入っていきます。このドキュメントだけでなく、標準添付のテクニカル指標の定義(Tacticoをインストールしたディレクトリの下のextension\basictechnical.xml)を参照しながらだと理解が早いと思います。falseこれらに関しては、概ねJavaやC#と同じです。型も考慮すると以下のようになります。(否定)ここに書いたように、内部的には型を区別しています。基本の型には整数(int)、浮動小数(double)、真偽(bool)があり、他にオブジェクト型もあります。doubleを要求する関数にint型の値が渡されたときのみ自動的に変換されますが、それ以外の型の相違はすべてスクリプトをコンパイルするときのエラーになります。整数を対象とした割り算は整数で商を求めるのでやや注意が必要です。"1%"を表現するために1/100と書いてしまうと整数同士の割り算になってしまい結果が0になります。これを避けるには、小数であることを明示して1/100.0とするか、1*0.01とすればOKです。C言語のような三項演算子もあります。falseのときcになります。aはbool型でなければならず、bとcは同じ型でなければなりません。オブジェクトと配列Tacticoスクリプトにもオブジェクトがあります。一般のオブジェクト指向プログラム言語と同様に、クラスにメソッドが定義されており、オブジェクトのメソッドを呼び出すことができます。株価分析に特化した言語なので、最もよく使うオブジェクトは日足・分足などの「足」を表すQuoteオブジェクトでしょう。慣習として、オブジェクトの型名は大文字で始めます。q.ma(5)qはQuoteオブジェクトを参照する変数という前提で、maというメソッドを5という引数とともに呼び出しています。Averageの略で、移動平均を取得するメソッドです。引数の5は取得する長さなので、5日移動平均がわかる、ということになります。配列もオブジェクトの一種です。上のQuoteオブジェクトに対しq.open(5)とすると、5日分の始値の配列が得られます。型の表記としてはdouble[]になります。数値の配列には平均を取得するメソッドavgが定義されているため、q.open(5).avg()とすると5日分の始値の平均が得られます。あるので、q.open(5)[2]とすると、5日分の始値の3番目の要素(配列の添え字は0から始まります)が得られます。