「TradingViewのPine Scriptでは、ユーザーはアラート機能を利用してリアルタイムでのトレーディング指標に基づく通知を設定することができます。この機能は、スクリプトからアラートイベントを生成し、それをチャートUIからアラートを作成するために使用します。このガイドでは、Pine Scriptのアラート機能の詳細とその活用方法について解説します。
Pine Scriptのアラート機能とは
アラート機能は、主にalert()関数とalertcondition()関数を通じて利用されます。これらの関数は、リアルタイムバーでの操作の範囲に限定され、アラートが作成されると、スクリプトとその入力、チャートの主要なシンボルとタイムフレームがTradingViewのサーバーに保存されます。この仕組みにより、スクリプトの入力やチャートが後から変更されたとしても、すでに作成されているアラートは影響を受けません。
alert()関数は次のように使用します
alert(message, freq)
ここで、messageはアラートがトリガーされたときに送信されるメッセージテキストを表し、freqはアラートのトリガー頻度を指定します。freqのデフォルト値はalert.freq_once_per_barで、これはリアルタイムバーでアラートが最初に呼び出されるたびにトリガーされます。
freqの引数
alert.freq_all :すべての関数呼び出し
alert.freq_once_per_bar :デフォルト、リアルタイムバー内の最初の関数の呼び出し
alert.freq_once_per_bar_close:リアルタイムバーでバーがクローズする際の最後のスクリプトの実行中に発生した場合のみ
アラートのトリガーとリアルタイムバー
アラートはリアルタイムバーでのみトリガーします。Pineスクリプトでアラートに関連するコードはすべてリアルタイムバーに制限されています。また、チャートUIでアラートが作成されると、TradingViewはスクリプトとその入力、チャートのメインシンボルと時間枠のミラーイメージを保存します。
これは、アラートを実行するためのサーバー上で保存されます。そのため、スクリプトの入力やチャートに後から変更が加えられても、以前に作成された実行中のアラートには影響を与えません。
実行中のアラートの動作に変更を反映させるためには、アラートを削除し、新しいコンテキストで新しいアラートを作成する必要があります1。
アラート関数の使用例
アラート機能の活用例としては、移動平均線がクロスした時やRSIが特定のしきい値を超えた場合などがあります。いくつかの例を紹介します。
//@version=5
indicator("All `alert()` calls")
r = ta.rsi(close, 20)
// Detect crosses.
xUp = ta.crossover( r, 50)
xDn = ta.crossunder(r, 50)
// Trigger an alert on crosses.
if xUp
alert("Go long (RSI is " + str.tostring(r, "#.00)"))
else if xDn
alert("Go short (RSI is " + str.tostring(r, "#.00)"))
plotchar(xUp, "Go Long", "▲", location.bottom, color.lime, size = size.tiny)
plotchar(xDn, "Go Short", "▼", location.top, color.red, size = size.tiny)
hline(50)
plot(r)
このスクリプトでは、RSIが中心線(50)を上向きにクロスしたときに「Go long (RSI is ...)」というアラートをトリガーし、下向きにクロスしたときに「Go short (RSI is ...)」というアラートをトリガーします。アラートのメッセージは動的に生成され、アラートがトリガーされたときのRSIの値を含みます。
なお、アラート()関数の呼び出しはリアルタイムバーでのみトリガーされ、それぞれのアラート()呼び出しはリアルタイムバーで最初に実行されたときにのみトリガーされます。
また、トレーダーが特定のアラート()関数の呼び出しを選択できるようにするためには、スクリプトの入力でその選択を示す手段を提供する必要があります。以下にその例を示します。
//@version=5
indicator("Selective `alert()` calls")
detectLongsInput = input.bool(true, "Detect Longs")
detectShortsInput = input.bool(true, "Detect Shorts")
repaintInput = input.bool(false, "Allow Repainting")
r = ta.rsi(close, 20)
// Detect crosses.
xUp = ta.crossover( r, 50)
xDn = ta.crossunder(r, 50)
// Only generate entries when the trade's direction is allowed in inputs.
enterLong = detectLongsInput and xUp and (repaintInput or barstate.isconfirmed)
enterShort = detectShortsInput and xDn and (repaintInput or barstate.isconfirmed)
// Trigger the alerts only when the compound condition is met.
if enterLong
alert("Go long (RSI is " + str.tostring(r, "#.00)"))
else if enterShort
alert("Go short (RSI is " + str.tostring(r, "#.00)"))
RSIが50を上回ったとき(ロングエントリー条件)または下回ったとき(ショートエントリー条件)にアラートを発生させます。アラートは、ユーザーがスクリプトの入力でロングまたはショートエントリーを許可している場合、またはrepaintInput
がtrueに設定されている場合、またはバーの状態が確認されている場合にのみトリガーされます。
//@version=5
indicator("All `alert()` calls")
r = ta.rsi(close, 20)
// Detect crosses.
xUp = ta.crossover( r, 50)
xDn = ta.crossunder(r, 50)
// Trigger an alert on crosses.
if xUp
alert("Go long (RSI is " + str.tostring(r, "#.00"))
else if xDn
alert("Go short (RSI is " + str.tostring(r, "#.00"))
単純移動平均(SMA)が特定の価格を超えたときにアラートを作成する
//@version=5
indicator("My Script", overlay=true)
price = close
length = 14
sma = ta.sma(price, length)
plot(sma, color=color.blue)
if ta.crossover(sma, price)
alert("Price crossed above SMA", alert.freq_once_per_bar)
このスクリプトは、価格が14期間の単純移動平均(SMA)を超えたときにアラートを作成します。
価格が上昇または下降トレンドに変わったときにアラートを作成する
//@version=5
indicator('My Script', overlay=true)
price = close
length = 14
sma = ta.sma(price, length)
plot(sma, color=color.new(color.blue, 0))
if ta.crossover(sma, price)
alert('Price is in uptrend', alert.freq_once_per_bar)
if ta.crossunder(sma, price)
alert('Price is in downtrend', alert.freq_once_per_bar)
このスクリプトは、価格がSMAを超えたときに上昇トレンドを、SMAを下回ったときに下降トレンドを示すアラートを作成します。
RSI(相対強弱指数)が特定のしきい値を超えたときにアラートを作成する
//@version=5
indicator('My Script', overlay=true)
rsiPeriod = 14
overbought = 70
oversold = 30
rsi = ta.rsi(close, rsiPeriod)
plot(rsi, color=color.new(color.blue, 0))
hline(overbought, 'Overbought', color=color.red)
hline(oversold, 'Oversold', color=color.green)
if ta.crossover(rsi, overbought)
alert('RSI is overbought', alert.freq_once_per_bar)
if ta.crossunder(rsi, oversold)
alert('RSI is oversold', alert.freq_once_per_bar)
このスクリプトは、RSIが70(オーバーボート)を超えたときと30(オーバーソールド)を下回ったときにアラートを作成します。
MACD(移動平均収束拡散)がシグナルラインを超えたときにアラートを作成する
//@version=5
indicator('My Script', overlay=true)
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
plot(macdLine, color=color.new(color.blue, 0))
plot(signalLine, color=color.new(color.orange, 0))
if ta.crossover(macdLine, signalLine)
alert('MACD line crossed above Signal line', alert.freq_once_per_bar)
if ta.crossunder(macdLine, signalLine)
alert('MACD line crossed below Signal line', alert.freq_once_per_bar)
このスクリプトは、MACDラインがシグナルラインを上回ったときと下回ったときにアラートを作成します。
ボリンジャーバンドが価格を超えたときにアラートを作成する
//@version=5
indicator('My Script', overlay=true)
length = 20
src = close
mult = 2.0
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upperBand = basis + dev
lowerBand = basis - dev
plot(upperBand, color=color.new(color.red, 0))
plot(lowerBand, color=color.new(color.green, 0))
if ta.crossover(src, upperBand)
alert('Price crossed above Upper Bollinger Band', alert.freq_once_per_bar)
if ta.crossunder(src, lowerBand)
alert('Price crossed below Lower Bollinger Band', alert.freq_once_per_bar)
このスクリプトは、価格が上側のボリンジャーバンドを超えたときと下側のボリンジャーバンドを下回ったときにアラートを作成します。
一定の価格レベルを超えたときにアラートを作成する
//@version=5
indicator('My Script', overlay=true)
level = 10000
plot(level, color=color.new(color.red, 0))
if ta.crossover(close, level)
alert('Price crossed above level', alert.freq_once_per_bar)
if ta.crossunder(close, level)
alert('Price crossed below level', alert.freq_once_per_bar)
このスクリプトは、価格が特定のレベル(この例では10000)を超えたときと下回ったときにアラートを作成します。
ボリュームが特定の値を超えたときにアラートを作成する
//@version=5
indicator('My Script', overlay=true)
volumeLevel = 5000000
if volume > volumeLevel
alert('Volume exceeded specified level', alert.freq_once_per_bar)
このスクリプトは、ボリュームが特定のレベル(この例では5000000)を超えたときにアラートを作成します。
価格が特定のパーセンテージ変化したときにアラートを作成する
//@version=5
indicator('My Script', overlay=true)
percentageChange = 1 // 1%
priceChange = close - close[1]
if math.abs(priceChange / close[1]) > percentageChange / 100
alert('Price changed more than specified percentage', alert.freq_once_per_bar)
このスクリプトは、価格が指定したパーセンテージ(この例では1%)以上変化したときにアラートを作成します。
一定の時間(例えば、特定の日または時間)にアラートを作成する
//@version=5
indicator('My Script', overlay=true)
if dayofweek == dayofweek.monday and hour == 9 and minute == 0
alert('It\'s Monday 9:00 AM', alert.freq_once_per_bar)
このスクリプトは、特定の日と時間(この例では月曜日の午前9時)になったときにアラートを作成します。
カスタムメッセージの追加
TradingViewのPine Scriptでは、alert()関数とalertcondition()関数を使用してカスタムメッセージをアラートに含めることができます。これにより、アラートがトリガーされたときに具体的な情報を提供することが可能となります。例えば、alert()関数を使用してRSI(相対力指数)が特定の閾値を超えたときにアラートを生成することができます。そして、アラートのメッセージには動的に生成されたRSIの値を含めることが可能です。
if xUp
alert("Go long (RSI is " + str.tostring(r, "#.00)"))
else if xDn
alert("Go short (RSI is " + str.tostring(r, "#.00)"))
アラートのトリガーとリアルタイムバー
Pine Scriptで作成されたアラートは、リアルタイムバーでのみトリガーされます。これは、Pine Scriptコードがアラートに関わる処理を行う範囲がリアルタイムバーに限定されているためです。また、アラートが作成された時点のスクリプトの状態が保存され、その後のスクリプトの変更は既存のアラートに影響を与えません。したがって、スクリプトの変更を反映させるには、アラートを削除して新たに作成する必要があります。
実用的なアラート設定の例
Pine Scriptでは、ユーザーがスクリプトのアラートを選択できるようにするための方法が提供されています。これにより、一つのスクリプトから複数の異なるアラートを作成することが可能となります。以下に示すのは、ロングのみ、ショートのみ、あるいは両方のアラートをトリガーするオプションを提供するスクリプトの例です。
//@version=5
indicator("Selective `alert()` calls")
detectLongsInput = input.bool(true, "Detect Longs")
detectShortsInput = input.bool(true, "Detect Shorts")
repaintInput = input.bool(false, "Allow Repainting")
r = ta.rsi(close, 20)
// Detect crosses.
xUp = ta.crossover(r, 50)
xDn = ta.crossunder(r, 50)
ChatGPT
// Only generate entries when the trade's direction is allowed in inputs.
enterLong = detectLongsInput and xUp and (repaintInput or barstate.isconfirmed)
enterShort = detectShortsInput and xDn and (repaintInput or barstate.isconfirmed)
// Trigger the alerts only when the compound condition is met.
if enterLong
alert("Go long (RSI is " + str.tostring(r, "#.00"))
else if enterShort
alert("Go short (RSI is " + str.tostring(r, "#.00"))
このスクリプトでは、input.bool()
関数を使用してユーザーがロングまたはショートのアラートを選択できるようにしています。その結果、ユーザーはアラートがトリガーされる条件をカスタマイズできます。具体的には、ロングのアラートのみ、ショートのアラートのみ、または両方をトリガーすることができます。
なお、ストラテジー内でのalert()
関数の使用には注意が必要です。デフォルトでは、ストラテジーはリアルタイムバーのクローズ時にのみ実行されます。そのため、strategy()
宣言文でcalc_on_every_tick = true
が使用されていない限り、すべてのalert()
呼び出しはalert.freq_once_per_bar_close
頻度を使用します。
alertcondition() 関数
TradingViewのPine Scriptにおけるalertcondition()関数は、特定の条件が満たされたときにアラートイベントを生成するために使用されます。
アラート作成ダイアログで利用できるアラート条件を作成できるので、アラートの細かな動作を選択できるようにアラートのダイアログをカスタマイズできます。
alertcondition() 関数の引数
condition: この引数は、スクリプトの中でアラートイベントを生成する条件を指定します。条件が真(true)のときにアラートイベントが生成されます。
title: この引数は、生成されたアラートイベントのタイトルを指定します。
message: この引数は、生成されたアラートイベントのメッセージを指定します。このメッセージは、アラートイベントが発生したときに表示されます。
以下は、alertcondition()関数を使用したコードの一例です。
//@version=5
indicator("Using `alertcondition()`", overlay = true)
// Detect crosses.
xUp = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
xDown = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
// Generate alert events.
alertcondition(xUp, title = "SMA Cross Up", message = "The 14 period SMA has crossed above the 28 period SMA.")
alertcondition(xDown, title = "SMA Cross Down", message = "The 14 period SMA has crossed below the 28 period SMA.")
上記のスクリプトでは、14期間の単純移動平均(SMA)が28期間のSMAを上抜いたときと下抜いたときに、それぞれアラートイベントを生成します。生成されたアラートイベントのタイトルとメッセージは、alertcondition()関数のtitle引数とmessage引数で指定されます。
TradingViewのアラートの上限について
TradingViewの有料プランは、投資家やトレーダーが必要とする最高の機能とツールを提供します。その中でも、特にアラート機能の強化は注目に値します。
TradingViewの「Pro」プランでは、最大20個のアラートを設定することができます。さらに「Pro+」プランでは、この上限が100個まで増加します。それでもアラートの数が足りない場合は、「Premium」プランを選択すれば、400個のアラートを設定することができます。
これらのアラート機能を使用すれば、特定の条件が満たされた時に自動的に通知を受け取ることが可能になります。例えば、ある銘柄の価格が特定のレベルを超えたり、テクニカルインジケーターが特定のシグナルを生成したりしたときにアラートを設定することができます。
さらに、これらのアラートはTradingViewの先進的なチャートツールと組み合わせて使用することができます。これにより、市場の動向を常に把握しながら、最適なエントリーとエグジットのタイミングを逃さずに済むのです。
これらの機能は、トレーダーや投資家が市場動向を追跡し、可能性のある取引機会を見逃すことなく、その瞬間を最大限に活用できるように設計されています。アラート機能の強化により、あなたは市場での成功を一歩近づけることができます。
以上のような特長を持つTradingViewの有料プランは、あなたのトレーディング経験を向上させ、より効果的な投資判断を可能にします。
TradingViewのPremiumプランは秒足やインジケーター25個同時利用可能。無料プランから有料アップグレードで最大30ドル分の特典が、こちらから貰えます。30日間のPremiumプランお試しも可能です。