見出し画像

TradingViewのインジケーターに背景色付けてみた結果@2023/11/6

前回の記事の続きみたいな感じです。


どういう話?

前回取り上げたTradingViewのインジケーターでは、RSIとMFIは、サインが出た時に、背景色が塗られてましたよね。これだと、判断しやすいです。でも、MACDやスローストキャスティクス、MA Derivation(移動平均線乖離率)では塗られてませんでした。他に、以前、別に取り上げてた、ATRPでも塗られてませんでした。それを、スクリプトいじって、塗ってみたっていう話です。

最終結果

こうなりました。クリックで拡大できます。
RSIとMFIは変わってないので省略してます。

それぞれ、コード付きで解説していきます。

MACD

普通のMACDのインジケーターのソースをコピーした上で、以下のようなコードを追加してます。ChatGPT4に教えてもらってやってます。色が固定だったり、微妙なところもあるとは思います。最後のplotの上の位置に追加してます。どこでもいいのかもしれませんけど。。

// 背景色の条件設定
bgcolor((macd > 0 and hist > 0 and hist < macd * 0.1) ? color.rgb(28,48,53) : na)
bgcolor((macd < 0 and hist < 0 and hist > macd * 0.1) ? color.rgb(67,35,41) : na)

// クロスを検出。
crossunder = (macd[1] > signal[1]) and (macd < signal) and macd > 0
crossover = (macd[1] < signal[1]) and (macd > signal) and macd < 0
bgcolor(crossunder ? color.rgb(60,84,69) : na)
bgcolor(crossover ? color.rgb(111,42,45) : na)

2つに分かれてますね。

まず、上側から説明します。MACDの青いラインと、signalっていう赤いラインがあるんですが、MACDやsignalが上昇中に、signalがMACDの90%以上の所まで追い付いたら塗るっていう意味です。逆に下がってる時は、その逆の話です。

一方、下側は、クロスしたのを検出して、塗るっていうことです。

なぜ、片方だけじゃ、ダメなのか?ですが、まず、下側だけだと、事前に知ることができないです。クロスすると大きく動くんで、事前に知りたいじゃないですか。だから、上側のコードが必要です。

そして、上側だけだと、「ちょっとずつ近づいていって、クロスする」っていう場合以外に、「ある日、突然めっちゃ動いてクロスする」っていう場合があるんですよ。そういう時に漏れになってしまうので、遅くとも、クロスしたら気付けるようにはしとくってことです。

スローストキャスティクス(SlowStoch)

普通のスローストキャスティクスの最後に、これを追加してます。

// 背景色の条件設定
bgcolor(k > 90 ? color.rgb(28,48,53): na)
bgcolor(k < 10 ? color.rgb(67,35,41) : na)

// クロスを判定
crossunder = (k[1] > d[1]) and (k < d) and k > 80
crossover = (k[1] < d[1]) and (k > d) and k < 20
bgcolor(crossunder ? color.rgb(60,84,69) : na)
bgcolor(crossover ? color.rgb(111,42,45) : na)

MACDと同じです。ただし、上下の点線は20と80の所に引かれてますが、それを基準に塗ってしまうと、塗る領域が広くなり過ぎるので、10と90にしてます。ここは、人によって調整の余地はあります。

MA Derivation(移動平均線乖離率)

普通のMA Derivationの最後に、こんなコードを追加してます。ボリンジャーバンドの点線をはみ出たら塗るっていうことですね。

// New background color code
bgcolor(rate > plusDev ? color.rgb(60,84,69) : na, title="Background High")
bgcolor(rate < minusDev ? color.rgb(85,33,43) : na, title="Background Low")

ATRP(ボラティリティの一種)

これも、普通のATRP(Average True Range Percentage)のコードの最後に4行追加するだけでいいはずなんですが、Pine ScriptのVersion 4のままで修正するのがきついので、全体的にVersion 5に書き換えてます。ChatGPT4クンに概ねやってもらってます。

//@version=5
// Author:                      @millerrh
// Indicator Description:       Average True Range Percent (ATRP) expresses the Average True Range (ATR) indicator as a percentage of a bar’s closing price.
// How this Indicator Works:    ATRP is used to measure volatility just as the Average True Range (ATR) indicator is. ATRP allows securities to be compared, where ATR does not.
//                              ATR measures volatility at an absolute level, meaning lower priced stock will have lower ATR values than higher price stocks.
//                              ATRP displays the indicator as a percentage, to allow for securities trading at different prices per share to be compared.
//                              https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/atrp
indicator("Average True Range Percentage", shorttitle="ATRP", overlay=false)

// Inputs
atrTimeFrame = input.timeframe("D", title="ATR Timeframe")
atrLookback = input.int(14, title="ATR Lookback Period")
useMA = input.bool(true, title = "Show Moving Average?")
maType = input.string("SMA", title = "Moving Average Type", options=["EMA", "SMA"])
maLength = input.int(20, title = "Moving Average Period", minval = 1)

// ATR Logic
atrValue = request.security(syminfo.tickerid, atrTimeFrame, ta.atr(atrLookback))
atrp = (atrValue/close)*100
plot(atrp, color=color.new(color.white, 30), linewidth=2)

// Moving Average Logic
ma(maType, src, length) =>
    maType == "EMA" ? ta.ema(src, length) : ta.sma(src, length)
maFilter = request.security(syminfo.tickerid, atrTimeFrame, ma(maType, atrp, maLength))
plot(useMA ? maFilter : na, title = "Moving Average of ATRP", color=color.new(color.green, 50), linewidth=3)

// 新しい背景色ロジックを追加
// シンボル名がBTCUSDかつATRPが2.2未満、または、シンボル名がBTCJPYかつATRPが2.0未満の場合に背景色を赤色に設定
isBTCUSD = str.contains(syminfo.tickerid, "BTCUSD")
isBTCJPY = str.contains(syminfo.tickerid, "BTCJPY")
bgcolor(isBTCUSD and atrp < 2.2 ? color.rgb(85,33,43) : na)
bgcolor(isBTCJPY and atrp < 2.0 ? color.rgb(85,33,43) : na)

これの根拠はこっちの記事に書いてます。

ドル建ての時は2.2未満で、円建ての時は、2.0未満に注目!というやつです。実際には、半減期の底以外でも、該当する箇所はあるようですね。まぁ、参考用ってことで。。

MFI

MFIは前回使ってたのは、「MFI [seiglerj]」ってやつですが、他に、MFI+というやつもありますね。これだと最初から、色が付いてるだけでなく、色の濃淡もあります。濃い場合は強いサインということで。。

PINEスクリプトの注意点

結構、バージョン違いで、書き方が違う所があります。コンパイル通らない場合は、ChatGPT4にバージョンを指定して、変換してもらうっていうのも、考えたほうがいいですね。まぁ、変換してもらっても、まだ足りない所もあるので、何回か、ChatGPT4クンとやりとり&修正しないといけなかったりはしますが。。

それと、配列に対して、直接、不等号とかを使って比較するとか、配列に対する処理っていうのが、ちょいちょい出て来てます。Pythonでnumpyとか使ったことある人には、あるあるでしょうけど、他の言語から来た人には、気付かなくて、訳が分からないって可能性ありますね。そこは、ちょっと意識して見たほうがいいとは思います。1.0とか、数値(スカラー)に対する処理だけでなく、1.0が10個入った配列全体(ベクトル)に対して、まとめて処理ができるってことですね。

以上

この記事が気に入ったらサポートをしてみませんか?