Pineの謎⑤
上位足の移動平均について、request.securityを使えば簡単に表示させることが出来ます。下図は5分足のチャートに15分足(期間12)の移動平均を表示したもの。
なんかガタガタなんよねぇ。。。
👇コードはこんな感じ
1 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
2 // © Tommy_Rich
3
4 //@version=5
5 indicator("マイスクリプト", overlay=true)
6
7 // input
8 //// 移動平均関連1
9 INP_src_1 =input.source(close, "ソース", group="移動平均1")
10 INP_type_1 =input.string(title="種類", defval="SMA", options=["SMA", "EMA", "RMA", "WMA"], group="移動平均1")
11 INP_len_1 =input.int(defval=12, minval=1, maxval=200, step=2, title="移動平均期間", group="移動平均1")
12 INP_time_1 =input.timeframe(title="時間足", defval="15", group="移動平均1")
13
14 // 移動平均種類計算
15 f_ma(type, _src, _len) =>
16 float _result =switch type
17 //単純移動平均線
18 "SMA" => ta.sma(_src, _len)
19 //加重移動平均線
20 "WMA" => ta.wma(_src, _len)
21 //指数移動平均線
22 "EMA" => ta.ema(_src, _len)
23 //修正移動平均線
24 "RMA" => ta.rma(_src, _len)
25 _result
26
27 // 移動平均1
28 MA_1 =math.round(nz(request.security(syminfo.ticker, INP_time_1, f_ma(INP_type_1, INP_src_1, INP_len_1)[barstate.isrealtime ? 1 : 0], barmerge.gaps_off)), 3)
29
30 plot(MA_1)
5分足で15分足、なので期間3の移動平均で同じになるはず。さらに12を掛ければ滑らかなチャートにならないか?ってことでやってみました。
が、下記2つのエラーが出ました。
①Cannot call 'ta.ema' with argument 'length'='_len'. An argument of 'series int' type was used but a 'simple int' is expected;
②Cannot read property 'type' of undefined
ん~またseriesか~Pineの型や形式は下記のサイトで分かりやすく説明されています👇
ググっているうちに👇見つけました。。。
ひょっとして動的に期間を指定できる関数に制限がある?
emaとrmaを削除してみました。修正したコードがこちら👇
1 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
2 // © Tommy_Rich
3
4 //@version=5
5 indicator("マイスクリプト", overlay=true)
6
7 // input
8 //// 移動平均関連1
9 INP_src_1 =input.source(close, "ソース", group="移動平均1")
10 INP_type_1 =input.string(title="種類", defval="SMA", options=["SMA", "EMA", "RMA", "WMA"], group="移動平均1")
11 INP_len_1 =input.int(defval=12, minval=1, maxval=200, step=2, title="移動平均期間", group="移動平均1")
12 INP_time_1 =input.timeframe(title="時間足", defval="15", group="移動平均1")
13
14 // 移動平均種類計算
15 f_ma(type, _src, _len) =>
16 float _result =switch type
17 //単純移動平均線
18 "SMA" => ta.sma(_src, _len)
19 //加重移動平均線
20 "WMA" => ta.wma(_src, _len)
21 _result
22
23 // 足変換
24 // TimeFrameを分に変換
25 f_tfinminutes(simple string _tf ="") =>
26 float _chartTf =
27 timeframe.multiplier * (
28 timeframe.isseconds ? 1. / 60 :
29 timeframe.isminutes ? 1. :
30 timeframe.isdaily ? 60. * 24 :
31 timeframe.isweekly ? 60. * 24 * 7 :
32 timeframe.ismonthly ? 60. * 24 * 30.4375 : na)
33 float _result =request.security(syminfo.tickerid, _tf, _chartTf)
34 [_result, _chartTf]
35
36 // インプットの時間足を分に変換
37 [_TF_min_1, _chart] =f_tfinminutes(INP_time_1)
38
39 // 移動平均1
40 MA_1 =math.round(nz(request.security(syminfo.ticker, INP_time_1, f_ma(INP_type_1, INP_src_1, INP_len_1)[barstate.isrealtime ? 1 : 0], barmerge.gaps_off)), 3)
41 MA_1_2 =math.round(f_ma(INP_type_1, INP_src_1, int((_TF_min_1/_chart)*INP_len_1)), 3)
42
43 plot(MA_1)
44 plot(MA_1_2, color=color.red)
f_tfinminutes関数は時間足から分数を取得する関数で、
👇このマニュアルを参考にしています。
👇実行した結果です。改善した方は赤線にしています。
おー⁉ガタガタがなおったー
誰かの参考になれば。。。
以上。
この記事が気に入ったらサポートをしてみませんか?