この記事では、TradingView内のPinescriptで平均足スムーズドのインジケーターを作成する方法を解説します。
以下の記事で紹介した、マルチタイムフレームのボリンジャーバンドインジケーターと一緒に利用できるように、チャートの作成後、売買のサインとして陽線、陰線どちらかが3本続けて連続した際にアラートを発火させるようにします。
目次
スポンサードリンク
平均足スムーズドの仕様
平均足スムーズドは
第1段階:4本値から移動平均化した4本値を算出してさらに平均足化する
第2段階:第1段階の4本値をさらに移動平均化して4本値を算出
というように2段階の平均化を行います。
平均化の方法として、代表的なものとして以下の方法があります。
- 単純移動平均線(SMA=Simple MA)
- 指数平滑移動平均(EMA=Exponential MA)
- 平滑移動平均線(SMMA=Smoothed MA)
- 線形加重移動平均線(LWMA=Liner Weighted MA)
今回は、
第1段階:
期間6で平滑移動平均線(SMMA=Smoothed MA)
第2段階:
期間2、ウェイト6で、線形加重移動平均線(LWMA=Liner Weighted MA)
を使用します。
平滑移動平均化(SMMA=Smoothed MA)を用いた平均足化
SMMAを使用するための関数は、Pinescriptには用意されてませんが、デフォルトのインジケーターより選択する事ができるので、そちらのコードを基に作成します。
基コードは以下の通りです。
1 2 3 4 5 6 7 8 | Logic SMMA len = input.int(7, minval=1, title="Length") src = input(close, title="Source") smma = 0.0 smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len plot(smma, color=#673AB7) |
初め値、終値、高値、安値に対応するために以下のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | smma_len = input(6, title="smma_len") smma_o = 0.0 smma_h = 0.0 smma_l = 0.0 smma_c = 0.0 smma_o := na(smma_o[1]) ? ta.sma(open, smma_len) : (smma_o[1] * (smma_len - 1) + open) / smma_len smma_h := na(smma_h[1]) ? ta.sma(high, smma_len) : (smma_h[1] * (smma_len - 1) + high) / smma_len smma_l := na(smma_l[1]) ? ta.sma(low, smma_len) : (smma_l[1] * (smma_len - 1) + low) / smma_len smma_c := na(smma_c[1]) ? ta.sma(close, smma_len) : (smma_c[1] * (smma_len - 1) + close) / smma_len smma_col = smma_o > smma_c ? color.red : color.blue |
線形加重移動平均線(LWMA=Liner Weighted MA)を用いた平均足化
LWMAもPinescriptのデフォルトの関数に含まれていないですが、デフォルトのインジケーターより選択できるので、そちらをベースとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | //@version=4 study("72s: Linear Weighted Moving Average", shorttitle="LWMA Custom Weighted", overlay=true) //{ LWMA Custom Weighted Function get_lwma(src,period, weight) => price = src sub = (weight/period)-1 float p = na float d = na float sum = 0 float divider = 0 for i = 0 to period-1 p := price[i] * ((weight-i)-sub) d := (weight-i)-sub sum := sum + p divider := divider + d sum / divider //}--LWMA Custom Weighted /// Sample Usage lwma_source = input(close, title="LWMA Source:", type=input.source) lwma_period = input (10, title = "LWMA Lookback Period:", minval=1, step=1) lwma_weight = input (6, title = "LWMA Weight:", minval=1, step=1) colorChange = input(true, title="Directional color change?", type=input.bool) lwma = get_lwma(lwma_source, lwma_period, lwma_weight) lwmaRise = lwma[1]<lwma lwmaFall = lwma[1]>lwma lColor = colorChange? lwmaRise ? color.green : color.red : color.blue plot(lwma, color=lColor, linewidth=2) // ALERTS if lwmaRise and not lwmaRise[1] alert("LWMA is Rising", alert.freq_once_per_bar) if lwmaFall and not lwmaFall[1] alert("LWMA is Falling", alert.freq_once_per_bar) |
以下のように編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | lwma_len = input(2, title="lwma_len") lwma_weight = input(6, title = "lwma_weight") get_lwma(src,period, weight) => price = src sub = (weight/period)-1 float p = na float d = na float sum = 0 float divider = 0 for i = 0 to period-1 p := price[i] * ((weight-i)-sub) d := (weight-i)-sub sum := sum + p divider := divider + d sum / divider lwma_o = get_lwma(smma_o, lwma_len, lwma_weight) lwma_h = get_lwma(smma_h, lwma_len, lwma_weight) lwma_l = get_lwma(smma_l, lwma_len, lwma_weight) lwma_c = get_lwma(smma_c, lwma_len, lwma_weight) |
キャンドルで表示する
キャンドルで表示しますが、ひげは平均足ではなく加工を行っていない、値のものを使用します。
1 2 3 4 5 6 | lwma_col = lwma_o > lwma_c ? color.red : color.blue lwma_wickcolor = lwma_o > lwma_c ? color.new(color.red, 50) : color.new(color.blue, 50) plotcandle(lwma_o, high, low, lwma_c, title="平均足スムーズド", color=lwma_col,wickcolor=lwma_wickcolor) |
スポンサードリンク
エントリーサイン用のアラートを作成する
今回は、陽線、陰線が反対の足から変わってから3本連続して現れたときを条件とします。
条件と、alertの作成は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 | is_insen3 = lwma_o[0] > lwma_c[0] and lwma_o[1] > lwma_c[1] and lwma_o[2] > lwma_c[2] and lwma_o[3] < lwma_c[3] is_yosen3 = lwma_o[0] < lwma_c[0] and lwma_o[1] < lwma_c[1] and lwma_o[2] < lwma_c[2] and lwma_o[3] > lwma_c[3] plotshape(is_insen3, style=shape.triangledown) plotshape(is_yosen3, style=shape.triangleup) //alertcondition alertcondition(is_insen3,title="赤赤赤(陰線3)", message='{"close":"{{close}}","id":"123456878xxx","text": "平均足【陰線】が3つ続きました"}') alertcondition(is_yosen3,title="青青青(陽線3)", message='{"close":"{{close}}","id":"123456878xxx","text": "平均足【陽線】が3つ続きました"}') |
以上、TradingView内のPinescriptで平均足スムーズドのインジケーターを作成する方法を解説しました。