システムトレード

[EasyLanguageでシステムトレード]Timer機能を使って一定時間ごとにプログラムを実行しよう

EasyLanguage Timer

前回[EasyLanguageでシステムトレード]思い通りの取引ができるようにPriceSeriesProviderを細かく知ろうで、PriceSeriesProviderの特性を深く学びました。

EasyLanguageでインジケーターやストラテジーを作るときは、自分の思い通りに動いているかを確認することが大事だということも紹介しました。

今回は、「Timer」というイベントハンドラを紹介したいと思います。

ある一定時間が過ぎたときに実行するメソッドの作り方を紹介します。こうすることで、銘柄コードを途中で変えたりということもできます。

マネックス証券のマニュアルの「例題5」にならって、「Timer」を解説します。

なお、例題5の内容は、チャートが動いている状態でしか機能しないので、Timerの使い方のみ解説となります。

タートル 投資手法 バックテスト
この結果を見てもまだシステムトレードしないのか【タートル流投資手法の驚くべきバックテスト結果】タートルが取ったとされる投資手法をプログラム化して、バックテストを行いました。その結果としては、かなりのリターンが期待できるものでした。トレンドフォローの投資手法は、まだまだ現役であるようです。...

目次

Timerを追加しよう

例題05 Timerイベントハンドラ

EasyLanguageを開き、新規作成からインジケーターを選びます。

ツールボックスを開くと、「Timer」というのがあります。それをダブルクリックして、「Timer」コンポーネントを追加してください。

Timerの設定をしよう

例題05 Timerイベントハンドラ

続いて、「Timer」のプロパティの設定をしましょう。

プロパティで、「Timer1」が選ばれているのを確認して、

「Interval」を1000に、「AutoReset」をTrueに、「Enable」をTrueにしてください。

Intervalの設定

「Interval」は、どれくらいの間隔でTimerを設定するかです。

後ほど、Timerメソッドを書きますが、そのメソッドを何ミリ秒に1回実行するかを設定できます。

ここで注意してもらいたいのが、単位は秒ではなくてミリ秒だということです。

パンダはし
パンダはし
1000と入れたら1000ミリ秒、つまり1秒だよ

AutoResetの設定

「AutoReset」は、「Interval」が過ぎたあとに、再度タイマーを開始するかどうかを設定できます。

Trueにしておくと、今回の場合は、1000ミリ秒ごとにTimerメソッドが実行されます。

もしも、「False」にしていると、最初の一回しか、Timerメソッドが実行しないことになります。

パンダはし
パンダはし
Timerメソッドを1回きりだけ使いたいときにFalseだね

Enableの設定

「Enable」は、Trueにしておくと、チャートに表示した瞬間から「Timer」が起動します。

Falseの場合は、別の形で起動しないといけません。なので、かなり上級者向けとなります。

パンダはし
パンダはし
とはいえ、途中からタイマーを起動したいケースは少ないと思うよ

Timerメソッドを追加しよう

例題05 Timerイベントハンドラ

Timerの設定ができたら、メソッドを書きましょう。

プロパティから、「Timer1」が選ばれていることを確認して、「イベント」ボタンをクリックしてください。

「Elapsed」の「Value」が空欄になっているので、その空欄をダブルクリックします。

そうすると、自動でプログラムが書かれます。

メソッドの名前が、ひたすら長くなっていますが、ここは書き換えてはいけません。エラーが出てしまいます。

beginのあとに、プログラムを続けます。

マニュアル通りにプログラムを記述しましょう。

パンダはし
パンダはし
このサイトの下の方にプログラムを書いてあるよ。コピーして使ってね

プログラムの解説

ここからは、EasyLanguageプログラムの解説をします。

以降出てくる○○行目は、空白の改行を除いた行数としています。

1行目 変数の宣言

1行目は例のごとく変数の宣言をしています。

2~8行目 Timerメソッド

先ほど挿入したTimerメソッドです。

1秒ごとに、このメソッドが実行されます。中身としては、iCounterが正なら、iCounterを1減らします。

次に、currentbarが、barnumbよりも大きければ、PlotValueメソッドを実行します。

この段階ではよくわかりませんね。とりあえず先に進みましょう。

9~12行目 PlotValueメソッド

