パインスクリプトとは何ですか?
Pine Script は、TradingView プラットフォームでチャートを変更するために使用されるスクリプト言語です。プラットフォームはこれを行うための多くの機能を提供しますが、Pine Script を使用すると、目標に向かって進むことができます。価格アクション チャートの色を変更したい場合でも、新しい戦略をバックテストしたい場合でも、Pine エディターはリアルタイム チャートを必要に応じてカスタマイズするのに役立ちます。
コードは詳しく文書化されているので、詳細についてはユーザー ガイドを必ず確認してください。このチュートリアルを通じて、いくつかの基本事項について説明し、デジタル通貨の取引に役立つ指標を提供することを目的としています。
準備
Pine スクリプトの使用を開始するのは非常に簡単です。私たちが作成したコードはすべてTradingViewのサーバー上で実行されるため、エディタを使用してブラウザからスクリプトを開発できます。追加のダウンロードや設定は必要ありません。
このチュートリアルでは、ビットコイン/バイナンス USD (BTCBUSD) 通貨ペアのチャートを作成します。まだアカウントをお持ちでない場合は、無料でアカウントを作成できます (プロフェッショナル サブスクリプションも利用できますが、このガイドでは必要ありません)。
このリンクをたどると、次のようなグラフが表示されます。

あなたのグラフはより洗練されたものになるでしょう。
ここでは、完全な機能を備えたチャートが必要です。ボタンをクリックしてアクセスします。これにより、より詳細な概要と描画ツール、および他の機能の中でもトレンド ラインを描画するためのオプションが提供されます。

完全な機能を備えたチャート。強調表示されたタブの上のビューをクリックすると、時間枠を編集できます。
利用可能なさまざまなツールの使用方法については説明しませんが、テクニカル分析に興味がある場合は、それらを確認して慣れておくことを強くお勧めします。左下 (画像で強調表示されている) にいくつかの異なるタブがあります。[Pine Editor] をクリックします。
パインエディター

このエディタは一連の魅力的な機能を提供します。やりたいことを伝えてから、「チャートに追加」をクリックして、コメントが上部に表示されることを確認します。複数のコメントを一度に入力すると、チャートが乱雑になる可能性があるので、例の間にコメントを削除します (チャートを右クリック > インジケーターの削除)。
すでに 2 行のコードがあることがわかります。 [チャートに追加] をクリックして、何が起こるかを見てみましょう。

2 番目のチャートが元のチャートの下に追加されます。新しいグラフは同じデータを表します。 [マイ スクリプト] ボタンの上にマウスを移動し、省略記号をクリックして削除します。コードについてさらに詳しく説明します。
study("私のスクリプト")
最初の行はコメントを設定します。必要なのは、インジケーターに呼び出す名前 (この場合は「My Script」) だけですが、追加できるオプションの変数もいくつかあります。そのような変数の 1 つはオーバーレイで、これはプラットフォームに (新しいセクターではなく) 現在のチャートにインジケーターを配置するように指示します。最初の例でわかるように、デフォルトは false です。したがって、今は実行されていません。overlay=true は現在のチャートにインジケーターを追加します。
プロット(閉じる)
この線は、ビットコインの終値をプロットするための指示です。グラフでは折れ線グラフが表示されますが、後で説明するように、価格変動や棒グラフも表示できます。
では、次のことを試してみましょう。
//@version=4 study("My Script", overlay=true) plot(open, color=color.purple)
このシンボルを追加すると、2 番目のチャートが表示されるはずです (元のチャートが右側に移動しているように見えます)。代わりに始値をプロットしただけなので、当日の始値は前日の終値であるため、同様の形状になるのは当然です。
良い!既存のコメントを削除しましょう (これを行うには、右クリックして [インジケーターの削除] を押します)。マウスをBTC/BUSDの上に移動し、[非表示]ボタンをクリックして現在のチャートも削除します。
多くのトレーダーは、先ほどのような単純な描画よりも多くの情報を提供してくれる価格アクション チャートを好みます。以下に追加してみましょう。
//@version=4 study("My Script", overlay=true) plotcandle(open, high, low, close)
出だしは良いのですが、色が無いので少しくすんでしまいます。理想的には、特定の時間枠内で始値が終値よりも高い場合は赤いローソク足が表示され、終値が始値を超える場合は緑のローソク足が表示されるはずです。キャンドルのplot()プロパティの上に行を追加します。
//@version=4 study("My Script", overlay=true) colors = open >= close ? color.red : color.green plotcandle(open, high, low, close)
これは、始値が終値以上であるかどうかを確認するだけでなく、すべての価格アクション チャートでも発生します。この場合、特定の期間に価格が下落したことを意味するため、価格変動チャートは赤色で表示されます。それ以外の場合は緑色になります。配色を入力するには、drawcandle() 関数を変更します。
//@version=4 study("My Script", overlay=true) colors = open >= close ? color.red : color.green plotcandle(open, high, low, close, color=colors)
既存のインジケーターをまだ削除していない場合は削除し、このインジケーターをチャートに追加します。通常の価格変動チャートを表すものが必要です。

