EasyLanguage研究所

マネックス証券が提供する株式トレードツール「TradeStation」専用のプログラミング言語である、EasyLanguageについて。特にオブジェクト指向型EasyLanguage(OOEL)の情報を中心に。

TrendLineクラスでEasyLanguageからトレンドラインを引く(マニュアル掲載コードの修正版あり)

オブジェクト指向EasyLanguageのTrendLineクラスを使うと、EasyLanguage上から自動でトレンドラインを引く事ができます。

トレンドラインは、通常のEasyLanguageでもTL_Newで引く事ができますが、TrenLineクラスの方は開始位置と終了位置を「現在の足から●個前の足」といった感じで指定できますし、トレンドラインの描画スタイルなどもクラスとしてまとめて設定できるので、何かと便利だと思います。

で、このTrendLineクラスなんですが、トレードステーション付属マニュアルに掲載されているサンプルコードを実際に動かしてみると上手く動きませんでした・・。どうもコードが間違っているような気がします。

以下、マニュアル掲載のコードです。(CloseをHighにするなど、一部改変しています)

using elsystem.drawingobjects;

Vars:
	TrendLine varTrendLine1(null),
	BNPoint varBNPoint1(null),
	BNPoint varBNPoint2(null);

If LastBarOnChart then Once Begin
	varBNPoint1 = BNPoint.Create( BarNumber - 20, High[20] );
	varBNPoint2 = BNPoint.Create( BarNumber, High );
	
	varTrendLine1 = TrendLine.Create( varBNPoint1, varBNPoint2 );
	varTrendLine1.Persist = True;
	varTrendLine1.Style = 2;
	DrawingObjects.Add( varTrendLine1 );
End;


コードのコメントを見ると、「20個前の足から現在の足までの価格を繋いだトレンドラインを描画する」事が目的のコードなんですが、これを日足チャートに適用してみると、以下のようになりました。(最終日の足が2017/6/23、分析に用いる足の最大本数「MaxBarsBack」は、50としています)

f:id:eltraders:20170624124816p:plain

・・あさっての方向にトレンドラインが引かれていますね。笑

現在の足が2017/6/23なので、

・開始位置:2017/5/26 8,965円
・終了位置:2017/6/23 9,242円

でトレンドラインが引かれるはずなんですが、トレンドラインをクリックして情報確認すると・・

・開始位置:2017/3/14 8,965円
・終了位置:2017/4/12 9,242円

となっていました。

価格はあっているので、これは開始位置&終了位置を定義するBNPointの設定に問題があるのでは?と思い調べてみると、案の定BNPointクラスのマニュアルに掲載されているコードでは、現在の足番号に「MaxBarsBack-1」を加えていました。BarNumberはCurrentBarと同じくMaxBarsBackを除いた最初の足を1として番号が振られるのですが、BNPointによる指定はMaxBarsBackも含めた番号を指定してあげる必要があるようです。

最後に「-1」となっているのは、BarNumberやCurrentBarは1から始まるのに対して、BNPointで指定する足番号は0から始まるためです。

以下、修正してみたコード。9行目と10行目以外は元と同じです。

using elsystem.drawingobjects;

Vars:
	TrendLine varTrendLine1(null),
	BNPoint varBNPoint1(null),
	BNPoint varBNPoint2(null);

If LastBarOnChart then Once Begin
	varBNPoint1 = BNPoint.Create( MaxBarsBack + BarNumber - 21, High[20] );
	varBNPoint2 = BNPoint.Create( MaxBarsBack + BarNumber - 1, High );
	
	varTrendLine1 = TrendLine.Create( varBNPoint1, varBNPoint2 );
	varTrendLine1.Persist = True;
	varTrendLine1.Style = 2;
	DrawingObjects.Add( varTrendLine1 );
End;


これで、以下のように 2017/5/26 から 2017/6/23 まで、正しくトレンドラインが自動描画されました。

f:id:eltraders:20170624124752p:plain

上のコードは分析テクニックやストラテジーでも使えるので、トレンドラインを利用した売買戦略の開発にも活用できそうです。ぜひ使ってみてください。

※ マニュアル掲載のコードについては、英語版TradeStationのマニュアルを見ても同じだったので、翻訳時のミスというわけではなさそうですが、また何か分かったら追記したいと思います。