## チャートプログラムの書き方

トップ > チャートプログラムの書き方

ProtraのチャートはすべてProtra言語によって記述されたプログラムです。ここで説明する方法にしたがって独自のチャートを追加することができます。

#### チャートプログラムの置き場所

Protraのチャート描画プログラムのファイルはchartディレクトリ以下に置かなければならなりません。また、拡張子は.ptでなければなりません。chartディレクトリ以下にプログラムを移動した時点で、Protraのチャート選択メニューからファイルが選択できるようになります。

#### 描画の仕組み

ProtraがN日分の幅のチャートを描画しなくてはならないとします。あなたがしなければいけないことは、N日分のチャートを繰り返し描画することではありません。1日分のチャートを描画することだけです。つまり、ProtraはN回あなたのプログラムを呼び出して、その度に1日分の幅を描画することによって全体の描画を完了するのです。また、この連続したN回の実行においてグローバル変数は保存されます。この機能を利用して高速な描画プログラムを書くように心がけてください。

#### 簡単なサンプル

簡単な例として青色の出来高のバーを描画するプログラムを示します。

    FillRectangle(Rgb(0, 0, 255), X-Dx/2, 0, Dx, Volume)

関数 FillRectangle(rgb, x, y, w, h) は矩形内部を塗りつぶします。rgbは色、(x, y)は矩形の左下の座標、(w, h)は矩形の幅と高さです。rgbは関数 Rgb(r, g, b) で取得することができます。ここでr, g, bはそれぞれ赤、緑、青の光度を示す0〜255のint型の値です。

#### 組み込み関数のリスト

今あなたが1番気になっているのはVolumeやFillRectangleのような組み込みの関数がどれだけ利用できるかということでしょう。組み込み関数のリストを示すのでこれを見ながら独自のチャートを作っていって下さい。

    (1)数学関数
    float Exp(float)
    float Log(float)
    float Sqrt(float)
    float Sin(float)
    float Cos(float)
    float Tan(float)
    float Asin(float)
    float Acos(float)
    float Atan(float)
    float Pow(float, float)
    float Random()
    	0.0以上1.0未満の浮動小数点の乱数。
    int Random(int maxValue)
    	0以上maxValue未満の整数の乱数。

    (2)株価データ関数
    int Open()
    	始値。{-n}Open はn個前の始値。
    	存在しない場合はnullです。
    int High()
    	高値。{-n}High はn個前の高値。
    	存在しない場合はnullです。
    int Low()
    	安値。{-n}Low はn個前の安値。
    	存在しない場合はnullです。
    int Close()
    	終値。{-n}Close はn個前の終値。
    	存在しない場合はnullです。
    float Volume()
    	出来高。{-n}Volumeはn個前の出来高。
    	この値は実際の出来高を1000で割った値です。
    	存在しない場合はnullです。
    int Year()
    	年。{-n}Year はn個前の年。
    	存在しない場合はnullです。
    int Month()
    	月。{-n}Month はn個前の月。
    	存在しない場合はnullです。
    int Day()
    	日。{-n}Day はn個前の日付。
    	存在しない場合はnullです。
    int DayOfWeek()
    	曜日を表す数。{-n}DayOfWeek はn個前の曜日。
    	存在しない場合はnullです。
    	この数は日曜の0から始まって土曜が6となります。
    int Index()
    	最も古いデータから何番目のものかを示す値。
    	{n}Index は Index + nと同じです。
    int RightIndex()
    	チャートの最も右側のIndexの値。
    int Code()
            表示する銘柄のコード。

    (3)描画関数
    int X()
    	描画すべきX座標です。{-n}Xはn個前のXの値です。
    	これは X - n*Dx と同じです。
    int Dx()
    	横軸の1日分の幅を取得します。
    int Rgb(int r, int g, int b)
    	赤、緑、青の光度がr,g,bである色を表す整数値を計算します。
    	r, g, bは0〜255の整数値でなければなりません。
    null DrawLine(int rgb, float x1, float y1, float x2, float y2)
    	座標(x1, y1)から(x2, y2)へ直線を描画します。
    null DrawRectangle(int rgb, float x, float y, float w, float h)
    	矩形を描画します。
    null DrawEllipse(int rgb, float x, float y, float w, float h)
    	矩形に内接する楕円を描画します。
    null DrawString(int rgb, string s, float x, float y, int dh)
    	座標(x, y)のdhポイント上に文字列sを描画します。
    	最初の引数を省略すると黒で描画します。
    null FillRectangle(int rgb, float x, float y, float w, float h)
    	矩形内部を塗りつぶします。
    null FillEllipse(int rgb, float x, float y, float w, float h)
    	矩形に内接する楕円を塗りつぶします。

#### 指標名の描画

指標の名前をチャートの左上に描画したい場合はグローバル変数$Namesと$Colorsを設定して下さい。上に示したの出来高のサンプルでは次のようにすればいいでしょう。

    $Names[0] = "出来高"
    $Colors[0] = Rgb(0, 0, 255)

これで指標の色と名前がProtraによって左上に描画されます。$Namesおよび$Colorsは6個の要素まで設定が可能になっています。

#### 非時系列チャートの描画

新値足や練足などの非時系列チャートは次の方法に従えば描画することが可能です。 まず、変数$IsTimeSeriesを偽にしてProtraの日付描画機能をオフにします。 その上で一番最初の呼び出しの時点でチャートを描画してしまえばいいのです。以上をコードにしてみると大体次のようになります。

    $IsTimeSeries = 0
    if ! $Drawed
    	// 描画処理
    	$Drawed = 1
    end

非時系列チャートはプログラミングに慣れていない方には難しいでしょう。

Copyright (C) 2003 Daisuke Arai.
Copyright (C) 2007, 2010 panacoran.
This document may be used under the term of the GNU General Public License version 3 or higher.