システムトレード

[EasyLanguageでシステムトレード]思い通りの取引ができるようにPriceSeriesProviderを細かく知ろう

EasyLanguage PriceSeriesProvider

前回[EasyLanguage]例題でわかる!システムトレードのオブジェクト型記述に慣れようまでで、EasyLanguageにおける「PriceSeriesProvider」コンポーネントの使い方がかなりわかったかと思います。

今回は、さらに細かいところについて考えてみましょう。

「PriceSeriesProvider」の特性をしっかりつかんで、システムトレードに役立てましょう。

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

今回のポイント

今回は、マネックス証券のマニュアルの「例題4」を一緒に解いてみましょう。

ここでは、チャートに表示されている足種に関わらず、常に日足で、株価の変化率を計算できるようにします。

さらに、if文を使うことで、厳密に日足で計算をする方法を紹介します。

ここで説明しても分かりにくいと思いますので、早速EasyLanguageでプログラムを書いてみましょう。

パンダはし
パンダはし
プログラムコードは下の方にあるよ

PriceSeriesProviderの設定

まずは、「PriceSeriesProvider」の設定をしましょう。

設定方法は、前回の例題と同じです。

まずは、ツールボックスから、「PriceSeriesProvider」をダブルクリックして、コンポーネントを追加してください。

例題04(PriceSeriesProviders)

以下の画像のように、「PriceSeriesProvider」のプロパティを設定します。

「Symbol」銘柄コードは、input文で入力できるようにします。

パンダはし
パンダはし
input文で入力したい項目をクリックして選択してから入力だよ。そうしないと他のがinput文になっちゃうからね

例題04(PriceSeriesProviders)

また前回と同じように、「PriceSeriesProvider」コンポーネントを、もうひとつ追加します。

例題04(PriceSeriesProviders)

こちらも、以下の画像のように設定します。

「Symbol」の欄には「symbol」と入れています。

これは、チャートに表示されている銘柄を参照しますという意味になります。

パンダはし
パンダはし
「Load」を「True」にするのも忘れないでね

例題04(PriceSeriesProviders)

プログラム内容の解説

例題04(PriceSeriesProviders)

ここからは、プログラムの解説をします。プログラムコードは、このサイトの下の方にあるので、コピーしてお使いください。

変数の宣言(1~3行目)

1~3行目は変数の宣言です。1行目は、「入力」によりすでに自動で書かれています。

パンダはし
パンダはし
以降、○行目は、空白の改行を除いた行数を書いてるよ

if文(4~7行目)

4~7行目では、if文のまとまりとなっています。

『DateがDate[ 1 ]で無い場合』、if文内のプログラムが実行されます。

これは、参照している足の日付とそのひとつ前の足の日付が異なる場合を示しており、日付が変わった最初の足のときのみ、if文内のプログラムが実行されます。

パンダはし
パンダはし
○○ <> △△は、○○が△△と異なるとき、という条件文だよ

if文の中身としては、株価の変化率を表しています。

「SymbolPerf」が、「PriceSeriesProvider2」なので、チャートに表示されている株価の変化率を表しています。

『LookBack』を8としており、かつ、足種を日足で設定しているので、8日前の株価からの変化率を表します。

同じ要領で、「BenchPerf」は、「PriceSeriesProvider1」なので、日経平均株価の8日前からの株価の変化率を表しています。

これらの計算は、if文の中にあるので、日付が変わった最初の足で実行されます。

日経平均株価との比較の計算(8行目)

8行目では、上で計算した「SymbolPerf」と「BenchPerf」の差を計算しています。

チャートに表示されている株価の変化率と、日経平均株価の変化率の比較なので、日経平均株価に対して、どういった値動きをするかがわかります。

描画設定(9~12行目)

9~12行目では、計算した結果の描画(Plot)を設定しています。

関数「PercentChange」は、割合を算出しますが、名前の通り%で計算されるかと思いきや、そうではありません。

したがって、Plot文の中で100倍して、%表示になるようにしています。

もちろんこれは、5,6行目の計算の時点で100倍することも可能です。

プログラムコード

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

Input: string iSymbol1( "$MNK" );

Input: int LookBack( 8 );

Vars: SymbolPerf( 0 ), BenchPerf( 0 ), RelPerf(0);

If Date <> Date[ 1 ] then begin
SymbolPerf = PercentChange(PriceSeriesProvide2.Close, LookBack) ;
BenchPerf = PercentChange(PriceSeriesProvide1.Close, LookBack);
end;

RelPerf = SymbolPerf - BenchPerf;

Plot1(SymbolPerf*100, "Symbol Perf");
Plot2(BenchPerf*100, "Bench Perf");
Plot3(RelPerf*100, "Rel Perf");
Plot4(0);

 

チャートに表示しよう

プログラムが完成したら、F3キーを押して検証して、問題なければ、チャートに表示してみましょう。

パンダはし
パンダはし
インジケーターをチャートに表示する方法は過去記事を見てね

例題04(PriceSeriesProviders)

チャート分析上で表示されている足種を日足にすると、変化率が分かりやすいでしょう。

例題04(PriceSeriesProviders)

チャートを5分足にした場合でも、日付が変わった最初の足で計算していることがわかります。

例題04(PriceSeriesProviders)

もしもif文がなかったら?

もし、if文がなくなったらどうなるでしょうか。「PriceSeriesProvider」のプロパティで、日足を選択しているので、そもそも必要ないのではないでしょうか。

例題04(PriceSeriesProviders)

if文を書かずにプログラムを保存して(F3キーで検証して)、5分足のチャートに表示してみましょう。

そうすると、日付が変わるひとつ前の足でも計算してしまっていることがわかります。

理由はよくわかりませんが、そういう仕様なのだと思います。

例題04(PriceSeriesProviders)

したがって、やはりif文は記述しておかないと、正確には判定できていないことがわかりました。

さいごに

「PriceSeriesProvider」を使う際の細かいところについて解説しました。

今回の内容が、大きな損失を招くことになるかというと、そうではないかもしれません。

ですが、些細な違いがシステムトレードでは大きな違いになり得ます。

長期間で考えると、塵も積もっていきます。

自分の思い通りになっているかをしっかりと確認しましょう。

次回は、イベントハンドラを使って、あるイベントが起きたときに実行されるメソッドを紹介します。

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

システムトレード過去記事一覧Next→Timerを使って、一定間隔ごとにプログラムを実行しよう

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

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

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

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

POSTED COMMENT

  1. にこにこ より:

    If Date Date then begin この部分記述間違えです。
    これに発見するまで約3時間かかったペーペーですが
    非常に勉強させてもらってます。ありがとうございます。

    • nocchi より:

      にこにこ様
      コメントありがとうございます。
      ご指摘通り、間違えています。。申し訳ございません。

      正しくは、
      If Date < > Date[1] then begin
      ですね。
      本文も修正しておきました。
      これからも本サイトで勉強していただければ幸いです!

COMMENT

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