見出し画像

5-2.インジケーター作成の実践

本Noteでは、TradingViewのインジケーター作成から応用、売買シグナルの設定、バックテストまでの手順を初心者向けに解説します。

「アラヤダ難しそう!」と思うかもしれませんが意外と簡単で無料です。(ワイは未だにTradingViewに課金したことありません)

所要時間は20分です。


①インジケーターってどうやって作るの?(1分)

インジケーターは、TradingViewのチャートを表示しているブラウザの画面上で作ることができます。開発ツールやエディタは不要です。

「何かプログラム覚えなきゃいけないんでしょ?」と思うかもしれません。確かに「PineScript」というスクリプト言語を使うので取っ付きにくい感じがしますが、コピペ+αで簡単にオリジナルのインジケーターを作成することができます。プログラムを作った経験がある方なら楽勝、初めての方でもなんとかなります。


②TradingViewでチャートを表示してみよう!(2分)

百聞は一見に如かず、百見は一考に如かず、百考は一行に如かず。実際の手順を見ながら、考えて、手を動かしてみましょう!


②-1.TradingViewのサイトにアクセス (https://jp.tradingview.com/

無題


②-2.言語設定を日本語に変更

日本語サイトにアクセスした場合はそのままでOKです。最初にhttps://www.tradingview.com/にアクセスして言語設定を変更していない場合、画面表記は英語のままです。かっこいい感じはしますが、少しでもわかりやすくするために日本語に変更しておきましょう。ワイはこのNoteを書くために手順をおさらいしてるときに気づきました。

トップページの下図の位置で言語設定を変更することができます。

無題



②-3.とりあえず何かチャートを表示する

ではとりあえず何かチャートを表示してみましょう。

トップページの「ティッカー」の欄に「XBTUSD」と入力してください。そうすると、"XBTUSD"という文字を含むシンボルのリストが表示されます。このリストには先物やBitMEX以外の取引所のものも含まれています。

無題

一番上の「BITCOIN / US DOLLAR PERPETUAL INVERSE SWAP CONTRACT」という説明がついているものを選択してください。これが俗にいう「MEXのXBTUSD無期限」です。

選択すると下図の画面が表示されます。

無題

この画面で「フル機能のチャート」を押してください。

無題

おめでとうございます!やっとTwitterでよく見かける画面に辿り着きました!楽しかった思い出、悲しかった思い出が蘇るチャートですね!

「ん?足がちげーぞ?」という方は、下図のように日足を選択しておいてください。

無題



③よく聞く200日移動平均線を描画しよう!(5分)

では早速、ほとんどコピペで200日移動平均線を表示してみましょう。

※移動平均線は主に3種類あります。

SMA = Simple Moving Average = 単純移動平均線

EMA = Exponential Moving Average = 指数移動平均線

WMA = Weighted Moving Average = 加重移動平均線

今回はSMAで描画します。ちなみにワイの脳内では(すま)(えま)(うま)です。



③-1.Pineエディタを表示する

チャート下部にあるタブ「Pineエディタ」をクリックします。

無題

何か下から怪しいウィンドウが出てこればOKです。

無題



③-2.作りたいインジケーターの元になりそうなものを探す

新しいインジケーターを作るので「新規作成」をクリックします。すると、既知のインジケーターのリストが表示されてきます。今回は移動平均線関係のインジケーターを作るので「Moving Average」を選択します。

無題

むっちゃシンプルな移動平均線を描画するPineスクリプトが表示されます。あとはこれをいじくって自分好みにカスタマイズするだけです!

無題

プログラミングを仕事にする訳でなければ、世の中に公開されている優れたコードをコピペし、必要な部分だけ編集するのが手っ取り早いです。



③-3.移動平均線を表示するインジケーターのコード6行を読んでみよう。

最初は雰囲気で何が書いてあるかを掴めばOKです。言語や関数の仕様は、必要に迫られるか興味が沸いたら調べてみましょう。

//@version=4
study(title="Moving Average", shorttitle="MA", overlay=true)
len = input(9, minval=1, title="Length")
src = input(close, title="Source")
out = sma(src, len)
plot(out, color=color.blue, title="MA")

1行目「//@version=4」

訳→PineScriptのVersion4で書いちゃうぜ?Version3とVersion4は書き方が全然違うぜ?新しい方でやっといて損はないぜ?


2行目「study(title="Moving Average", shorttitle="MA", overlay=true)」

訳→インジケーターのタイトルは"Moving Average"だぜ?略称は"MA"だぜ?チャートに重ねて表示するぜ?(overlay=falseにするとチャートに重ねず別フレームに表示します)


3行目「len = input(9, minval=1, title="Length")」

訳→lenって名前の変数は、画面で入力できるようにするぜ?初期値9だぜ?最小値は1だぜ?タイトルは"Length"だぜ?


4行目「src = input(close, title="Source")」

訳→srcって名前の変数は、画面で入力できるようにするぜ?値は足のcloseの値を使うぜ?タイトルは"Source"だぜ?


5行目「out = sma(src, len)」

訳→outって名前の変数は、srcの値のlen個の単純移動平均だぜ?その計算は「sma」って関数に任せちゃうぜ?(sma関数の仕様はこちら)smaの部分をemaにしたりwmaにしたりもできちゃうぜ?


6行目「plot(out, color=color.blue, title="MA")」

訳→outの値を青色で"MA"ってタイトルでplotしちゃうぜ?



③-4.サンプルコードを200日移動平均線にカスタマイズ!

このサンプルを元に、とりあえず200日移動平均線を表示するよう値を編集します。タイトルと期間を変更してみます。

//@version=4
study(title="200日移動平均線", shorttitle="200MA", overlay=true)
len = input(200, minval=1, title="Length")
src = input(close, title="Source")
out = sma(src, len)
plot(out, color=color.blue, title="200MA")

編集したら、「チャートに追加」をクリックしてください。チャート上に移動平均線が追加されます。

無題

「Pineエディタ」をクリックすると、PineScriptの編集ウィンドウは下に折りたたまれます。

無題

懐かしい・・・何度も叩き落されたり、乗り越えるたびにトレテンか!?と意識されてきた200日移動平均線を表示することができました!(矢印はワイが適当に足しました。)しかも2020/03/08現在、微妙に絡んでいる位置にいる!



③-5.移動平均線の表示設定を画面上で編集してみる

表示された移動平均線を右クリックして「設定」をクリックします。

無題

表示している移動平均線の設定を編集することができます。

パラメータのタブでは「期間」→移動平均線の期間、「ソース」→移動平均線の計算の元となる足のどの値を採用するか、を指定できます。

無題

無題2

・終値(close):その足の終値

・始値(open):その足の始値

・高値(high):その足の高値

・安値(low) :その足の安値

・高値安値平均(hl2):(高値+安値)/ 2

・高値安値終値平均(hlc3):(高値+安値+終値)/ 3

・始値高値安値終値平均(ohlc4):(始値+高値+安値+終値)/ 4

どの値を採用するかによって、移動平均線の位置が結構変わります。一般的な終値のままが良いと思います。


スタイルのタブでは、移動平均線の色、太さ、線のスタイル、小数点以下の桁数を設定できます。

無題



④欲張って10日/25日/75日/100日/200日の移動平均線を描画しよう!(3分)

それでは次に、1つのチャートに複数の移動平均線を表示してみましょう。

※よく利用される移動平均線は、5日=約1週間、10日=約2週間、25日=約1か月、75日=約3か月、200日=約1年の平均価格と意識されているようです。株の世界なら土日祝日が休場なのでわかりますが、仮想通貨なら土日祝日は関係ないし365日移動平均の方が良いんでない?と思うかもしれませんが、その話はまた別の機会に。


④-1.チャートに表示しているインジケーターの初期化

③で追加した移動平均線は、チャートの画面を右クリックし、「描画を削除」でクリアしておいてください。

無題2


④-2.応用 - 複数の単純移動平均線を描画する

③で作業したように、以下のコードをPineエディタにコピペし、「チャートに追加」を押してください。

先程のコードのうち、smaの値の計算部分と、線を描画する部分をコピペで増やしただけです。

//@version=4
study(title="Multi移動平均線", shorttitle="MultiMA", overlay=true)

out1 = sma(close, 10)
plot(out1, color=color.aqua, title="10MA", linewidth=1)

out2 = sma(close, 25)
plot(out2, color=color.fuchsia, title="25MA", linewidth=2)

out3 = sma(close, 75)
plot(out3, color=color.blue, title="75MA", linewidth=3)

out4 = sma(close, 100)
plot(out4, color=color.purple, title="100MA", linewidth=4)

out5 = sma(close, 200)
plot(out5, color=color.navy, title="200MA", linewidth=5)

前の200日移動平均線ではサンプルを利用したため、移動平均線を右クリックしたときに期間とソースを編集できるようになっていましたが、このコードではそれを省略し、期間固定で10/25/75/100/200単純移動平均線を5本表示するようにしています。

無題

表示する移動平均線の本数、期間、色や線の太さは好みに合わせて編集してみてください。



⑤日足チャートではなく4時間足/1時間足にも表示したい!(3分)

④で作成したインジで2020/03/08現在の状況を見ると・・・なんか現在価格付近に線がいっぱいあって局面感があります!

無題2


これはぜひ詳しく見てみたい!ということで4時間足に変更してみると・・・

ん?日足だと現在価格はちょうど200日移動平均線あたりにいるのに、4時間足でみると位置が違うぞ?

無題2

そうです。日足を表示している状態では200「日」移動平均線ですが、これは200「期間」移動平均線の期間がたまたま「日」だったのです。日足であれば直近200×日、4時間足であれば直近200×4時間=800時間=33.333日移動平均線になってしまいます。

ほな1日足の移動平均線を4時間足のチャートに表示するには期間を6倍にしたらええやん!という発想をコードに反映してみます。単純に期間を×6すればOKです。

//@version=4
study(title="Multi移動平均線4H", shorttitle="MultiMA4H", overlay=true)

out1 = sma(close, 10*6)
plot(out1, color=color.aqua, title="10MA", linewidth=1)

out2 = sma(close, 25*6)
plot(out2, color=color.fuchsia, title="25MA", linewidth=2)

out3 = sma(close, 75*6)
plot(out3, color=color.blue, title="75MA", linewidth=3)

out4 = sma(close, 100*6)
plot(out4, color=color.purple, title="100MA", linewidth=4)

out5 = sma(close, 200*6)
plot(out5, color=color.navy, title="200MA", linewidth=5)

これで4時間足のチャートに200「日」移動平均線を表示することができます。

無題2

しかし、このままでは、表示する足を変更するたびにコードを書き換えなければなりません。

それは面倒くさい!何とか自動化でやってほしい!

日足、4時間足、1時間足に限定して、日単位の移動平均線を表示しようとすると下記のようなコードになります。

//@version=4
study(title="Multi移動平均線", shorttitle="MultiMA", overlay=true)

//現在表示中の足を取得し、日単位の移動平均に変換するための係数を取得
//※本対応は日足、4時間足、1時間足に限定しています。
//これより短い足では計算・表示することはできません。
c1 = if(timeframe.period=="D")
    1
else
    c2=if(timeframe.period=="240")
        6
    else
        c3=if(timeframe.period=="60")
            24
        else
            0
        c3
    c2 

out1 = sma(close, 10*c1)
plot(out1, color=color.aqua, title="10MA", linewidth=1)

out2 = sma(close, 25*c1)
plot(out2, color=color.fuchsia, title="25MA", linewidth=2)

out3 = sma(close, 75*c1)
plot(out3, color=color.blue, title="75MA", linewidth=3)

out4 = sma(close, 100*c1)
plot(out4, color=color.purple, title="100MA", linewidth=4)

out5 = sma(close, 200*c1)
plot(out5, color=color.navy, title="200MA", linewidth=5)


描画結果は下図の通りです。日足のチャートに表示していた200日単純移動平均線を、4時間足、1時間足で表示することができました。

無題


(※30分未満の足への適用は、参照するロウソク足の数がTradingViewの仕様制限を超過するため不可です)


最後にせっかく作成したのでインジケーターを保存しておきます。

無題

「Pineエディタ」の右上の「保存」をクリックし、スクリプトに適当な名前を付けて「保存」をクリックしてください。


これで、チャート上部の「インジケーター」→「マイスクリプト」から読み込めるようになります!

無題



⑥ストラテジーを作ってバックテストしたい!(5分)

ロウソク足と移動平均線の関係を見ていると、

「100SMA超えたら買う、割ったら売るだけで良いのでは!?」

みたいに聖杯を思いつくことが多々あります。

それでは早速売買シグナルを設定してストラテジーを作りバックテストしてみましょう。


インジケーターと異なるのは2点。

①2行目は「study」ではなく「strategy」!

②インジで使用する値を計算した後に売買シグナルの条件を書く!

//@version=4
strategy("100SMACross")

//現在表示中の足を取得し、日単位の移動平均に変換するための係数を取得
//※本対応は日足、4時間足、1時間足に限定しています。これより短い足では計算・表示することはできません。
c1 = if(timeframe.period=="D")
    1
else
    c2=if(timeframe.period=="240")
        6
    else
        c3=if(timeframe.period=="60")
            24
        else
            0
        c3
    c2 

out1 = sma(close, 10*c1)
plot(out1, color=color.aqua, title="10MA", linewidth=1)

out2 = sma(close, 25*c1)
plot(out2, color=color.fuchsia, title="25MA", linewidth=2)

out3 = sma(close, 75*c1)
plot(out3, color=color.blue, title="75MA", linewidth=3)

out4 = sma(close, 100*c1)
plot(out4, color=color.purple, title="100MA", linewidth=4)

out5 = sma(close, 200*c1)
plot(out5, color=color.navy, title="200MA", linewidth=5)


//終値が100日単純移動平均線を超えた時、ノーポジなら10玉買う
//終値が100日単純移動平均線を超えた時、ショート中なら20玉買う
if time > timestamp(2019, 01, 01, 00, 00)
    if crossover(close, out4)
        strategy.entry("Buy", strategy.long, 10, when=strategy.position_size == 0)
        strategy.entry("Buy", strategy.long, 20, when=strategy.position_size < 0)
   
//終値が100日単純移動平均線を割った時、ノーポジなら10玉売る
//終値が100日単純移動平均線を割った時、ロング中なら20玉売る
if time > timestamp(2019, 01, 01, 00, 00)
    if crossunder(close, out4)
        strategy.entry("Sell", strategy.short, 10, when=strategy.position_size == 0)
        strategy.entry("Sell", strategy.short, 20, when=strategy.position_size > 0)
   
plot(strategy.equity)

後半が売買の条件です。

2019/01/01以降で、100SMAを超えていれば10玉ロング、割っていれば10玉ショートの状態になるように記載しています。使用するSMAの期間を変えたり、ロングとショートの条件を変えたり、自分好みにカスタマイズしてみてください。


インジケーターと同じように、「Pineエディタ」にコピペして「チャートに追加」をクリックします。

無題


画面の下部にバックテスト結果が表示されます。

無題

2019/01/01以降、100SMA超えたら10玉ロング、割ったら10玉ショートのストラテジーのバックテスト結果は…

純利益:$116,265!

凄い!これは聖杯です!

(※実質2019/02/26にロングして8/29にドテンした1トレードの利益です)



⑦まとめ(1分)

1.インジケーターもストラテジーも無料で作れる。

2.公開されている優秀なコードのコピペ+αで作れる。

今回はインジケーターとストラテジー作成の実践でしたが、Botもそれほど難しいものではありません。

習うより慣れろで、世の中に公開されている優秀なコードをほんの少し自分好みにいじってみるところから始めてみてはいかがでしょうか。


この記事が気に入ったらサポートをしてみませんか?