TradingView Painで相場師朗氏のパンパカパンを実装してみる

# 動機

[TradingView](https://jp.tradingview.com/chart/)のスクリプトで、チャート機能を追加できるPainが面白そうなので、何か実装して、試してみたい。
「わたしが理解下パンパカパン」を勝手に実装しているので、苦情、公開停止要求がきたら、消します。

# はじめ

相場のトレンドを見る方法として、相場師朗氏が紹介している[パンパカパン](https://www.google.com/search?q=%E7%9B%B8%E5%A0%B4%E5%B8%AB%E6%9C%97+%E3%83%91%E3%83%B3%E3%83%91%E3%82%AB%E3%83%91%E3%83%B3&rlz=1C5CHFA_enJP823JP823&oq=%E7%9B%B8%E5%A0%B4%E5%B8%AB&aqs=chrome.1.69i57j35i39j0l3j69i60l3.3446j0j7&sourceid=chrome&ie=UTF-8)を[TradingView](https://jp.tradingview.com/chart/)のペインで実装する。

* 移動平均線５日、２０位、６０日、１００日、３００日の間を塗りつぶす
* 移動平均線５日、２０位、６０日、１００日の傾きを数値化

# 移動平均線５日、２０位、６０日、１００日、３００日の間を塗りつぶす
以下のコードを、画面下部のペインエディタにコピペして適当な名前をつけて保存。チャートに追加で表示できます。

```python

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © sktn3

//@version=4
study( "SMAcloud" ,overlay=true )

price = input( close ,title="SMAの対象" )

length1 = input( 5 ,title="SMA1の期間" )
length2 = input( 20 ,title="SMA2の期間" )
length3 = input( 60 ,title="SMA3の期間" )
length4 = input( 100 ,title="SMA4の期間" )
length5 = input( 300 ,title="SMA4の期間" )

sma1 = sma ( price ,length1 )
sma2 = sma ( price ,length2 )
sma3 = sma ( price ,length3 )
sma4 = sma ( price ,length4 )
sma5 = sma ( price ,length5 )

p1 = plot( sma1 ,linewidth=2, transp=0,  color=color.blue)
p2 = plot( sma2 ,linewidth=2, transp=10, color=color.orange)
p3 = plot( sma3 ,linewidth=2, transp=30, color=color.purple)
p4 = plot( sma4 ,linewidth=2, transp=20, color=color.lime)
p5 = plot( sma5 ,linewidth=4, transp=40, color=color.red)

fill( p1 ,p2 ,color = sma1 > sma2 ? color.orange : color.blue, transp=90 )
fill( p2 ,p3 ,color = sma2 > sma3 ? color.purple : color.orange,     transp=94 )
fill( p3 ,p4 ,color = sma3 > sma4 ? color.lime : color.purple,    transp=96 )
fill( p4 ,p5 ,color = sma4 > sma5 ? color.red : color.lime,   transp=98 )

//25日移動平均線
sma25 = sma ( price ,25 )
plot( sma25 ,linewidth=2, transp=20 ,color=#aa00ff, style=plot.style_circles)



```
画面
![スクリーンショット 2021-06-28 18.15.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197239/d48da3e8-bfc7-46f7-c699-b86caab2672c.png)

上記コードで、チャートにそれぞれの単純移動平均線と、５日と２０日、２０日と６０日、１００日と３００日の間が塗りつぶされる。
それぞれが交差している場合、赤色で塗りつぶしている。

# 移動平均線５日、２０位、６０日、１００日、300日の傾きを数値化
以下のコードを、画面下部のペインエディタにコピペして適当な名前をつけて保存。チャートに追加で表示できます。

```python

//@version=4
study("ppp5,20,60,100,300")

pppL1 = 1
pppL2 = 2
pppL3 = 3
pppL4 = 3.4
pppL5 = 3.8
pppAllMax = pppL1 +pppL2 +pppL3 +pppL4 +pppL5
pppSubMax = pppL1 +pppL2 +pppL3 +pppL4 -pppL5


hline(0, title='zero', color=color.black, linestyle=hline.style_dotted, linewidth=2)

trend_sma(x, y,z) =>
    sma(x,y)[0]-sma(x,y)[1] >= 0 ? z : z*-1
    //dt = 0.0
    //for i = 0 to y
    //    dt := dt + x[i]-x[i+1] 
    //dt >= 0 ? z : z*-1

ppp_sma5   = trend_sma(close,   5, pppL1)
ppp_sma20  = trend_sma(close,  20, pppL2)
ppp_sma60  = trend_sma(close,  60, pppL3)
ppp_sma100 = trend_sma(close, 100, pppL4)
ppp_sma300 = trend_sma(close, 300, pppL5)

plot(ppp_sma5,   title='ppp_sma5', color=color.blue)
plot(ppp_sma20,  title='ppp_sma20', color=color.green)
plot(ppp_sma60,  title='ppp_sma60', color=color.orange)
plot(ppp_sma100, title='ppp_sma100', color=color.purple)
plot(ppp_sma300, title='ppp_sma300', color=color.navy)

ppp_smaAll = ppp_sma5+ ppp_sma20+ ppp_sma60+ ppp_sma100+ ppp_sma300
plot( ppp_smaAll, title='ppp_smaAll', join=false, linewidth=2, color=color.red)


//背景色塗り
u_limit = input(pppAllMax, "upper limit")
l_limit = input(-1*pppAllMax, "lower limit")
u_plot = plot(u_limit)
l_plot = plot(l_limit)

fill(u_plot, l_plot,
     color = ppp_smaAll==pppAllMax? color.lime : ppp_smaAll==-1*pppAllMax? color.purple : ppp_smaAll<=-1*pppSubMax? color.red: ppp_smaAll>=pppSubMax? color.green :color.gray,
     transp = 70,
     title = "fill upper-lower line")


```

全ての移動平均線が上向きなら、ライム色
もうすうぐライム色になりそうなら、緑色

全ての移動平均線が下向きなら、紫色
もうすぐ紫色になりそうなら赤色

に背景色を色分けする

# おわり

上記の利用は自己責任です。
TradingViewのPainを遊ぶ題材として、実装してみました。

なお、Podcastで相場師朗氏の番組を拝聴しており、本も買って熟読中の今日この頃です。