【PineScript】インジケータ開発のススメ【雑談/TradingView】

もくじ

相変わらず子育てハードモードのロッキーです。

これまでFlutter関連のまじめな記事を書いていましたが、ついに脱線します。

昨今、コロナ禍で外出が制限され、習慣になっていた色んな事が出来なくなってしまったなんて話はよく聞きます。

自分も趣味であるジムへ行くってのも全く行けてない状態が続いてましたので、こりゃまずいな、日頃のうっぷんを発散しない、と。

コロナ禍であっても楽しめるような、家でできる新しい趣味を見つける必要があると思い立ったのがきっかけなのですが、

それでなぜ「インジケータ開発」に興味が湧いたのかってところですが。

やれ、年金問題とか、貯金ナン万円問題とか、お金に関する話題が多い世の中ですので、投資に興味が向くというはしごく自然な事かと思います。

私の場合は初めに興味を持ったのが仮想通貨で、通常のトレードとか、株でいうIPOみたいな新規公開前に買って、公開後売るっていうやつとか、あとは俗に言う「魔界」ってやつとかやってたのですが、まあ散々な結果でして、というかトレード以前に詐欺でお金だけ持ってがれる丸損も一度や二度じゃないですからね。

自分は向いていないなと感じていつつある時、チャートのインジケータって何使えばいいかとか、どんな種類があるのかとか色々調べたりして、TradingViewにたどり着いたのですが・・・気づいたら沼ってしまったという感じです。

ところでインジケータってすごく有名な一般的なやつ(RSIとかMACDとかモメンタムとか)以外に個人で開発したものも存在するの知ってますか?

Trading Viewではユーザ(プログラマー)がアイデアや数式、チャート理論等を用いて作ったインジケータが毎日公開されています。

プログラムコードも公開しているので、どんなロジックか確認出来るので、プログラマとして血が騒がないはずがない(かはわかりませんが、今思うと「金儲け」と「プログラム」というところが自分に突き刺さったのだと。あやうく電脳ハックされかけるところでしたな)。

面白いのが、ウィザード級と、この界隈では神と崇めたてられているユーザなんかも存在しており、これらの神々が作ったインジケータがどんなものか見れちゃうんです。

おそらく私が沼った原因はこの神々のスペシャルでインディビジュアルでグレートなコードせいです(急にるー語、かLIGの前社長か)。

まあとにかく、

なにが言いたいかといいますと、この記事を読んでくれている方の中にはプログラマの方もいると思うので、アプリやWebサービスを作る以外にもプログラマとしてこんな事もできるよ、家時間の趣味として、こんな事もできるよ、こんな世界もあるよっていうのを知っていただきたかったです。

人によっては全く意味のない記事となる場合もありますが、意義となる人がいたら嬉しいです。

PineScriptについて全然触れていなかったので、参考にオリジナルのやつを貼っておきます。

XAU(ゴールド)の価格推移と反比例する事が多いとされるアメリカ国債金利2年とドルインデックスの平均値を表示するRSIベースのモメンタム系インジケータです。

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

//@version=5
indicator(title='Indexes RSI Based Momentum', format=format.percent, precision=0)

///////////////////////////////////////////////////
// Inputs
///////////////////////////////////////////////////

src = input(close, title="Source")
rsi_len = input(14, title="RSI Length")
mom_len = input(9, title="Momentum Length")
is_inversion = input(true, title="Inversion?")


///////////////////////////////////////////////////
// Logic
///////////////////////////////////////////////////

f_rsi_mom(src) =>
    rsi = ta.hma(ta.rsi(src, rsi_len), 2)
    rsi_ema = ta.ema(rsi - 50, mom_len)
	rsi_ema2 = ta.ema(rsi_ema, mom_len)
	(2 * rsi_ema - rsi_ema2) * (is_inversion ? -1 : 1)

symb1 = f_rsi_mom(request.security("US02Y", "", src))
symb2 = f_rsi_mom(request.security("DXY", "", src))
avg = math.avg(symb1, symb2)
p_avg = plot(avg, color=color.new(color.white, 100))


///////////////////////////////////////////////////
// Plots
///////////////////////////////////////////////////

h1 = plot(0, linewidth=1, color=color.gray)
fill(p_avg, h1, color=avg >= 0 ? color.new(color.green, 0) : color.new(color.red, 0))

どうでしょう?面白そうじゃないですか?

脱線は以上になります。

関連する記事

もっと見る