test5
//※ショウミーです。
//※ラインやテキスト位置がずれるバグありです。
//※チャートのバーが少ないとデータの取得ができないバグありです。
//※入力のLengthは使えません。10固定です。(いずれ修正予定)
//作成にあたってぽぬさんブログを参考にしています。
//※ショウミーです。
Using elsystem;
Using tsdata.marketdata;
using elsystem.drawing;
using elsystem.drawingobjects;
Inputs:
Int Length( 10 ) [DisplayName="最高値,最安値を判定する期間"];
Variables:
TextLabel TXL(null), //テキスト作成用関数
BNPoint PoBN(null), //テキストの位置指定関数
TrendLine myTrendLine1(null), //線描画用関数
BNPoint myBNPoint1(null), //線描画用関数
BNPoint myBNPoint2(null), //線描画用関数
PriceSeriesProvider PSP(null), //線描画用関数
intrabarpersist string tenkan_text(""), //テキスト内容
Double ue1 ( 0 ), //直前の天の転換点の値
Double sita1 ( 0 ), //直前の底の転換点の値
Double Max_ue ( 0 ), //過去X日の最大値
Double Min_sita ( 0 ), //過去X日の最小値
Int tenkanten ( 0 ), //直前の転換点 1:天 0:底
Double tenkanten_atai_1 ( 0 ), //直前の転換点の値
Double tenkanten_atai_2 ( 0 ), //2つ前の転換点の値
Int bar_no_pre1 ( 0 ), //直前の転換点のバーナンバー
Int bar_no_pre2 ( 0 ), //2つ前の転換点のバーナンバー
Int bar_no_1 ( 0 ), //天の転換点のバーナンバー
Int bar_no_2 ( 0 ), //底の転換点のバーナンバー
Int barSuu ( 0 ), //バーナンバー
Int TakaCount ( 0 ), //高値カウンター
Int YasuCount ( 0 ), //安値カウンター
DateTime DT1(null),
DateTime DT2(null),
TrendLine TL(null);
// --------------------------------------------------
// インスタンスの初期化メソッド
// --------------------------------------------------
Method void newins()
begin
DT1 = new DateTime;
DT2 = new DateTime;
end;
// --------------------------------------------------
// --------------------------------------------------
// プロパティの設定メソッド
// --------------------------------------------------
Method Void CreatePSP() //PSPを召喚するメソッド。メソッド名「CreatePSP」
Begin
PSP = PriceSeriesProvider.Create(); //PSPを初期化する。
PSP = new tsdata.marketdata.PriceSeriesProvider; //PSPを召喚する。
PSP.Load = false; //Trueの場合、テクニカル分析やストラテジーが呼び出されたときに接続。Trueにするとエラーが出た。
PSP.Symbol = Symbol; //銘柄コードを設定(Symbolならチャートに表示されている銘柄コードを使用)
PSP.Interval.ChartType = DataChartType.Bars; //チャートの足種の設定1(Bars/Volume)
PSP.Interval.IntervalType = DataIntervalType.Daily; //チャートの足種の設定2(上でBarsを選んだならSeconds/Minutes/Daily/Weekly/Monthly/Ticks)
PSP.Interval.IntervalSpan = 1; //チャートの足種の設定3(設定1,2と合わせて1日足という設定になった)
PSP.Range.Type = DataRangeType.Bars; //チャートの足の範囲設定1(Bars/Days/Months/Weeks/Years)
PSP.Range.Bars = 500; //チャートの足の範囲設定2(設定1と合わせて5000足のデータを参照という設定になった)
PSP.TimeZone = tsdata.common.TimeZone.local; //タイムゾーンがローカルか取引所か(Local/Exchange)
PSP.Realtime = True; //Trueの場合、リアルタイムに更新
PSP.IncludeVolumeInfo = True; //Trueの場合、価格シリーズに Volume、VolumeDown、VolumeUnchanged、VolumeUp を含める。
PSP.IncludeTicksInfo = True; //Trueの場合、価格シリーズに Ticks、TicksDown、TicksUnchanged、TicksUp を含めます。
PSP.UseNaturalHours = false; //わかりません。調べても出てきませんでした。
PSP.Load = True; //Trueの場合、テクニカル分析やストラテジーが呼び出されたときに接続。上でfalseにしてたがここでTrueにする。
End;
// --------------------------------------------------
// --------------------------------------------------
// 転換点の計算メソッド
// --------------------------------------------------
Method Void TenkantenKeisan()
Begin
//バーNo.ズレ対策(原因検証中)
BarSuu = CurrentBar -9;
//最初の足の設定
If BarSuu = 1 then begin
ue1 = PSP.High[0];
sita1 = PSP.Low[0];
TakaCount = 0;
YasuCount = 0;
//tenkanten_atai_1 = PSP.Low[0];
//tenkanten_atai_2 = PSP.Low[0];
end;
//高値を更新したら、高値カウンターをプラス
If ue1 < PSP.High[0] Then
TakaCount = TakaCount +1;
//安値を更新したら、安値カウンターをプラス
If sita1 > PSP.Low[0] Then
YasuCount = YasuCount +1;
//過去X日の最大値、最小値を算出
//Max_ue = Highest(PSP.High[1],Length); //計算ミスがあるので使わない
//Min_sita = Lowest(PSP.Low[1],Length); //計算ミスがあるので使わない
Max_ue = MaxList(PSP.High[1],PSP.High[2],PSP.High[3],PSP.High[4],PSP.High[5],PSP.High[6],PSP.High[7],PSP.High[8],PSP.High[9],PSP.High[10]);
Min_sita = MinList(PSP.Low[1], PSP.Low[2], PSP.Low[3], PSP.Low[4], PSP.Low[5], PSP.Low[6], PSP.Low[7], PSP.Low[8], PSP.Low[9],PSP.Low[10]);
//過去X日の最大値より今日の高値が大きい時、ue1に高値をセット、bar_no_1に足数をセット、転換点を天にセット
If Max_ue < PSP.High[0] Then Begin
ue1 = PSP.High[0];
bar_no_1 = BarSuu;
tenkanten = 1;
//過去X日の最小値より今日の安値が小さい時、sita1に安値をセット、bar_no_2に足数をセット、転換点を底にセット
end Else
If Min_sita > PSP.Low[0] Then begin
sita1 = PSP.Low[0];
bar_no_2 = BarSuu;
tenkanten = 0;
End;
//前日の転換点が天、今日の転換点が底の時、天の転換点が確定したとして、転換点の値をue1とする。ue1を天の転換点の足にテキスト表示する。転換点を結ぶ。
If tenkanten[1] = 1 AND tenkanten = 0 Then begin
//転換点の値をue1とする。
tenkanten_atai_2 = tenkanten_atai_1 ;
tenkanten_atai_1 = ue1;
bar_no_pre2 = bar_no_pre1;
bar_no_pre1 = bar_no_1;
//ue1を天の転換点の足にテキスト表示する。
tenkan_text = tenkanten_atai_1.ToString(); //転換点の価格を数値形式からテキスト形式にフォーマット変換する
PoBN = BNPoint.Create(bar_no_1+9,tenkanten_atai_1*1.0005); //テキストを挿入する位置を指定
TXL = TextLabel.Create(PoBN,tenkan_text); //テキストの印字内容を指定(テキスト作成指示も含む)
TXL.Color = Color.FromName ("yellow"); //テキストの色を指定
TXL.Font = new Font("Microsoft Sans Sefif", 7.5, FontStyle.Regular); //テキストのフォントサイズ等を指定
DrawingObjects.Add(TXL); //テキスト描画実行
//転換点を結ぶ。
myBNPoint1 = BNPoint.Create(MaxBarsBack + bar_no_pre1-1 +9,tenkanten_atai_1); //線の開始点
myBNPoint2 = BNPoint.Create(MaxBarsBack + bar_no_pre2-1 +9,tenkanten_atai_2); //線の終了点
myTrendLine1 = TrendLine.create(myBNPoint1,myBNPoint2); //線の作成コマンド
myTrendLine1.Persist = True; //ティックの更新後、線が画面に残る
myTrendLine1.Style = 0; //線の種類
myTrendLine1.Weight = 3; //線の太さ
myTrendLine1.Color = Color.FromName("White"); //線の色
myTrendLine1.ExtRight = False; //右に延長しません
DrawingObjects.Add(myTrendLine1); //線をチャートにプロット
end;
//前日の転換点が底、今日の転換点が天の時、底の転換点が確定したとして、転換点の値をsita1とする。sita1を底の転換点の足にテキスト表示する。転換点を結ぶ。
If tenkanten[1] = 0 AND tenkanten = 1 Then begin
//転換点の値をsita1とする。
tenkanten_atai_2 = tenkanten_atai_1 ;
tenkanten_atai_1 = sita1;
bar_no_pre2 = bar_no_pre1;
bar_no_pre1 = bar_no_2;
//sita1を底の転換点の足にテキスト表示する。
tenkan_text = tenkanten_atai_1.ToString(); //転換点の価格を数値形式からテキスト形式にフォーマット変換する
PoBN = BNPoint.Create(bar_no_2+9,tenkanten_atai_1*0.9998); //テキストを挿入する位置を指定
TXL = TextLabel.Create(PoBN,tenkan_text); //テキスト作成コマンド
TXL.Color = Color.FromName ("yellow"); //テキストの色を指定
TXL.Font = new Font("Microsoft Sans Sefif", 7.5, FontStyle.Regular); //テキストのフォントサイズ等を指定
DrawingObjects.Add(TXL); //テキスト描画実行
//転換点を結ぶ。
myBNPoint1 = BNPoint.Create(MaxBarsBack + bar_no_pre1-1 +9,tenkanten_atai_1); //線の開始点
myBNPoint2 = BNPoint.Create(MaxBarsBack + bar_no_pre2-1 +9,tenkanten_atai_2); //線の終了点
myTrendLine1 = TrendLine.create(myBNPoint1,myBNPoint2); //線の作成コマンド
myTrendLine1.Persist = True; //ティックの更新後、線が画面に残る
myTrendLine1.Style = 0; //線の種類
myTrendLine1.Weight = 3; //線の太さ
myTrendLine1.Color = Color.FromName("White"); //線の色
myTrendLine1.ExtRight = False; //右に延長しません
DrawingObjects.Add(myTrendLine1); //線をチャートにプロット
end;
End;
// --------------------------------------------------
Once ClearPrintLog; //デバッグ用(ログを削除)
// --------------------------------------------------
// 実行
// --------------------------------------------------
newins();
CreatePSP();
TenkantenKeisan();
// --------------------------------------------------
// おしまい
// --------------------------------------------------