TradeStation:インジケーターのEasyLanguageサンプルまとめ

TradeStation:インジケーターのEasyLanguageサンプルまとめ

TradeStation の EasyLanguage でつくるインジケーターのよく使う組み合わせをまとめてみました(主に自分用)。どれもコピペで機能をつけ加えることができる簡単なものです。

今後も、新たに見つけたり思いついたものがあれば、ここに加えていく予定です!

TradeStation:インジケーターのEasyLanguageサンプルまとめ

  1. 異なる時間軸や銘柄の価格データを取得
  2. 異なる時間軸の最高値と最安値、ATRを算出する
  3. 将来まで伸びる横線を複数本引き、線の間を塗りつぶす

1. 異なる時間軸や銘柄の価格データを取得

TradeStationで異なる時間軸の価格を表示する(EasyLanguage)

PriceSeriesProviderを使うことで、異なる時間軸や銘柄の価格データを取得することができる。

EasyLanguage

using elsystem ;
using tsdata.marketdata ;

Vars :
	PriceSeriesProvider PSP( null ) ;

Method Void CreatePSP ()
	Begin
	PSP = new PriceSeriesProvider ;
	PSP = PriceSeriesProvider.Create() ;
	PSP.Load = false ;
	PSP.Symbol = Symbol ;
	PSP.Interval.ChartType = DataChartType.Bars ;
	PSP.Interval.IntervalType = DataIntervalType.Daily ;
	PSP.Interval.IntervalSpan = 1 ;
	PSP.Range.Type = DataRangeType.Bars ;
	PSP.Range.Bars = 9999 ;	
	PSP.IncludeVolumeInfo = true ;
	PSP.IncludeTicksInfo = true ;
	PSP.UseNaturalHours = false ;
	PSP.Realtime = true ;
	PSP.TimeZone = TimeZone.local ;
	PSP.Load = True ;
	End ;

Once CreatePSP() ;

plot1( PSP.Close[0] ) ;
plot2( PSP.High[0] ) ;

目次へ

2. 異なる時間軸の最高値と最安値、ATRを算出する

TradeStationで異なる時間軸の最高値と最安値を表示する(EasyLanguage)

もしかしたら方法があるかもしれないが、見当たらないので作った。PriceSeriesProviderで取得した価格データを元に最高値と最安値、ATRを算出。

EasyLanguage

using elsystem ;
using tsdata.marketdata ;

Inputs:
	int lenHL( 20 ) ,
	int lenATR( 20 ) ;

Vars :
	PriceSeriesProvider PSP( null ) ,
	double highestDay( 0 ) ,
	double lowestDay( 0 ) ,
	double atr( 0 ) ,
	bool isNewDate( false ) ;

Arrays: 
    double highs[]( 0 ),
    double lows[]( 0 );

Method Double calcATR ()
	Vars: int count, double Avg_data ,double TR;
	Begin
		For count = 0 To lenATR-1 Begin
			TR = MaxList( AbsValue( PSP.Close[count+2] - PSP.High[count+1] ) ,AbsValue( PSP.Close[count+2] - PSP.Low[count+1] ) ,PSP.High[count+1] - PSP.Low[count+1] );
			Avg_data = Avg_data + TR;
		End;
		Avg_data = Avg_data / lenATR;
		Return Avg_data;
	End;
	
Method Double calcHighest ()
	Vars: int count, double result_data;
	Begin
		For count = 0 To lenHL-1 Begin
			highs[count+1] = PSP.High[count+1];
		End;
		result_data = HighestArray( highs ,lenHL );
		Return result_data;
	End;	

Method Double calcLowest ()
	Vars: int count, double result_data;
	Begin
		For count = 0 To lenHL-1 Begin
			lows[count+1] = PSP.Low[count+1];
		End;
		result_data = LowestArray( lows ,lenHL );
		Return result_data;
	End;

