前回の記事を読んでいない方はそちらも読んでみてほしい。今回の記事の理解がさらに深まると思う。
こんにちは!makoto(@Makoto_beginner)です。
今回の記事では、Pineスクリプトを使用して
1、インジケーターの作成
2、ストラテジーのバックテスト
を実施する。
しかし、2のバックテストを実施するためには「ストラテジー(売買戦略)」を組む必要があるので、このストラテジーの作成も行うことにする。
※今回の内容ではプログラムの書き方などは一切触れず、どのようにしてインジケータの作成やバックテストを実施するのかについて紹介を行うのみなのでご了承願いたい。Pineスクリプトの書き方に関する記事については別途シリーズ化して記事にしていく予定だ。
では、本題に入る。
今回の記事のインジケータの作成では、終値※1をもとに指数平滑移動平均線を3本表示するインジケーターを作成する。完成すると、以下の写真のように、チャート上に3本のラインが入る。
※1「終値」:特定の期間において、その期間が終了した時点での値段を終値(おわりね)という。今回は、1日の取引が終了した時点の値段を終値としている。
この3本の線は、指数平滑移動平均線といい「ある期間の値の平均値」だと思ってもらえれば良い。この”ある期間”が10日だったら10日間の値の平均値となり、20日だったら20日間の値の平均値が線として描画される。
今回は、
黄色を25日間の終値の平均(25日間移動平均線)
青色を75日間の終値の平均(75日間移動平均線)
赤色を200日間の終値の平均(200日間移動平均線)
として3本の移動平均線を引くインジケーターを作成する。
また、バックテストではこの移動平均線がパーフェクトオーダーとなった時に発注を行うストラテジーを作成してバックテストを行うこととする。
(パーフェクトオーダーについては後述するのでご心配なく)
1、インジケーターの作成
インジケーターを作成するには、TradingViewを開き下部の「Pine エディタ」をクリックする。そして、右上の「開く」より「新規の空のインジケーター」をクリックするとインジケーターを作成できる。
あとは、3行目から以下のコードを入力する。
//@version=4
study(“EMA-3line”,overlay=true)
day_S = input(title=”移動平均(短)”,defval=25,step=1)
day_M = input(title=”移動平均(中)”,defval=75,step=1)
day_L = input(title=”移動平均(長)”,defval=200,step=1)
EMA_S = ema(close,day_S)
EMA_M = ema(close,day_M)
EMA_L = ema(close,day_L)
plot(EMA_S,title=”移動平均線(短)”,color=color.yellow,linewidth=1)
plot(EMA_M,title=”移動平均線(中)”,color=color.blue,linewidth=1)
plot(EMA_L,title=”移動平均線(長)”,color=color.red,linewidth=1)
あとは、保存したのちにTradingView左上の「fx」と書いてあるボタンから、先ほど作ったインジケーターをクリックする。
Pineスクリプトが正しく書けていれば、このように赤青黄の線が表示されるはずだ。
2、ストラテジーの作成及びバックテスト
では次にバックテストを行うためのストラテジーを作成していくが、今回の売買戦略を理解するため、まずパーフェクトオーダーについて説明する。
パーフェクトオーダーとは?
相場は日々上下を繰り返している。その相場が上昇している状態を「上昇トレンド」、下落している状態を「下降トレンド」という。
そして、このトレンドの発生を見極めるための指標としてパーフェクトオーダーが存在し、具体的には長期移動平均線、中期移動平均線、短期移動平均線が順番に並んでいる状態を示す。以下の画像の破線部分は下降トレンドパーフェクトオーダーとなっている。
上昇トレンドが発生する場面では、
上から順に短期移動平均線>中期移動平均線>長期移動平均線と並び、
下降トレンドが発生する場面では、
上から順に長期移動平均線>中期移動平均線>短期移動平均線と並ぶと言われている。
以下の画像では赤の破線間が下降トレンドパーフェクトオーダーとなっているが、確かにパーフェクトオーダーが発生してから下落していることがわかる。
つまり、上昇のパーフェクトオーダーが出た時に買い、下降のパーフェクトオーダーが出た時に売るという戦略を行えば爆益が期待できそうだ!!
実際にストラテジーを組んでみる
インジケーター作成時と同じように、TradingViewを開き下部の「Pine エディタ」をクリックする。そして、右上の「開く」より「新規の空のストラテジー」をクリックするストラテジーを作成できる。
そして、今回は以下のようなストラテジーを組んだ。
○上昇トレンドのパーフェクトオーダーが発生した時に買いポジションを持ち、そのパーフェクトオーダーが終了した時点で買いポジションを決済する。
○下降トレンドのパーフェクトオーダーが発生した時に、売りポジションを持ち、パーフェクトオーダーが終了した時点で売りポジションを決済する。
コードを以下に示す。(所々センスがないがご了承を)
//@version=4
strategy(“EMA_3line_strategy”, overlay=true)
day_S = input(title=”移動平均(短)”,defval=25,step=1)
day_M = input(title=”移動平均(中)”,defval=75,step=1)
day_L = input(title=”移動平均(長)”,defval=200,step=1)
EMA_S = ema(close,day_S)
EMA_M = ema(close,day_M)
EMA_L = ema(close,day_L)
plot(EMA_S,title=”移動平均線(短)”,color=color.yellow,linewidth=1)
plot(EMA_M,title=”移動平均線(中)”,color=color.blue,linewidth=1)
plot(EMA_L,title=”移動平均線(長)”,color=color.red,linewidth=1)
//パーフェクトオーダーの条件を指定する
entry_long = EMA_S > EMA_M and EMA_M > EMA_L
entry_short = EMA_L > EMA_M and EMA_M > EMA_S
if (entry_long[1] == false and entry_long == true)
strategy.entry(“LONG”,strategy.long)
strategy.close(“LONG”,entry_long[1] == true and entry_long == false)
if (entry_short[1] == false and entry_short[0] == true)
strategy.entry(“SHORT”,strategy.short)
strategy.close(“SHORT”,entry_short[1] == true and entry_short[0] == false)
そして、これを保存したのち画面左上の「fx」ボタンから保存したストラテジーを選択する。
ストラテジーが正しく書けていれば、下の写真のようにチャート上に矢印と一緒に”LONG”や”SHORT”や”CLOSE”の文字が現れるはずだ。
これは、「ここで注文を行いましたよ」というのを表している記号である。
そして、写真の黄色で塗っている場所は下降トレンドのパーフェクトオーダーとなっている箇所だが、確かにパーフェクトオーダーが始まった場面で売りを意味する”SHORT”の注文が入っており、パーフェクトオーダーが終了した場面でポジションの決済を意味する”CLOSE”の注文が入っていることがわかる。
気になる結果は・・・?
今回は、一回の注文で10万円分のアメリカドルを購入するような設定にした。
では、気になるバックテスト結果はというと、
一時、資産がマイナスとなっているが最終的な純利益は2万9千円となっている。
また、パフォーマンスサマリーの画面を見てみると、9万円の利益を出しているが損失も6万円分出していることがわかる。
バックテスト結果から見る、このストラテジーの弱点とは・・・?
どこで損失が出ているのか確認すると、以下のような「レンジ相場」で損失がでていることがわかった。
「レンジ相場」とはある範囲を行ったり来たりする相場のことで、いわば「上昇トレンド」も「下降トレンド」も発生していない状態のことである。
この「レンジ相場」中では緑の矢印で示すように「高値で買い安値で売る」また、「安値で売って高値で買う」という損失を生む取引を行ってしまっている。
このことからもわかるように、実はこの手法はどちらかに強いトレンドが発生した場合に有効な手法なのである。その反面、レンジ相場では損失を出してしまうので注意が必要だ。
このように、バックテストを行うことでそのストラテジーがどのような特徴を持っているのかについて分析することができるので、より良い売買戦略の構築に役に立つというわけだ。
3、まとめ
前回のまとめと同様になるが、Pineスクリプトを使用することで、
1、オリジナルのインジケーターを作成できる
2、投資戦略が有効かどうか過去の値動きをもとにテスト(バックテスト)ができる
が可能となる。実際に私も日々思いついたストラテジーをPineスクリプトで組んではバックテストを実施して、投資の難しさを思い知らされている。
しかし、その戦略の何が弱点であるかを確認することで、戦略発案→バックテストで検証→結果をもとに弱点を修正→バックテストで検証という流れを回していけるので、そこからより良い戦略を生み出すためのヒントを得ている。
Pineスクリプトの最大の欠点は習得するのが少々難しいということであるため、今後はこのブログを通して初心者でも理解できるように解説を行う予定としている。
食わず嫌いはせずに、是非興味を持って習得してほしいと願っている。
それでは、また次の記事でお会いしましょう。
※免責事項※
当サイトにおける記事内容は一般的に入手可能な情報に基づいて管理人が解釈した上で作成しています。よって、記事内で発信していることは全て個人的な見解であり『株式およびそれに準ずる金融商品、資産など』の購入、売却等、投資を勧誘するものではありません。
また、それらの内容について当サイトがいかなる保証を行うものでもありません。
そのため本記事に基づいて投資を行い損失が発生した場合にも当サイトは一切の責任を負いません。
投資に関する決定は、ユーザーご自身のご判断において行われるようお願いいたします。
本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!
Twitter : makoto(@Makoto_beginner)
また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。
皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。