はじめに
正しいトレーディングツールがなければ、効果的なテクニカル分析を行うことはできません。強力なトレーディング戦略は、よくあるミスを避け、リスク管理を改善し、チャンスを見極めて活用する能力を高めるのに役立ちます。
多くの人にとって、TradingViewは必須のチャートプラットフォームです。テクニカル分析ツールのハブを提供するパワフルなHTML5ウェブアプリケーションは、何百万人もの人々に利用され、FX、仮想通貨、して伝統的な株式市場の動きをトラッキングします。
TradingViewには多くの強力な機能があります。多数の取引プラットフォームで資産をトラッキングしたり、ソーシャルネットワーク内で取引アイデアを公開したりすることができます。今回は、そのカスタマイズ性に注目してみましょう。TradingViewでは、独自のプログラミング言語であるPineスクリプトを使用して、チャートのレイアウトを詳細に制御することができます。
それでは、ここから詳しく見ていきましょう。
Pineスクリプトとは?
Pineスクリプトは、TradingView チャートのカスタマイズに使用できるスクリプト言語です。このプラットフォームには、そのための多くの機能が備わっていますが、Pineスクリプトを使用することで、さらに一歩進んだ使い方ができます。ローソク足の色を変えたい時も、新しい戦略をバックテストする時も、Pineエディタを使えば、リアルタイムチャートを思い通りにカスタマイズすることができます。
コード自体は優れた文書化がされているので、詳細については、ユーザーマニュアルをご覧ください。このチュートリアルの目標は、いくつかの基本を説明し、仮想通貨のトレード に便利な指標を紹介することです。
設定
Pineスクリプトを使い始めるのはとても簡単です。私たちが書いたコードはすべてTradingViewのサーバー上で実行されるので、追加のダウンロードや設定を必要とせず、ブラウザからエディタにアクセスしてスクリプトを開発することができます。
このチュートリアルでは、Bitcoin/Binance USD (BTCBUSD)の通貨ペアをチャート化します。まだTradingViewのアカウントを持っていない場合は、無料のアカウントを作成してください (プロ版という有料版もありますが、このガイドの内容ではプロ版は不要です)。
このリンクにアクセスすると、以下のようなチャートが表示されます。
これから作成していくものは、より最新のデータが反映されたものになるでしょう。
ここでは、フル機能のチャートボタンをクリックしてアクセスしてみましょう。これにより、より詳細な表示、描画ツール、トレンドラインの記入などのオプションが提供されます。
充実した内容のチャート強調表示されたタブの上にある、ビューをクリックすることで、タイムフレームを調整することができます。
ここでは、様々なツールの使い方については説明しませんが、テクニカル分析を真剣に行うのであれば、これらのツールに慣れ親しんでおくことをお勧めします。左下 (画像の輪郭部分) に、いくつかの異なるタブがあります。その中のPineエディタをクリックしてください。
Pineエディタ
このエディタを使用して、様々なカスタマイズを行っていきます。エディタで実装したい機能を開発した場合、チャートに追加をクリックすると、上に注釈が表示されます。なお、複数の注釈を一度に入れると大変なことになるため、例の間に注釈を削除しておきます (チャート内で右クリック> インジケーターの削除 (インジケーターを削除) )。
見てみると、すでに数行のコードが入っているのがわかります。チャートに追加をクリックして、どうなるか見てみましょう。
1枚目のチャートの下に2枚目のチャートが追加されました。新しいチャートはたまたま同じデータを表しています。私のスクリプトにカーソルを合わせ、十字をクリックして削除してください。では、ここからはコードを詳しく見ていきましょう。
study("My Script")
この最初の行は、注釈を設定しているだけです。必要なのはインジケーターの名前だけですが (この場合は、"My Script" )、オプションで追加できるパラメーターもあります。その1つがオーバーレイで、これはTradingViewにインジケーターを (新しいセグメントではなく) 既存のチャートに配置するように指示します。最初の例からもわかるように、デフォルトでは 「false」 となっています。今はまだ表示されていませんが、オーバーレイを「true」にして、既存のチャートにインジケーターを追加します。
plot(close)
このラインは、Bitcoinの終値を示すラインです。プロット は、単純に折れ線グラフを表示するだけですが、後で説明するように、ローソク足や棒グラフを表示することもできます。
では、以下の手順を試してみましょう。
//@version=4 study("My Script", overlay=true) plot(open, color=color.purple)
これを追加すると、2つ目のチャート (元のチャートを右にずらしたようなもの) が表示されるはずです。私たちが行ったのは、代わりに 始値が表示されるようにしただけです。当日の始値は前日の終値なので、これらが同じ形をしているのは理にかなっています。
それでは、現在の注釈を取り除いてみましょう (右クリックして 「Remove Indicators」 を押すことを覚えてください) 。Bitcoin / BUSDにカーソルを合わせ、「非表示」 ボタンをクリックすると、現在のチャートもクリアされます。
多くのトレーダーは、先ほどのような単純な記入よりも、より多くの情報を提供してくれるローソク足のチャートを好みます。それでは、次に以下を追加しましょう。
//@version=4 study("My Script", overlay=true) plotcandle(open, high, low, close)
出だしはいいのですが、色がないのでちょっと味気ない感じがします。理想的には、指定したタイムフレームで始値が終値を上回った場合は赤のローソク、終値が始値を上回った場合は緑のローソクとなります。plotcandle()関数の上に行を追加します。
//@version=4 study("My Script", overlay=true) colors = open>= close ?color.red : color.green plotcandle(open, high, low, close)
これは、すべてのローソク足を見て、オープンがクローズと同じかそれ以上であるかをチェックします。もしそうであれば、期間中に価格が下がったことを意味するので、ローソク足を赤くします。そうでない場合は、緑色にします。この色付けの条件を満たすために、plotcandle()関数を修正します。
//@version=4 study("My Script", overlay=true) colors = open>= close ?color.red : color.green plotcandle(open, high, low, close, color=colors)
現在のインジケータをまだ削除していなければ、このインジケーターをチャートに追加します。これで、通常のローソク足チャートのようになるはずです。
美しいですね!
移動平均 (MA) の追加
基本的なことはここまでである程度理解できたと思います。それでは、最初のカスタムインジケータである指数平滑移動平均線 (Exponential Moving Average) EMAをご紹介します。これは、市場のノイズを取り除き、値動きを滑らかにすることができる貴重なツールです。
EMAは、単純移動平均 (SMA) とは若干異なり、直近のデータを重視しています。突発的な動きに反応しやすい傾向があり、デイトレードのような短期的なプレイに使われることが多いです。
単純移動平均 (SMA)について
また、SMAをプロットして、両者を比較することもできます。このラインをスクリプトに追加していきましょう。
plot(sma(close, 10))
これは過去10日間の平均値を描画したものです。括弧内の数字を調整して、異なる長さを考慮した場合の曲線の変化を確認します。
SMAは過去10日間を基準としたものです。
指数平滑移動平均 (EMA)
EMAは少し理解が難しいと思いますが、心配ありません。まず式を分解してみましょう。
EMA = (終値 - 前日のEMA)×倍率 - 前日のEMA
これは何を意味するのでしょうか?さて、1日ごとに、前日の移動平均線をもとに新しい移動平均線を計算します。倍率は直近の期間を「重みづけ」するもので、以下の計算式で算出されます。
倍率 = 2 / (EMAの長さ + 1)
単純移動平均と同様に、EMAの長さを指定する必要があります。EMAをプロットする関数は、構文的にはSMAのものと似ています。それをSMAと並べてプロットし、2つを比較することができます。
//@version=4 study("My Script", overlay=true) plot(sma(close, 10)) plot(ema(close,10))
2種類のMAには若干の違いがあることがわかります。
➟仮想通貨を始めて買ってみるなら、BinanceでBitcoinを購入してみましょう!
ビルトインスクリプト
ここまでは、感覚を理解してもらうために手動でコードを書いてきました。しかし、特に複雑なスクリプトを書いている場合には、1から作業するのではなく、時間を節約できるものを利用しましょう。
エディタの上の右端にある「New」をクリックします。ドロップダウンメニューには、さまざまな種類のテクニカルインジケーターが表示されます。指数平滑移動平均 (EMA) をクリックすると、EMA インジケータのソースコードが表示されます。
続けて、これをチャートに追加します。
これは私たちのものとは違い、input()関数があることに気づくでしょう。これは、ボックスにクリックできるようになるので、ユーザビリティの観点から優れています。
また、Settingsホイールをクリックすることで、ポップアップウィンドウ内のいくつかの値を簡単に変更することができます。
次のスクリプトでは、このデモのために、input()関数をいくつか追加します。
相対力指数 (RSI) 指標のプロット
相対力指数 (RSI) も、 テクニカル分析には欠かせない指標です 。RSIはモメンタム指標として知られています。つまり、ある資産が買われたり売られたりするレートを測定するものです。RSIのスコアは0~100の範囲で表示され、投資家に「買われすぎ」「売られすぎ」の状態を知らせます。一般的には、スコアが30以下の場合は売られすぎ、スコアが70以上の場合は買われすぎと考えられます。
New > RSI戦略では、これを自分の目で確認することができます。RSIは一般的に14単位 (14時間や14日など) で測定されますが、その設定を自分の戦略に合わせて自由に変更することができます。
これをチャートに追加します。現在、いくつかの矢印が表示されているはずです (これらの矢印はコード内のstrategy.entry()関数で定義されています)。RsiLE は、売られすぎている可能性があるため、 ロングの機会があることを示しています。RsiSEは買われすぎている時にショートする可能性のあるポイントをハイライトします。ただし、他の指標と同様に、これらの指標が必ずしも価格の下落・上昇を示す確実な証拠とはならないことに注意してください。
バックテスト
カスタムインジケータをテストする方法があります。過去の実績は将来の結果を保証するものではありませんが、バックテストを行うことで、スクリプトがどの程度シグナルを拾うことができるかを知ることができます。
以下、簡単なスクリプトの例を紹介します。ここでは、BTC価格が$11,000を下回ったときにロングポジションを持ち、$11,300を超えたときにポジションを解消するという、わかりやすい戦略を作成します。そして、この戦略がこれまでどれぐらいの利益を生み出せたかを見ることができます。
//@version=4 strategy("ToDaMoon", overlay=true) enter = input(11000) exit = input(11300) price = close if (price<= enter) strategy.entry("BuyTheDip",strategy.long,comment="BuyTheDip") if (price>= exit) strategy.close_all(comment="SellTheNews")
ここでは、 entry と exit を変数として定義しています。どちらもinputsなので、後でチャート上で変更することができます。また、price変数を設定し、各期間の終値を取得しています。そして、 ifステートメントで、複数のロジックを設定しています。括弧内の部分が真であれば、その下のインデントされたブロックが実行されます。それ以外の場合は、スキップされます。
つまり、価格が希望するエントリーの価格以下であれば、最初の式はtrueと評価され、ロングポジションをオープンします。価格が希望のエグジットと同じかそれ以上になると、2つ目のブロックがトリガーされ、すべてのオープンポジションがクローズされます。
チャートにはエントリー/エクジットした場所を示す矢印が表示されるので、これらのポイントに付けるラベルを commentパラメーターで指定しています(この例では、「BuyTheDip」と「SellTheNews」)。コードをコピーして、チャートに追加します。
これで、チャート上に指標が表示されるようになりました。もしかしたら、ズームアウトが必要かもしれません。
TradingViewは自動的に古いデータに作成したルールを適用します。また、Pineエディタからストラテジーテスタータブに切り替わっていることにも気づくでしょう。これにより、潜在的な利益の概要、トレードのリスト、それぞれのパフォーマンスを確認することができます。
エントリーしたポジションとエグジットしたポジションの
両方を一緒に試すことができます。
それではここからは、これまでに学んできたコンセプトを使って、自分でスクリプトを書いてみましょう。まずは、EMAとRSIを組み合わせ、その値を使ってローソク足に色をつけることで、簡単に視覚化していきましょう。
この指標は、客観的に正しい使い方があるわけではないので、投資アドバイスとして解釈されるべきものではありません。あらゆるケースと同様に、他のツールと併用して独自の戦略を立てましょう。
それでは、新しいスクリプトを作っていきましょう。まず、チャートからすべてのインジケーターを削除し、Bitcoin/BUSDチャートも非表示にして、作業するためのクリーンなキャンバスを用意します。
まずは、これまで学んできたものの定義から始めましょう。名前は自由につけても大丈夫です。しかし、overlay=trueは必ず設定してください.
study(title="Binance Academy Script", overlay=true)
先ほどのEMAの式を思い出してください。EMAの長さに合わせて倍数を設定する必要があります。整数を必要とするinputにしてみましょう (つまり、小数点以下の桁数はありません)。また、設定可能な最小値(minval)と、デフォルト値(defval)を設定します。
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0)
この新しい変数を使って、チャートの各ローソク足のEMA値を計算することができます。
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength)
よくできました。RSI同様の方法で長さを出します。
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer,defval=25, minval=0)
これで計算ができるようになります。
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength)
この段階で、EMAやRSIの値によってローソク足に色をつけるロジックを組んでみましょう。ここでは、(a)ローソク足の終値がEMAを上回り、(b)RSIが50を超えているという状況を考えてみましょう。
これらの指標を併用することで、ビットコインのロング、ショートのタイミングを知ることができると判断したとします。例えば、この2つの条件を満たしていれば、ロングポジションを取るのに適していると考えることができます。逆に、他のインジケーターがショートのタイミングと言っていても、この情報を使ってショートをするべき時ではないと判断できるかもしれません。
そのため、次の行は以下のようになります。
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer,defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close> emaVal and rsiVal> 50 ?color.green : color.red
これを分かりやすく説明すると、EMAの値が終値を上回り、かつRSIスコアが50を超えると、ローソクを緑色に着色するということです。そして、そうでない場合は緑色にします。
次に、EMAをプロットします。
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer,defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close> emaVal and rsiVal> 50 ?color.green : color.red plot(emaVal,"EMA")
最後に、colorパラメーターが含まれていることを確認したら、ローソク足をプロットします。
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer,defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer,defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close> emaVal and rsiVal> 50 ?color.green : color.red plot(emaVal,"EMA") plotcandle(open, high, low, close, color=colors)
これが今回実装するスクリプトです。チャートに追加して動作を確認してみてください。
EMA/RSI指標を用いたBTC/BUSDチャート
まとめ
この記事では、TradingViewのPine Editorでできる基本的な例を紹介しました。ここまでくれば、価格チャートに簡単な注釈をつけて、自分の指標からさらに詳しい情報を得ることができるようになるでしょう。
ここではいくつかのインジケーターを紹介しましたが、Newから内蔵されたスクリプトを選択するか、自分でスクリプトを作成することで、より複雑なインジケーターを簡単に作成することができます。
インジケーターをなかなか思いつけませんか。以下の記事を読むと、次のプロジェクトのためのアイデアが出てくるかもしれません。