Method Void CreatePSP ()
	Begin
	PSP = new PriceSeriesProvider ;
	PSP = PriceSeriesProvider.Create() ;
	PSP.Load = false ;
	PSP.Symbol = Symbol ;
	PSP.Interval.ChartType = DataChartType.Bars ;
	PSP.Interval.IntervalType = DataIntervalType.Daily ;
	PSP.Interval.IntervalSpan = 1 ;
	PSP.Range.Type = DataRangeType.Bars ;
	PSP.Range.Bars = 9999 ;	
	PSP.IncludeVolumeInfo = true ;
	PSP.IncludeTicksInfo = true ;
	PSP.UseNaturalHours = false ;
	PSP.Realtime = true ;
	PSP.TimeZone = TimeZone.local ;
	PSP.Load = True ;
	End ;

Once CreatePSP() ;

isNewDate = Date <> Date[1] ;

atr = iff( isNewDate ,calcATR() ,atr[1] ) ;

Array_SetMaxIndex( highs ,lenHL ) ;
Array_SetMaxIndex( lows ,lenHL ) ;

// isNewDate 以外のときにも走らせると数値がズレる
highestDay = iff( isNewDate ,calcHighest() ,highestDay[1] ) ;
lowestDay = iff( isNewDate ,calcLowest() ,lowestDay[1] );

plot2( highestDay ) ;
plot3( lowestDay ) ;

目次へ

3. 将来まで伸びる横線を複数本引き、線の間を塗りつぶす

TradeStationのEasyLanguageでヨコ線を複数本引き、線の間を塗りつぶす

PIVOTなどのヨコ線を描画し、その線の間を塗りつぶす。ヨコ線は当日のクローズまで描画。塗りつぶしはローソク足と共に描画。

EasyLanguage

using elsystem.drawingobjects;

Inputs:
	bool doPaint( true ) ;

Vars:
	DateTime DT1( null ),
	bool isNewDate( false ),
	int hbopId( 0 ),
	int r2Id( 0 ),
	int r1Id( 0 ),
	int ppId( 0 ),
	int s1Id( 0 ),
	int s2Id( 0 ),
	int lbopId( 0 ),
	Rectangle up3Rct( null ),
	Rectangle up2Rct( null ),
	Rectangle up1Rct( null ),
	Rectangle low1Rct( null ),
	Rectangle low2Rct( null ),
	Rectangle low3Rct( null );

//数値を計算

isNewDate = Date <> Date[1] ;

DT1 = new DateTime;
DT1 = DateTime.Create();
DT1 = DateTime.FromELDateAndTime ( Date, 1530 );