Timerメソッド内で、条件文を満たしたときに実行されるメソッドです。

iCounter/iMaxをチャート上に書きます。この変数たちは次で出てきます。

13~14行目 Once文

Once文は、プログラムの中で一度だけ実行される文となります。

EasyLanguageの場合、足が更新される度にプログラムが実行されます。

Bartypeが1のとき、つまり足種が分足のとき、iMaxをBarintervalの60倍とします。

パンダはし
パンダはし
Bartypeは足種のことでBarintervalはその間隔だよ。60倍したら分足の秒数になるね(5分足なら300秒)

もしもこれをOnce文にしないと、チャートの足が更新される度に60倍されていってしまいます。

普通のプログラムでは、一度しか実行されないので、こういった考えはあまりありませんが、EasyLanguageでは、注意が必要です。

15~21行目 変数に代入

15行目で、LastBarOnChartが真なら、つまり、現在の足が最新の足である、かつ、現在の足のBarStatusが2つまり、足の終わりなら、以下の内容を実行します。

ゼロをプロットする。

iCounterにiMaxを代入する。

barnumbにcurrentbar代入する。(currentbarは、足の番号。足にはそれぞれ1から順に番号が割り振られている)

これらのことこら、このプログラムは以下のように動くことがわかります。

チャート上の最新の足が終わるときに、iCounterをリセット(iMaxを代入)します。

そして、1秒ごとに、その最新の足の進み具合を数値化(iCounter/iMax)します。

5分足の場合、300秒経てば、次の足が登場します。つまり、その300秒間は株価は動いているけれど、足としては増えません。

その5分足の進捗率を数値化しようというのが、このインジケーターの狙いです。

パンダはし
パンダはし
わかってどうするという突っ込みは無しなんだな

つまり、60秒進んだときには、

iCounter/iMax×100=240/300×100=80と出ます。

進捗率というよりかは、カウントダウンですね。

21~22行目 Plot文

最後の2行は100と0のラインをプロットするだけです。

プログラムコード

以下にプログラムコードを載せておきますのでコピーしてお使いください。

var: intrabarpersist iCounter(0),iMax(60),barnumb(0);

method void Timer1_Elapsed( elsystem.Object sender, elsystem.TimerElapsedEventArgs args ) 
begin
	If iCounter > 0 then
	iCounter = iCounter - 1;
	If currentbar > barnumb then
	PlotValues();
end;

Method void PlotValues()
begin
plot1((iCounter/iMax)*100, "PctLeft");
end;


Once If Bartype = 1 then
	iMax=Barinterval*60;
if LastBarOnChart then begin
	if BarStatus( 1 ) = 2 then begin
		plot1(0, "PctLeft");
		iCounter=iMax;
		barnumb=currentbar;
	end;
end;

plot2(100, "100");
plot3(0, "zero");

 

さいごに

今回は、Timerによるイベントハンドラを設定し、Timerの条件を満たすごとに実行されるメソッドを書く方法を紹介しました。

EasyLanguage特有の、埋め込み関数が多数あったため、理解するのに時間がかかったかもしれませんが、なんとなくわかっていただけたのではないでしょうか。

このTimerによる方法を応用すれば、一定時間ごとに対象の銘柄を変えたりすることもできます。

これで、システムトレードの幅がさらに広がったかと思います。

次回は、オブジェクト指向による売買注文の出し方を紹介したいと思います。

タートル 投資手法 バックテスト
この結果を見てもまだシステムトレードしないのか【タートル流投資手法の驚くべきバックテスト結果】タートルが取ったとされる投資手法をプログラム化して、バックテストを行いました。その結果としては、かなりのリターンが期待できるものでした。トレンドフォローの投資手法は、まだまだ現役であるようです。...

システムトレード記事一覧Next→OrderTicketで売買注文を出そう

Nocchi_nochilog(のっち)
少額投資をこよなく愛する1児のパパ&サラリーマン。
お小遣い制でも負けずに投資をしています。

知るだけで暮らしが豊かになる知識を発信中!
若いうちから投資することの重要性を伝えるべく、ブログの記事を更新しています。

特にインスタグラムでは、1日1分で自然とお金の知識が身につくような情報を発信しています。
ぜひ合わせてご覧ください!

下のアイコンから飛べます!
\ Follow me /

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です