スクリーナーのパフォーマンスはどのように算出されますか?

スクリーナーのパフォーマンスデータは以下の計算式で算出されます:

Perf. = (currentClose – openDaysAgo) × 100 / abs(openDaysAgo)

各パラメーターの定義は以下のとおりです:

  • currentClose — 直近の終値
  • openDaysAgo — 選択した期間(例:1週間、3ヶ月、365日)に対応する過去バーの始値

今日が火曜日だと仮定して、1週間のパフォーマンス (Perf.W) を計算してみましょう:

  1. 今日の終値を取得します
  2. 先週火曜日の日足バーの始値を差し引きます
  3. 上記の差に100を掛けます
  4. この結果を先週火曜日の日足バーの始値の絶対値で割ります

以下は、うるう年の日数なども考慮に入れ、一般的によく使用される時間足に対して詳細を示す計算式になっています。

//@version=6
indicator("Screener Performance")

// first bar's timestamp in pine history
var first_bar_time = time / 1000

// Performance helper functions
rateOfreturn(ref) =>
	if ref < 0 and close > 0
		na
	else
		(close - ref) * 100 / math.abs(ref)
rr(bb, maxbarsback) =>
	nz(open[maxbarsback] * 0) + bb == 0 ? na : rateOfreturn(open[bb])
perfYTD() =>
	if year != year(timenow)
		na
	else
		var lastYearOpen = open
		if year > year[1]
			lastYearOpen := open
		rateOfreturn(lastYearOpen)

fastSearchTimeIndex(x, maxbarsback) =>
	mid = 0 * time[maxbarsback]
	right = math.min(bar_index, maxbarsback)
	left = 0
	if x/1000 <= first_bar_time
		bar_index
	else if time < x
		0
	else
		for i = 0 to 10
			mid := math.ceil((left + right) / 2)
			if left == right
				break
			else if time[mid] < x
				right := mid
				continue
			else if time[mid] > x
				left := mid
				continue
			else
				break
		mid

week1 = 7
week_ago = timenow - 1000 * 60 * 60 * 24 * week1
week_ago_this_bar = time - 1000 * 60 * 60 * 24 * week1
countOfBarsWeekAgo = fastSearchTimeIndex(week_ago, week1)

month1 = 30
month_ago = timenow - 1000 * 60 * 60 * 24 * month1
countOfBars1MonthAgo = fastSearchTimeIndex(month_ago, month1)

month3 = 90
months3_ago = timenow - 1000 * 60 * 60 * 24 * month3
countOfBars3MonthAgo = fastSearchTimeIndex(months3_ago, month3)

month6 = 180
months6_ago = timenow - 1000 * 60 * 60 * 24 * month6
countOfBars6MonthAgo = fastSearchTimeIndex(months6_ago, month6)

years1 = 365
oneYearAgo = timenow - 1000 * 60 * 60 * 24 * years1
barsCountOneYear = fastSearchTimeIndex(oneYearAgo, years1)

years3 = 365 * 3
years3_ago = timenow - 1000 * 60 * 60 * 24 * years3
countOfBars3YearAgo = fastSearchTimeIndex(years3_ago, years3)

years5 = 365 * 4 + 366
years5_ago = timenow - 1000 * 60 * 60 * 24 * years5
countOfBars5YearAgo = fastSearchTimeIndex(years5_ago, years5)

years10 = (365 * 4 + 366) * 2
years10_ago = timenow - 1000 * 60 * 60 * 24 * years10
countOfBars10YearAgo = fastSearchTimeIndex(years10_ago, years10)

// Perf.<W | 1M | 3M | 6M | Y | 5Y | 10Y | YTD>
fiveDays = 5
fiveDaysAgo = timenow - 1000 * 60 * 60 * 24 * fiveDays
countOfBarsFiveDaysAgo = fastSearchTimeIndex(fiveDaysAgo, fiveDays)
perfYTD = perfYTD()
plot(rr(countOfBarsFiveDaysAgo, fiveDays), title='Perf.5D')
plot(rr(countOfBarsWeekAgo, week1), title='Perf.W')
plot(rr(countOfBars1MonthAgo, month1), title='Perf.1M')
plot(rr(countOfBars3MonthAgo, month3), title='Perf.3M')
plot(rr(countOfBars6MonthAgo, month6), title='Perf.6M')
plot(rr(barsCountOneYear, years1), title='Perf.Y')
plot(rr(countOfBars3YearAgo, years3), title='Perf.3Y')
plot(rr(countOfBars5YearAgo, years5), title='Perf.5Y')
plot(rr(countOfBars10YearAgo, years10), title='Perf.10Y')
plot(perfYTD, title='Perf.YTD')

注意: このスクリプトは timenow を利用しているため、過去データとリアルタイムデータでは値が異なる可能性があります。詳細はこちらをご覧ください。

Pineエディタを利用してこのスクリプトを日足のチャートに追加すると、パフォーマンスのデータを視覚的に確認することができます。インジケーターがチャート上に表示され、そのプロットには各期間のパフォーマンスの値が表示されます。

変動率 vs パフォーマンス (%):

今日が火曜日だとします。週間変動率は、現在の終値 (火曜日) と先週の終値 (先週金曜日の終値) の差で算出されます。一方、週間パフォーマンスは、現在の終値 (火曜日) と正確に1週前の始値 (先週の火曜日) の差で算出されます。