if isNewDate then
	begin
		
	hbopId = TL_New( Date, Time, hbop, Date, 1530, hbop ) ;  
	r2Id   = TL_New( Date, Time, r2,   Date, 1530, r2 ) ;  
	r1Id   = TL_New( Date, Time, r1,   Date, 1530, r1 ) ;  
	ppId   = TL_New( Date, Time, pp,   Date, 1530, pp ) ;  
	s1Id   = TL_New( Date, Time, s1,   Date, 1530, s1 ) ;  
	s2Id   = TL_New( Date, Time, s2,   Date, 1530, s2 ) ;  
	lbopId = TL_New( Date, Time, lbop, Date, 1530, lbop ) ;  
	
	TL_SetColor( hbopId, hbopColor ) ;  
	TL_SetColor( r2Id,   r2Color ) ;  
	TL_SetColor( r1Id,   r1Color ) ;  
	TL_SetColor( ppId,   ppColor ) ;  
	TL_SetColor( s1Id,   s1Color ) ;  
	TL_SetColor( s2Id,   s2Color ) ;  
	TL_SetColor( lbopId, lbopColor ) ;  
	
	TL_SetSize( hbopId, hbopWidth ) ;  
	TL_SetSize( r2Id, r2Width ) ;  
	TL_SetSize( r1Id, r1Width ) ;  
	TL_SetSize( ppId, ppWidth ) ;  
	TL_SetSize( s1Id, s1Width ) ;  
	TL_SetSize( s2Id, s2Width ) ;  
	TL_SetSize( lbopId, lbopWidth ) ;  
	
	if doPaint then
		begin
		up3Rct = Rectangle.Create( DTPoint.Create( BarDateTime[0], hbop ), DTPoint.Create( DT1, r2 ) );
		up2Rct = Rectangle.Create( DTPoint.Create( BarDateTime[0], r2 ), DTPoint.Create( DT1, r1 ) );
		up1Rct = Rectangle.Create( DTPoint.Create( BarDateTime[0], r1 ), DTPoint.Create( DT1,pp ) );
		low1Rct = Rectangle.Create( DTPoint.Create( BarDateTime[0], pp ), DTPoint.Create( DT1, s1 ) );
		low2Rct = Rectangle.Create( DTPoint.Create( BarDateTime[0], s1 ), DTPoint.Create( DT1, s2 ) );
		low3Rct = Rectangle.Create( DTPoint.Create( BarDateTime[0], s2 ), DTPoint.Create( DT1, lbop ) );
		
		up3Rct.Color = elsystem.drawing.color.FromArgb( 80, 255, 235, 59 ) ;
		up2Rct.Color = elsystem.drawing.color.FromArgb( 60, 255, 235, 59 ) ;
		up1Rct.Color = elsystem.drawing.color.FromArgb( 40, 255, 235, 59 ) ;
		low1Rct.Color = elsystem.drawing.color.FromArgb( 40, 33, 150, 243 ) ;
		low2Rct.Color = elsystem.drawing.color.FromArgb( 60, 33, 150, 243 ) ;
		low3Rct.Color = elsystem.drawing.color.FromArgb( 80, 33, 150, 243 ) ;
		
		up3Rct.FillPattern = FillPattern.pattern1 ;
		up2Rct.FillPattern = FillPattern.pattern1 ;
		up1Rct.FillPattern = FillPattern.pattern1 ;
		low1Rct.FillPattern = FillPattern.pattern1 ;
		low2Rct.FillPattern = FillPattern.pattern1 ;
		low3Rct.FillPattern = FillPattern.pattern1 ;
		
		up3Rct.FillColor = elsystem.drawing.color.FromArgb( 80, 255, 235, 59 ) ;
		up2Rct.FillColor = elsystem.drawing.color.FromArgb( 60, 255, 235, 59 ) ;
		up1Rct.FillColor = elsystem.drawing.color.FromArgb( 40, 255, 235, 59 ) ;
		low1Rct.FillColor = elsystem.drawing.color.FromArgb( 40, 33, 150, 243 ) ;
		low2Rct.FillColor = elsystem.drawing.color.FromArgb( 60, 33, 150, 243 ) ;
		low3Rct.FillColor = elsystem.drawing.color.FromArgb( 80, 33, 150, 243 ) ;
		
		DrawingObjects.Add( up3Rct ) ;
		DrawingObjects.Add( up2Rct ) ;
		DrawingObjects.Add( up1Rct ) ;
		DrawingObjects.Add( low1Rct ) ;
		DrawingObjects.Add( low2Rct ) ;
		DrawingObjects.Add( low3Rct ) ;
		end ;
	end ;

目次へ

Back to Top

abbamboo

タカハシ / 7年目の兼業トレーダー

このブログの目的は、「学習の備忘録」と「アウトプットして理解を深めること」。「トレードで稼ぐために学んだこと」を徹底的に公開していきます。

元・日本料理の板前、現・金融畑のウェブ屋さん
保有資格:証券外務員1種、認定テクニカルアナリスト

更新のお知らせは、各SNSやLINEで。LINEだと1対1でお話することもできます!

>> このブログと著者についての詳細
>> 使っているツールの紹介

Investment Tech Hack

Sorry... doesn't support your browser

To get the best possible experience using our site we recommend that you upgrade to a modern web browser. Investment Tech Hackではご利用中のブラウザサポートはしていません。
Internet Explorerのアップグレード行う、もしくはその他のブラウザを使用しての閲覧をお願いします。