![]() |
|
機能説明 ダウンロード 拡張キット サポートとコミュニティ
|
Omega Chart 拡張キットマニュアル
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 要素名(*1) | 説明 |
|---|---|
| @title | この拡張キットの見出しです。 |
| @id | この拡張キットを識別する文字列です。スペースを含めることはできません。 |
| @author | この拡張キットの作者です。空欄でも構いません。 |
(*1)以下、要素名の頭に@がついているものはXMLのアトリビュート、そうでないものはXMLのエレメントを表します。
indicatorエレメントチャートの要素を記述します。
| 要素名 | 説明 |
|---|---|
| @target | チャートが何を示しているかです。取りうる値は次のどれかです。
|
| @name | この要素の内部的な名前です。拡張キット内で一意につける必要があります。 |
| @format | "F2,100"のように、カンマで区切った前半と後半に別れます。数値の表現形式を示す、.NETの書式指定文字列、後半は"100" "%"のどちらかです。100のときはRSI,RCIのように計算した値を100倍して表示することを意味し、%のときは乖離率のように%表示になることを示します。省略時はそれぞれF2,100が指定されたものとみなされます。 |
| @display | V1.3で仕様が変わりました凡例ウィンドウにどう表示するかを示します。次の値をいずれかです。
|
| @group | @targetがoscillatorのときのみ必要なアトリビュートです。どのオシレータグループに属するかを宣言します。 |
| @count | このチャートを何個まで同時に表示できるかの値です。省略すると1とみなされます。たとえば3種類の移動平均線を表示したいときはここの値に3と入れます。 |
| @brand V1.1 | このチャートを描画する対象銘柄を指定できます。たとえば、日経平均のチャートにのみ表示したい場合は 101 と指定し、日経平均以外のチャートにのみ表示したい場合は !101 と指定します。省略した場合は全銘柄に対して表示されます。現在のところ複数個を指定する仕組みはありません。 |
| @relativise V1.1 | ここに日付を8桁で指定(たとえば 20040101)すると、この日を基準にした相対値によって描画されます。標準添付の拡張キットには、各銘柄に日経平均を相対化した値を描画するようになっていますのでそれを参考にすると意味がよく掴めると思います。 |
| title | この要素の見出しです。カスタマイズダイアログなどではここに指定した値が使われます。 |
| header | 凡例ウィンドウで使われる見出しです。ここでは、パラメータ補完(後述)が使われる点がtitleエレメントとは違います。 |
| description | 指標の説明です。カスタマイズダイアログのヘルプボタンに関連付けられるテキストです。 |
| expression | この要素を示す計算式です。後述の"expressionエレメント"を参照してください。 |
| defaultappearance | 初期状態での見え方と色を指定します。 例<defaultappearance style="Line" color="Lime"/> styleはLine,BoldLine,Dottedのいずれか、colorは.NETの色指定文字列として正しいものを使います。 |
| param | 引数があるときはparamエレメントを使います。後述のパラメータの説明を参照してください。 |
サンプル
<indicator
target="price"
count="3"
name="MA"
format="F2"
display="normal">
<expression>avg(close({0}))</expression>
<title>移動平均線</title>
<header>{0}平均</header>
<description>過去の一定期間の終値を平均し、
短期的な変動の影響を除去した線です。</description>
<param index="0" type="positiveInteger">
<daily unit="日" default="25,75,200"/>
<weekly unit="週" default="13,26,52"/>
</param>
<defaultappearance style="Line,Line,Line"
color="Khaki,DarkKhaki,DarkGoldenrod"/>
</indicator>
screeningエレメントスクリーニング条件を定義します。
| 要素名 | 説明 |
|---|---|
| @name | 上述のindicatorエレメントと同一です。 |
| expression | |
| title | |
| header | |
| description | |
| param | |
| @format | "F2,100"のように、カンマで区切った前半と後半に別れます。前半はindicatorのときと同じで数値の書式指定、後半は"100" "%"のどちらかです。100のときはRSI,RCIのように計算した値を100倍して表示することを意味し、%のときは乖離率のように%表示になることを示します。 |
| filter | ここにbool型を返すexpressionを書くと、trueを返した銘柄のみスクリーニングの対象になります。省略した場合は、すべての銘柄(スクリーニングのダイアログで指定した銘柄)が対象になります。 |
サンプル
<screening
name="rci_s"
format="F2,100">
<title>RCI</title>
<description>トレンドの強弱を示す指標です。
正の値は上昇トレンド、負の値は
下降トレンドを示します。</description>
<header>{0}RCI</header>
<expression>rci({0})</expression>
<param index="0" type="positiveInteger">
<name>期間</name>
<daily unit="日" default="14"/>
<weekly unit="週" default="13"/>
</param>
</screening>
auto-tradingエレメント自動売買検証の内容を定義します。
| 要素名 | 説明 |
|---|---|
| @name | 上述のindicatorエレメントと同一です。 |
| title | |
| header | |
| description | |
| param | |
| type | long, shortのいずれかの値をとります。買いか売りかどちらの売買かを指定します。 |
| signal | 売買を仕掛ける条件を指定します。この条件が成立した日の終値で仕掛けたものとして計算されます。書式はindicatorのexpressionエレメントと同一ですが、bool値を返す式にしないといけないことに注意してください。 |
| exit | 利益確定をする条件を指定します。この条件が成立した日の終値で利益確定したものとして計算されますが、後述の指値の仕組みを使うこともできます。 |
| losscut | ロスカットをする条件を指定します。この条件が成立した日の終値でロスカットしたものとして計算されますが、後述の指値の仕組みを使うこともできます。 |
| entry/@type | バージョン1.7で追加されました。entry要素のtypeアトリビュートによって、シグナル発生と仕掛けの関係を指定します。省略時はシグナル発生日の終値、tomorrow-openはシグナル発生日の翌日の始値(右のサンプルにあるとおりです)、signal-limitorderで逆指値です。逆指値については下に別途説明があります。 |
このexit, losscutでは、通常の計算式に加えて次の組み込み関数を使うことができます。
バージョン1.7で、逆指値を用いた自動売買検証がサポートされました。たとえば、
<entry type="signal-limitorder">close()*0.99</entry>
と書くと、シグナル発生日の終値から1%低い値段で逆指値をするという意味になります。entry要素の中に式が書けるのはsignal-limitorderを指定したときのみであることに注意してください。逆指値についてさらに補足説明をします。
サンプル
<auto-trading name="shitahige_p">
<title>下ひげ陽線の買い場検証</title>
<description>下ひげ(チャート上のひげの長さが
終値の1%以上で判定しています)かつ陽線を出し、
さらにその下ひげで安値を更新したときに買ったと
想定して勝率を測定します。</description>
<header>下ひげ陽線かつ{0}安値更新をし、{1}
動いたら利益確定/ロスカット</header>
<type>long</type>
<signal>shita_hige() and yosen() and
(low()==min(low({0})))</signal>
<entry type="tomorrow-open"/>
<exit><![CDATA[
close() > entry()*(1+{1}/100)
]]></exit>
<losscut><![CDATA[
limitorder(entry()*(1 - {1}/100))
]]></losscut>
<param index="0" unit="日" default="5"/>
<param index="1" unit="%" default="5"/>
</auto-trading>
predictionエレメントセオリー検証の内容を定義します。
| 要素名 | 説明 |
|---|---|
| @name | 上述のindicatorエレメントと同一です。 |
| title | |
| header | |
| description | |
| param | |
| condition | 検証するための前提条件を書きます。書式はexpressionエレメントと同一ですが、bool値を返す式にしないといけないことに注意してください。 |
| claim | 前提条件が成立したときに、検証したい内容を書きます。これもexpressionエレメントと同一で、bool値を返す式にします。セオリー検証を実行すると、conditionが成立した日の一覧とclaimが成立したかどうかの結果が表示されます。 |
サンプル
<prediction name="uehige_p">
<title>上ひげ陰線の売り場検証</title>
<header>上ひげ陰線かつ{0}高値更新なら
空売りで{1}以内に{2}以上下降</header>
<condition>ue_hige() and insen() and
(high()==max(high({0})))</condition>
<claim>min(low(0,0-{1})) <
close()*(1-{2}/100)</claim>
<param index="0" type="positiveInteger"
unit="日" default="5"/>
<param index="1" type="positiveInteger"
unit="日" default="5"/>
<param index="2" type="positiveInteger"
unit="%" default="2"/>
</prediction>
oscillator-groupエレメントオシレータグループを定義します。同時には1つのオシレータグループしか表示できず、ユーザはグループ間を切り替えながら使うことになります。
| 要素名 | 説明 |
|---|---|
| @name | このグループの名前です。oscillatorを定義するときには、indicatorエレメントのgroup後アトリビュートの値をここに一致させないといけません。 |
| @title | このグループの説明です。 |
| @type | 値の表示方法を指定します。次の値のいずれかです。
|
サンプル
<oscillatorGroup
name="kairi"
title="乖離率"
type="origin0"/>
libraryエレメント拡張キット全体で共有する関数を定義します。
| 要素名 | 説明 |
|---|---|
| @name | 関数の名前です。ASCII文字・数字・アンダースコアのみが使えます。 |
| expression | 関数定義の本体です。パラメータを使うこともできます。 |
サンプル
<library
name="yosen"> <!--陽線判定-->
<expression>open() < close()</expression>
</library>
expressionエレメントいよいよ拡張キットの中核部分、数式の記述の説明です。(*2)
型拡張キットの数式部分はexpressionエレメントの中に書きます。この式の各項には型があり、それは次のいずれかです。
| 型 | 説明 |
|---|---|
| double | 四則演算などを行います。内部的には浮動小数点数です。 |
| bool | 論理演算などを行います。true/falseのどちらかの値をとります。 |
| time-series | 時系列データです。doubleの配列といえば概ね間違いありません。 |
time-seriesはなれないうちはとまどうかもしれませんが、たとえば平均を求める組み込み関数avgは、時系列データを引数として受け取りdoubleを返す関数として内部的に定義されています。
(*2)と、力んではみたもののこれではまだ説明不足のところもあると思います。本格的に拡張キットを自作してみようという人は、OmegaChartのソースコードを入手して研究するのがよいかもしれません。私の趣味の範囲内のことですからご容赦を...
プリミティブOmegaChartに用意されたプリミティブ値は以下のとおりです。すべての計算はこれらのデータを出発点としています。
| 名前 | 型 | 説明 |
|---|---|---|
| open() | double | 当日の始値です。 |
| open(double n) | time-series | 過去 n 営業日の始値からなる時系列データです。 |
| open(double m, double n) | time-series | m-1 営業日前から n 営業日前までの始値からなる時系列データです。例えば3営業日前から前日までの場合はopen(4,1)になります。m-n が長さになることに注意してください。 |
| close, high, low, volume | 始値のかわりにそれぞれ終値、高値、安値、出来高になっただけで、使い方はopenと同じです。 | |
| cl, cs | 信用買残、信用売残です。使い方は上記と同じですが、データ取得の都合上週に1度しか更新されないので注意が必要です。 | |
組み込み演算子| 名前 | 引数と結果 | 役割 |
|---|---|---|
| *, / | (double,double)->double | 普通の乗算・除算です。 |
| *, / | (time-series, double)->time-series | time-seriesを定数倍した別のtime-seriesを作るために使います。 |
| *, / | (time-series, time-series)->time-series | サイズの等しい2つの時系列データについて、各要素を演算した結果を返します。 |
| +, - | (double,double)->double | 普通の加算・減算です。 |
| +, - | (time-series, time-series)->time-series | サイズの等しい2つの時系列データを足します。 |
| <, >, <=, >= | (double,double)->bool | 普通の大小比較です。 |
| &&, || | (bool,bool)->bool | 普通の論理演算です。かわりにand, orを使うこともできます。 |
演算子には優先順位があり、乗除算=>加減算=>比較=>論理の順で行われます。たとえば 3 * 5 - 2 は ( 3 * 5 ) - 2 のように計算されます。
数式解析の都合で、定数を引くときには注意が必要です。 3*5-2と書いてしまうと、"3*5"と定数"-2"の間に演算子がみつからないとしてエラーになっていまいます。これは改善したい点ですが、いまのところは- 2とスペースを入れるようにしてください。(*3)
(*3)かなり専門的な話になりますが、これはOmegaChartで使っているコンパイラ・コンパイラ Grammaticaの都合です。
組み込み関数ここからがちょっと難しくなります。
| 名前 | 引数と結果 | 役割 |
|---|---|---|
| avg | (time-series)=>double | 平均を求めます。 |
| sdev | (time-series)=>double | 標準偏差を求めます。 |
| sqrt | (double)=>double, (time-series)=>time-series | 平方根を求めます。 |
| log | (double)=>double, (time-series)=>time-series | 自然対数を求めます。 |
| pow | (double, double)=>double, (time-series, double)=>time-series | べき乗を求めます。 |
| first | (time-series)=>double | 時系列データの最初の値を求めます。 |
| last | (time-series)=>double | 時系列データの最後の値を求めます。 |
| min | (time-series)=>double | 時系列データでの最小値を求めます。 |
| (double,double,...)=>double | 引数のdouble値の最小を求めます。 | |
| max | (time-series)=>double | 時系列データでの最大値を求めます。 |
| (double,double,...)=>double | 引数のdouble値の最大を求めます。 | |
| abs | (time-series)=>time-series | 時系列データの各項の絶対値から成るtime-seriesを返します。 |
| (double)=>double | 引数の絶対値を求めます。 | |
| sum | (time-series)=>double | 時系列データの各値の和を求めます。 |
| suma | (time-series)=>double | 時系列データの各値の絶対値の和を求めます。 |
| sump | (time-series)=>double | 時系列データの各値のうち正のものの和を求めます。 |
| sumn | (time-series)=>double | 時系列データの各値のうち負のものの和を求めます。 |
| diff | (time-series)=>time-series | 時系列データの各値の差分を取り、引数に対してサイズが1小さいtime-seriesを返します。たとえばRSIの計算で使います。 |
| each | (double, expression)=>time-series | 最初の引数で示される長さの期間、日付をずらしながらtime-seriesを作ります。いまのところMACDの計算にしか使っていません。 |
| value_at | (double, expression)=>expression | 指定の日数移動させて引数のexpressionを計算します。たとえばvalue_at(2, close())は2営業日前の終値を示します。 |
| if | (bool, expression, expression)=>expression | 最初の引数がtrueのとき2番目の引数、falseのとき3番目の引数を返します。ExcelのIF関数と同じ働きです。 |
| rankcorrelation | (time-series)=>double | Rank Correlationです。たぶんRCIの計算以外で使うことはないので、テクニカル分析の本を参考にしてください。 |
| pdm,mdm | double | DMIの計算を楽にするために導入しました。 |
| refbrand V1.1 | (code, expression)=>expression | 銘柄コード code に対してexpressionを計算した結果を返します。指定できるコードは、通常の銘柄コードの他、組み込みの株価指数や為替も使えます。これらのコードはメニューから 表示 - 指数・為替 を見てください。 |
| yobine V1.3 | (double)=>double | 価格を引数にとり、それに対応した呼値の値を返します。常に東証のものがつかわれます。 |
| unit_trading V1.3 | ()=>double | 現在見ている銘柄の単元株数を返します。 |
いろいろと拡張キットを作っていると、新しい組み込み関数が必要になることがあると思います。そのときはサポート経由でリクエストを送ってください。
サンプルこれでだいぶ雰囲気がわかってきたと思います。いくつか例を出してみましょう。
| 式 | 内容 |
|---|---|
| avg(close(25)) | 25日移動平均線 |
| close() / avg(close(25)) - 1 | 25日移動平均線乖離率 |
| sump(diff(close(15)))/suma(diff(close(15))) | 14日RSI |
| close() / refbrand(101, close()) | 日経平均に対する終値の比 (101は日経平均のコードです) |
パラメータ式の中にパラメータをいれたいことはしばしばあります。たとえば、移動平均の表示をするとき何日の平均にするかはGUIで簡単に変えることができると便利です。このような場合は、{}で数値を囲むとパラメータの参照になります。
avg(close({0}))
こうすると、{0}の部分が外部から読み込んだパラメータによって補われます。具体的には、この式を書いた拡張キット要素のparamタグを使って、
<param index="0" type="positiveInteger">
<daily unit="日" default="25"/>
<weekly unit="週" default="13"/>
</param>
のようにします。indexアトリビュートはパラメータの番号、typeは型(現在は正整数を示すpositiveIntegerのみです)、その下は日足・週足それぞれでの単位とデフォルト値です。このようにすると、OmegaChart本体のカスタマイズダイアログからこのパラメータを変更・保存できるようになります。
派生銘柄V1.1
派生銘柄は、他の銘柄のデータを演算することで派生的な銘柄を作成する機能です。バージョン1.1で導入されました。
銘柄を定義するには、拡張キットにbrandエレメントを書きます。
| 要素名 | 説明 |
|---|---|
| @code | この銘柄に割り当てるコードです。401以上999以下の数値を使ってください。 |
| name | この銘柄の名前です。 |
| expression | この銘柄の値を計算するための式です。4本値すべてについて同じ式が使われます。なお、現在は派生銘柄の出来高や信用残はサポートされていません。値段のみを計算します。 |
| format | この値を表示するときのフォーマットです。indicatorエレメントの説明を参照してください。 |
| param | この銘柄の値を計算するために必要な銘柄コードを必要な個数書きます。各paramエレメントのindexアトリビュートの値はexpressionエレメントに書いたものと一致します。 |
| priceScale | 次の説明を参照してください。 |
なお、OmegaChartでは内部的な値段は整数で定義されます。従って、小数点2位まで必要な銘柄を定義するときには、必要な値の100倍をその銘柄の値として定義し、表示するときに1/100にするという形をとる必要があります。右のサンプルでは、expressionエレメントで100倍しているのはそのためです。これがないと、日経平均ドル建ての値は整数化されてしまい、かなり値が飛んでしまいます。もちろん、expressionの内容を100倍しただけでは不完全なので、表示を補正するためにpriceScaleエレメントで表示を1/100にしています。
サンプル
<brand code="0401">
<name>日経平均ドル建て</name>
<expression>({0} / {1})*100</expression>
<priceScale>0.01</priceScale>
<format>F2</format>
<param index="0" code="0101"/>
<param index="1" code="0201"/>
</brand>
さらに先へとりあえずの説明はここまでです。実は、まだ他にも
などのトピックがあるのですが、この文書を書いている時点ではそこまで使いこなす人がいるかどうか確信できないので省きました。興味がある人はOmegaChart標準添付の拡張キットや、さらに意欲があればソースコードの中身を見れば使い方はわかってくるでしょう。
また、現状ではまだ細かいところに手が届いていないので、特に拡張キットが誤った書かれ方をしているときにエラーメッセージを適切に表示することはできていないこともあります。
なので、もし自分で書いてみたけれども思うような動作にならない、というときはメール等でサポートを求めてください。皆さんが拡張キットを書いているということがわかれば、私もこの機能をさらに充実させる意欲につながりますので遠慮なくどうぞ。
Copyright(C) 2004-2006 Daisuke OKAJIMA, All Rights Reserved.