移動平均(MA)の描画
以下にいくつかの基本があります。最初のカスタム インジケーターである指数移動平均 (EMA) に移りましょう。これは、市場の邪魔を排除し、市場の動きを理解しやすくするための貴重なツールです。
指数移動平均は、最新のデータに焦点を当てているため、単純移動平均 (SMA) とは少し異なります。突然の動きに反応する傾向があり、通常は短期取引 (デイトレードなど) で使用されます。
単純移動平均 (SMA)
単純な移動平均を引くこともあるので、後で比較する必要があります。次の行をスクリプトに追加します。
プロット(sma(close, 10))
これは過去 10 日間の平均を表します。括弧内の数値を調整して、さまざまな期間を考慮したときに曲線がどの程度変化するかを確認します。

単純移動平均は過去 10 日間に基づいています。
指数移動平均 (EMA)
指数移動平均は少し理解しにくいかもしれませんが、心配しないでください。この方程式を詳しく考えてみましょう。
EMA = (終値 - 前日のEMA) * 乗数 - 前日のEMA
それで、それは私たちに何を教えてくれるでしょうか?さて、毎日の新しい移動平均は、前日の移動平均に基づいて計算されます。乗数は、最新期間の「データの重み」であり、次の式で計算されます。
乗数 = 2 / (EMAの長さ + 1)
単純移動平均の場合、指数移動平均がどれくらいの期間続くかを判断する必要があります。構造の点では、指数移動平均プロットは単純移動平均プロットに似ています。単純移動平均の隣に描画して、比較できるようにします。
//@version=4 study("My Script", overlay=true) plot(sma(close, 10)) plot(ema(close,10))

2 種類の移動平均の間にはわずかな違いがあることがわかります。
埋め込みスクリプト
ここまではコードを手書きで書いてきたので、慣れているでしょう。ただし、特により複雑なスクリプトを作成する場合、時間を節約するのに役立つものを提供しましょう。最初から作成する必要はありません。
エディターの右上にある「新規」ボタンをクリックします。さまざまな種類のテクニカル指標がすべて含まれたドロップダウン メニューが表示されます。 [指数移動平均] をクリックして、指数移動平均インジケーターのソース コードを表示します。

次に、それをチャートに追加します。
これは私たち自身のコードとは異なります。input() プロパティに注目してください。このボックスをクリックすると便利です…

設定ホイールをクリックして、ポップアップ ウィンドウの一部の値を簡単に変更することもできます。

これを行う方法を示すために、次のスクリプトに 2 つの input() プロパティを追加します。
相対強度指数 (RSI) チャート
相対強度指数 (RSI) は、テクニカル分析の基本的な指標の 1 つです。これはモメンタム指標として知られており、資産の売買速度を測定します。 RSI スコアは 0 から 100 のスケールで評価され、投資家に資産が買われすぎているのか、売られすぎているのかを伝えようとします。通常、資産はスコアが 30 以下の場合は売られすぎとみなされ、スコアが 70 以上の場合は買われすぎとみなされます。
[新規] > [RSI 戦略] に移動すると、これを自分の目で確認できます。 RSI は 14 期間 (つまり、14 時間または 14 日) にわたって測定されますが、独自の戦略に合わせてこの設定を自由に調整できます。
それをグラフに追加します。いくつかの矢印が表示されます (コード内の enter.strategy() プロパティで識別されます)。 RsiLE は、資産が売られ過ぎゾーンになる可能性があるため、その資産の潜在的な購入機会を示します。一方、RsiSEは、買われ過ぎゾーンにある資産の潜在的なセールスポイントを強調します。すべての指標と同様、これらは価格の上昇または下降の決定的な証拠として信頼すべきではないことに注意してください。
バックテストを実行する
カスタムインジケーターをテストできる方法があります。過去のパフォーマンスは将来の結果を保証するものではありませんが、スクリプトのバックテストのプロセスにより、スクリプトがシグナルを受信する際にどれだけ効果的であるかがわかります。
以下は簡単なスクリプトの例です。ビットコインの価格が 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")
ここでは、エントリーポイントとエグジットポイントを変数として定義しました。両方とも入力であり、後でチャート上で変更できることを意味します。各期間の終値を記録する価格変数も設定しました。したがって、if ステートメントの使用には論理的な理由があります。括弧で囲まれた部分が true の場合、インデントされたブロックがアクティブになります。それ以外の場合はスキップされます。
また、価格が下落するか、希望のエントリー価格と等しい場合、式は true と評価され、買い取引が開始されます。価格が必要な終了価格以上になると、2 番目のブロックがアクティブになり、開いている取引がすべて終了します。
矢印を使用してチャートにコメントを追加し、エントリーポイントとエグジットポイントを示すため、コメントフレームでこれらのポイントに名前を付けています(この例では、「押し目買い」と「ニュースで売り」)。シンボルをコピーしてチャートに追加します。

