はじめに
それでは、ここから詳しく見ていきましょう。
Pineスクリプトとは?
設定
Pineスクリプトを使い始めるのはとても簡単です。私たちが書いたコードはすべてTradingViewのサーバー上で実行されるので、追加のダウンロードや設定を必要とせず、ブラウザからエディタにアクセスしてスクリプトを開発することができます。
これから作成していくものは、より最新のデータが反映されたものになるでしょう。
充実した内容のチャート強調表示されたタブの上にある、ビューをクリックすることで、タイムフレームを調整することができます。
Pineエディタ
study("My Script")
plot(close)
では、以下の手順を試してみましょう。
//@version=4 study("My Script", overlay=true) plot(open, color=color.purple)
多くのトレーダーは、先ほどのような単純な記入よりも、より多くの情報を提供してくれるローソク足のチャートを好みます。それでは、次に以下を追加しましょう。
//@version=4 study("My Script", overlay=true) plotcandle(open, high, low, close)
//@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) の追加
単純移動平均 (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には若干の違いがあることがわかります。
ビルトインスクリプト
ここまでは、感覚を理解してもらうために手動でコードを書いてきました。しかし、特に複雑なスクリプトを書いている場合には、1から作業するのではなく、時間を節約できるものを利用しましょう。
続けて、これをチャートに追加します。
これは私たちのものとは違い、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から内蔵されたスクリプトを選択するか、自分でスクリプトを作成することで、より複雑なインジケーターを簡単に作成することができます。
インジケーターをなかなか思いつけませんか。以下の記事を読むと、次のプロジェクトのためのアイデアが出てくるかもしれません。