チャート上にインジケーターが表示されるようになりました。確認するにはズームアウトする必要がある場合があります。
TradingViewは古いデータにルールを適用します。また、Pine エディターから Strategy Tester タブへの移行にも注目してください。これにより、潜在的な利益の概要、取引のリスト、およびそれぞれのパフォーマンスを確認できます。

私たちがエントリーおよびエグジットした取引。
アイテムをリンクする
ここまで説明した概念のいくつかを使用して独自のプログラムを作成します。価格変動チャートに色を付け、考えられる洞察を得るために、指数移動平均と RSI の両方をその値を使用して組み合わせます。
この指標を使用する客観的に定義された正しい方法がないため、これは財務上のアドバイスとして解釈されるべきではありません。他のすべての指標と同様に、この指標も投資戦略を立てるために他のツールと組み合わせて使用する必要があります。
新しいスクリプトの作業を始めましょう。チャートからすべてのインジケーターを削除し、BTC/BUSD チャートも非表示にして、作業を開始できる空のチャートを用意します。
研究を定義することから始めましょう。任意の名前を使用できますが、必ず overlay=true に設定してください。
study(title="Binance アカデミー スクリプト", overlay=true)
先ほど説明した指数移動平均方程式を思い出してください。指数移動平均にかかる期間のデータを乗数に提供する必要があります。これを整数を必要とする入力フィールドにしてみましょう (したがって、小数点以下の桁はありません)。最小値 (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) rsiVal = rsi(close, rsiLength)
この時点で、価格アクション チャートの色は EMA と RSI の値によって異なることに注意してください。 (a) ローソク足の終値が EMA を超え、(b) RSI が 50 を超えている場合の例を考えてみましょう。
なぜ?これらの指標を組み合わせて使用して、ビットコインをいつ売買するかを判断できると考えるかもしれません。たとえば、両方の条件を満たすということは、ロングトレードを始めるのに良い時期であると考えるかもしれません。あるいは、他のインジケーターがそうでないことを示している場合でも、インジケーターを使用して、いつ売るべきではないかを思い出させることもできます。
したがって、次の行は次のようになります。
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 かつ rsiVal > 50 ? color.green : color.red
これを分かりやすい英語に翻訳すると、EMAが終値を上回り、RSIスコアが50を超えた場合、ローソク足が緑色になることを意味します。それ以外の場合は赤色になります。
次に、指数移動平均をプロットします。
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 かつ rsiVal > 50 ? color.green : color.red plot(emaVal, "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 かつ rsiVal > 50 ? color.green : color.red plot(emaVal, "EMA") plotcandle(open, high, low, close, color=colors)
これでスクリプトは完了です。それをグラフに追加して、実際の動作を確認します。

EMA/RSIを使用したBTC/BUSDチャート。
まとめ
この記事では、TradingView の Pine Editor を使用して何ができるかの基本的な例をいくつか見てきました。インジケーターからさらに洞察を得るために、価格チャートに簡単なコメントを追加できる必要があります。
ここでは 2 つのインジケーターのみを取り上げていますが、組み込みスクリプトを新たに定義するか、自分で記述することで、より複雑なインジケーターを簡単に作成できます。
インスピレーションを与えるアイデアが必要ですか?次の記事は、次のプロジェクトのアイデアを得るのに役立ちます。

