<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>作る アーカイブ - PineScript Pro</title>
	<atom:link href="https://pinescript-pro.com/category/%E4%BD%9C%E3%82%8B/feed/" rel="self" type="application/rss+xml" />
	<link>https://pinescript-pro.com/category/作る/</link>
	<description>専業トレーダーによるTradingViewインジケーター作成代行</description>
	<lastBuildDate>Sat, 21 Feb 2026 00:16:39 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://pinescript-pro.com/wp-content/uploads/2026/02/favicon-512-150x150.png</url>
	<title>作る アーカイブ - PineScript Pro</title>
	<link>https://pinescript-pro.com/category/作る/</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://pinescript-pro.com/category/%E4%BD%9C%E3%82%8B/feed/"/>
	<item>
		<title>TradingViewインジケーター作成代行｜手法をコード化</title>
		<link>https://pinescript-pro.com/indicator-daikou/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 09:05:01 +0000</pubDate>
				<category><![CDATA[作る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1325</guid>

					<description><![CDATA[<p>「自分のトレード手法をインジケーターにしたいけど、コードは書けない。」 この悩み、実はとても多い。手法は自分の中にちゃんとある。EMAのクロスとRSIを見て入っている。ローソク足のパターンと出来高で押し目を拾っている。で...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/indicator-daikou/">TradingViewインジケーター作成代行｜手法をコード化</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/indicator-daikou/">TradingViewインジケーター作成代行｜手法をコード化</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「自分のトレード手法をインジケーターにしたいけど、コードは書けない。」</p>



<p class="wp-block-paragraph">この悩み、実はとても多い。手法は自分の中にちゃんとある。EMAのクロスとRSIを見て入っている。ローソク足のパターンと出来高で押し目を拾っている。でも、それをTradingViewのPineスクリプトに落とし込む方法がわからない。</p>



<p class="wp-block-paragraph">もちろんPineスクリプトを自分で学ぶ道もある。ただ、「今すぐこの手法をインジケーター化したい」「コードの勉強に時間を使うよりトレードに集中したい」という方にとっては、作成を依頼するのも賢い選択だ。</p>



<p class="wp-block-paragraph">ここで大事なのが、<strong>誰に依頼するか</strong>。</p>



<p class="wp-block-paragraph">プログラミングができる人は世の中にたくさんいる。でも、トレードもコードも両方わかる人は少ない。PineScript Proでは、実際にトレードをしている開発者が、あなたの手法をコードに変換する。「コードとしては合っているけど、実際の相場では使いにくい」という問題が起きにくいのは、このためだ。</p>



<p class="wp-block-paragraph">この記事では、インジケーター作成の全体像を解説する。どんなインジケーターが作れるのか、ロジックをどう伝えればいいのか、依頼先による違い、完成までの流れまで、「インジケーターを作りたい」と思ったときに知っておきたいことをまとめた。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">PineScript Proのサービスを見る</a></p>



<h2 class="wp-block-heading">トレードがわかる人に依頼する意味</h2>



<p class="wp-block-paragraph">インジケーター作成代行はココナラやランサーズにもたくさんある。価格も手頃だし、実績のある出品者も多い。</p>



<p class="wp-block-paragraph">ただ、1つだけ気をつけてほしいことがある。<strong>出品者の多くはプログラマーであって、トレーダーではない</strong>ということだ。</p>



<p class="wp-block-paragraph">これは悪いことではない。コードの品質は高いし、指示通りのものはちゃんと作ってくれる。ただ、トレードの現場感覚がないと、こういうことが起きる。</p>



<p class="wp-block-paragraph">「EMAクロスでシグナルを出す」と依頼した。出来上がったコードは正しい。でもチャートに表示すると、レンジ相場でシグナルが乱発している。トレーダーなら「ここはレンジだからフィルターが必要だな」と直感的にわかる。でもプログラマーは、依頼内容に「レンジ除外」と書かれていなければ、その処理を入れない。当然のことだ。</p>



<p class="wp-block-paragraph">結果として、「修正お願いします」「この条件を追加してください」「やっぱりこっちの方が…」と何往復もやり取りが発生する。そのたびに追加費用がかかり、最終的には「最初から詳しい人に頼めばよかった」となる。</p>



<p class="wp-block-paragraph">PineScript Proでは、トレーダーが直接コードを書く。ロジックを聞いた時点で「この条件だけだとレンジで困りそうですね。ADXフィルターを入れておきましょうか？」「東京時間の薄い時間帯にも反応しますけど、除外しますか？」といった提案ができる。</p>



<p class="wp-block-paragraph">書かれていない部分を補完できるのは、開発者自身がトレードの現場を知っているからだ。</p>



<h2 class="wp-block-heading">作成できるインジケーターの種類</h2>



<p class="wp-block-paragraph">PineScript Proで対応しているインジケーターを紹介する。</p>



<p class="wp-block-paragraph"><strong>シグナルインジケーター</strong> — エントリーやエグジットのタイミングに矢印やマークを表示するもの。EMAクロス、RSI反転、ブレイクアウトなど、あなたのエントリー条件を可視化する。最も依頼が多いタイプだ。</p>



<p class="wp-block-paragraph"><strong>複合テクニカルインジケーター</strong> — 複数のテクニカル指標を1つにまとめるもの。EMA3本＋ボリバン＋RSI背景を統合すれば、TradingView無料プランのインジケーター枠（3つ）を有効活用できる。</p>



<p class="wp-block-paragraph"><strong>マルチタイムフレーム（MTF）インジケーター</strong> — 上位足の情報を現在の時間足に表示するもの。日足のEMAを15分足チャートに重ねたり、週足のRSI値をラベルで表示したり。環境認識のツールとして重宝する。</p>



<p class="wp-block-paragraph"><strong>ラインオブジェクト系</strong> — 前日高安、ピボットポイント、ラウンドナンバー、セッション区切りなどの価格水準を自動描画するもの。毎朝手動で引いていた水平線を自動化できる。</p>



<p class="wp-block-paragraph"><strong>アラート付きインジケーター</strong> — 条件が成立したらスマホ通知やメールを飛ばすもの。シグナルインジケーターにアラートを組み合わせれば、チャートに張り付かなくてもエントリータイミングをキャッチできる。</p>



<p class="wp-block-paragraph"><strong>ストラテジー（バックテスト付き）</strong> — エントリー/エグジットのロジックを過去データで検証できるようにしたもの。勝率、プロフィットファクター、最大ドローダウンなどの数字で手法の有効性を確認できる。</p>



<p class="wp-block-paragraph">もちろん、これらの組み合わせにも対応している。「EMAクロス×RSIフィルター×MTF環境認識×アラート付き＋バックテスト版」のように、トレードに必要な機能をまるごと1つのパッケージにすることも可能だ。</p>



<h2 class="wp-block-heading">ロジックの伝え方 — トレードの言葉でOK</h2>



<p class="wp-block-paragraph">「依頼するにしても、ロジックをどう伝えればいいのかわからない」という声をよくいただく。安心してほしい。PineScript Proでは、<strong>トレーダー同士の普通の会話</strong>で伝えてもらえれば十分だ。</p>



<p class="wp-block-paragraph">たとえば、こんな感じで大丈夫。</p>



<p class="wp-block-paragraph">「20EMAと50EMAのクロスで入るんだけど、日足の200SMAより上にあるときだけロングしたい。RSIが70超えてたら見送り。東京時間は除外で。」</p>



<p class="wp-block-paragraph">これだけで実装に必要な情報はほぼ揃っている。あとはこちらから「EMAの期間は設定で変えられるようにしますか？」「RSIの閾値も可変にしておきますか？」「東京時間の定義は9時〜15時でいいですか？」と確認していく。</p>



<p class="wp-block-paragraph">プログラミングの知識は一切不要。「ta.crossoverがtrueで、request.securityで日足のSMAを取得して…」のような技術的な表現に翻訳する必要はない。</p>



<p class="wp-block-paragraph">もしロジックが自分の中でまだ整理しきれていなくても大丈夫。「なんとなくこういう感じで見てるんだけど」というところから、ヒアリングで一緒に条件を整理していくこともできる。</p>



<p class="wp-block-paragraph">自分でPineスクリプトの基本を学んでみたい方はこちらの記事も参考になる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/indicator-jisaku/">TradingViewインジケーター自作｜Pineスクリプトで作る手順</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/indicator-jisaku/"><figure class="eyecatch of-cover thum"><img fetchpriority="high" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/16-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/16-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/16-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/16-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/16-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/16-2.png 1200w" sizes="(max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>TradingViewインジケーター自作｜Pineスクリプトで作る手順</div><time class="time__date gf undo">2026.02.21</time></div></a></div>




<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">PineScript Proのサービスを見る</a></p>



<h2 class="wp-block-heading">納品コードの品質</h2>



<p class="wp-block-paragraph">PineScript Proが納品するインジケーターは、すべて以下の基準で作成している。</p>



<p class="wp-block-paragraph"><strong>Pineスクリプトv6対応。</strong> 最新バージョンで実装する。v4やv5で書かれたコードは、TradingViewのアップデートで将来動かなくなるリスクがあるため、v6を標準としている。</p>



<p class="wp-block-paragraph"><strong>パラメータは設定パネルから変更可能。</strong> EMA期間、RSI閾値、TP/SL幅など、トレードに関わるパラメータはすべて<code>input</code>で実装する。コードを触らなくても、TradingViewの設定画面から自由にカスタマイズできる。</p>



<p class="wp-block-paragraph"><strong>セクション分けされた設定パネル。</strong> 項目が多いインジケーターは「エントリー設定」「フィルター設定」「表示設定」「アラート設定」のようにグループ分けする。TradingView公式のインジケーターと同じように整理された見た目で使える。</p>



<p class="wp-block-paragraph"><strong>各パラメータに説明文付き。</strong> マウスを重ねると推奨値や意味の説明が表示されるようにしている。自分以外の人に共有するときにも、使い方がすぐわかる。</p>



<p class="wp-block-paragraph"><strong>日本語コメント付きコード。</strong> コードの各ブロックに「ここがエントリー条件」「ここがフィルター」「ここが描画」と日本語で注釈を入れる。後から自分で少し手を加えたくなったときにも、どこを変えればいいかがわかる。</p>



<p class="wp-block-paragraph"><strong>入力値のエラー防止。</strong> 期間に0やマイナスの値を入れてもエラーにならないよう、入力範囲の制限を設けている。</p>



<h2 class="wp-block-heading">依頼から納品までの流れ</h2>



<p class="wp-block-paragraph">全体の流れを簡単にまとめる。</p>



<p class="wp-block-paragraph"><strong>ステップ1: ロジックを教えてもらう。</strong> トレードの言葉で大丈夫。スクリーンショットを送ってもらうだけでもかなりの情報が伝わる。「いつもこの画面を見てトレードしてます」という一枚が、100の言葉より雄弁だったりする。</p>



<p class="wp-block-paragraph"><strong>ステップ2: 仕様の提案。</strong> ヒアリング内容をもとに、実装仕様を提案する。「この条件だとレンジで困りそうなので、こういうフィルターを入れましょうか？」「サマータイムの切り替えも自動で処理しますか？」など、トレーダー目線の提案を行う。</p>



<p class="wp-block-paragraph"><strong>ステップ3: コーディング・テスト。</strong> Pineスクリプトv6で実装し、複数の銘柄・時間足で動作を確認する。極端にボラティリティが高い相場や、データが少ない銘柄でもおかしな挙動をしないか検証する。</p>



<p class="wp-block-paragraph"><strong>ステップ4: 納品・動作確認。</strong> コードを納品し、あなたのTradingView環境で動作を確認してもらう。「色をもう少し薄くしたい」「矢印をもっと小さく」といった見た目の微調整は無料で対応する。</p>



<p class="wp-block-paragraph"><strong>ステップ5: 運用サポート。</strong> 納品して終わり、ではない。「パラメータをどう調整すればいいか」「他の銘柄で使う場合の注意点」など、実際に使い始めてからの疑問にも対応する。</p>



<h2 class="wp-block-heading">Pineスクリプトの制限事項</h2>



<p class="wp-block-paragraph">インジケーターで「できること」と「できないこと」を事前に整理しておく。</p>



<p class="wp-block-paragraph"><strong>自動売買の直接実行はできない。</strong> Pineスクリプトはチャートへの描画とアラート通知に特化した言語。取引所に直接注文を送る機能はない。自動売買を実現するには、TradingViewのアラートをWebhook経由で外部システムに連携する仕組みが必要になる。この連携部分の設計相談にも対応できる。</p>



<p class="wp-block-paragraph"><strong>外部データの取り込みは限定的。</strong> TradingView上で提供されているOHLCV（四本値＋出来高）とテクニカル指標が使えるデータの範囲。独自のCSVデータを読み込むといった処理はできない。</p>



<p class="wp-block-paragraph"><strong>描画オブジェクトには上限がある。</strong> ラインやラベルは最大500個まで。大量の水平線を表示したい場合は、古いものから自動削除する処理を入れて対応する。</p>



<p class="wp-block-paragraph"><strong>バックテストとリアルタイムでは挙動が異なる場合がある。</strong> ストラテジーのバックテスト結果と、実際のリアルタイム挙動にはズレが出ることがある。この点は事前に説明し、対策を講じた実装を行う。</p>



<h2 class="wp-block-heading">コード化しやすい手法・しにくい手法</h2>



<p class="wp-block-paragraph">あなたの手法がどのくらいスムーズにコード化できるか、目安として参考にしてほしい。</p>



<p class="wp-block-paragraph"><strong>そのままコード化できるもの。</strong> テクニカル指標の数値で判断する手法。「EMA(20)がEMA(50)を上抜け」「RSI(14)が30以下で反転」「ATR(14)が過去20日平均の1.5倍以上」。数値で表せる条件はそのままコードに変換できる。</p>



<p class="wp-block-paragraph"><strong>コード化できるが、設計の工夫が必要なもの。</strong> 値動きのパターン認識。ダブルボトム、三尊天井、ピンバーなど。これらは「ピンバー＝下ヒゲが実体の2倍以上、実体がバー全体の上位30%」のように数値で定義し直す工程が入る。この「トレードの感覚を数値に落とし込む」作業は、トレード経験がものを言う部分だ。</p>



<p class="wp-block-paragraph"><strong>現状では難しいもの。</strong> 純粋な裁量判断。「チャートの形を見て決める」「なんとなく雰囲気で」。ただ、裁量トレーダーでも「毎回共通している条件」は必ずある。ヒアリングで一緒にその条件を掘り起こしていく作業にも対応している。「コード化できません」で終わらせることはしない。</p>



<h2 class="wp-block-heading">作成後の運用について</h2>



<p class="wp-block-paragraph">インジケーターが完成したら、ぜひ以下のことを試してみてほしい。</p>



<p class="wp-block-paragraph"><strong>バックテストで検証する。</strong> シグナルインジケーターを作ったら、同じロジックのストラテジー版も用意して過去データで成績を確認しよう。数字で裏付けが取れると、実際のトレードでも自信を持ってシグナルに従える。</p>



<p class="wp-block-paragraph"><strong>パラメータは「だいたい効く」くらいがちょうどいい。</strong> 過去データに完璧にフィットするパラメータは、将来の相場では機能しないことが多い（カーブフィッティング）。少しゆるめの設定のほうが実用的だ。</p>



<p class="wp-block-paragraph"><strong>アラートを活用する。</strong> スマホ通知を設定しておけば、チャートに張り付く時間を大幅に減らせる。空いた時間をトレードの振り返りやルールの改善に使おう。</p>



<p class="wp-block-paragraph"><strong>複数の環境で確認する。</strong> 1つの銘柄・時間足だけでなく、他の銘柄や時間足でもインジケーターの挙動を見てみよう。汎用性の高いインジケーターほど、長く使い続けられる。</p>



<p class="wp-block-paragraph"><strong>定期的に見直す。</strong> 相場は変わる。半年前にうまくいっていたパラメータが今も最適とは限らない。四半期ごとくらいの頻度で、パフォーマンスを振り返って調整するのがおすすめだ。</p>



<h2 class="wp-block-heading">よくある質問</h2>



<p class="wp-block-paragraph"><strong>Q: プログラミングの知識がまったくなくても依頼できる？</strong></p>



<p class="wp-block-paragraph">もちろん大丈夫。トレードの言葉で手法を教えてもらえれば、コーディングはすべてこちらで行う。「EMAクロスで入って、RSIでフィルターして、ボリバンの外に出たら利確」。この伝え方で十分だ。</p>



<p class="wp-block-paragraph"><strong>Q: ソースコードはもらえる？</strong></p>



<p class="wp-block-paragraph">もらえる。Pineスクリプトのソースコードをそのまま納品する。TradingViewのPineエディタに貼り付ければ動く形式だ。コードはあなたのもの。</p>



<p class="wp-block-paragraph"><strong>Q: 納品後に修正してもらえる？</strong></p>



<p class="wp-block-paragraph">見た目の微調整（色、サイズ、パラメータ初期値の変更など）は無料で対応する。ロジック自体の変更や機能追加については、内容に応じて相談しよう。</p>



<p class="wp-block-paragraph"><strong>Q: MT4/MT5からの移植はできる？</strong></p>



<p class="wp-block-paragraph">できる。MQL4/MQL5のロジックをPineスクリプトv6に書き換える形になる。言語の違いにより完全に同じ挙動にならない部分が出ることもあるが、事前に説明した上で最適な代替実装を提案する。</p>



<p class="wp-block-paragraph"><strong>Q: 完成したインジケーターを販売してもいい？</strong></p>



<p class="wp-block-paragraph">大丈夫だ。TradingViewの「招待限定スクリプト」として公開し、月額課金で販売するモデルが一般的。販売を前提とした設計（設定パネルの作り込み、説明文の充実）にも対応できる。</p>



<p class="wp-block-paragraph"><strong>Q: 納期はどのくらい？</strong></p>



<p class="wp-block-paragraph">ロジックの複雑さによる。シンプルなシグナルインジケーターなら1〜3日、複合的なインジケーター＋ストラテジーのセットなら1〜2週間が目安。ヒアリング時に見積もりを伝える。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">インジケーター作成で一番大切なのは、「トレードを理解している人がコードを書くこと」だと考えている。</p>



<p class="wp-block-paragraph">コードが正しくても、実際の相場で使えなければ意味がない。レンジでシグナルが乱発する。薄い時間帯のノイズを拾う。フィルターが足りない。こうした問題は、開発者がトレードの現場を知っていれば未然に防げる。</p>



<p class="wp-block-paragraph">PineScript Proでは、トレーダーがあなたの手法を聞き、トレーダーの視点で設計し、トレーダーとして検証した上で納品する。コードを渡して終わりではなく、「このインジケーターで実際にトレードがうまくいく」ところまでを一緒に考えたい。</p>



<p class="wp-block-paragraph">気になることがあれば、気軽に相談してほしい。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">PineScript Proに相談する</a></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/indicator-daikou/">TradingViewインジケーター作成代行｜手法をコード化</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/indicator-daikou/">TradingViewインジケーター作成代行｜手法をコード化</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TradingViewインジケーター自作｜Pineスクリプトで作る手順</title>
		<link>https://pinescript-pro.com/indicator-jisaku/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 07:59:31 +0000</pubDate>
				<category><![CDATA[作る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1322</guid>

					<description><![CDATA[<p>TradingViewのインジケーターは自作できる。しかも、プログラミング未経験でも作れる。 TradingViewには「Pineスクリプト」という専用言語が内蔵されており、エディタを開いてコードを書き、「チャートに追加...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/indicator-jisaku/">TradingViewインジケーター自作｜Pineスクリプトで作る手順</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/indicator-jisaku/">TradingViewインジケーター自作｜Pineスクリプトで作る手順</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">TradingViewのインジケーターは自作できる。しかも、プログラミング未経験でも作れる。</p>



<p class="wp-block-paragraph">TradingViewには「Pineスクリプト」という専用言語が内蔵されており、エディタを開いてコードを書き、「チャートに追加」を押すだけで自作インジケーターがチャートに表示される。環境構築もインストールも不要。ブラウザだけで完結する。</p>



<p class="wp-block-paragraph">自作するメリットは大きい。無料プランではインジケーター枠が3つしかないが、複数のインジケーターを1つのスクリプトにまとめれば枠を節約できる。EMA3本＋RSI＋ボリバンを1つのインジケーターに統合すれば、残り2枠を自由に使える。さらに、市販のインジケーターにはない「自分のトレードルールに完全一致するシグナル」を作れる。</p>



<p class="wp-block-paragraph">この記事では、Pineエディタの開き方から、7つの実用インジケーターの完成コードまで、手順通りに進めれば今日中に自作インジケーターをチャートに表示できる内容を解説する。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践テクニックを見る</a></p>



<h2 class="wp-block-heading">自作インジケーターの作り方 — 5ステップ</h2>



<p class="wp-block-paragraph">インジケーター自作の全体像を先に示す。</p>



<p class="wp-block-paragraph"><strong>ステップ1: Pineエディタを開く。</strong> TradingViewのチャート画面下部にある「Pineエディタ」タブをクリック。</p>



<p class="wp-block-paragraph"><strong>ステップ2: 新規インジケーターを作成。</strong> エディタ右上の「開く」→「新規作成」→「新規インジケーター」を選択。テンプレートコードが表示される。</p>



<p class="wp-block-paragraph"><strong>ステップ3: コードを書く（またはコピペ）。</strong> テンプレートを消して、自分のコードを入力する。</p>



<p class="wp-block-paragraph"><strong>ステップ4: 保存してチャートに追加。</strong> エディタ右上の「保存」でスクリプトを保存。「チャートに追加」でチャートにインジケーターが表示される。</p>



<p class="wp-block-paragraph"><strong>ステップ5: 設定を調整。</strong> チャート左上のインジケーター名の歯車アイコンをクリックすると、パラメータ・色・表示設定を変更できる。</p>



<p class="wp-block-paragraph">この5ステップで完成だ。コードさえあれば、所要時間は1分もかからない。以下、実際のコードを使って具体的に進めていく。</p>



<h2 class="wp-block-heading">最初の一歩 — 3行で動くインジケーター</h2>



<p class="wp-block-paragraph">まずは最も短いインジケーターを作って、「自作して動かす」感覚をつかもう。</p>



<pre class="pine-code">
//@version=6
indicator("はじめてのインジケーター", overlay=true)
plot(ta.sma(close, 25), "25日SMA", color.blue, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">このコードをPineエディタに貼り付けて「チャートに追加」を押す。チャートに青い25日移動平均線が表示されるはずだ。</p>



<p class="wp-block-paragraph">3行の意味を解説する。</p>



<p class="wp-block-paragraph">1行目の<code>//@version=6</code>はPineスクリプトのバージョン指定。v6が最新だ。2行目の<code>indicator()</code>でインジケーターの名前とタイプを宣言する。<code>overlay=true</code>はローソク足と同じエリアに描画する設定。3行目の<code>plot()</code>で計算結果をチャートに描画する。<code>ta.sma(close, 25)</code>は終値の25日単純移動平均を計算する組み込み関数だ。</p>



<p class="wp-block-paragraph">たった3行だが、これは立派な自作インジケーターだ。期間を変えたければ<code>25</code>の数字を変えるだけ。色を変えたければ<code>color.blue</code>を<code>color.red</code>に。このシンプルさがPineスクリプトの強みだ。</p>



<h2 class="wp-block-heading">実用例①: EMA3本セット（短期・中期・長期）</h2>



<p class="wp-block-paragraph">デイトレーダーがまず作るべきインジケーター。短期・中期・長期のEMAを1つにまとめる。</p>



<pre class="pine-code">
//@version=6
indicator("EMA3本セット", overlay=true)

// パラメータ（設定パネルで変更可能）
fast = input.int(20, "短期EMA", minval=1)
mid = input.int(50, "中期EMA", minval=1)
slow = input.int(200, "長期EMA", minval=1)

// 計算
emaFast = ta.ema(close, fast)
emaMid = ta.ema(close, mid)
emaSlow = ta.ema(close, slow)

// 描画
plot(emaFast, "短期", color.blue, 2)
plot(emaMid, "中期", color.orange, 2)
plot(emaSlow, "長期", color.red, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>input.int()</code>を使うことで、設定パネルから期間を変更できる。コードを書き換えなくても、歯車アイコンから20→10に変えればすぐ反映される。</p>



<p class="wp-block-paragraph">このインジケーター1つで、SMAではなくEMAを使い、好きな期間を3本表示でき、色も自由に変えられる。TradingViewに内蔵されている移動平均線を3つ追加するよりも枠を節約できる。</p>



<h2 class="wp-block-heading">実用例②: RSI + 買われすぎ・売られすぎゾーン</h2>



<p class="wp-block-paragraph">RSIに色付きのゾーンを追加する。これだけでも見やすさが大幅に上がる。</p>



<pre class="pine-code">
//@version=6
indicator("RSI with Zone", overlay=false)

length = input.int(14, "RSI期間", minval=1)
ob = input.int(70, "買われすぎ", minval=50, maxval=100)
os = input.int(30, "売られすぎ", minval=0, maxval=50)

rsi = ta.rsi(close, length)

// RSIラインを描画
plot(rsi, "RSI", color.purple, 2)

// 水平線
h1 = hline(ob, "買われすぎ", color.red, hline.style_dashed)
h2 = hline(os, "売られすぎ", color.green, hline.style_dashed)
hline(50, "中間", color.gray, hline.style_dotted)

// ゾーンを塗りつぶし
fill(h1, h2, color=color.new(color.purple, 90))

// 背景色で過熱感を表示
bgcolor(rsi > ob ? color.new(color.red, 85) : rsi < os ? color.new(color.green, 85) : na)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>overlay=false</code>にすると、ローソク足の下の別ウィンドウに表示される。RSIやMACDなどのオシレーター系はこの設定を使う。<code>bgcolor()</code>で背景色を変えると、RSIが70以上のときに赤、30以下のときに緑の背景になり、視覚的に過熱感がわかる。</p>



<h2 class="wp-block-heading">実用例③: EMAクロスのシグナル矢印</h2>



<p class="wp-block-paragraph">エントリーポイントに矢印を表示するシグナルインジケーター。自作の醍醐味だ。</p>



<pre class="pine-code">
//@version=6
indicator("EMAクロスシグナル", overlay=true)

fastLen = input.int(12, "短期EMA")
slowLen = input.int(26, "長期EMA")

fast = ta.ema(close, fastLen)
slow = ta.ema(close, slowLen)

// クロス検出
bullCross = ta.crossover(fast, slow)
bearCross = ta.crossunder(fast, slow)

// EMA描画
plot(fast, "Fast EMA", color.blue, 1)
plot(slow, "Slow EMA", color.red, 1)

// シグナル矢印
plotshape(bullCross, "買い", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(bearCross, "売り", shape.triangledown, location.abovebar, color.red, size=size.small)

// アラート設定
alertcondition(bullCross, "EMAゴールデンクロス", "{{ticker}}: 短期EMAが長期EMAを上抜け")
alertcondition(bearCross, "EMAデッドクロス", "{{ticker}}: 短期EMAが長期EMAを下抜け")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>ta.crossover()</code>は短期EMAが長期EMAを下から上に突き抜けた瞬間に<code>true</code>を返す。<code>plotshape()</code>でその瞬間のバーに矢印を表示する。<code>location.belowbar</code>で矢印をバーの下に、<code>location.abovebar</code>で上に配置する。</p>



<p class="wp-block-paragraph"><code>alertcondition()</code>を書いておけば、TradingViewのアラート作成画面でこの条件を選択できる。スマホに通知が届くようにしておけば、チャートに張り付いていなくてもエントリータイミングを逃さない。</p>



<h2 class="wp-block-heading">実用例④: ボリンジャーバンド + 帯の色変化</h2>



<p class="wp-block-paragraph">ボリバンの帯の色をトレンド方向に合わせて変化させる。標準のボリバンとは一味違うインジケーターになる。</p>



<pre class="pine-code">
//@version=6
indicator("カラーボリンジャー", overlay=true)

length = input.int(20, "期間")
mult = input.float(2.0, "偏差", step=0.1)

[basis, upper, lower] = ta.bb(close, length, mult)

// トレンド判定: basisの傾きで色を変える
basisRising = basis > basis[1]
trendColor = basisRising ? color.new(color.green, 70) : color.new(color.red, 70)

// 描画
p1 = plot(upper, "Upper", color.gray, 1)
p2 = plot(lower, "Lower", color.gray, 1)
plot(basis, "Basis", basisRising ? color.green : color.red, 2)

// 帯を塗りつぶし
fill(p1, p2, color=trendColor)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>ta.bb()</code>はボリンジャーバンドの中央線・上限・下限を一度に返す。<code>[basis, upper, lower]</code>で受け取るのはPineスクリプトのタプル分割構文だ。</p>



<p class="wp-block-paragraph"><code>basis &gt; basis[1]</code>で中央線が前のバーより上なら上昇トレンドと判定し、帯を緑に、下降なら赤にする。視覚的にトレンド方向がわかるので、スクイーズからの方向感の判断に役立つ。</p>



<h2 class="wp-block-heading">実用例⑤: マルチタイムフレーム移動平均</h2>



<p class="wp-block-paragraph">現在の時間足に上位足のEMAを重ねて表示する。MTF（マルチタイムフレーム）分析に必須のインジケーターだ。</p>



<pre class="pine-code">
//@version=6
indicator("MTF EMA", overlay=true)

tf = input.timeframe("D", "上位足")
length = input.int(20, "期間")
src = input.source(close, "ソース")

// 上位足のEMAを取得
htfEMA = request.security(syminfo.tickerid, tf, ta.ema(src, length))

// 描画
plot(htfEMA, "HTF EMA", color.orange, 3)
plot(ta.ema(src, length), "現在足 EMA", color.blue, 1)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>request.security()</code>で上位足のデータを取得する。日足のEMAを5分足チャートに重ねて表示すれば、大きな方向感を把握しながら短い時間足でエントリーを探せる。</p>



<p class="wp-block-paragraph"><code>input.timeframe()</code>を使えば、設定パネルから上位足を自由に変更できる。日足→週足→4時間足と切り替えながら、自分のトレードスタイルに合うMTF設定を見つけよう。</p>



<p class="wp-block-paragraph">Pineスクリプトの基本構文をもっと詳しく学びたい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-kakikata/"><figure class="eyecatch of-cover thum"><img decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2.png 1200w" sizes="(max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトの書き方｜基本構文をコード付きで完全解説</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの全テクニックを探す</a></p>



<h2 class="wp-block-heading">実用例⑥: 複数インジケーター統合（枠節約）</h2>



<p class="wp-block-paragraph">EMA + RSI背景 + 出来高カラーを1つのインジケーターに統合する。無料プランの3枠制限を最大限に活用するテクニックだ。</p>



<pre class="pine-code">
//@version=6
indicator("オールインワン", overlay=true)

// === EMA設定 ===
showEMA = input.bool(true, "EMA表示", group="EMA")
ema1Len = input.int(20, "短期", group="EMA")
ema2Len = input.int(50, "中期", group="EMA")
ema3Len = input.int(200, "長期", group="EMA")

// === RSI設定 ===
showRSI = input.bool(true, "RSI背景", group="RSI")
rsiLen = input.int(14, "期間", group="RSI")
rsiOB = input.int(70, "買われすぎ", group="RSI")
rsiOS = input.int(30, "売られすぎ", group="RSI")

// === 出来高設定 ===
showVol = input.bool(true, "出来高バー色", group="出来高")
volLen = input.int(20, "平均期間", group="出来高")

// === 計算 ===
ema1 = ta.ema(close, ema1Len)
ema2 = ta.ema(close, ema2Len)
ema3 = ta.ema(close, ema3Len)
rsi = ta.rsi(close, rsiLen)
volMA = ta.sma(volume, volLen)

// === EMA描画 ===
plot(showEMA ? ema1 : na, "短期EMA", color.blue, 2)
plot(showEMA ? ema2 : na, "中期EMA", color.orange, 2)
plot(showEMA ? ema3 : na, "長期EMA", color.red, 2)

// === RSI背景 ===
rsiBG = showRSI and rsi > rsiOB ? color.new(color.red, 90) : showRSI and rsi < rsiOS ? color.new(color.green, 90) : na
bgcolor(rsiBG, title="RSI背景")

// === 出来高によるバー色 ===
highVol = volume > volMA * 1.5
barcolor(showVol and highVol ? (close > open ? color.lime : color.fuchsia) : na, title="出来高バー色")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>group</code>引数で設定パネルを「EMA」「RSI」「出来高」にセクション分けしている。<code>input.bool()</code>で各機能のON/OFFを切り替えられるので、不要な機能は非表示にできる。</p>



<p class="wp-block-paragraph"><code>barcolor()</code>は出来高が20日平均の1.5倍を超えたバーの色を変える。陽線ならライムグリーン、陰線ならマゼンタ。大口の参入をローソク足の色で可視化する。</p>



<p class="wp-block-paragraph">この1つのインジケーターで、EMA3本、RSI背景、出来高ハイライトの3機能が動く。インジケーター枠を3つ使う代わりに1つで済む。</p>



<h2 class="wp-block-heading">実用例⑦: 前日高安 + ピボットポイント</h2>



<p class="wp-block-paragraph">デイトレーダー必須の価格レベルを自動表示する。</p>



<pre class="pine-code">
//@version=6
indicator("前日高安 + ピボット", overlay=true)

// 前日のデータ取得
pdh = request.security(syminfo.tickerid, "D", high[1])
pdl = request.security(syminfo.tickerid, "D", low[1])
pdc = request.security(syminfo.tickerid, "D", close[1])

// ピボットポイント
pp = (pdh + pdl + pdc) / 3
r1 = 2 * pp - pdl
s1 = 2 * pp - pdh

// 描画
plot(pdh, "前日高値", color.red, 2, plot.style_stepline)
plot(pdl, "前日安値", color.green, 2, plot.style_stepline)
plot(pp, "PP", color.yellow, 2, plot.style_stepline)
plot(r1, "R1", color.new(color.red, 40), 1, plot.style_stepline)
plot(s1, "S1", color.new(color.green, 40), 1, plot.style_stepline)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>plot.style_stepline</code>で階段状の水平ラインを表示する。日足の値は日中変わらないので、水平線として描画される。前日の高値・安値はサポレジとして意識されやすい価格帯だ。</p>



<h2 class="wp-block-heading">よくあるエラーと対処法</h2>



<p class="wp-block-paragraph">自作中に遭遇しやすいエラーを整理する。</p>



<p class="wp-block-paragraph"><strong>「Could not find function or function reference」</strong> — 関数名のスペルミス。<code>ta.sma</code>を<code>ta.SMA</code>と大文字にしたり、<code>ta.</code>の付け忘れが多い。v6では組み込み関数にはすべて<code>ta.</code>プレフィックスが必要だ。</p>



<p class="wp-block-paragraph"><strong>「Cannot call 'plot' with argument 'series'='...' An argument of 'series float' was used but a 'input float' is expected」</strong> — <code>hline()</code>に変数を渡している。<code>hline()</code>は定数のみ受け付ける。変数を水平線にしたいなら<code>plot()</code>を使う。</p>



<p class="wp-block-paragraph"><strong>「Script has too many local scopes」</strong> — <code>if</code>文やループのネストが深すぎる。PineスクリプトにはローカルスコープのAJ限がある。ロジックを関数に分割して対処する。</p>



<p class="wp-block-paragraph"><strong>「Study error: Script could not be translated from: null」</strong> — バージョン指定がない。1行目に<code>//@version=6</code>を忘れている。</p>



<p class="wp-block-paragraph"><strong>「Max number of drawings exceeded」</strong> — <code>line.new()</code>や<code>label.new()</code>をループ内で大量に生成している。<code>indicator()</code>に<code>max_lines_count=500</code>を指定するか、不要な描画を<code>line.delete()</code>で削除する。</p>



<p class="wp-block-paragraph"><strong>チャートに何も表示されない</strong> — <code>overlay=true</code>を指定していないのにメインチャートに表示しようとしている。オシレーター系なら<code>overlay=false</code>、価格チャート上に重ねるなら<code>overlay=true</code>を確認する。</p>



<h2 class="wp-block-heading">自作インジケーターの保存と共有</h2>



<p class="wp-block-paragraph">作ったインジケーターは自動的にTradingViewのクラウドに保存される。デバイスが変わっても「マイスクリプト」からいつでもアクセスできる。</p>



<p class="wp-block-paragraph"><strong>保存方法</strong> — エディタの「保存」ボタン、またはCtrl+S（Mac: Cmd+S）。初回保存時にスクリプト名を入力する。</p>



<p class="wp-block-paragraph"><strong>公開方法</strong> — エディタの「公開」ボタンからTradingViewコミュニティに公開できる。「公開」はソースコードが見える状態、「招待限定」は指定したユーザーのみアクセス可能、「非公開」はURLを知っている人のみ。</p>



<p class="wp-block-paragraph"><strong>エクスポート</strong> — Pineスクリプトにはファイルエクスポート機能はないが、コードをテキストファイルにコピペしてローカルにバックアップできる。GitHubで管理するのもおすすめだ。</p>



<p class="wp-block-paragraph"><strong>他人のスクリプトを編集する</strong> — TradingViewの「コミュニティスクリプト」にはオープンソースのインジケーターが大量にある。気に入ったスクリプトを「ソースコードを表示」→「コピーを作成」で自分のエディタに複製し、改変できる。これが最も効率的な学習方法だ。</p>



<h2 class="wp-block-heading">コミュニティスクリプトから学ぶ</h2>



<p class="wp-block-paragraph">自作スキルを最速で伸ばす方法は、他人のコードを読むことだ。TradingViewには数万のオープンソースインジケーターが公開されている。</p>



<p class="wp-block-paragraph">「インジケーター」検索画面で「コミュニティスクリプト」タブを開くと、世界中のトレーダーが公開したインジケーターが一覧で表示される。気に入ったものを見つけたら「ソースコードを表示」をクリックし、Pineエディタで「コピーを作成」すれば自分のスクリプトとして編集できる。</p>



<p class="wp-block-paragraph">効果的な学習手順はこうだ。まず、自分が普段使っているインジケーター（RSI、MACD、ボリバンなど）の公式ソースコードを読む。TradingViewの内蔵インジケーターはすべてPineスクリプトで書かれており、ソースコードが公開されている。次に、そのコードの一部を変更してみる。期間を変える、色を変える、条件を追加する。小さな変更を繰り返すことで、構文とロジックの両方が身につく。</p>



<p class="wp-block-paragraph">上級者のスクリプトには、<code>group</code>や<code>inline</code>を使った設定パネルの設計、<code>request.security()</code>を使ったMTF実装、<code>array</code>を使った動的データ管理など、独学では気づきにくいテクニックが詰まっている。コードを読んで「なぜこう書いているのか」を考える習慣が、自作スキルを飛躍的に伸ばす。</p>



<h2 class="wp-block-heading">インジケーターからストラテジーへ</h2>



<p class="wp-block-paragraph">シグナルインジケーターが完成したら、次はストラテジー化してバックテストしよう。</p>



<pre class="pine-code">
//@version=6
strategy("EMAクロス戦略", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

fastLen = input.int(12, "短期EMA")
slowLen = input.int(26, "長期EMA")

fast = ta.ema(close, fastLen)
slow = ta.ema(close, slowLen)

if ta.crossover(fast, slow)
    strategy.entry("Long", strategy.long)
if ta.crossunder(fast, slow)
    strategy.close("Long")

plot(fast, "Fast", color.blue)
plot(slow, "Slow", color.red)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>indicator()</code>を<code>strategy()</code>に変えるだけで、バックテスト機能が使えるようになる。<code>strategy.entry()</code>でエントリー、<code>strategy.close()</code>でクローズ。TradingViewの「ストラテジーテスター」タブに勝率・PF・最大ドローダウンなどの成績が表示される。</p>



<p class="wp-block-paragraph">ストラテジーの検証方法を詳しく知りたい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-strategy/">Pineスクリプトで勝てるストラテジーを作る方法｜検証の実際</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-strategy/"><figure class="eyecatch of-cover thum"><img decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/21-1-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/21-1-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/21-1-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/21-1-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/21-1-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/21-1.png 1200w" sizes="(max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトで勝てるストラテジーを作る方法｜検証の実際</div><time class="time__date gf">2026.02.21</time></div></a></div>


<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">TradingViewのインジケーター自作は、Pineエディタを開いてコードを書くだけ。環境構築不要、3行から始められる。</p>



<p class="wp-block-paragraph">まずは本記事のコードをコピペして動かすところから始めよう。EMA3本セット、RSIゾーン、シグナル矢印、ボリバン色変化、MTF、オールインワン、前日高安ピボット。この7つの実用例をベースに、自分のトレードルールに合わせてパラメータや条件をカスタマイズすれば、市販品では手に入らない「自分専用のインジケーター」が完成する。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践ノウハウをもっと見る</a></p>



<p class="wp-block-paragraph"></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/indicator-jisaku/">TradingViewインジケーター自作｜Pineスクリプトで作る手順</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/indicator-jisaku/">TradingViewインジケーター自作｜Pineスクリプトで作る手順</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pineスクリプト×Python連携｜データ分析と自動売買の方法</title>
		<link>https://pinescript-pro.com/pine-script-python/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 06:42:58 +0000</pubDate>
				<category><![CDATA[作る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1319</guid>

					<description><![CDATA[<p>Pineスクリプトでバックテストしたロジックを、実際にPythonで自動売買したい。PythonでAI分析した結果を、TradingViewのチャートに反映したい。 この2つは「pineスクリプト python」で検索す...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-python/">Pineスクリプト×Python連携｜データ分析と自動売買の方法</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-python/">Pineスクリプト×Python連携｜データ分析と自動売買の方法</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pineスクリプトでバックテストしたロジックを、実際にPythonで自動売買したい。PythonでAI分析した結果を、TradingViewのチャートに反映したい。</p>



<p class="wp-block-paragraph">この2つは「pineスクリプト python」で検索する人の典型的な動機だ。しかし、PineスクリプトとPythonは<strong>直接連携する仕組みを持たない</strong>。PineスクリプトはTradingViewのサンドボックス内で動き、外部プログラムを呼び出すAPIもファイル入出力も存在しない。</p>



<p class="wp-block-paragraph">ではどうやって連携するのか。答えは<strong>Webhook</strong>だ。Pineスクリプトのアラートが発火するとTradingViewがHTTPリクエストを送信する。これをPythonサーバーで受信し、取引所APIで注文を出す。この一連の流れが「Pine × Python連携」の正体だ。</p>



<p class="wp-block-paragraph">この記事では、PineスクリプトとPythonの役割分担から、Webhook連携の具体的な実装、Pythonでの価格データ分析、自動売買アーキテクチャまで、実用コード付きで解説する。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践テクニックを見る</a></p>



<h2 class="wp-block-heading">PineスクリプトとPythonの役割分担</h2>



<p class="wp-block-paragraph">PineスクリプトとPythonは、得意な領域がまったく異なる。両方の強みを理解して使い分けることが、連携の第一歩だ。</p>



<p class="wp-block-paragraph"><strong>Pineスクリプトの得意領域</strong> — チャート上でのリアルタイム可視化。テクニカル指標の描画。TradingViewのバックテスト機能を使った高速な戦略検証。アラートによるシグナル通知。コードが少ない（数十行で実用的なインジケーターが完成する）。</p>



<p class="wp-block-paragraph"><strong>Pythonの得意領域</strong> — 大量の過去データを使った統計分析。機械学習・AIによる予測モデル。複数銘柄の一括処理。取引所APIを使った注文執行。データベースやファイルへの保存。外部サービス（Slack、LINE、Discordなど）との連携。</p>



<p class="wp-block-paragraph"><strong>連携が必要になる場面</strong> — Pineスクリプトでシグナルを検出し、Pythonで注文を執行する（自動売買）。Pythonで分析した結果をTradingViewに表示する。Pineスクリプトのバックテスト結果をPythonで統計処理する。</p>



<p class="wp-block-paragraph">つまり、Pineスクリプトは「シグナル検出＋可視化」、Pythonは「データ分析＋注文執行」という分業が基本形だ。</p>



<h2 class="wp-block-heading">構文の比較 — PineからPythonは近い</h2>



<p class="wp-block-paragraph">PineスクリプトはPythonに似た構文を持つ。Python経験者であれば、Pineスクリプトの学習コストは低い。主要な違いを整理する。</p>



<pre class="pine-code">
// === Pineスクリプト ===
//@version=6
indicator("EMAクロス", overlay=true)

length = input.int(20, "期間")
src = input.source(close, "ソース")
ema = ta.ema(src, length)
sma = ta.sma(src, length)

bullish = ta.crossover(ema, sma)
bearish = ta.crossunder(ema, sma)

plot(ema, "EMA", color.blue, 2)
plot(sma, "SMA", color.red, 2)
plotshape(bullish, "Buy", shape.triangleup, location.belowbar, color.green)
</pre>



<pre class="pine-code">
# === Python（pandas + TA-Lib） ===
import pandas as pd
import talib

df = pd.read_csv("price_data.csv")
df["ema"] = talib.EMA(df["close"], timeperiod=20)
df["sma"] = talib.SMA(df["close"], timeperiod=20)

df["bullish"] = (df["ema"] > df["sma"]) & (df["ema"].shift(1) <= df["sma"].shift(1))
df["bearish"] = (df["ema"] < df["sma"]) &#038; (df["ema"].shift(1) >= df["sma"].shift(1))
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">同じEMAクロスのロジックを両方で書いた。Pineスクリプトは<code>ta.crossover()</code>一行で済むが、Pythonでは<code>shift()</code>を使って前のバーと比較する必要がある。一方、Pythonでは結果をDataFrameに保持してフィルタリングや集計を自由にかけられる。</p>



<p class="wp-block-paragraph">主な構文の違いを整理する。変数宣言はPineが<code>length = 20</code>、Pythonも<code>length = 20</code>で同じ。条件分岐はPineが<code>if</code>文（インデントベース）、Pythonも<code>if</code>文。ループはPineが<code>for</code>/<code>while</code>（制限あり）、Pythonは制限なし。配列はPineが<code>array.new&lt;float&gt;()</code>、Pythonは<code>list</code>や<code>numpy.array</code>。データアクセスはPineが<code>close</code>、<code>close[1]</code>、Pythonは<code>df["close"]</code>、<code>df["close"].shift(1)</code>。</p>



<h2 class="wp-block-heading">連携パターン①: Webhook自動売買</h2>



<p class="wp-block-paragraph">最も一般的な連携パターン。Pineスクリプトのアラート → Webhook → Pythonサーバー → 取引所API。</p>



<p class="wp-block-paragraph"><strong>Pineスクリプト側（シグナル発信）:</strong></p>



<pre class="pine-code">
//@version=6
indicator("Webhook Signal", overlay=true)

fast = ta.ema(close, 12)
slow = ta.ema(close, 26)

longSig = ta.crossover(fast, slow)
shortSig = ta.crossunder(fast, slow)

if longSig
    alert('{"action":"buy","symbol":"' + syminfo.ticker + '","price":' + str.tostring(close) + '}', alert.freq_once_per_bar_close)

if shortSig
    alert('{"action":"sell","symbol":"' + syminfo.ticker + '","price":' + str.tostring(close) + '}', alert.freq_once_per_bar_close)

plot(fast, "Fast", color.blue)
plot(slow, "Slow", color.red)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Python側（Webhook受信＋注文執行）:</strong></p>



<pre class="pine-code">
# webhook_server.py
from flask import Flask, request, jsonify
import ccxt  # 暗号資産取引所API、FXならoandapyV20等を使う

app = Flask(__name__)

# 取引所接続（例: Bybit）
exchange = ccxt.bybit({
    "apiKey": "YOUR_API_KEY",
    "secret": "YOUR_SECRET",
})

@app.route("/webhook", methods=["POST"])
def webhook():
    data = request.json
    action = data.get("action")
    symbol = data.get("symbol", "BTC/USDT")

    if action == "buy":
        order = exchange.create_market_buy_order(symbol, 0.001)
        return jsonify({"status": "buy_executed", "order": str(order["id"])})

    elif action == "sell":
        order = exchange.create_market_sell_order(symbol, 0.001)
        return jsonify({"status": "sell_executed", "order": str(order["id"])})

    return jsonify({"status": "no_action"})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Flaskで軽量なWebサーバーを立て、TradingViewからのWebhookを<code>/webhook</code>エンドポイントで受信する。受け取ったJSONの<code>action</code>フィールドに応じて、ccxtライブラリ経由で取引所に注文を出す。</p>



<p class="wp-block-paragraph">TradingViewのアラート作成時に「Webhook URL」にサーバーのアドレス（例: <code>https://your-server.com/webhook</code>）を入力する。Webhook連携にはTradingViewのPro以上のプランが必要だ。</p>



<p class="wp-block-paragraph">本番環境ではFlaskを直接公開するのではなく、ngrokでローカルサーバーを公開するか、AWS Lambda + API GatewayやGoogle Cloud Runなどのサーバーレス環境を使う。</p>



<p class="wp-block-paragraph">自動売買の全体設計を詳しく知りたい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-auto-trade/">Pineスクリプトで自動売買｜TradingView→実口座の連携方法</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-auto-trade/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/22-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/22-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/22-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/22-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/22-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/22.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトで自動売買｜TradingView→実口座の連携方法</div><time class="time__date gf undo">2026.02.24</time></div></a></div>


<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの活用テクニックを探す</a></p>



<h2 class="wp-block-heading">連携パターン②: PythonでTradingViewのデータを取得</h2>



<p class="wp-block-paragraph">TradingViewのチャートデータをPythonで分析したい場合、直接的なAPIは提供されていない。代替手段がいくつかある。</p>



<p class="wp-block-paragraph"><strong>方法A: tvDatafeed ライブラリ（非公式）</strong></p>



<pre class="pine-code">
# tvdatafeed を使ってTradingViewからOHLCVデータを取得
from tvDatafeed import TvDatafeed, Interval

tv = TvDatafeed()  # ログインなしでも一部データ取得可能
df = tv.get_hist(
    symbol="USDJPY",
    exchange="OANDA",
    interval=Interval.in_1_hour,
    n_bars=1000
)

print(df.head())
# datetime, open, high, low, close, volume のDataFrame
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">tvDatafeedはTradingViewの非公式ライブラリで、OHLCVデータをPandasのDataFrameとして取得できる。ただし、非公式のため仕様変更で動かなくなるリスクがある。</p>



<p class="wp-block-paragraph"><strong>方法B: yfinance（Yahoo Finance経由）</strong></p>



<pre class="pine-code">
import yfinance as yf

# 株式データの取得
df = yf.download("AAPL", start="2024-01-01", end="2024-12-31", interval="1d")
print(df.head())
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">株式やETFならyfinanceが安定している。FXや暗号資産の場合は、各取引所のAPIを直接使うのが確実だ。</p>



<p class="wp-block-paragraph"><strong>方法C: 取引所API直接取得（ccxt）</strong></p>



<pre class="pine-code">
import ccxt
import pandas as pd

exchange = ccxt.binance()
ohlcv = exchange.fetch_ohlcv("BTC/USDT", "1h", limit=1000)
df = pd.DataFrame(ohlcv, columns=["timestamp", "open", "high", "low", "close", "volume"])
df["timestamp"] = pd.to_datetime(df["timestamp"], unit="ms")
print(df.head())
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">暗号資産ならccxtが最も安定している。500以上の取引所に対応し、統一されたインターフェースでデータを取得できる。</p>



<h2 class="wp-block-heading">連携パターン③: Pythonで分析→Pineで可視化</h2>



<p class="wp-block-paragraph">Pythonで計算したサポレジラインや機械学習の予測値を、TradingViewのチャートに表示したい場合。直接的な方法はないが、いくつかのアプローチがある。</p>



<p class="wp-block-paragraph"><strong>方法A: カスタムデータをPineスクリプトにハードコードする</strong></p>



<p class="wp-block-paragraph">Pythonで計算した結果を定数としてPineスクリプトに書き込む。</p>



<pre class="pine-code">
# Pythonで計算したサポレジレベル
support_levels = [148.50, 147.20, 145.80]
resistance_levels = [150.30, 151.50, 153.00]

# Pineスクリプトのコードを自動生成
pine_code = '//@version=6\nindicator("ML Levels", overlay=true)\n'
for i, level in enumerate(support_levels):
    pine_code += f'hline({level}, "S{i+1}", color.green, hline.style_dashed)\n'
for i, level in enumerate(resistance_levels):
    pine_code += f'hline({level}, "R{i+1}", color.red, hline.style_dashed)\n'

print(pine_code)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Pythonでコードを自動生成し、TradingViewのPineエディタに貼り付ける。手動だが、分析結果を定期的に更新するには十分だ。</p>



<p class="wp-block-paragraph"><strong>方法B: TradingViewのカスタムデータ（Pine Seeds）</strong></p>



<p class="wp-block-paragraph">TradingViewはPine Seedsという仕組みで外部データの取り込みに対応し始めている。GitHubリポジトリにデータを公開すると、<code>request.seed()</code>でPineスクリプトから読み込める。ただし、個人利用にはやや大がかりな仕組みだ。</p>



<p class="wp-block-paragraph"><strong>方法C: Lightweight Charts（JavaScript）で独自チャートを作る</strong></p>



<p class="wp-block-paragraph">TradingViewが提供するオープンソースのチャートライブラリ「Lightweight Charts」を使えば、PythonのFlaskやDjangoで構築したWebアプリにTradingView風のチャートを埋め込み、自由なデータを表示できる。</p>



<h2 class="wp-block-heading">Pythonでのテクニカル分析ライブラリ</h2>



<p class="wp-block-paragraph">Pineスクリプトでおなじみのテクニカル指標を、Pythonで計算するためのライブラリを整理する。</p>



<p class="wp-block-paragraph"><strong>TA-Lib</strong> — 最も歴史のあるテクニカル分析ライブラリ。150以上の指標に対応。C言語実装で高速。インストールがやや面倒だが、信頼性は最高。<code>talib.EMA()</code>、<code>talib.RSI()</code>、<code>talib.BBANDS()</code>など。</p>



<p class="wp-block-paragraph"><strong>pandas_ta</strong> — Pandas DataFrameのメソッドチェーンで使える。<code>df.ta.ema(length=20)</code>のように書ける。TA-Libより新しく、インストールも簡単。130以上の指標に対応。</p>



<p class="wp-block-paragraph"><strong>ta</strong> — シンプルなPython実装。<code>ta.trend.EMAIndicator(df["close"], window=20).ema_indicator()</code>のように使う。依存関係が少なく軽量。</p>



<pre class="pine-code">
# pandas_ta を使った例
import pandas as pd
import pandas_ta as ta

df = pd.read_csv("price_data.csv")

# Pineスクリプトの ta.ema(close, 20) と同じ
df["ema20"] = ta.ema(df["close"], length=20)

# Pineスクリプトの ta.rsi(close, 14) と同じ
df["rsi"] = ta.rsi(df["close"], length=14)

# Pineスクリプトの ta.bb(close, 20, 2.0) と同じ
bbands = ta.bbands(df["close"], length=20, std=2.0)
df = pd.concat([df, bbands], axis=1)

print(df.tail())
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Pineスクリプトの<code>ta.ema()</code>がPython（pandas_ta）の<code>ta.ema()</code>にそのまま対応するので、ロジックの移植が容易だ。</p>



<h2 class="wp-block-heading">Pythonでバックテスト — backtesting.py</h2>



<p class="wp-block-paragraph">Pineスクリプトのストラテジー機能をPythonで再現するなら、backtesting.pyが最も手軽だ。</p>



<pre class="pine-code">
from backtesting import Backtest, Strategy
from backtesting.lib import crossover
import pandas as pd
import talib

# データ読み込み（Open, High, Low, Close, Volume列が必要）
df = pd.read_csv("USDJPY_1H.csv", index_col="datetime", parse_dates=True)

class EMACross(Strategy):
    fast_period = 12
    slow_period = 26

    def init(self):
        self.fast_ema = self.I(talib.EMA, self.data.Close, self.fast_period)
        self.slow_ema = self.I(talib.EMA, self.data.Close, self.slow_period)

    def next(self):
        if crossover(self.fast_ema, self.slow_ema):
            self.buy()
        elif crossover(self.slow_ema, self.fast_ema):
            self.sell()

bt = Backtest(df, EMACross, cash=1000000, commission=0.001)
stats = bt.run()
print(stats)
bt.plot()
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>crossover()</code>はPineスクリプトの<code>ta.crossover()</code>と同じ機能。<code>bt.optimize()</code>でパラメータの最適化もできる。結果は<code>stats</code>辞書に勝率、PF、最大DD、シャープレシオなどが格納される。</p>



<p class="wp-block-paragraph">Pineスクリプトのバックテストで概ね有効なロジックを見つけ、Pythonのbacktesting.pyでより詳細な統計分析やウォークフォワード検証を行う、という2段階のワークフローが実践的だ。</p>



<p class="wp-block-paragraph">Pineスクリプトの基本構文を学びたい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-kakikata/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトの書き方｜基本構文をコード付きで完全解説</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<h2 class="wp-block-heading">実用アーキテクチャ: Pine × Python 自動売買システム</h2>



<p class="wp-block-paragraph">本番運用を想定した全体アーキテクチャを示す。</p>



<p class="wp-block-paragraph">全体の流れはこうだ。TradingView（Pineスクリプト）がシグナルを検出する。Webhook経由でPythonサーバーに通知する。Pythonがリスク管理（ロットサイズ計算、最大ポジション確認）を行う。取引所APIに注文を送信する。結果をログに記録し、Slack/LINEに通知する。</p>



<pre class="pine-code">
# auto_trader.py - 本番向けの構成
import json
import logging
from flask import Flask, request
from datetime import datetime

app = Flask(__name__)
logging.basicConfig(filename="trade_log.txt", level=logging.INFO)

# リスク管理パラメータ
MAX_POSITION = 3  # 最大同時ポジション数
RISK_PER_TRADE = 0.02  # 1トレードあたりのリスク（資金の2%）

current_positions = []

def calculate_lot_size(balance, risk_pct, sl_pips):
    """ロットサイズを計算"""
    risk_amount = balance * risk_pct
    lot_size = risk_amount / (sl_pips * 10)  # 1pip = 10通貨（ミニロット）
    return round(lot_size, 2)

def send_notification(message):
    """Slack/LINE等への通知（実装は環境に依存）"""
    logging.info(f"[NOTIFY] {message}")

@app.route("/webhook", methods=["POST"])
def webhook():
    data = request.json
    timestamp = datetime.now().isoformat()

    action = data.get("action")
    symbol = data.get("symbol")
    price = float(data.get("price", 0))

    # リスク管理チェック
    if action == "buy" and len(current_positions) >= MAX_POSITION:
        msg = f"{timestamp} | REJECTED: max positions reached"
        logging.warning(msg)
        return {"status": "rejected", "reason": "max_positions"}

    # 注文執行（ここに取引所APIのコードを入れる）
    logging.info(f"{timestamp} | {action.upper()} {symbol} @ {price}")
    send_notification(f"{action.upper()} {symbol} @ {price}")

    return {"status": "executed", "action": action, "symbol": symbol}

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, ssl_context="adhoc")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">本番運用で重要なのは<strong>リスク管理層</strong>だ。Pineスクリプト側にはリスク管理のロジックを入れず、Python側で「最大ポジション数」「1トレードのリスク比率」「ロットサイズ計算」を処理する。これにより、Pineスクリプトのロジック変更がリスク管理に影響しない。</p>



<h2 class="wp-block-heading">セキュリティと注意点</h2>



<p class="wp-block-paragraph">Webhook連携による自動売買にはセキュリティリスクが伴う。以下の対策は必須だ。</p>



<p class="wp-block-paragraph"><strong>Webhookの認証</strong> — TradingViewのWebhookにはカスタムヘッダーがない。代わりに、アラートメッセージにシークレットトークンを含め、Python側で検証する。</p>



<pre class="pine-code">
WEBHOOK_SECRET = "your-secret-token-here"

@app.route("/webhook", methods=["POST"])
def webhook():
    data = request.json
    if data.get("secret") != WEBHOOK_SECRET:
        return {"status": "unauthorized"}, 403
    # 以降の処理...
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Pineスクリプト側のalertメッセージに<code>"secret":"your-secret-token-here"</code>を含める。</p>



<p class="wp-block-paragraph"><strong>HTTPS必須</strong> — Webhookの通信は必ずHTTPSで暗号化する。ngrokやCloudflare Tunnelを使えば、ローカル環境でもHTTPSを簡単に実現できる。</p>



<p class="wp-block-paragraph"><strong>APIキーの管理</strong> — 取引所のAPIキーは環境変数で管理し、コードにハードコードしない。<code>os.environ["API_KEY"]</code>で読み込む。</p>



<p class="wp-block-paragraph"><strong>注文の二重実行防止</strong> — ネットワーク遅延やリトライでWebhookが2回届く可能性がある。注文IDやタイムスタンプで重複チェックを入れる。</p>



<p class="wp-block-paragraph"><strong>テスト環境の分離</strong> — 取引所のテストネット（Sandbox）で十分にテストしてから、本番口座で運用を開始する。</p>



<h2 class="wp-block-heading">Pineスクリプトだけで十分な場面</h2>



<p class="wp-block-paragraph">すべてをPython連携にする必要はない。Pineスクリプト単体で十分な場面も多い。</p>



<p class="wp-block-paragraph">テクニカル指標の可視化 — Pineスクリプト単体で完結する。Pythonを持ち出す必要はない。</p>



<p class="wp-block-paragraph">シンプルなアラート通知 — TradingViewのアラート機能（アプリ通知、メール）で十分なら、Webhook + Pythonは不要。</p>



<p class="wp-block-paragraph">バックテスト — Pineスクリプトの<code>strategy()</code>機能で基本的なバックテストは可能。統計的な深い分析が不要ならPython不要。</p>



<p class="wp-block-paragraph">ロジックの検証 — 「このロジック、効くのか？」の初期検証はPineスクリプトのバックテストが最も手軽。</p>



<p class="wp-block-paragraph">Python連携が本当に必要になるのは、「実口座で自動注文を出したい」「機械学習を使いたい」「大量の銘柄を一括分析したい」「独自のリスク管理ルールを適用したい」といった、Pineスクリプトの枠を超えた要件がある場合だ。</p>



<h2 class="wp-block-heading">よくある質問</h2>



<p class="wp-block-paragraph"><strong>Q: PineスクリプトとPython、どちらから学ぶべき？</strong></p>



<p class="wp-block-paragraph">トレードのシグナル開発が目的ならPineスクリプトから。データ分析やプログラミング全般が目的ならPythonから。すでにPython経験があるなら、PineスクリプトはPythonに構文が似ているのですぐに習得できる。</p>



<p class="wp-block-paragraph"><strong>Q: PineスクリプトのロジックをPythonに変換できる？</strong></p>



<p class="wp-block-paragraph">できる。<code>ta.ema()</code> → <code>talib.EMA()</code>、<code>ta.crossover()</code> → 前後バーの比較、<code>ta.rsi()</code> → <code>talib.RSI()</code>のように、ほぼ1対1で対応する関数がある。ただし、Pineスクリプトのバーごとのループ実行モデルと、PythonのDataFrame一括処理モデルは根本的に異なるため、複雑なロジック（var変数を多用するもの）の移植は手間がかかる。</p>



<p class="wp-block-paragraph"><strong>Q: TradingViewを使わずにPythonだけで完結できる？</strong></p>



<p class="wp-block-paragraph">できる。ccxtでデータ取得 → pandas_taで指標計算 → backtesting.pyでバックテスト → ccxtで注文執行。ただし、リアルタイムチャートの可視化はTradingViewが圧倒的に優れている。「分析はPython、可視化はTradingView」の使い分けが効率的だ。</p>



<p class="wp-block-paragraph"><strong>Q: Webhook以外の連携方法はある？</strong></p>



<p class="wp-block-paragraph">TradingViewのメールアラートを受信してPythonで処理する方法もある（Gmail API経由）。ただしWebhookに比べて遅延が大きく、リアルタイム性に欠ける。本格的な自動売買にはWebhookが推奨される。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">PineスクリプトとPythonは直接通信できない。連携の基本はWebhookだ。Pineスクリプトでシグナルを検出し、alertでJSON文字列を送信。PythonのFlaskサーバーで受信し、取引所APIで注文を執行する。</p>



<p class="wp-block-paragraph">役割分担はこうだ。Pineスクリプトが「リアルタイム可視化＋シグナル検出＋バックテスト」、Pythonが「データ分析＋リスク管理＋注文執行」。両方の強みを活かすことで、TradingViewの使いやすさとPythonの柔軟性を同時に手に入れられる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践ノウハウをもっと見る</a></p>



<p class="wp-block-paragraph"></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-python/">Pineスクリプト×Python連携｜データ分析と自動売買の方法</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-python/">Pineスクリプト×Python連携｜データ分析と自動売買の方法</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pineスクリプトのinput関数完全解説｜ユーザー設定パネルの作り方</title>
		<link>https://pinescript-pro.com/pine-script-function/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 05:02:50 +0000</pubDate>
				<category><![CDATA[作る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1316</guid>

					<description><![CDATA[<p>Pineスクリプトでインジケーターを作ると、パラメータの変更のたびにコードを書き換えることになる。EMAの期間を20から50に変えたいだけなのに、エディタを開いてコードを修正して再保存。これでは使い物にならない。 inp...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-function/">Pineスクリプトのinput関数完全解説｜ユーザー設定パネルの作り方</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-function/">Pineスクリプトのinput関数完全解説｜ユーザー設定パネルの作り方</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pineスクリプトでインジケーターを作ると、パラメータの変更のたびにコードを書き換えることになる。EMAの期間を20から50に変えたいだけなのに、エディタを開いてコードを修正して再保存。これでは使い物にならない。</p>



<p class="wp-block-paragraph"><code>input</code>関数を使えば、TradingViewの設定パネルにパラメータを表示し、UIからワンクリックで変更できるようになる。期間、色、ソース、時間足、ON/OFFスイッチ。あらゆるパラメータをユーザーが自由にカスタマイズできる。</p>



<p class="wp-block-paragraph">ただし、v6では<code>input()</code>という汎用関数ではなく、<strong><code>input.int()</code>、<code>input.float()</code>、<code>input.bool()</code>のように型別の専用関数</strong>を使うのが標準だ。v4/v5時代の<code>input()</code>とは書き方が変わっている。</p>



<p class="wp-block-paragraph">この記事では、v6のinput関数を型別にすべて解説し、<code>group</code>・<code>inline</code>・<code>tooltip</code>を使った設定パネルの設計まで、実用的なコード付きで網羅する。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践テクニックを見る</a></p>



<h2 class="wp-block-heading">input関数の基本 — なぜ型別関数を使うのか</h2>



<p class="wp-block-paragraph">v4時代は<code>input(defval=12, type=input.integer)</code>のように1つの<code>input()</code>関数で型を指定していた。v6ではこの書き方は非推奨になり、<strong>型ごとに専用の関数</strong>が用意されている。</p>



<pre class="pine-code">
//@version=6
indicator("input基本", overlay=true)

// v6の書き方（推奨）
length = input.int(20, "EMA期間")
src = input.source(close, "ソース")
showLine = input.bool(true, "ライン表示")

// v4の書き方（非推奨・互換用）
// length = input(20, type=input.integer)

plot(showLine ? ta.ema(src, length) : na, "EMA", color.blue, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">型別関数を使うメリットは3つ。コードの可読性が上がる。型の不一致エラーをコンパイル時に検出できる。各型に特化した引数（<code>minval</code>、<code>maxval</code>、<code>options</code>など）が使える。</p>



<p class="wp-block-paragraph">v6で使えるinput関数の一覧はこうだ。<code>input.int()</code> — 整数。<code>input.float()</code> — 小数。<code>input.bool()</code> — 真偽値。<code>input.string()</code> — 文字列。<code>input.source()</code> — 価格ソース。<code>input.timeframe()</code> — 時間足。<code>input.color()</code> — 色。<code>input.time()</code> — 日時。<code>input.price()</code> — 価格（ドラッグ可能）。<code>input.text_area()</code> — 複数行テキスト。</p>



<h2 class="wp-block-heading">input.int() — 整数の入力</h2>



<p class="wp-block-paragraph">最も使用頻度が高いinput関数。移動平均の期間、RSIの閾値、バーの本数など、整数パラメータに使う。</p>



<pre class="pine-code">
//@version=6
indicator("input.int", overlay=true)

// 基本
length = input.int(20, "期間")

// 範囲制限（minval/maxval）
rsiLen = input.int(14, "RSI期間", minval=1, maxval=200)

// ステップ値（スライダーのような操作感）
thickness = input.int(2, "線の太さ", minval=1, maxval=5, step=1)

plot(ta.sma(close, length), "SMA", color.blue, thickness)

</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>主要引数:</strong></p>



<p class="wp-block-paragraph"><code>defval</code> — デフォルト値（第1引数）。<code>title</code> — 設定パネルに表示される名前（第2引数）。<code>minval</code> — 最小値。これ未満の値を入力するとエラーになる。<code>maxval</code> — 最大値。<code>step</code> — 増減ボタンのステップ幅。<code>tooltip</code> — ホバー時に表示されるヒントテキスト。<code>group</code> — 設定パネル内のグループ名（後述）。</p>



<p class="wp-block-paragraph"><code>minval</code>と<code>maxval</code>は<strong>必ず設定すべき</strong>だ。期間に0やマイナス値を入れるとランタイムエラーになる。<code>minval=1</code>を付けるだけで防げる。</p>



<h2 class="wp-block-heading">input.float() — 小数の入力</h2>



<p class="wp-block-paragraph">ATRの倍率、フィボナッチ比率、損益比率など、小数を扱うパラメータに使う。</p>



<pre class="pine-code">
//@version=6
indicator("input.float", overlay=true)

atrMulti = input.float(1.5, "ATR倍率", minval=0.1, maxval=10.0, step=0.1)
atrLen = input.int(14, "ATR期間", minval=1)

atrValue = ta.atr(atrLen)
upper = close + atrValue * atrMulti
lower = close - atrValue * atrMulti

plot(upper, "上限", color.red)
plot(lower, "下限", color.green)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>step=0.1</code>を指定すると、設定パネルの上下ボタンで0.1刻みに値を変更できる。小数の入力を<code>input.int()</code>で受けるとコンパイルエラーになるので、必ず<code>input.float()</code>を使うこと。</p>



<h2 class="wp-block-heading">input.bool() — ON/OFFスイッチ</h2>



<p class="wp-block-paragraph">チェックボックスとして表示される。機能のON/OFF、表示の切り替えに使う。</p>



<pre class="pine-code">
//@version=6
indicator("input.bool", overlay=true)

showSMA = input.bool(true, "SMA表示")
showEMA = input.bool(true, "EMA表示")
fillBetween = input.bool(false, "間を塗りつぶす")
length = input.int(20, "期間")

smaLine = ta.sma(close, length)
emaLine = ta.ema(close, length)

p1 = plot(showSMA ? smaLine : na, "SMA", color.blue, 2)
p2 = plot(showEMA ? emaLine : na, "EMA", color.red, 2)

fill(p1, p2, color=fillBetween ? color.new(color.purple, 85) : na)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>input.bool()</code>の戻り値は<code>true</code>または<code>false</code>。三項演算子<code>condition ? A : B</code>と組み合わせて、描画の表示/非表示を切り替えるのが定番パターンだ。</p>



<h2 class="wp-block-heading">input.string() — 文字列・ドロップダウン選択</h2>



<p class="wp-block-paragraph"><code>options</code>引数を付けるとドロップダウンメニューになる。MA種類の切り替えなどに使う。</p>



<pre class="pine-code">
//@version=6
indicator("input.string", overlay=true)

maType = input.string("EMA", "MA種類", options=["SMA", "EMA", "WMA", "VWMA", "RMA"])
length = input.int(20, "期間")

ma = switch maType
    "SMA"  => ta.sma(close, length)
    "EMA"  => ta.ema(close, length)
    "WMA"  => ta.wma(close, length)
    "VWMA" => ta.vwma(close, length)
    "RMA"  => ta.rma(close, length)
    => ta.ema(close, length)

plot(ma, maType, color.blue, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>options</code>を省略すると自由入力のテキストフィールドになるが、ユーザーの入力ミスを防ぐためにドロップダウン（<code>options</code>指定）を使うのが推奨だ。<code>switch</code>文と組み合わせると、選択された文字列に応じて処理を分岐できる。</p>



<h2 class="wp-block-heading">input.source() — 価格ソースの選択</h2>



<p class="wp-block-paragraph"><code>close</code>、<code>open</code>、<code>high</code>、<code>low</code>、<code>hl2</code>、<code>hlc3</code>、<code>ohlc4</code>などの価格ソースをユーザーが選択できる。さらに、チャートに表示されている他のインジケーターの出力も選択肢に含まれる。</p>



<pre class="pine-code">
//@version=6
indicator("input.source", overlay=true)

src = input.source(close, "ソース")
length = input.int(14, "期間")

plot(ta.rsi(src, length))
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>input.source()</code>のドロップダウンには、他のインジケーターの<code>plot()</code>出力も表示される。つまり、インジケーターAの出力をインジケーターBの入力として使える。これがPineスクリプトの「インジケーターonインジケーター」機能だ。</p>



<h2 class="wp-block-heading">input.timeframe() — 時間足の選択</h2>



<p class="wp-block-paragraph">マルチタイムフレーム（MTF）インジケーターで上位足を選択させるときに使う。</p>



<pre class="pine-code">
//@version=6
indicator("input.timeframe", overlay=true)

tf = input.timeframe("D", "上位足")
length = input.int(20, "期間")

htfMA = request.security(syminfo.tickerid, tf, ta.ema(close, length))
plot(htfMA, "HTF EMA", color.orange, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ドロップダウンに表示される時間足は、<code>"1"</code>（1分）、<code>"5"</code>（5分）、<code>"15"</code>（15分）、<code>"60"</code>（1時間）、<code>"240"</code>（4時間）、<code>"D"</code>（日足）、<code>"W"</code>（週足）、<code>"M"</code>（月足）など。空文字<code>""</code>を指定すると「チャートの時間足と同じ」という意味になる。</p>



<h2 class="wp-block-heading">input.color() — 色の選択</h2>



<p class="wp-block-paragraph">カラーピッカーとして表示される。ラインやエリアの色をユーザーがカスタマイズできる。</p>



<pre class="pine-code">
//@version=6
indicator("input.color", overlay=true)

bullColor = input.color(color.green, "上昇色")
bearColor = input.color(color.red, "下降色")
length = input.int(20, "期間")

ma = ta.ema(close, length)
maColor = close > ma ? bullColor : bearColor

plot(ma, "EMA", maColor, 2)

</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">カラーピッカーでは色だけでなく透明度も設定できる。<code>color.new(color.red, 50)</code>のようにコードで透明度を固定することもできるが、<code>input.color()</code>を使えばユーザーが自由に調整できる。</p>



<h2 class="wp-block-heading">input.time() — 日時の選択</h2>



<p class="wp-block-paragraph">カレンダーUIで特定の日時を選択できる。バックテストの開始日・終了日の指定に使う。</p>



<pre class="pine-code">
//@version=6
strategy("input.time", overlay=true)

startDate = input.time(timestamp("2024-01-01"), "開始日")
endDate = input.time(timestamp("2024-12-31"), "終了日")
inRange = time >= startDate and time <= endDate

fast = ta.ema(close, 12)
slow = ta.ema(close, 26)

if inRange and ta.crossover(fast, slow)
    strategy.entry("Long", strategy.long)
if inRange and ta.crossunder(fast, slow)
    strategy.close("Long")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>timestamp()</code>でデフォルト値をISO形式の文字列で指定する。設定パネルにはカレンダーUIが表示され、マウスで日付を選択できる。</p>



<h2 class="wp-block-heading">input.price() — ドラッグ可能な価格ライン</h2>



<p class="wp-block-paragraph">設定パネルに値を入力できるだけでなく、<strong>チャート上でラインをドラッグして価格を変更できる</strong>。TP/SLラインの設定に便利だ。</p>



<pre class="pine-code">
//@version=6
indicator("input.price", overlay=true)

tp = input.price(defval=0, title="利確ライン", confirm=true)
sl = input.price(defval=0, title="損切ライン", confirm=true)

plot(tp != 0 ? tp : na, "TP", color.green, 2, plot.style_linebr)
plot(sl != 0 ? sl : na, "SL", color.red, 2, plot.style_linebr)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>confirm=true</code>を付けると、インジケーターをチャートに追加する際にチャートをクリックして価格を指定するモードになる。ユーザーがクリックした位置の価格が初期値として設定される。</p>



<h2 class="wp-block-heading">input.text_area() — 複数行テキスト</h2>



<p class="wp-block-paragraph">Webhook用のJSONテンプレートや、カスタムメッセージの入力に使う。</p>



<pre class="pine-code">
//@version=6
indicator("input.text_area", overlay=true)
fast = ta.ema(close, 12)
slow = ta.ema(close, 26)

msgTemplate = input.text_area('{"action":"buy","price":{{close}}}', "Webhookメッセージ")

if ta.crossover(fast, slow)
    alert(msgTemplate, alert.freq_once_per_bar_close)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">通常の<code>input.string()</code>は1行テキストだが、<code>input.text_area()</code>は複数行のテキストを入力できる。改行を含むJSON文字列やマルチライン文字列に使う。</p>



<p class="wp-block-paragraph">公式リファレンスで各input関数の全引数を確認したい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-reference/">Pineスクリプトリファレンスの読み方｜公式マニュアルを使いこなすコツ</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-reference/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/6-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/6-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/6-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/6-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/6-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/6-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトリファレンスの読み方｜公式マニュアルを使いこなすコツ</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの全テクニックを探す</a></p>



<h2 class="wp-block-heading">group — 設定パネルをセクション分けする</h2>



<p class="wp-block-paragraph">入力項目が10個を超えると、設定パネルが縦に長くなり見づらくなる。<code>group</code>引数でセクション分けすると、折りたたみ可能なグループに整理できる。</p>



<pre class="pine-code">
//@version=6
indicator("groupの例", overlay=true)

// EMAグループ
showEMA = input.bool(true, "表示", group="EMA設定")
emaLen = input.int(20, "期間", minval=1, group="EMA設定")
emaSrc = input.source(close, "ソース", group="EMA設定")
emaColor = input.color(color.blue, "色", group="EMA設定")

// BBグループ
showBB = input.bool(true, "表示", group="ボリンジャーバンド設定")
bbLen = input.int(20, "期間", minval=1, group="ボリンジャーバンド設定")
bbMult = input.float(2.0, "偏差", minval=0.1, step=0.1, group="ボリンジャーバンド設定")

// EMA描画
ema = ta.ema(emaSrc, emaLen)
plot(showEMA ? ema : na, "EMA", emaColor, 2)

// BB描画
[bbMid, bbUp, bbLow] = ta.bb(close, bbLen, bbMult)
plot(showBB ? bbUp : na, "BB Upper", color.gray)
plot(showBB ? bbMid : na, "BB Mid", color.gray, 1, plot.style_stepline)
plot(showBB ? bbLow : na, "BB Lower", color.gray)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">同じ<code>group</code>文字列を持つinputが1つのセクションにまとまる。セクション名が設定パネルに見出しとして表示され、クリックで折りたたみ/展開できる。</p>



<p class="wp-block-paragraph"><code>group</code>の命名ルールとして、機能単位でグループ化するのが見やすい。「EMA設定」「RSI設定」「表示設定」「アラート設定」のように分けるとプロ品質のUIになる。</p>



<h2 class="wp-block-heading">inline — 複数の入力を1行にまとめる</h2>



<p class="wp-block-paragraph">色と有効/無効のスイッチを横並びにしたり、期間とソースを1行に収めたりするのに使う。</p>



<pre class="pine-code">
//@version=6
indicator("inlineの例", overlay=true)

// 色とON/OFFスイッチを1行にまとめる
showMA1 = input.bool(true, "MA1", inline="ma1", group="移動平均線")
ma1Color = input.color(color.blue, "", inline="ma1", group="移動平均線")
ma1Len = input.int(20, "期間", inline="ma1", group="移動平均線")

showMA2 = input.bool(true, "MA2", inline="ma2", group="移動平均線")
ma2Color = input.color(color.red, "", inline="ma2", group="移動平均線")
ma2Len = input.int(50, "期間", inline="ma2", group="移動平均線")

showMA3 = input.bool(false, "MA3", inline="ma3", group="移動平均線")
ma3Color = input.color(color.orange, "", inline="ma3", group="移動平均線")
ma3Len = input.int(200, "期間", inline="ma3", group="移動平均線")

plot(showMA1 ? ta.ema(close, ma1Len) : na, "MA1", ma1Color, 2)
plot(showMA2 ? ta.ema(close, ma2Len) : na, "MA2", ma2Color, 2)
plot(showMA3 ? ta.ema(close, ma3Len) : na, "MA3", ma3Color, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">同じ<code>inline</code>文字列を持つinputが横一列に並ぶ。2番目以降のinputの<code>title</code>を空文字<code>""</code>にすると、ラベルなしでコンパクトに表示される。</p>



<p class="wp-block-paragraph">上の例では、1行に「チェックボックス → カラーピッカー → 期間入力」が並ぶ。TradingView公式のインジケーターと同じ見た目になる。</p>



<h2 class="wp-block-heading">tooltip — ホバーヒントを付ける</h2>



<p class="wp-block-paragraph">設定項目にマウスを重ねたときにヒントテキストを表示する。パラメータの意味やおすすめ値を補足できる。</p>



<pre class="pine-code">
//@version=6
indicator("tooltipの例", overlay=true)

length = input.int(20, "EMA期間", minval=1, maxval=500,
    tooltip="短期: 5-20、中期: 20-50、長期: 50-200 が一般的です")

atrMulti = input.float(1.5, "ATR倍率", minval=0.1, step=0.1,
    tooltip="1.0=ATR幅、1.5=ATR×1.5。大きいほどバンドが広がります")

maType = input.string("EMA", "MA種類", options=["SMA", "EMA", "WMA"],
    tooltip="SMA=単純移動平均、EMA=指数移動平均、WMA=加重移動平均")

ma = switch maType
    "SMA" => ta.sma(close, length)
    "EMA" => ta.ema(close, length)
    "WMA" => ta.wma(close, length)
    => ta.ema(close, length)

plot(ma, maType, color.blue, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>tooltip</code>は日本語で書ける。スクリプトを公開する場合や、自分以外のトレーダーが使う場合に、パラメータの意味を説明するのに役立つ。</p>



<h2 class="wp-block-heading">confirm — チャートクリックで初期値を設定する</h2>



<p class="wp-block-paragraph"><code>confirm=true</code>を付けると、インジケーターをチャートに追加する際に、チャート上をクリックして初期値を設定するモードになる。</p>



<pre class="pine-code">
//@version=6
indicator("confirmの例", overlay=true)

// チャートクリックで価格を指定
entryPrice = input.price(defval=0, title="エントリー価格", confirm=true)
tpPrice = input.price(defval=0, title="利確価格", confirm=true)
slPrice = input.price(defval=0, title="損切価格", confirm=true)

// ライン描画
plot(entryPrice != 0 ? entryPrice : na, "Entry", color.white, 2, plot.style_linebr)
plot(tpPrice != 0 ? tpPrice : na, "TP", color.green, 2, plot.style_linebr)
plot(slPrice != 0 ? slPrice : na, "SL", color.red, 2, plot.style_linebr)

// 損益比を計算
if barstate.islast and entryPrice != 0 and tpPrice != 0 and slPrice != 0
    rr = math.abs(tpPrice - entryPrice) / math.abs(entryPrice - slPrice)
    var label rrLabel = na
    label.delete(rrLabel)
    rrLabel := label.new(bar_index + 5, entryPrice, "RR: " + str.tostring(rr, "#.##"), style=label.style_label_left, color=color.new(color.white, 80), textcolor=color.white)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>input.price()</code>と<code>confirm=true</code>の組み合わせは、手動でTP/SLラインを引くツールに最適だ。<code>input.time()</code>に<code>confirm=true</code>を付ければ、チャートのバーをクリックして日時を指定することもできる。</p>



<h2 class="wp-block-heading">実用例: プロ品質の設定パネル</h2>



<p class="wp-block-paragraph">ここまでの知識を組み合わせた、実用レベルのインジケーター設定パネルの実装例。</p>



<pre class="pine-code">
//@version=6
indicator("プロ設定パネル", overlay=true)

// ============ MA設定 ============
maType = input.string("EMA", "種類", options=["SMA", "EMA", "WMA", "VWMA"], group="移動平均線")
maLen = input.int(20, "期間", minval=1, maxval=500, group="移動平均線", tooltip="推奨: 短期5-20, 中期20-50, 長期50-200")
maSrc = input.source(close, "ソース", group="移動平均線")
maColor = input.color(color.blue, "色", group="移動平均線")
maWidth = input.int(2, "太さ", minval=1, maxval=5, group="移動平均線")

// ============ RSI設定 ============
showRSI = input.bool(false, "RSI背景色を表示", group="RSI")
rsiLen = input.int(14, "RSI期間", minval=1, group="RSI")
rsiOB = input.int(70, "買われすぎ", minval=50, maxval=100, group="RSI")
rsiOS = input.int(30, "売られすぎ", minval=0, maxval=50, group="RSI")

// ============ アラート設定 ============
alertOnCross = input.bool(true, "MA×価格クロスでアラート", group="アラート")
alertOnRSI = input.bool(false, "RSI過熱でアラート", group="アラート")

// ============ 計算 ============
ma = switch maType
    "SMA"  => ta.sma(maSrc, maLen)
    "EMA"  => ta.ema(maSrc, maLen)
    "WMA"  => ta.wma(maSrc, maLen)
    "VWMA" => ta.vwma(maSrc, maLen)
    => ta.ema(maSrc, maLen)

rsi = ta.rsi(close, rsiLen)

// ============ 描画 ============
plot(ma, maType + "(" + str.tostring(maLen) + ")", maColor, maWidth)

// RSI背景色
rsiBG = showRSI and rsi > rsiOB ? color.new(color.red, 90) : showRSI and rsi < rsiOS ? color.new(color.green, 90) : na
bgcolor(rsiBG)

// ============ アラート ============
crossUp = ta.crossover(close, ma)
crossDown = ta.crossunder(close, ma)

if alertOnCross and crossUp
    alert(syminfo.ticker + " 価格がMA上抜け", alert.freq_once_per_bar_close)
if alertOnCross and crossDown
    alert(syminfo.ticker + " 価格がMA下抜け", alert.freq_once_per_bar_close)
if alertOnRSI and ta.crossover(rsi, rsiOB)
    alert(syminfo.ticker + " RSI買われすぎゾーン突入", alert.freq_once_per_bar_close)

alertcondition(crossUp, "MA上抜け", "{{ticker}}: 価格がMA上抜け")
alertcondition(crossDown, "MA下抜け", "{{ticker}}: 価格がMA下抜け")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">設定パネルには「移動平均線」「RSI」「アラート」の3つのグループが表示される。各グループは折りたたみ可能で、必要なセクションだけを展開して設定できる。</p>



<p class="wp-block-paragraph">Pineスクリプトの基本構文から復習したい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-kakikata/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトの書き方｜基本構文をコード付きで完全解説</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<h2 class="wp-block-heading">input関数一覧表</h2>



<p class="wp-block-paragraph">v6で使えるinput関数の引数を一覧でまとめる。</p>



<p class="wp-block-paragraph"><code>input.int(defval, title, minval, maxval, step, tooltip, inline, group, confirm)</code> — 整数。設定パネルに数値入力フィールドを表示。</p>



<p class="wp-block-paragraph"><code>input.float(defval, title, minval, maxval, step, tooltip, inline, group, confirm)</code> — 小数。数値入力フィールド。<code>step</code>で小数点以下の刻みを制御。</p>



<p class="wp-block-paragraph"><code>input.bool(defval, title, tooltip, inline, group, confirm)</code> — 真偽値。チェックボックスを表示。</p>



<p class="wp-block-paragraph"><code>input.string(defval, title, options, tooltip, inline, group, confirm)</code> — 文字列。<code>options</code>指定でドロップダウン、省略でテキストフィールド。</p>



<p class="wp-block-paragraph"><code>input.source(defval, title, tooltip, inline, group)</code> — 価格ソース。ドロップダウンにclose, open, high, low, hl2, hlc3, ohlc4と他インジケーターの出力が表示。</p>



<p class="wp-block-paragraph"><code>input.timeframe(defval, title, tooltip, inline, group)</code> — 時間足。ドロップダウンに時間足一覧を表示。空文字<code>""</code>で「チャートと同じ」。</p>



<p class="wp-block-paragraph"><code>input.color(defval, title, tooltip, inline, group)</code> — 色。カラーピッカー（透明度調整付き）を表示。</p>



<p class="wp-block-paragraph"><code>input.time(defval, title, tooltip, inline, group, confirm)</code> — 日時。カレンダーUIを表示。<code>timestamp()</code>でデフォルト値を指定。</p>



<p class="wp-block-paragraph"><code>input.price(defval, title, tooltip, inline, group, confirm)</code> — 価格。<code>confirm=true</code>でチャートクリック入力対応。</p>



<p class="wp-block-paragraph"><code>input.text_area(defval, title, tooltip, group)</code> — 複数行テキスト。テキストエリアを表示。</p>



<h2 class="wp-block-heading">よくあるミスと対処法</h2>



<p class="wp-block-paragraph"><strong>ミス①: input.int()に小数を渡してエラー</strong>。<code>input.int(1.5, "倍率")</code>はコンパイルエラー。小数を使うなら<code>input.float()</code>を使う。</p>



<p class="wp-block-paragraph"><strong>ミス②: minvalを設定せず期間に0が入る</strong>。<code>ta.sma(close, 0)</code>はランタイムエラー。<code>input.int()</code>には必ず<code>minval=1</code>を付ける。</p>



<p class="wp-block-paragraph"><strong>ミス③: groupの文字列が微妙に異なり別グループになる</strong>。<code>group="EMA設定"</code>と<code>group="EMA 設定"</code>（半角スペース）は別グループとして認識される。文字列を定数に切り出すのが安全だ。</p>



<p class="wp-block-paragraph"><strong>ミス④: inlineを使ったのに横並びにならない</strong>。<code>inline</code>文字列が完全一致しないと同じ行にまとまらない。<code>group</code>も同じでなければならない。</p>



<p class="wp-block-paragraph"><strong>ミス⑤: input()の戻り値をグローバルスコープ以外で使おうとする</strong>。<code>input</code>関数はスクリプトのトップレベル（グローバルスコープ）でのみ呼び出せる。<code>if</code>文やローカルスコープ内では使えない。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">v6のinput関数は型別に10種類。<code>input.int()</code>、<code>input.float()</code>、<code>input.bool()</code>、<code>input.string()</code>の4つが基本で、ここに<code>input.source()</code>、<code>input.timeframe()</code>、<code>input.color()</code>を加えれば大半のインジケーターに対応できる。</p>



<p class="wp-block-paragraph">設定パネルの見た目は<code>group</code>（セクション分け）、<code>inline</code>（横並び）、<code>tooltip</code>（ヒント）の3つで制御する。この3つを使いこなせば、TradingView公式インジケーターと同等のプロ品質UIを実現できる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践ノウハウをもっと見る</a></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-function/">Pineスクリプトのinput関数完全解説｜ユーザー設定パネルの作り方</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-function/">Pineスクリプトのinput関数完全解説｜ユーザー設定パネルの作り方</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pineスクリプトで水平線・ラインを描画する方法【line.new】</title>
		<link>https://pinescript-pro.com/pine-script-draw/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 04:33:03 +0000</pubDate>
				<category><![CDATA[作る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1313</guid>

					<description><![CDATA[<p>Pineスクリプトでチャートに水平線を引きたい。サポレジラインを自動表示したい。トレンドラインを動的に描画したい。 しかし、いざ書こうとすると選択肢が3つ出てくる。hline()、plot()、line.new()。どれ...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-draw/">Pineスクリプトで水平線・ラインを描画する方法【line.new】</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-draw/">Pineスクリプトで水平線・ラインを描画する方法【line.new】</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pineスクリプトでチャートに水平線を引きたい。サポレジラインを自動表示したい。トレンドラインを動的に描画したい。</p>



<p class="wp-block-paragraph">しかし、いざ書こうとすると選択肢が3つ出てくる。<code>hline()</code>、<code>plot()</code>、<code>line.new()</code>。どれを使えば目的の線が引けるのか、初めてだと迷う。</p>



<p class="wp-block-paragraph">結論はこうだ。固定値の水平線なら<code>hline()</code>。計算値の水平線なら<code>plot()</code>。任意の2点を結ぶ線（水平線・斜め線・縦線すべて）なら<code>line.new()</code>。この3つの使い分けを理解すれば、あらゆるライン描画に対応できる。</p>



<p class="wp-block-paragraph">この記事では、3つの関数の違いと使い分けから、前日高安ライン、ピボットポイント、ラウンドナンバーといった実用的なインジケーターまで、v6対応のコード付きで解説する。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践テクニックを見る</a></p>



<h2 class="wp-block-heading">3つの描画関数の使い分け</h2>



<p class="wp-block-paragraph">Pineスクリプトで線を引く関数は3つある。それぞれ得意な場面が異なる。</p>



<p class="wp-block-paragraph"><strong>hline()</strong> — 固定値の水平線を引く専用関数。引数に定数のみ受け付ける。RSIの70/30ライン、ゼロラインなど、値が変わらない水平線に使う。<code>fill()</code>と組み合わせてゾーンを塗りつぶせるのが特徴。</p>



<p class="wp-block-paragraph"><strong>plot()</strong> — シリーズ（バーごとに変わる値）を折れ線で描画する関数。SMAやEMAのようにバーごとに値が変わるラインに使う。<code>plot.style_stepline</code>を指定すれば階段状の水平ラインとしても使える。</p>



<p class="wp-block-paragraph"><strong>line.new()</strong> — チャート上の任意の2点を指定して線を描画する関数。水平線、斜め線、縦線すべてに対応する。<code>extend</code>パラメータで線を左右に延長できる。描画オブジェクトなので、後から移動・削除・スタイル変更が可能。</p>



<p class="wp-block-paragraph">迷ったときの判断基準はこうだ。</p>



<p class="wp-block-paragraph">「RSI 70のように値が固定か？」→ <code>hline()</code>。「SMAのようにバーごとに値が変わるか？」→ <code>plot()</code>。「特定の価格に水平線を引きたい、または2点間に線を引きたいか？」→ <code>line.new()</code>。</p>



<h2 class="wp-block-heading">hline()で固定値の水平線を引く</h2>



<p class="wp-block-paragraph"><code>hline()</code>は最もシンプルな水平線関数だ。引数に定数を1つ渡すだけで、チャート全体に水平線が描画される。</p>



<pre class="pine-code">
//@version=6
indicator("hlineの例", overlay=false)
rsi = ta.rsi(close, 14)
plot(rsi, "RSI", color.purple, 2)

// 固定値の水平線
h1 = hline(70, "買われすぎ", color.red, hline.style_dashed)
h2 = hline(30, "売られすぎ", color.green, hline.style_dashed)
hline(50, "中間", color.gray, hline.style_dotted)

// 2本のhlineの間を塗りつぶす
fill(h1, h2, color=color.new(color.purple, 90), title="RSIゾーン")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>hline()</code>の引数にはシリーズ（<code>close</code>や<code>ta.sma()</code>など）は使えない。定数またはリテラル値のみだ。「RSIの70ライン」「MACDのゼロライン」のように、値が永遠に変わらない水平線に使う。</p>



<p class="wp-block-paragraph"><code>hline.style_dashed</code>（破線）、<code>hline.style_dotted</code>（点線）、<code>hline.style_solid</code>（実線）の3つのスタイルがある。</p>



<p class="wp-block-paragraph"><code>fill()</code>に2つの<code>hline</code>の戻り値を渡すと、その間の領域を塗りつぶせる。RSIの買われすぎ・売られすぎゾーンの可視化などに使う。</p>



<h2 class="wp-block-heading">plot()で動的な水平線を引く</h2>



<p class="wp-block-paragraph"><code>plot()</code>はバーごとに値が変わるラインの描画に使う。<code>plot.style_stepline</code>を指定すれば、階段状の水平ラインとして表示できる。</p>



<pre class="pine-code">
//@version=6
indicator("plotで水平線", overlay=true)

// 前日の終値を水平線として表示
prevClose = request.security(syminfo.tickerid, "D", close[1])
plot(prevClose, "前日終値", color.orange, 2, plot.style_stepline)

// 当日の始値を水平線として表示
todayOpen = request.security(syminfo.tickerid, "D", open)
plot(todayOpen, "当日始値", color.blue, 1, plot.style_stepline)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>plot.style_stepline</code>は、値が変わるまで水平に線を引き、値が変わった瞬間に垂直にジャンプするスタイルだ。日足の前日終値を分足チャートに表示する場合など、日中は水平で日が変わるとジャンプする表示になる。</p>



<p class="wp-block-paragraph"><code>plot()</code>で固定値（例: <code>plot(100)</code>）を描画することもできるが、<code>hline()</code>との違いは「<code>fill()</code>での塗りつぶし方」だ。<code>hline</code>同士の<code>fill</code>と、<code>plot</code>同士の<code>fill</code>は引数の型が異なるので混在させないこと。</p>



<h2 class="wp-block-heading">line.new()の基本構文</h2>



<p class="wp-block-paragraph"><code>line.new()</code>はチャート上の任意の2点を指定して線を描画する。水平線、斜め線、縦線すべてに対応する最も自由度の高い関数だ。</p>



<pre class="pine-code">
//@version=6
indicator("line.newの基本", overlay=true)

// 基本構文: line.new(x1, y1, x2, y2, ...)
// x = バーのインデックス（横軸）、y = 価格（縦軸）

if barstate.islast
    // 現在のバーから左に50本分の水平線
    line.new(bar_index - 50, close, bar_index, close, color=color.blue, width=2)

    // 50本前の安値から現在の高値への斜め線（トレンドライン風）
    line.new(bar_index - 50, low[50], bar_index, high, color=color.red, width=1, style=line.style_dashed)

    // 縦線（同じx座標で異なるy座標）
    line.new(bar_index - 25, low - syminfo.mintick * 50, bar_index - 25, high + syminfo.mintick * 50, color=color.gray, style=line.style_dotted)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>line.new()</code>の必須引数は4つ。<code>x1</code>（始点のバーインデックス）、<code>y1</code>（始点の価格）、<code>x2</code>（終点のバーインデックス）、<code>y2</code>（終点の価格）。</p>



<p class="wp-block-paragraph">水平線を引くには<code>y1</code>と<code>y2</code>を同じ値にする。斜め線を引くには異なる値にする。縦線を引くには<code>x1</code>と<code>x2</code>を同じ値にする。</p>



<p class="wp-block-paragraph">主要なオプション引数を整理する。</p>



<p class="wp-block-paragraph"><code>color</code> — 線の色。<code>width</code> — 線の太さ（ピクセル）。<code>style</code> — <code>line.style_solid</code>（実線）、<code>line.style_dashed</code>（破線）、<code>line.style_dotted</code>（点線）、<code>line.style_arrow_left</code>（左矢印）、<code>line.style_arrow_right</code>（右矢印）、<code>line.style_arrow_both</code>（両矢印）。<code>extend</code> — <code>extend.none</code>（延長なし）、<code>extend.left</code>（左に延長）、<code>extend.right</code>（右に延長）、<code>extend.both</code>（両方に延長）。</p>



<h2 class="wp-block-heading">line.new()で水平線を引く（extend付き）</h2>



<p class="wp-block-paragraph"><code>extend</code>パラメータを使えば、指定した2点を超えて無限に線を延長できる。サポレジラインの描画に最適だ。</p>



<pre class="pine-code">
//@version=6
indicator("水平線 extend", overlay=true, max_lines_count=500)

// 直近のピボットハイ・ローを検出して水平線を引く
pivotLen = input.int(5, "ピボット検出期間", minval=1)

pivHigh = ta.pivothigh(high, pivotLen, pivotLen)
pivLow = ta.pivotlow(low, pivotLen, pivotLen)

// ピボットハイに赤い水平線
if not na(pivHigh)
    line.new(bar_index - pivotLen, pivHigh, bar_index, pivHigh, color=color.red, width=1, style=line.style_dashed, extend=extend.right)

// ピボットローに緑の水平線
if not na(pivLow)
    line.new(bar_index - pivotLen, pivLow, bar_index, pivLow, color=color.green, width=1, style=line.style_dashed, extend=extend.right)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>extend=extend.right</code>で線を右方向に無限に延長している。ピボットポイントが検出されるたびに新しい水平線が追加される。<code>max_lines_count=500</code>でライン描画の上限を引き上げている（デフォルトは50本）。</p>



<h2 class="wp-block-heading">line.delete()で古いラインを削除する</h2>



<p class="wp-block-paragraph">ラインを無限に追加し続けるとチャートが見づらくなる。<code>line.delete()</code>で古いラインを消すパターンを覚えておこう。</p>



<pre class="pine-code">
//@version=6
indicator("最新N本のみ表示", overlay=true)

lookback = input.int(3, "表示するライン数", minval=1, maxval=20)
pivotLen = input.int(5, "ピボット検出期間")

// ラインを配列で管理
var array<line> resistLines = array.new<line>()

pivHigh = ta.pivothigh(high, pivotLen, pivotLen)

if not na(pivHigh)
    // 新しいラインを追加
    newLine = line.new(bar_index - pivotLen, pivHigh, bar_index, pivHigh, color=color.red, width=1, extend=extend.right)
    array.push(resistLines, newLine)

    // 古いラインを削除（N本を超えたら）
    while array.size(resistLines) > lookback
        oldLine = array.shift(resistLines)
        line.delete(oldLine)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>array</code>にラインオブジェクトを蓄積し、上限を超えたら<code>array.shift()</code>で最も古いラインを取り出して<code>line.delete()</code>で削除する。これで常に直近N本のラインだけが表示される。</p>



<h2 class="wp-block-heading">var宣言パターン（1本のラインを更新し続ける）</h2>



<p class="wp-block-paragraph">「常に1本の水平線だけ表示し、バーが進むたびに位置を更新する」というパターンもよく使う。</p>



<pre class="pine-code">
//@version=6
indicator("1本の水平線を更新", overlay=true)

src = input.source(close, "ソース")
length = input.int(20, "期間")

highestPrice = ta.highest(src, length)
lowestPrice = ta.lowest(src, length)

var line highLine = na
var line lowLine = na

// 既存のラインを削除して新しいラインを作成
if not na(highLine)
    line.delete(highLine)
if not na(lowLine)
    line.delete(lowLine)

highLine := line.new(bar_index - length, highestPrice, bar_index, highestPrice, color=color.red, width=2)
lowLine := line.new(bar_index - length, lowestPrice, bar_index, lowestPrice, color=color.green, width=2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>var</code>で宣言したライン変数は初回バーでのみ初期化される。毎バー<code>line.delete()</code>で前のラインを消し、<code>line.new()</code>で新しいラインを作り直す。結果として、常に最新の1本だけが表示される。</p>



<p class="wp-block-paragraph">構文の基本を復習したい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-kakikata/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトの書き方｜基本構文をコード付きで完全解説</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの活用テクニックを探す</a></p>



<h2 class="wp-block-heading">実用例①: 前日高値・安値・終値ライン</h2>



<p class="wp-block-paragraph">デイトレーダー必須の、前日高値（PDH）・安値（PDL）・終値（PDC）を水平線で表示するインジケーター。</p>



<pre class="pine-code">
//@version=6
indicator("前日高安終値ライン", overlay=true)

showPDH = input.bool(true, "前日高値")
showPDL = input.bool(true, "前日安値")
showPDC = input.bool(true, "前日終値")

pdh = request.security(syminfo.tickerid, "D", high[1])
pdl = request.security(syminfo.tickerid, "D", low[1])
pdc = request.security(syminfo.tickerid, "D", close[1])

plot(showPDH ? pdh : na, "PDH", color.red, 2, plot.style_stepline_diamond)
plot(showPDL ? pdl : na, "PDL", color.green, 2, plot.style_stepline_diamond)
plot(showPDC ? pdc : na, "PDC", color.orange, 1, plot.style_stepline)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">この例は<code>plot()</code>を使っている。<code>request.security()</code>で取得した日足の値は日中一定なので、<code>plot.style_stepline</code>で階段状の水平線として表示される。<code>line.new()</code>を使わなくても済むケースだ。</p>



<h2 class="wp-block-heading">実用例②: ピボットポイント（S/R）ライン</h2>



<p class="wp-block-paragraph">フロアトレーダーズ・ピボットのS1/S2/R1/R2ラインを水平線で表示する。</p>



<pre class="pine-code">
//@version=6
indicator("ピボットポイント", overlay=true)

// 前日の四本値を取得
prevHigh  = request.security(syminfo.tickerid, "D", high[1])
prevLow   = request.security(syminfo.tickerid, "D", low[1])
prevClose = request.security(syminfo.tickerid, "D", close[1])

// ピボットポイント計算
pp = (prevHigh + prevLow + prevClose) / 3
r1 = 2 * pp - prevLow
s1 = 2 * pp - prevHigh
r2 = pp + (prevHigh - prevLow)
s2 = pp - (prevHigh - prevLow)

// 描画
plot(pp, "PP", color.yellow, 2, plot.style_stepline)
plot(r1, "R1", color.new(color.red, 30), 1, plot.style_stepline)
plot(r2, "R2", color.new(color.red, 0), 2, plot.style_stepline)
plot(s1, "S1", color.new(color.green, 30), 1, plot.style_stepline)
plot(s2, "S2", color.new(color.green, 0), 2, plot.style_stepline)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ピボットポイントは前日の四本値から算出するため日中は値が変わらない。<code>plot()</code>の<code>stepline</code>で十分対応できる。</p>



<h2 class="wp-block-heading">実用例③: ラウンドナンバー（キリ番）ライン</h2>



<p class="wp-block-paragraph">100円単位、50pips単位などのキリのいい価格に水平線を自動で引くインジケーター。<code>line.new()</code>の実用的な使い方がわかる例だ。</p>



<pre class="pine-code">
//@version=6
indicator("ラウンドナンバー", overlay=true, max_lines_count=500)

// パラメータ
interval = input.float(1.0, "間隔", tooltip="FXなら0.5や1.0、株なら100や500")
lineColor = input.color(color.new(color.gray, 50), "ライン色")
lineStyle = input.string("点線", "スタイル", options=["実線", "破線", "点線"])

// スタイル変換
style = switch lineStyle
    "実線" => line.style_solid
    "破線" => line.style_dashed
    "点線" => line.style_dotted
    => line.style_dotted

// 表示範囲の上限・下限
visibleHigh = ta.highest(high, 200)
visibleLow = ta.lowest(low, 200)

// ラウンドナンバーの起点と終点を計算
startLevel = math.floor(visibleLow / interval) * interval
endLevel = math.ceil(visibleHigh / interval) * interval

// 最終バーでラインを描画
if barstate.islast
    level = startLevel
    while level <= endLevel
        line.new(bar_index - 200, level, bar_index + 50, level, color=lineColor, width=1, style=style)
        level := level + interval
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>math.floor()</code>と<code>math.ceil()</code>で表示範囲のラウンドナンバーを計算し、<code>while</code>ループで等間隔に水平線を描画している。<code>barstate.islast</code>で最新バーでのみ描画することで、毎バーラインが増殖するのを防いでいる。</p>



<h2 class="wp-block-heading">実用例④: 当日の高値・安値レンジボックス</h2>



<p class="wp-block-paragraph">当日のここまでの高値・安値をリアルタイムで追跡し、<code>line.new()</code>でボックス状に表示する。</p>



<pre class="pine-code">
//@version=6
indicator("当日レンジボックス", overlay=true)

// 当日の高値・安値
todayHigh = request.security(syminfo.tickerid, "D", high)
todayLow = request.security(syminfo.tickerid, "D", low)

// 当日開始バーを検出
newDay = ta.change(time("D")) != 0
var int dayStartBar = na
if newDay
    dayStartBar := bar_index

// ライン描画
var line topLine = na
var line bottomLine = na
var line leftLine = na

if not na(dayStartBar)
    line.delete(topLine)
    line.delete(bottomLine)
    line.delete(leftLine)
    topLine := line.new(dayStartBar, todayHigh, bar_index + 10, todayHigh, color=color.red, width=2)
    bottomLine := line.new(dayStartBar, todayLow, bar_index + 10, todayLow, color=color.green, width=2)
    leftLine := line.new(dayStartBar, todayHigh, dayStartBar, todayLow, color=color.gray, width=1, style=line.style_dotted)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>ta.change(time("D"))</code>で日付の変わり目を検出し、日中は当日の高値・安値に合わせてラインを更新し続ける。3本の<code>line</code>で上辺・下辺・左辺を描画し、レンジボックスのように見せている。</p>



<h2 class="wp-block-heading">実用例⑤: ラベル付き水平線</h2>



<p class="wp-block-paragraph">水平線に価格ラベルを付けて、何の価格なのかをチャート上で一目でわかるようにする。</p>



<pre class="pine-code">
//@version=6
indicator("ラベル付き水平線", overlay=true)

pdh = request.security(syminfo.tickerid, "D", high[1])
pdl = request.security(syminfo.tickerid, "D", low[1])

var line pdhLine = na
var line pdlLine = na
var label pdhLabel = na
var label pdlLabel = na

// 古い描画を削除
line.delete(pdhLine)
line.delete(pdlLine)
label.delete(pdhLabel)
label.delete(pdlLabel)

// 水平線
pdhLine := line.new(bar_index - 100, pdh, bar_index + 20, pdh, color=color.red, width=1, style=line.style_dashed)
pdlLine := line.new(bar_index - 100, pdl, bar_index + 20, pdl, color=color.green, width=1, style=line.style_dashed)

// ラベル
pdhLabel := label.new(bar_index + 20, pdh, "PDH " + str.tostring(pdh, format.mintick), style=label.style_label_left, color=color.new(color.red, 80), textcolor=color.red, size=size.small)
pdlLabel := label.new(bar_index + 20, pdl, "PDL " + str.tostring(pdl, format.mintick), style=label.style_label_left, color=color.new(color.green, 80), textcolor=color.green, size=size.small)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>label.new()</code>と<code>line.new()</code>を組み合わせることで、水平線の右端に「PDH 150.234」のような価格ラベルを表示できる。<code>bar_index + 20</code>で未来のバー位置にラベルを配置することで、現在のローソク足と重ならないようにしている。</p>



<p class="wp-block-paragraph">コピペで動く実用インジケーターをもっと見たい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-sample/">Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-sample/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/9-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/9-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/9-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/9-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/9-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/9-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<h2 class="wp-block-heading">line.set_*()でラインを後から更新する</h2>



<p class="wp-block-paragraph"><code>line.new()</code>で作成したラインは、<code>line.set_*()</code>系の関数で後から属性を変更できる。毎バー削除・再作成するよりも効率的だ。</p>



<pre class="pine-code">
//@version=6
indicator("ラインの動的更新", overlay=true)

// 初回のみラインを作成
var line myLine = line.new(bar_index, close, bar_index, close, color=color.blue, width=2, extend=extend.both)

// 毎バー位置を更新（削除・再作成不要）
line.set_xy1(myLine, bar_index - 1, close)
line.set_xy2(myLine, bar_index, close)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">主な<code>set</code>関数を整理する。<code>line.set_xy1()</code>は始点の座標を変更。<code>line.set_xy2()</code>は終点の座標を変更。<code>line.set_color()</code>は色を変更。<code>line.set_width()</code>は太さを変更。<code>line.set_style()</code>はスタイルを変更。<code>line.set_extend()</code>は延長設定を変更。</p>



<p class="wp-block-paragraph"><code>var</code>で1回だけラインを作成し、<code>set</code>で位置を更新するパターンは、ラインの生成・削除コストを抑えられるため、パフォーマンスの面でも有利だ。</p>



<h2 class="wp-block-heading">box.new()でゾーンを描画する</h2>



<p class="wp-block-paragraph">水平線ではなく「価格帯（ゾーン）」を可視化したい場合は、<code>box.new()</code>が便利だ。</p>



<pre class="pine-code">
//@version=6
indicator("サポレジゾーン", overlay=true)

pdh = request.security(syminfo.tickerid, "D", high[1])
pdl = request.security(syminfo.tickerid, "D", low[1])
pdc = request.security(syminfo.tickerid, "D", close[1])

// 終値を中心に前日レンジの10%をゾーンとして表示
zoneWidth = (pdh - pdl) * 0.1

var box resistZone = na
var box supportZone = na

box.delete(resistZone)
box.delete(supportZone)

resistZone := box.new(bar_index - 100, pdh, bar_index + 20, pdh - zoneWidth, bgcolor=color.new(color.red, 85), border_color=color.red, border_width=1)
supportZone := box.new(bar_index - 100, pdl + zoneWidth, bar_index + 20, pdl, bgcolor=color.new(color.green, 85), border_color=color.green, border_width=1)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>box.new()</code>は4つの座標（左上x, 左上y, 右下x, 右下y）で矩形を描画する。水平線1本では表現できない「価格帯」の可視化に最適だ。</p>



<h2 class="wp-block-heading">よくあるミスと対処法</h2>



<p class="wp-block-paragraph"><strong>ミス①: hline()に変数を渡してエラーになる</strong>。<code>hline(close)</code>はエラー。<code>hline()</code>は定数のみ受け付ける。バーごとに変わる値を水平線にしたいなら<code>plot()</code>か<code>line.new()</code>を使う。</p>



<p class="wp-block-paragraph"><strong>ミス②: ラインが増殖して見づらくなる</strong>。<code>line.new()</code>を<code>if</code>文の中で条件なく毎バー実行すると、バーの数だけラインが生成される。<code>barstate.islast</code>で最新バーのみ描画するか、<code>var</code> + <code>line.delete()</code>パターンで古いラインを消す。</p>



<p class="wp-block-paragraph"><strong>ミス③: max_lines_countの上限に達する</strong>。デフォルトでは同時に表示できるラインは50本。上限に達すると古いラインから自動削除される。<code>indicator()</code>の引数に<code>max_lines_count=500</code>を指定して上限を引き上げるか、不要なラインを手動で<code>line.delete()</code>する。</p>



<p class="wp-block-paragraph"><strong>ミス④: xloc.bar_timeとxloc.bar_indexを混在させる</strong>。<code>line.new()</code>のx座標は<code>bar_index</code>（バーの番号）がデフォルトだが、<code>xloc=xloc.bar_time</code>を指定するとUNIXタイムスタンプで指定できる。両者を混在させるとラインが意図しない位置に表示される。</p>



<p class="wp-block-paragraph"><strong>ミス⑤: 未来のバーにラインを延ばせない</strong>。<code>bar_index + 20</code>のように未来のバーインデックスを指定すれば、チャートの右側の余白にラインを延ばせる。ただし<code>extend=extend.right</code>を使えば、終点を指定しなくても無限に延ばせる。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Pineスクリプトでの水平線・ライン描画は3つの関数を使い分ける。固定値なら<code>hline()</code>、計算値なら<code>plot()</code>、自由な描画なら<code>line.new()</code>。</p>



<p class="wp-block-paragraph"><code>line.new()</code>を使う場合は「var宣言 → 毎バーdelete → 再作成」のパターンか、「var宣言 → set_*で更新」のパターンを覚えておけば、ラインの増殖問題を回避できる。<code>box.new()</code>と<code>label.new()</code>を組み合わせれば、プロレベルのサポレジ表示も実現可能だ。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践ノウハウをもっと見る</a></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-draw/">Pineスクリプトで水平線・ラインを描画する方法【line.new】</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-draw/">Pineスクリプトで水平線・ラインを描画する方法【line.new】</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pineスクリプトアラート実装｜alertcondition()の使い方</title>
		<link>https://pinescript-pro.com/pine-script-alert/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 03:40:33 +0000</pubDate>
				<category><![CDATA[作る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1307</guid>

					<description><![CDATA[<p>Pineスクリプトでインジケーターを作ったら、次にやりたいのがアラートの実装だ。チャートに張り付かなくても、条件を満たした瞬間にスマホやメールで通知を受け取れる。 しかし、Pineスクリプトのアラートには2つの関数がある...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-alert/">Pineスクリプトアラート実装｜alertcondition()の使い方</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-alert/">Pineスクリプトアラート実装｜alertcondition()の使い方</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pineスクリプトでインジケーターを作ったら、次にやりたいのがアラートの実装だ。チャートに張り付かなくても、条件を満たした瞬間にスマホやメールで通知を受け取れる。</p>



<p class="wp-block-paragraph">しかし、Pineスクリプトのアラートには2つの関数がある。<code>alertcondition()</code>と<code>alert()</code>だ。どちらを使えばいいのか、何が違うのか。初心者がつまずくポイントはここだ。</p>



<p class="wp-block-paragraph">結論から言うと、インジケーターなら<code>alertcondition()</code>が基本。ストラテジーなら<code>alert()</code>を使う。そしてどちらも、コードを書いただけではアラートは鳴らない。TradingView上でアラートを手動作成する必要がある。</p>



<p class="wp-block-paragraph">この記事では、2つのアラート関数の違いから、実用的なアラート付きインジケーターの作成、Webhook連携まで、v6ベースのコード付きで解説する。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践テクニックを見る</a></p>



<h2 class="wp-block-heading">alertcondition()とalert()の違い</h2>



<p class="wp-block-paragraph">Pineスクリプトには2つのアラート関数がある。名前が似ているが、仕組みがまったく異なる。</p>



<p class="wp-block-paragraph"><strong>alertcondition()</strong> — アラート条件を「登録」する関数。インジケーター専用。この関数を書くと、TradingViewのアラート作成ダイアログのドロップダウンに選択肢として表示される。1つのスクリプトに複数の<code>alertcondition()</code>を書ける。</p>



<p class="wp-block-paragraph"><strong>alert()</strong> — アラートを「直接発火」する関数。インジケーターにもストラテジーにも使える。条件を満たしたときにスクリプト内から直接アラートをトリガーする。メッセージに動的な値（価格、RSI値など）を含められる。</p>



<p class="wp-block-paragraph">使い分けの基準はこうだ。</p>



<p class="wp-block-paragraph"><code>alertcondition()</code>を使うケース: インジケーターに複数のアラート条件を登録したいとき。ユーザーがアラート作成時に条件を選べるようにしたいとき。</p>



<p class="wp-block-paragraph"><code>alert()</code>を使うケース: アラートメッセージに動的な値（現在価格やインジケーターの数値）を含めたいとき。ストラテジーでアラートを使いたいとき。Webhook連携で動的なJSONを送りたいとき。</p>



<p class="wp-block-paragraph">どちらを使っても、<strong>コードを書いただけではアラートは発動しない</strong>。TradingViewの「アラート作成」ダイアログで手動でアラートを設定する必要がある。ここを見落とす初心者が非常に多い。</p>



<h2 class="wp-block-heading">alertcondition()の基本構文</h2>



<p class="wp-block-paragraph"><code>alertcondition()</code>の構文はシンプルだ。3つの引数を取る。</p>



<pre class="pine-code">
//@version=6
indicator("アラート基本", overlay=true)
sma20 = ta.sma(close, 20)

// alertcondition(条件, タイトル, メッセージ)
alertcondition(ta.crossover(close, sma20), "SMA上抜け", "{{ticker}}: 終値がSMA20を上抜けました")
alertcondition(ta.crossunder(close, sma20), "SMA下抜け", "{{ticker}}: 終値がSMA20を下抜けました")

plot(sma20, "SMA20", color.blue, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>第1引数（condition）</strong> — <code>true</code>/<code>false</code>を返す条件式。<code>true</code>になった瞬間にアラートがトリガーされる。</p>



<p class="wp-block-paragraph"><strong>第2引数（title）</strong> — アラート作成ダイアログのドロップダウンに表示される名前。わかりやすい日本語で付ける。</p>



<p class="wp-block-paragraph"><strong>第3引数（message）</strong> — アラート発動時に表示されるメッセージ。<code>{{ticker}}</code>や<code>{{close}}</code>などのプレースホルダが使える。</p>



<p class="wp-block-paragraph">このコードをチャートに追加した後、TradingViewの「アラート作成」で条件にこのインジケーターを選ぶと、「SMA上抜け」「SMA下抜け」の2つの条件が選択肢として表示される。</p>



<h2 class="wp-block-heading">alertcondition()のプレースホルダ一覧</h2>



<p class="wp-block-paragraph">メッセージ内で使えるプレースホルダを整理する。これらはアラート発動時にTradingViewが実際の値に置換してくれる。</p>



<p class="wp-block-paragraph"><code>{{ticker}}</code> — ティッカー名（例: BTCUSDT）。<code>{{exchange}}</code> — 取引所名（例: BINANCE）。<code>{{close}}</code> — 終値。<code>{{open}}</code> — 始値。<code>{{high}}</code> — 高値。<code>{{low}}</code> — 安値。<code>{{volume}}</code> — 出来高。<code>{{time}}</code> — バーの時刻。<code>{{timenow}}</code> — アラート発動時の現在時刻。<code>{{interval}}</code> — 時間足（例: 60）。</p>



<pre class="pine-code">
alertcondition(
    condition,
    "RSI過熱アラート",
    "{{ticker}}({{interval}}分足) 終値={{close}} RSI過熱ゾーン突入 時刻={{timenow}}"
)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ただし、<code>alertcondition()</code>のプレースホルダでは<strong>スクリプト内で計算した値（RSIの数値など）は埋め込めない</strong>。計算値をメッセージに含めたい場合は、後述の<code>alert()</code>関数を使う。</p>



<h2 class="wp-block-heading">複数条件のアラートを実装する</h2>



<p class="wp-block-paragraph">実用的なインジケーターでは、複数のアラート条件を1つのスクリプトにまとめることが多い。</p>



<pre class="pine-code">
//@version=6
indicator("マルチアラート", overlay=true)

// パラメータ
fastLen = input.int(12, "短期EMA")
slowLen = input.int(26, "長期EMA")
rsiLen = input.int(14, "RSI期間")
rsiOB = input.int(70, "RSI買われすぎ")
rsiOS = input.int(30, "RSI売られすぎ")

// 計算
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)
rsi = ta.rsi(close, rsiLen)

// 条件
goldenCross = ta.crossover(emaFast, emaSlow)
deadCross = ta.crossunder(emaFast, emaSlow)
rsiOverbought = ta.crossover(rsi, rsiOB)
rsiOversold = ta.crossunder(rsi, rsiOS)

// アラート条件（4つ登録）
alertcondition(goldenCross, "ゴールデンクロス", "{{ticker}}: EMAゴールデンクロス発生")
alertcondition(deadCross, "デッドクロス", "{{ticker}}: EMAデッドクロス発生")
alertcondition(rsiOverbought, "RSI買われすぎ突入", "{{ticker}}: RSIが" + str.tostring(rsiOB) + "を超えました")
alertcondition(rsiOversold, "RSI売られすぎ突入", "{{ticker}}: RSIが" + str.tostring(rsiOS) + "を下回りました")

// 描画
plot(emaFast, "EMA Fast", color.blue, 2)
plot(emaSlow, "EMA Slow", color.red, 2)
plotshape(goldenCross, "GC", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(deadCross, "DC", shape.triangledown, location.abovebar, color.red, size=size.small)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">1つのインジケーターに<code>alertcondition()</code>を何個でも書ける。アラート作成ダイアログで、どの条件を使うか選択する形になる。</p>



<p class="wp-block-paragraph">注意点として、<code>alertcondition()</code>の第3引数（メッセージ）に<code>str.tostring(rsiOB)</code>のような<strong>input変数の文字列化</strong>は使えるが、<code>str.tostring(rsi)</code>のような<strong>シリーズ変数の文字列化</strong>は使えない。バーごとに変わる動的な値をメッセージに入れたい場合は<code>alert()</code>関数を使う。</p>



<h2 class="wp-block-heading">alert()関数の基本構文</h2>



<p class="wp-block-paragraph"><code>alert()</code>は、条件を満たしたときにスクリプト内から直接アラートを発火する関数だ。</p>



<pre class="pine-code">
//@version=6
indicator("alert()の例", overlay=true)
sma20 = ta.sma(close, 20)
rsi = ta.rsi(close, 14)

if ta.crossover(close, sma20)
    alert("SMA上抜け " + syminfo.ticker + " 価格=" + str.tostring(close) + " RSI=" + str.tostring(rsi, "#.#"), alert.freq_once_per_bar_close)

plot(sma20, "SMA20", color.blue, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>alert()</code>の第1引数はメッセージ文字列。<code>alertcondition()</code>と違い、<strong><code>str.tostring(close)</code>や<code>str.tostring(rsi)</code>で動的な値をメッセージに直接埋め込める</strong>。これが<code>alert()</code>最大のメリットだ。</p>



<p class="wp-block-paragraph">第2引数はトリガー頻度で、3つの選択肢がある。</p>



<p class="wp-block-paragraph"><code>alert.freq_once_per_bar</code> — 1本のバーにつき最初の1回だけ発火。リアルタイムバーの途中でも条件を満たした瞬間に発火する。</p>



<p class="wp-block-paragraph"><code>alert.freq_once_per_bar_close</code> — バーの確定時に1回だけ発火。リアルタイムバーの途中では発火しない。確定した値でのシグナルに使う。</p>



<p class="wp-block-paragraph"><code>alert.freq_all</code> — 条件を満たすたびに毎回発火。リアルタイムバーのティックごとに発火する可能性がある。使いすぎるとアラートが大量に飛ぶので注意。</p>



<p class="wp-block-paragraph">基本的には<code>alert.freq_once_per_bar_close</code>を使うのが安全だ。バーが確定する前の中途半端なシグナルでアラートが飛ぶのを防げる。</p>



<h2 class="wp-block-heading">alert()を使った実用アラートインジケーター</h2>



<p class="wp-block-paragraph">EMAクロスとRSIフィルターを組み合わせた、実用レベルのアラートインジケーター。</p>



<pre class="pine-code">
//@version=6
indicator("EMA+RSI アラート", overlay=true)

// パラメータ
fastLen = input.int(12, "短期EMA", group="EMA")
slowLen = input.int(26, "長期EMA", group="EMA")
rsiLen = input.int(14, "RSI期間", group="RSI")
rsiFilter = input.bool(true, "RSIフィルター有効", group="RSI")
rsiOB = input.int(70, "買われすぎ", group="RSI")
rsiOS = input.int(30, "売られすぎ", group="RSI")

// 計算
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)
rsi = ta.rsi(close, rsiLen)

// エントリー条件（RSIフィルター付き）
longSignal = ta.crossover(emaFast, emaSlow) and (not rsiFilter or rsi < rsiOB)
shortSignal = ta.crossunder(emaFast, emaSlow) and (not rsiFilter or rsi > rsiOS)

// alert()で動的メッセージ送信
if longSignal
    alert("<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 買いシグナル\n" + syminfo.ticker + " (" + timeframe.period + ")\n" + "価格: " + str.tostring(close, format.mintick) + "\n" + "RSI: " + str.tostring(rsi, "#.#"), alert.freq_once_per_bar_close)

if shortSignal
    alert("<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f534.png" alt="🔴" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 売りシグナル\n" + syminfo.ticker + " (" + timeframe.period + ")\n" + "価格: " + str.tostring(close, format.mintick) + "\n" + "RSI: " + str.tostring(rsi, "#.#"), alert.freq_once_per_bar_close)

// alertcondition()も併設（ユーザー選択用）
alertcondition(longSignal, "買いシグナル", "{{ticker}}: 買いシグナル発生")
alertcondition(shortSignal, "売りシグナル", "{{ticker}}: 売りシグナル発生")

// 描画
plot(emaFast, "EMA Fast", color.blue, 2)
plot(emaSlow, "EMA Slow", color.red, 2)
plotshape(longSignal, "Long", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(shortSignal, "Short", shape.triangledown, location.abovebar, color.red, size=size.small)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>alert()</code>と<code>alertcondition()</code>を同じスクリプトに併設しているのがポイントだ。<code>alert()</code>は動的なメッセージ（価格やRSI値入り）を送るため、<code>alertcondition()</code>はシンプルな通知が欲しいユーザーのため。TradingViewのアラート作成時にどちらを使うか選べる。</p>



<p class="wp-block-paragraph">Pineスクリプトの基本構文を復習したい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-kakikata/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトの書き方｜基本構文をコード付きで完全解説</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの応用テクニックを探す</a></p>



<h2 class="wp-block-heading">ストラテジーでのアラート</h2>



<p class="wp-block-paragraph"><code>strategy()</code>で作成したストラテジーでは、<code>alertcondition()</code>は使えない。代わりに2つの方法がある。</p>



<p class="wp-block-paragraph"><strong>方法①: strategy関数の約定イベントでアラート</strong>。コードの変更は不要。TradingViewのアラート作成ダイアログで、ストラテジーを選択すると「注文が約定」「注文が発注」などのイベントを選択できる。</p>



<p class="wp-block-paragraph"><strong>方法②: alert()関数でカスタムアラート</strong>。</p>



<pre class="pine-code">
//@version=6
strategy("アラート付きストラテジー", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

fast = ta.ema(close, 12)
slow = ta.ema(close, 26)

if ta.crossover(fast, slow)
    strategy.entry("Long", strategy.long)
    alert("ENTRY LONG " + syminfo.ticker + " at " + str.tostring(close), alert.freq_once_per_bar_close)

if ta.crossunder(fast, slow)
    strategy.close("Long")
    alert("EXIT LONG " + syminfo.ticker + " at " + str.tostring(close), alert.freq_once_per_bar_close)

plot(fast, "Fast", color.blue)
plot(slow, "Slow", color.red)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ストラテジーでは<code>strategy.entry()</code>や<code>strategy.close()</code>の直後に<code>alert()</code>を置くパターンが一般的だ。アラート作成ダイアログでは「alert()関数の呼び出し」を選択する。</p>



<h2 class="wp-block-heading">Webhook連携でJSON送信</h2>



<p class="wp-block-paragraph"><code>alert()</code>のメッセージにJSON文字列を入れれば、Webhook経由で外部サービスに構造化データを送信できる。自動売買botとの連携に使われるパターンだ。</p>



<pre class="pine-code">
//@version=6
indicator("Webhookアラート", overlay=true)
fast = ta.ema(close, 12)
slow = ta.ema(close, 26)

longSignal = ta.crossover(fast, slow)
shortSignal = ta.crossunder(fast, slow)

if longSignal
    alert('{"action":"buy","ticker":"' + syminfo.ticker + '","price":' + str.tostring(close) + ',"time":"' + str.tostring(timenow) + '"}', alert.freq_once_per_bar_close)

if shortSignal
    alert('{"action":"sell","ticker":"' + syminfo.ticker + '","price":' + str.tostring(close) + ',"time":"' + str.tostring(timenow) + '"}', alert.freq_once_per_bar_close)

plot(fast, "Fast", color.blue)
plot(slow, "Slow", color.red)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">TradingViewのアラート作成ダイアログで「通知」タブを開き、「Webhook URL」に受信先のURLを入力する。「メッセージ」欄は空にしておけば、<code>alert()</code>で指定した文字列がそのまま送信される。</p>



<p class="wp-block-paragraph">Webhook連携はTradingViewの有料プラン（Pro以上）が必要だ。</p>



<h2 class="wp-block-heading">時間帯限定アラート</h2>



<p class="wp-block-paragraph">特定の市場セッション内でのみアラートを鳴らすインジケーター。セッション外のノイズシグナルを除外できる。</p>



<pre class="pine-code">
//@version=6
indicator("セッション限定アラート", overlay=true)

// セッション設定
sessionStr = input.string("0800-1630", "セッション", tooltip="HHMM-HHMM")
sessionTZ = input.string("Europe/London", "タイムゾーン", options=["Asia/Tokyo", "Europe/London", "America/New_York"])

// EMA
fast = ta.ema(close, 12)
slow = ta.ema(close, 26)

// セッション内判定
inSession = not na(time(timeframe.period, sessionStr, sessionTZ))

// セッション内のみシグナル
longSig = ta.crossover(fast, slow) and inSession
shortSig = ta.crossunder(fast, slow) and inSession

// アラート
alertcondition(longSig, "セッション内買い", "{{ticker}}: セッション内でGC発生")
alertcondition(shortSig, "セッション内売り", "{{ticker}}: セッション内でDC発生")

if longSig
    alert("BUY " + syminfo.ticker + " in " + sessionTZ + " session, price=" + str.tostring(close, format.mintick), alert.freq_once_per_bar_close)

// 描画
plot(fast, "Fast", color.blue)
plot(slow, "Slow", color.red)
bgcolor(inSession ? color.new(color.gray, 95) : na)
plotshape(longSig, "Long", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(shortSig, "Short", shape.triangledown, location.abovebar, color.red, size=size.small)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>and inSession</code>の一句を条件に追加するだけで、セッション外のシグナルを完全に除外できる。時間帯の指定方法を詳しく知りたい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-time/">Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-time/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<h2 class="wp-block-heading">TradingViewでのアラート作成手順</h2>



<p class="wp-block-paragraph">コードを書いた後、TradingView上でアラートを有効化する手順を確認しておく。</p>



<p class="wp-block-paragraph"><strong>ステップ1:</strong> インジケーターをチャートに追加する。Pineエディタで「保存」→「チャートへ追加」。</p>



<p class="wp-block-paragraph"><strong>ステップ2:</strong> チャート上部のツールバーにある「アラート」アイコン（時計マーク）をクリック、または<code>Alt + A</code>（Mac: <code>Option + A</code>）を押す。</p>



<p class="wp-block-paragraph"><strong>ステップ3:</strong> 「条件」のドロップダウンで、追加したインジケーター名を選択する。</p>



<p class="wp-block-paragraph"><strong>ステップ4:</strong> <code>alertcondition()</code>を使っている場合は、その下のドロップダウンでアラート条件（タイトル）を選ぶ。<code>alert()</code>を使っている場合は「alert()関数の呼び出し」を選ぶ。</p>



<p class="wp-block-paragraph"><strong>ステップ5:</strong> トリガー頻度を設定する。「バーにつき1回」が一般的だ。</p>



<p class="wp-block-paragraph"><strong>ステップ6:</strong> 「通知」タブで通知方法を選ぶ。アプリ通知、メール、Webhookなど。</p>



<p class="wp-block-paragraph"><strong>ステップ7:</strong> 有効期限を設定し、「作成」をクリック。</p>



<p class="wp-block-paragraph">重要なのは、<strong>スクリプトを変更した場合、既存のアラートには反映されない</strong>ということだ。スクリプトを修正したら、古いアラートを削除して新しいアラートを作り直す必要がある。</p>



<h2 class="wp-block-heading">アラートの制限事項</h2>



<p class="wp-block-paragraph">TradingViewのアラートにはプランによる制限がある。</p>



<p class="wp-block-paragraph">無料プラン（Basic）はアクティブアラート1件。Essentialは20件。Plusは100件。Premiumは400件。Expertは800件。Ultimateは無制限だ。</p>



<p class="wp-block-paragraph">スクリプトアラートが3分間に15回以上トリガーされると、自動的に停止される。<code>alert.freq_all</code>を使うときは特に注意が必要だ。</p>



<p class="wp-block-paragraph">アラートはリアルタイムバーでのみトリガーされる。ヒストリカルバー（過去のバー）では<code>alertcondition()</code>も<code>alert()</code>も発火しない。つまり、バックテストではアラートの動作を確認できない。</p>



<p class="wp-block-paragraph">Webhook連携はPro以上の有料プランが必要だ。</p>



<h2 class="wp-block-heading">よくあるミスと対処法</h2>



<p class="wp-block-paragraph"><strong>ミス①: コードを書いたのにアラートが鳴らない</strong>。<code>alertcondition()</code>はアラート条件を「登録」するだけ。TradingViewのアラート作成ダイアログで手動でアラートを作成する必要がある。</p>



<p class="wp-block-paragraph"><strong>ミス②: alertcondition()をストラテジーで使おうとする</strong>。<code>alertcondition()</code>はインジケーター（<code>indicator()</code>）専用。ストラテジー（<code>strategy()</code>）では使えない。ストラテジーでは<code>alert()</code>を使うか、約定イベントでアラートを設定する。</p>



<p class="wp-block-paragraph"><strong>ミス③: スクリプト変更後もアラートが古い条件で発動する</strong>。アラート作成時のスクリプト状態がサーバーに保存される。スクリプトを変更したら、アラートを削除して作り直す。</p>



<p class="wp-block-paragraph"><strong>ミス④: alertcondition()のメッセージに動的な値を入れようとする</strong>。<code>str.tostring(rsi)</code>のようなシリーズ変数は<code>alertcondition()</code>のメッセージには使えない。動的な値を含めたい場合は<code>alert()</code>関数を使う。</p>



<p class="wp-block-paragraph"><strong>ミス⑤: alert.freq_allで大量アラートが飛ぶ</strong>。リアルタイムバーのティックごとに条件を評価するため、数秒間に何十回もアラートが発火する可能性がある。通常は<code>alert.freq_once_per_bar_close</code>で十分だ。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Pineスクリプトのアラートは<code>alertcondition()</code>と<code>alert()</code>の2つ。インジケーターで複数の条件を登録したいなら<code>alertcondition()</code>、動的なメッセージやWebhook連携なら<code>alert()</code>を使う。どちらもコードを書いた後にTradingView上でアラートを手動作成する手順が必要だ。</p>



<p class="wp-block-paragraph">アラートのトリガー頻度は<code>alert.freq_once_per_bar_close</code>が安全。スクリプトを変更したらアラートは作り直す。この2点を押さえておけば、意図しない動作を防げる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践ノウハウをもっと見る</a></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-alert/">Pineスクリプトアラート実装｜alertcondition()の使い方</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-alert/">Pineスクリプトアラート実装｜alertcondition()の使い方</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</title>
		<link>https://pinescript-pro.com/pine-script-time/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 03:28:49 +0000</pubDate>
				<category><![CDATA[作る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1304</guid>

					<description><![CDATA[<p>Pineスクリプトで「東京時間だけシグナルを出したい」「ロンドン時間の背景色を変えたい」と思ったとき、最初に困るのが時間の扱い方だ。TradingViewのチャートはタイムゾーンが取引所やユーザー設定で異なるため、hou...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-time/">Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-time/">Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pineスクリプトで「東京時間だけシグナルを出したい」「ロンドン時間の背景色を変えたい」と思ったとき、最初に困るのが時間の扱い方だ。TradingViewのチャートはタイムゾーンが取引所やユーザー設定で異なるため、<code>hour</code>変数を使って単純に時間判定すると、環境が変わったときにズレる。</p>



<p class="wp-block-paragraph">Pineスクリプトには、タイムゾーンを正しく処理する専用の仕組みがある。<code>time()</code>関数とセッション文字列、そしてIANAタイムゾーン指定だ。これを使えば、夏時間の切り替わりも含めて完全自動で正しい時間判定ができる。</p>



<p class="wp-block-paragraph">この記事では、時間指定の正しい方法をv6ベースで体系的に解説する。東京・ロンドン・ニューヨークの3市場セッションを題材に、コピペで動くコード例を付けた。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践テクニックを見る</a></p>



<h2 class="wp-block-heading">時間指定の2つの方法</h2>



<p class="wp-block-paragraph">Pineスクリプトで時間を扱う方法は大きく2つある。</p>



<p class="wp-block-paragraph"><strong>方法①: <code>time()</code>関数＋セッション文字列</strong>（推奨）。タイムゾーンを明示的に指定でき、夏時間にも自動対応する。セッション（時間帯）の判定に最適だ。</p>



<p class="wp-block-paragraph"><strong>方法②: <code>hour</code> / <code>minute</code>変数</strong>。現在のバーの時・分を取得する。単純だが、チャートのタイムゾーン設定に依存するため、環境が変わるとズレるリスクがある。</p>



<p class="wp-block-paragraph">結論から言えば、市場セッションの判定には<strong>方法①を使うべき</strong>だ。方法②はデバッグや簡易的な用途に留めるのが安全だ。</p>



<h2 class="wp-block-heading">time()関数の基本構文</h2>



<p class="wp-block-paragraph"><code>time()</code>関数は、現在のバーが指定した時間帯に含まれるかどうかを判定する。</p>



<pre class="pine-code">
//@version=6
indicator("time()の基本", overlay=true)

// time(時間足, セッション文字列, タイムゾーン) → 含まれればUNIX時刻、含まれなければna
inSession = not na(time(timeframe.period, "0900-1500", "Asia/Tokyo"))

bgcolor(inSession ? color.new(color.red, 90) : na)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>time()</code>の戻り値は、バーがセッション内なら<strong>UNIXタイムスタンプ</strong>（数値）、セッション外なら<strong>na</strong>を返す。<code>not na()</code>で真偽値に変換するのが定番のパターンだ。</p>



<p class="wp-block-paragraph">3つの引数を分解して説明する。</p>



<p class="wp-block-paragraph"><strong>第1引数: 時間足</strong> — <code>timeframe.period</code>を指定すると、現在のチャートの時間足で判定する。<code>"15"</code>（15分足）のように固定することもできる。</p>



<p class="wp-block-paragraph"><strong>第2引数: セッション文字列</strong> — <code>"HHMM-HHMM"</code>の形式で開始時刻と終了時刻を指定する。<code>"0900-1500"</code>なら9時00分から15時00分まで。24時をまたぐ場合は<code>"2200-0600"</code>のように書ける。</p>



<p class="wp-block-paragraph"><strong>第3引数: タイムゾーン</strong> — IANA形式で指定する。<code>"Asia/Tokyo"</code>、<code>"Europe/London"</code>、<code>"America/New_York"</code>など。この指定があるため、チャートのタイムゾーン設定に関係なく正しい判定ができる。</p>



<h2 class="wp-block-heading">セッション文字列の書き方</h2>



<p class="wp-block-paragraph">セッション文字列にはいくつかのルールと拡張機能がある。</p>



<p class="wp-block-paragraph">基本形は<code>"HHMM-HHMM"</code>。例えば<code>"0930-1600"</code>はAM 9:30からPM 4:00まで。</p>



<p class="wp-block-paragraph">曜日を限定するには、末尾に曜日コードを付ける。<code>"0930-1600:23456"</code>で月曜〜金曜のみ（1=日曜、2=月曜、&#8230;、7=土曜）。FXのように土日休みの市場では<code>":23456"</code>を付けておくと安全だ。</p>



<p class="wp-block-paragraph">複数のセッションをカンマで区切ると、OR条件として扱える。<code>"0900-1200,1300-1500"</code>は午前セッションと午後セッションの両方に反応する。</p>



<p class="wp-block-paragraph">24時をまたぐ場合は<code>"2200-0600"</code>のように開始時刻が終了時刻より大きい値で書く。Pineスクリプトが自動的に日付をまたいだ判定をしてくれる。</p>



<pre class="pine-code">
//@version=6
indicator("セッション文字列の例", overlay=true)

// 平日のみ、9:00-15:00（東京時間）
tokyo = not na(time(timeframe.period, "0900-1500:23456", "Asia/Tokyo"))

// 午前と午後を分離
tokyoAM = not na(time(timeframe.period, "0900-1130:23456", "Asia/Tokyo"))
tokyoPM = not na(time(timeframe.period, "1230-1500:23456", "Asia/Tokyo"))

bgcolor(tokyoAM ? color.new(color.red, 90) : tokyoPM ? color.new(color.orange, 90) : na)
</pre>



<h2 class="wp-block-heading">東京・ロンドン・NYの3セッション表示</h2>



<p class="wp-block-paragraph">FXトレーダーが最もよく使う、3大市場のセッション時間を背景色で可視化するインジケーター。</p>



<pre class="pine-code">
//@version=6
indicator("3市場セッション", overlay=true)

// パラメータ
showTokyo  = input.bool(true, "東京", group="表示")
showLondon = input.bool(true, "ロンドン", group="表示")
showNY     = input.bool(true, "NY", group="表示")
tokyoCol   = input.color(color.new(color.red, 90), "東京色", group="色")
londonCol  = input.color(color.new(color.green, 90), "ロンドン色", group="色")
nyCol      = input.color(color.new(color.blue, 90), "NY色", group="色")

// セッション判定
isTokyo  = not na(time(timeframe.period, "0900-1500:23456", "Asia/Tokyo"))
isLondon = not na(time(timeframe.period, "0800-1630:23456", "Europe/London"))
isNY     = not na(time(timeframe.period, "0930-1600:23456", "America/New_York"))

// 背景色
bgcolor(showTokyo  and isTokyo  ? tokyoCol  : na, title="東京")
bgcolor(showLondon and isLondon ? londonCol : na, title="ロンドン")
bgcolor(showNY     and isNY     ? nyCol     : na, title="NY")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">タイムゾーンを<code>"Asia/Tokyo"</code>、<code>"Europe/London"</code>、<code>"America/New_York"</code>で指定しているため、ロンドンとニューヨークは<strong>夏時間（DST）に自動対応</strong>する。3月の第2日曜や11月の第1日曜に時間がズレる心配がない。</p>



<p class="wp-block-paragraph">各セッションの開始・終了時間は以下の通り。</p>



<p class="wp-block-paragraph">東京セッションは9:00〜15:00（JST固定、夏時間なし）。ロンドンセッションは8:00〜16:30（GMT/BST、夏時間で1時間前倒し）。ニューヨークセッションは9:30〜16:00（EST/EDT、夏時間で1時間前倒し）。</p>



<h2 class="wp-block-heading">セッション開始ラインの追加</h2>



<p class="wp-block-paragraph">セッションの背景色だけでなく、各セッションの開始時刻に縦線を引くバージョン。トレンドの転換ポイントを確認しやすくなる。</p>



<pre class="pine-code">
//@version=6
indicator("セッション開始ライン", overlay=true, max_lines_count=500)

// セッション判定
isTokyo  = not na(time(timeframe.period, "0900-1500:23456", "Asia/Tokyo"))
isLondon = not na(time(timeframe.period, "0800-1630:23456", "Europe/London"))
isNY     = not na(time(timeframe.period, "0930-1600:23456", "America/New_York"))

// セッション開始（前のバーがセッション外、現在のバーがセッション内）
tokyoStart  = isTokyo  and not isTokyo[1]
londonStart = isLondon and not isLondon[1]
nyStart     = isNY     and not isNY[1]

// 縦線を描画
if tokyoStart
    line.new(bar_index, high, bar_index, low, color=color.red, style=line.style_dotted, extend=extend.both, width=1)
if londonStart
    line.new(bar_index, high, bar_index, low, color=color.green, style=line.style_dotted, extend=extend.both, width=1)
if nyStart
    line.new(bar_index, high, bar_index, low, color=color.blue, style=line.style_dotted, extend=extend.both, width=1)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">「前のバーがセッション外で、現在のバーがセッション内」という条件でセッション開始を検出している。<code>not isTokyo[1]</code>が前のバーの状態だ。<code>max_lines_count=500</code>でライン描画の上限を引き上げている。</p>



<h2 class="wp-block-heading">特定時間帯だけシグナルを出す</h2>



<p class="wp-block-paragraph">移動平均線のクロスシグナルを、指定したセッション内でのみ表示する。セッション外のノイズを排除するフィルターとして使える。</p>



<pre class="pine-code">
//@version=6
indicator("セッション限定シグナル", overlay=true)

// セッション設定
sessionStr = input.string("0800-1630", "セッション時間", tooltip="HHMM-HHMM形式")
sessionTZ  = input.string("Europe/London", "タイムゾーン", options=["Asia/Tokyo", "Europe/London", "America/New_York", "Etc/UTC"])

// EMA設定
fastLen = input.int(12, "短期EMA")
slowLen = input.int(26, "長期EMA")

// 計算
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)
inSession = not na(time(timeframe.period, sessionStr, sessionTZ))

// セッション内のみシグナルを出す
bullSignal = ta.crossover(emaFast, emaSlow) and inSession
bearSignal = ta.crossunder(emaFast, emaSlow) and inSession

// 描画
plot(emaFast, "EMA Fast", color.blue)
plot(emaSlow, "EMA Slow", color.red)
bgcolor(inSession ? color.new(color.gray, 95) : na)
plotshape(bullSignal, "買い", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(bearSignal, "売り", shape.triangledown, location.abovebar, color.red, size=size.small)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ポイントは<code>and inSession</code>でシグナル条件にセッション判定を加えている部分だ。これだけで「ロンドン時間のみのEMAクロスシグナル」のように限定できる。<code>input.string</code>でタイムゾーンを選択式にしているので、設定画面から切り替えも可能だ。</p>



<h2 class="wp-block-heading">セッション別の高値・安値レンジ</h2>



<p class="wp-block-paragraph">各セッションの高値と安値をリアルタイムで追跡し、レンジとして表示する。ブレイクアウト戦略の基準として使える。</p>



<pre class="pine-code">
//@version=6
indicator("セッションレンジ", overlay=true)

// セッション選択
sessionStr = input.string("0900-1500", "セッション", options=["0900-1500", "0800-1630", "0930-1600"])
sessionTZ  = input.string("Asia/Tokyo", "タイムゾーン", options=["Asia/Tokyo", "Europe/London", "America/New_York"])

// セッション判定
inSession = not na(time(timeframe.period, sessionStr, sessionTZ))
sessionStart = inSession and not inSession[1]

// セッション内の高値・安値を追跡
var float sessionHigh = na
var float sessionLow = na

if sessionStart
    sessionHigh := high
    sessionLow := low
else if inSession
    sessionHigh := math.max(sessionHigh, high)
    sessionLow := math.min(sessionLow, low)

// 描画（セッション内のみ表示）
plot(inSession ? sessionHigh : na, "Session High", color.red, 2, plot.style_stepline)
plot(inSession ? sessionLow : na, "Session Low", color.green, 2, plot.style_stepline)
bgcolor(inSession ? color.new(color.gray, 95) : na)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>var</code>で宣言した変数はバーをまたいで値を保持する。セッション開始時にリセットし、セッション中は<code>math.max()</code>と<code>math.min()</code>で最高値・最安値を更新し続ける。</p>



<p class="wp-block-paragraph">構文の基礎をもっと体系的に学びたい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-kakikata/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトの書き方｜基本構文をコード付きで完全解説</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの活用テクニックを探す</a></p>



<h2 class="wp-block-heading">hour / minute変数を使う方法（注意点あり）</h2>



<p class="wp-block-paragraph"><code>time()</code>関数ではなく、<code>hour</code>と<code>minute</code>の組み込み変数で時間を取得する方法もある。シンプルだが、注意点がある。</p>



<pre class="pine-code">
//@version=6
indicator("hour/minuteの例", overlay=true)

// hour / minute はチャートのタイムゾーン設定に依存する
currentHour = hour
currentMinute = minute

// タイムゾーンを指定してhourを取得（v6の推奨方法）
tokyoHour = hour(time, "Asia/Tokyo")
londonHour = hour(time, "Europe/London")

// 東京時間9時〜15時を判定
isTokyoTime = tokyoHour >= 9 and tokyoHour < 15

bgcolor(isTokyoTime ? color.new(color.red, 90) : na)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>hour</code>を引数なしで使うと、チャートのタイムゾーン設定に依存する。ユーザーがチャートのタイムゾーンをUTCに変更しただけで判定がズレてしまう。</p>



<p class="wp-block-paragraph">v6では<code>hour(time, "Asia/Tokyo")</code>のように第2引数でタイムゾーンを指定できる。これなら<code>time()</code>関数と同等の安全性がある。ただし、セッション文字列のように曜日指定や複数セッションの結合はできないため、市場セッションの判定には<code>time()</code>関数のほうが適している。</p>



<h2 class="wp-block-heading">timestamp()で特定日時を指定する</h2>



<p class="wp-block-paragraph">「何月何日以降のみバックテストする」のように、特定の日時を基準にしたフィルタリングには<code>timestamp()</code>を使う。</p>



<pre class="pine-code">
//@version=6
strategy("期間限定ストラテジー", overlay=true)

// 開始日時と終了日時
startDate = input.time(timestamp("2024-01-01"), "開始日")
endDate   = input.time(timestamp("2024-12-31"), "終了日")

// 期間内かどうか
inRange = time >= startDate and time <= endDate

// EMAクロス戦略（期間内のみ）
fast = ta.ema(close, 12)
slow = ta.ema(close, 26)

if inRange and ta.crossover(fast, slow)
    strategy.entry("Long", strategy.long)
if inRange and ta.crossunder(fast, slow)
    strategy.close("Long")

bgcolor(inRange ? color.new(color.green, 95) : color.new(color.gray, 95))
plot(fast, "EMA12", color.blue)
plot(slow, "EMA26", color.red)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>timestamp("2024-01-01")</code>はISO形式の文字列からUNIXタイムスタンプを生成する。<code>input.time()</code>と組み合わせると、設定画面にカレンダーUIが表示され、マウスで日付を選択できる。</p>



<h2 class="wp-block-heading">仲値トレード（9:55 JST）の実装例</h2>



<p class="wp-block-paragraph">FXで有名な「仲値トレード」のように、特定の時刻にエントリー・決済するストラテジーの実装例。</p>



<pre class="pine-code">
//@version=6
strategy("仲値ストラテジー", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// パラメータ
entryHour   = input.int(0, "エントリー時(UTC)", tooltip="JST-9で指定。JST 0:00 = UTC 15:00前日")
entryMinute = input.int(0, "エントリー分")
exitHour    = input.int(0, "決済時(UTC)")
exitMinute  = input.int(55, "決済分")

// 時刻判定（タイムゾーン指定で安全に）
tokyoH = hour(time, "Asia/Tokyo")
tokyoM = minute(time, "Asia/Tokyo")

isEntry = tokyoH == entryHour and tokyoM == entryMinute
isExit  = tokyoH == exitHour and tokyoM == exitMinute

// エントリー・決済
if isEntry and strategy.position_size == 0
    strategy.entry("Nakahe", strategy.long)
if isExit and strategy.position_size > 0
    strategy.close("Nakahe")

// 仲値時刻にマーク
plotshape(isEntry, "Entry", shape.arrowup, location.belowbar, color.green, size=size.small)
plotshape(isExit, "Exit", shape.arrowdown, location.abovebar, color.red, size=size.small)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>hour(time, "Asia/Tokyo")</code>で東京時間の時刻を安全に取得している。<code>hour</code>変数を直接使う方法よりも確実だ。仲値の9:55を狙う場合は<code>exitHour=9</code>、<code>exitMinute=55</code>に設定する。</p>



<p class="wp-block-paragraph">時間指定のシグナルにアラートを付けたい場合はこちらが参考になる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-alert">Pineスクリプトアラート実装｜alertcondition()の使い方</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-alert/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/12-1-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/12-1-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/12-1-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/12-1-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/12-1-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/12-1.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトアラート実装｜alertcondition()の使い方</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<h2 class="wp-block-heading">夏時間（DST）の自動処理</h2>



<p class="wp-block-paragraph">Pineスクリプトで<code>"Europe/London"</code>や<code>"America/New_York"</code>を指定すると、夏時間への切り替えは自動で処理される。手動でオフセットを変える必要はない。</p>



<p class="wp-block-paragraph">ロンドンは3月最終日曜にBST（UTC+1）へ、10月最終日曜にGMT（UTC+0）へ切り替わる。ニューヨークは3月第2日曜にEDT（UTC-4）へ、11月第1日曜にEST（UTC-5）へ切り替わる。東京は夏時間がないため、<code>"Asia/Tokyo"</code>は通年UTC+9だ。</p>



<pre class="pine-code">
//@version=6
indicator("DST確認", overlay=true)

// ロンドン時間の「時」を表示（DSTで自動的に変わる）
londonH = hour(time, "Europe/London")
var table t = table.new(position.top_right, 2, 2, bgcolor=color.new(color.black, 80))
if barstate.islast
    table.cell(t, 0, 0, "London Hour", text_color=color.gray, text_size=size.small)
    table.cell(t, 1, 0, str.tostring(londonH), text_color=color.white, text_size=size.small)
    table.cell(t, 0, 1, "Tokyo Hour", text_color=color.gray, text_size=size.small)
    table.cell(t, 1, 1, str.tostring(hour(time, "Asia/Tokyo")), text_color=color.white, text_size=size.small)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">3月と10月の切り替わりをまたぐチャートを表示して確認すると、<code>londonH</code>が自動で1時間シフトしているのがわかる。<code>hour + オフセット</code>のような手動計算では、この切り替わりを正しく処理できない。</p>



<h2 class="wp-block-heading">IANAタイムゾーン一覧（よく使うもの）</h2>



<p class="wp-block-paragraph"><code>time()</code>や<code>hour()</code>の第3引数・第2引数に指定するタイムゾーン文字列の一覧。</p>



<p class="wp-block-paragraph">東京は<code>"Asia/Tokyo"</code>（UTC+9、夏時間なし）。香港は<code>"Asia/Hong_Kong"</code>（UTC+8、夏時間なし）。シンガポールは<code>"Asia/Singapore"</code>（UTC+8、夏時間なし）。シドニーは<code>"Australia/Sydney"</code>（UTC+10/+11、夏時間あり）。ロンドンは<code>"Europe/London"</code>（UTC+0/+1、夏時間あり）。フランクフルトは<code>"Europe/Berlin"</code>（UTC+1/+2、夏時間あり）。ニューヨークは<code>"America/New_York"</code>（UTC-5/-4、夏時間あり）。シカゴは<code>"America/Chicago"</code>（UTC-6/-5、夏時間あり）。UTCは<code>"Etc/UTC"</code>（固定）。</p>



<p class="wp-block-paragraph">夏時間ありの地域はIANA形式で指定すれば、Pineスクリプトが自動で切り替えを処理する。<code>"GMT+9"</code>のような固定オフセット形式では夏時間に対応できないので、IANA形式を使うこと。</p>



<h2 class="wp-block-heading">よくあるミスと対処法</h2>



<p class="wp-block-paragraph"><strong>ミス①: <code>hour</code>変数を直接使って時間判定する</strong>。チャートのタイムゾーン設定に依存するため、設定が変わるとズレる。<code>time()</code>関数または<code>hour(time, "タイムゾーン")</code>を使う。</p>



<p class="wp-block-paragraph"><strong>ミス②: UTC+9を手動で加算する</strong>。<code>hour + 9</code>のような計算は夏時間のある市場で破綻する。IANA形式のタイムゾーン指定を使えば自動で処理される。</p>



<p class="wp-block-paragraph"><strong>ミス③: セッション文字列のフォーマットミス</strong>。<code>"9:00-15:00"</code>はエラーになる。正しくは<code>"0900-1500"</code>（コロンなし、4桁ゼロ埋め）。</p>



<p class="wp-block-paragraph"><strong>ミス④: 日足以上の時間足でセッション判定する</strong>。日足は1日1本なので、セッション内かどうかの判定は意味をなさない。セッション判定は4時間足以下で使うのが前提だ。</p>



<p class="wp-block-paragraph"><strong>ミス⑤: 曜日指定を忘れる</strong>。FX市場は土日休みだが、仮想通貨は24時間365日動いている。対象市場に応じて<code>":23456"</code>（平日のみ）を付けるかどうかを判断する。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Pineスクリプトで時間指定するなら、<code>time()</code>関数＋セッション文字列＋IANAタイムゾーンの3点セットが鉄板だ。<code>hour</code>変数の手動オフセット計算は避ける。この方法なら、チャートのタイムゾーン設定に依存せず、夏時間にも自動対応する。</p>



<p class="wp-block-paragraph">セッション文字列は<code>"HHMM-HHMM"</code>のシンプルなフォーマット。曜日制限は<code>":23456"</code>。複数セッションはカンマで結合。この3つのルールだけ覚えれば、あらゆる時間帯指定に対応できる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践ノウハウをもっと見る</a></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-time/">Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-time/">Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pineスクリプトコード例｜初心者向けシンプルなインジケーター実例集</title>
		<link>https://pinescript-pro.com/pine-script-example/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 03:18:45 +0000</pubDate>
				<category><![CDATA[作る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1301</guid>

					<description><![CDATA[<p>Pineスクリプトの構文は理解したけど、実際にどう書けばいいかイメージが湧かない。そんな初心者が最初にぶつかる壁は「コードの書き方」ではなく「コードの使い方」だ。 この記事では、Pineスクリプトの基本構文をパターン別に...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-example/">Pineスクリプトコード例｜初心者向けシンプルなインジケーター実例集</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-example/">Pineスクリプトコード例｜初心者向けシンプルなインジケーター実例集</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pineスクリプトの構文は理解したけど、実際にどう書けばいいかイメージが湧かない。そんな初心者が最初にぶつかる壁は「コードの書き方」ではなく「コードの使い方」だ。</p>



<p class="wp-block-paragraph">この記事では、Pineスクリプトの基本構文をパターン別に短いコード例で紹介する。1つの例は10〜20行程度のシンプルなコードで、それぞれ「この構文で何ができるか」がひと目でわかる構成にした。すべてv6対応、Pineエディタにコピペすればそのまま動く。</p>



<p class="wp-block-paragraph">構文の教科書的な解説ではなく、「こう書けばこう動く」の具体例を並べている。手を動かしながら読み進めてほしい。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの全体像と活用法を見る</a></p>



<h2 class="wp-block-heading">コード例の使い方</h2>



<p class="wp-block-paragraph">TradingViewのチャートを開き、画面下部の「Pineエディタ」タブをクリックする。既存のコードを全選択して削除し、この記事のコード例をコピペする。「チャートへ追加」をクリックすれば、チャートにインジケーターが表示される。</p>



<p class="wp-block-paragraph">各例は独立しているので、好きな順番で試して問題ない。気になったコードから触ってみよう。</p>



<h2 class="wp-block-heading">例1: 終値をラインで表示する（最小構成）</h2>



<p class="wp-block-paragraph">Pineスクリプトの最小構成は3行だ。何が最低限必要なのかを確認する例。</p>



<pre class="pine-code">
//@version=6
indicator("終値ライン", overlay=true)
plot(close, "終値", color.blue, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">1行目がバージョン宣言、2行目がインジケーター宣言、3行目が出力。この3行がすべてのPineスクリプトの骨格になる。<code>overlay=true</code>で価格チャートに重ねて表示、<code>false</code>にすると別パネルに表示される。</p>



<h2 class="wp-block-heading">例2: 移動平均線を1本引く</h2>



<p class="wp-block-paragraph">最も使用頻度が高いテクニカル関数<code>ta.sma()</code>を使って、20期間の単純移動平均線を引く。</p>



<pre class="pine-code">
//@version=6
indicator("SMA20", overlay=true)
sma20 = ta.sma(close, 20)
plot(sma20, "SMA20", color.orange, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>ta.sma(close, 20)</code>は「終値の20期間単純移動平均」を計算する。結果を変数<code>sma20</code>に入れ、<code>plot()</code>でチャートに描画する。<code>close</code>を<code>high</code>や<code>low</code>に変えれば、高値や安値の移動平均線になる。</p>



<h2 class="wp-block-heading">例3: 2本のEMAを重ねて表示する</h2>



<p class="wp-block-paragraph">短期EMAと長期EMAを同時に表示する。複数の<code>plot()</code>を並べるだけで線を重ねられる。</p>



<pre class="pine-code">
//@version=6
indicator("デュアルEMA", overlay=true)
ema12 = ta.ema(close, 12)
ema26 = ta.ema(close, 26)
plot(ema12, "EMA12", color.blue, 2)
plot(ema26, "EMA26", color.red, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>ta.ema()</code>は指数移動平均を計算する関数。SMAより直近の価格に重みを置くため、価格の変動に敏感に反応する。色や線の太さは<code>plot()</code>の引数で自由に変更できる。</p>



<h2 class="wp-block-heading">例4: input関数でパラメータを外出しする</h2>



<p class="wp-block-paragraph">パラメータをコード内に直書きすると、値を変えるたびにコードを編集する必要がある。<code>input</code>関数を使えば、設定画面から変更できるようになる。</p>



<pre class="pine-code">
//@version=6
indicator("入力つきSMA", overlay=true)
length = input.int(20, "期間", minval=1, maxval=200)
src = input.source(close, "ソース")
lineColor = input.color(color.blue, "色")
sma = ta.sma(src, length)
plot(sma, "SMA", lineColor, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>input.int()</code>で整数入力、<code>input.source()</code>でデータソース選択、<code>input.color()</code>で色選択。チャートにインジケーターを追加した後、歯車アイコンから設定画面を開けば、コードを一切触らずにパラメータを調整できる。</p>



<h2 class="wp-block-heading">例5: 条件で背景色を変える</h2>



<p class="wp-block-paragraph">終値がSMAの上にあれば緑、下にあれば赤に背景色を変えるシンプルなトレンド判定。</p>



<pre class="pine-code">
//@version=6
indicator("トレンド背景色", overlay=true)
sma50 = ta.sma(close, 50)
isUpTrend = close > sma50
bgcolor(isUpTrend ? color.new(color.green, 90) : color.new(color.red, 90))
plot(sma50, "SMA50", color.gray, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>bgcolor()</code>は背景色を変更する関数。<code>color.new(色, 透明度)</code>で透明度を0〜100の範囲で指定する。90なら「ほぼ透明」だ。<code>条件 ? 値A : 値B</code>は三項演算子で、条件が<code>true</code>なら値Aを、<code>false</code>なら値Bを返す。</p>



<h2 class="wp-block-heading">例6: ローソク足の色を変える</h2>



<p class="wp-block-paragraph">出来高が過去20本の平均を超えたバーの色を変える。大出来高のバーが視覚的にわかる。</p>



<pre class="pine-code">
//@version=6
indicator("出来高バー色", overlay=true)
avgVol = ta.sma(volume, 20)
highVol = volume > avgVol * 1.5
barcolor(highVol ? color.yellow : na)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>barcolor()</code>はローソク足の色を変更する関数。<code>na</code>を返すとデフォルトの色のままになる。この例では出来高が平均の1.5倍を超えたバーだけ黄色にし、それ以外はそのままにしている。</p>



<h2 class="wp-block-heading">例7: クロスで矢印シグナルを出す</h2>



<p class="wp-block-paragraph">EMAのゴールデンクロス・デッドクロスの瞬間に矢印を表示する。</p>



<pre class="pine-code">
//@version=6
indicator("クロス矢印", overlay=true)
fast = ta.ema(close, 12)
slow = ta.ema(close, 26)
plotshape(ta.crossover(fast, slow), "買い", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(ta.crossunder(fast, slow), "売り", shape.triangledown, location.abovebar, color.red, size=size.small)
plot(fast, "EMA12", color.blue)
plot(slow, "EMA26", color.red)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>ta.crossover(A, B)</code>はAがBを下から上に抜けた瞬間だけ<code>true</code>を返す。<code>plotshape()</code>は条件が<code>true</code>のバーにだけ図形を表示する。<code>location.belowbar</code>は安値の下、<code>location.abovebar</code>は高値の上に配置する。</p>



<h2 class="wp-block-heading">例8: RSIを別パネルに表示する</h2>



<p class="wp-block-paragraph">RSIをチャート下部の別パネルに表示し、買われすぎ・売られすぎの水平線も引く。</p>



<pre class="pine-code">
//@version=6
indicator("RSI", overlay=false)
rsiLen = input.int(14, "期間")
rsi = ta.rsi(close, rsiLen)
plot(rsi, "RSI", color.purple, 2)
hline(70, "買われすぎ", color.red, hline.style_dashed)
hline(30, "売られすぎ", color.green, hline.style_dashed)
hline(50, "中間", color.gray, hline.style_dotted)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>overlay=false</code>にすると、メインチャートとは別のパネルにインジケーターが表示される。RSIやMACDなど、価格と異なるスケールの指標はこちらを使う。<code>hline()</code>は固定の水平線を引く関数だ。</p>



<p class="wp-block-paragraph">構文の詳細をもっと体系的に学びたい方はこちらの記事が参考になる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-kakikata/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトの書き方｜基本構文をコード付きで完全解説</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践テクニックを見る</a></p>



<h2 class="wp-block-heading">例9: MACDを表示する</h2>



<p class="wp-block-paragraph">MACDライン、シグナルライン、ヒストグラムの3要素をまとめて表示する。複数戻り値の関数の使い方がわかる例。</p>



<pre class="pine-code">
//@version=6
indicator("MACD")
[macdLine, signalLine, hist] = ta.macd(close, 12, 26, 9)
plot(macdLine, "MACD", color.blue, 2)
plot(signalLine, "Signal", color.orange, 2)
plot(hist, "Histogram", color=hist >= 0 ? color.green : color.red, style=plot.style_columns)
hline(0, "ゼロ", color.gray)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>ta.macd()</code>は3つの値を返す。<code>[変数1, 変数2, 変数3] = 関数()</code>の形式で受け取る。ヒストグラムは<code>plot.style_columns</code>で棒グラフとして表示し、正なら緑、負なら赤に色分けしている。</p>



<h2 class="wp-block-heading">例10: ボリンジャーバンドを帯で表示する</h2>



<p class="wp-block-paragraph">ボリンジャーバンドの上下バンド間を塗りつぶして帯状に表示する。<code>fill()</code>の使い方がわかる例。</p>



<pre class="pine-code">
//@version=6
indicator("ボリンジャーバンド", overlay=true)
length = input.int(20, "期間")
mult = input.float(2.0, "倍率")
[upper, middle, lower] = ta.bb(close, length, mult)
p1 = plot(upper, "Upper", color.blue)
p2 = plot(lower, "Lower", color.blue)
plot(middle, "Middle", color.gray)
fill(p1, p2, color=color.new(color.blue, 90))
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>fill()</code>は2つの<code>plot</code>の間を塗りつぶす関数。<code>plot()</code>の戻り値を変数に保存して、それを<code>fill()</code>に渡す。透明度90で薄く塗ることで、ローソク足が見やすいままバンド帯を可視化できる。</p>



<h2 class="wp-block-heading">例11: 前日の高値・安値を表示する</h2>



<p class="wp-block-paragraph">デイトレーダーがよく使う、前日の高値と安値を水平線として当日のチャートに表示する例。<code>request.security()</code>の基本的な使い方がわかる。</p>



<pre class="pine-code">
//@version=6
indicator("前日高安", overlay=true)
pdh = request.security(syminfo.tickerid, "D", high[1])
pdl = request.security(syminfo.tickerid, "D", low[1])
plot(pdh, "前日高値", color.red, 2, plot.style_stepline)
plot(pdl, "前日安値", color.green, 2, plot.style_stepline)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>request.security()</code>は別の時間足のデータを取得する関数。第1引数が銘柄、第2引数が時間足（<code>"D"</code>は日足）、第3引数が取得したいデータ。<code>high[1]</code>で「前日の高値」を取得している。<code>plot.style_stepline</code>で階段状の水平ラインとして描画する。</p>



<h2 class="wp-block-heading">例12: 特定の時間帯だけ背景色を塗る</h2>



<p class="wp-block-paragraph">東京時間（9:00〜15:00 JST）だけ背景色をハイライトする。FXトレードで市場時間を意識するときに使う。</p>



<pre class="pine-code">
//@version=6
indicator("東京時間ハイライト", overlay=true)
tokyoSession = not na(time(timeframe.period, "0000-0600", "Asia/Tokyo"))
bgcolor(tokyoSession ? color.new(color.red, 92) : na)
</pre>



<p class="wp-block-paragraph"><code>time()</code>関数の第2引数でセッション時間を指定し、第3引数でタイムゾーンを指定する。戻り値が<code>na</code>でなければ、指定した時間帯内ということだ。TradingViewのチャートがどのタイムゾーン設定でも、正しく判定される。</p>



<p class="wp-block-paragraph">時間指定のコードをもっと詳しく知りたい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-time/">Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-time/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<h2 class="wp-block-heading">例13: varで累積カウンターを作る</h2>



<p class="wp-block-paragraph"><code>var</code>キーワードを使って、条件を満たしたバーの数を数える。Pineスクリプト特有の「バーごと実行」の概念を理解する例。</p>



<pre class="pine-code">
//@version=6
indicator("陽線カウント")
var int bullCount = 0
if close > open
    bullCount := bullCount + 1
plot(bullCount, "累計陽線数", color.green, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>var</code>を付けた変数は最初のバーでのみ初期化され、以降は値を保持し続ける。<code>var</code>なしだとバーごとにリセットされるため、カウンターとして機能しない。再代入には<code>:=</code>を使う（<code>=</code>は初回宣言用）。</p>



<h2 class="wp-block-heading">例14: 自作関数を定義する</h2>



<p class="wp-block-paragraph">繰り返し使う計算を関数にまとめる。この例では、2つの値の変化率を計算する関数を定義している。</p>



<pre class="pine-code">
//@version=6
indicator("変化率")

// 自作関数: 変化率を計算
pctChange(current, previous) =>
    (current - previous) / previous * 100

// 使用例
change1 = pctChange(close, close[1])    // 前日比
change5 = pctChange(close, close[5])    // 5日前比

plot(change1, "前日比%", color.blue)
plot(change5, "5日前比%", color.orange)
hline(0, "ゼロ")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>関数名(引数) =&gt;</code>の形式で1行関数を定義する。複数行の処理が必要な場合はインデントで書く。一度定義すれば何度でも呼び出せるので、同じ計算の繰り返しを避けられる。</p>



<h2 class="wp-block-heading">例15: ラベルで価格を表示する</h2>



<p class="wp-block-paragraph">最新バーに現在の価格とRSIの値をラベルで表示する。<code>label.new()</code>の使い方がわかる例。</p>



<pre class="pine-code">
//@version=6
indicator("価格ラベル", overlay=true)
rsi = ta.rsi(close, 14)

if barstate.islast
    labelText = "価格: " + str.tostring(close, format.mintick) + "\nRSI: " + str.tostring(rsi, "#.#")
    label.new(bar_index, high, labelText, style=label.style_label_down, color=color.blue, textcolor=color.white, size=size.normal)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>barstate.islast</code>は最新バーでのみ<code>true</code>になる条件。これを使わないと過去のすべてのバーにラベルが作られてしまう。<code>str.tostring()</code>は数値を文字列に変換する関数で、第2引数で表示フォーマットを指定する。<code>\n</code>は改行だ。</p>



<h2 class="wp-block-heading">例16: テーブルで情報パネルを作る</h2>



<p class="wp-block-paragraph">チャートの右上に現在の相場情報をまとめたミニパネルを表示する。</p>



<pre class="pine-code">
//@version=6
indicator("情報パネル", overlay=true)
rsi = ta.rsi(close, 14)
sma = ta.sma(close, 20)
trend = close > sma ? "↑ 上昇" : "↓ 下降"

var table panel = table.new(position.top_right, 2, 3, bgcolor=color.new(color.black, 80), border_width=1)
if barstate.islast
    table.cell(panel, 0, 0, "トレンド", text_color=color.gray, text_size=size.small)
    table.cell(panel, 1, 0, trend, text_color=close > sma ? color.green : color.red, text_size=size.small)
    table.cell(panel, 0, 1, "RSI", text_color=color.gray, text_size=size.small)
    table.cell(panel, 1, 1, str.tostring(rsi, "#.#"), text_color=color.white, text_size=size.small)
    table.cell(panel, 0, 2, "SMA20", text_color=color.gray, text_size=size.small)
    table.cell(panel, 1, 2, str.tostring(sma, format.mintick), text_color=color.white, text_size=size.small)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>table.new()</code>でテーブルを作成し、<code>table.cell()</code>で各セルに値を入れる。<code>position.top_right</code>でチャート右上に固定される。<code>var</code>で宣言することで、テーブルオブジェクトが毎バー再生成されるのを防いでいる。</p>



<h2 class="wp-block-heading">例17: アラート条件を設定する</h2>



<p class="wp-block-paragraph">RSIが70を超えたときと30を下回ったときにアラートを鳴らせるようにする。</p>



<pre class="pine-code">
//@version=6
indicator("RSIアラート")
rsi = ta.rsi(close, 14)
plot(rsi, "RSI", color.purple, 2)
hline(70, "上限")
hline(30, "下限")

alertcondition(ta.crossover(rsi, 70), "RSI 70超え", "{{ticker}}: RSIが70を超えました")
alertcondition(ta.crossunder(rsi, 30), "RSI 30割れ", "{{ticker}}: RSIが30を下回りました")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>alertcondition()</code>はアラート条件を登録する関数。スクリプトを保存してチャートに追加した後、TradingView上でアラートを手動で作成する必要がある。<code>{{ticker}}</code>は実行時に実際のティッカー名に置き換わるプレースホルダだ。</p>



<h2 class="wp-block-heading">例18: シンプルなストラテジー（バックテスト）</h2>



<p class="wp-block-paragraph">SMAクロスで売買するストラテジー。<code>strategy()</code>宣言に切り替えるだけで、バックテストが実行できる。</p>



<pre class="pine-code">
//@version=6
strategy("SMAクロス戦略", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
fast = ta.sma(close, 20)
slow = ta.sma(close, 50)

if ta.crossover(fast, slow)
    strategy.entry("Long", strategy.long)
if ta.crossunder(fast, slow)
    strategy.close("Long")

plot(fast, "SMA20", color.blue)
plot(slow, "SMA50", color.red)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>indicator()</code>の代わりに<code>strategy()</code>を使うとストラテジーモードになる。<code>strategy.entry()</code>でエントリー、<code>strategy.close()</code>で決済。チャート下部の「ストラテジーテスター」タブで損益曲線や勝率を確認できる。</p>



<h2 class="wp-block-heading">コード例の次のステップ</h2>



<p class="wp-block-paragraph">この記事の18の例でカバーした構文パターンを整理する。</p>



<p class="wp-block-paragraph"><code>plot()</code> / <code>plotshape()</code> — ライン描画とシグナル表示（例1〜3, 7〜10）。<code>input</code> — ユーザーパラメータの外出し（例4）。<code>bgcolor()</code> / <code>barcolor()</code> — 色の変更（例5, 6, 12）。<code>ta.</code>系関数 — テクニカル計算（例2, 3, 8, 9, 10）。<code>request.security()</code> — マルチタイムフレーム（例11）。<code>var</code> / <code>:=</code> — 値の保持と再代入（例13）。関数定義 — 処理のまとめ（例14）。<code>label</code> / <code>table</code> — 動的テキスト表示（例15, 16）。<code>alertcondition()</code> — アラート設定（例17）。<code>strategy</code> — バックテスト（例18）。</p>



<p class="wp-block-paragraph">これらの構文を組み合わせれば、実用的なオリジナルインジケーターが作れる。次は実際に自分のトレードアイデアをコードにしてみよう。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践ノウハウをもっと見る</a></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-example/">Pineスクリプトコード例｜初心者向けシンプルなインジケーター実例集</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-example/">Pineスクリプトコード例｜初心者向けシンプルなインジケーター実例集</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選</title>
		<link>https://pinescript-pro.com/pine-script-sample/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 02:39:24 +0000</pubDate>
				<category><![CDATA[作る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1293</guid>

					<description><![CDATA[<p>Pineスクリプトを学びたいけど、ゼロから書くのはハードルが高い。まずは動くコードを触りながら覚えたい。 そんな人のために、コピペでそのまま動くPineスクリプトのサンプルコードを10本用意した。すべてv6対応、すべて実...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-sample/">Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-sample/">Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pineスクリプトを学びたいけど、ゼロから書くのはハードルが高い。まずは動くコードを触りながら覚えたい。</p>



<p class="wp-block-paragraph">そんな人のために、コピペでそのまま動くPineスクリプトのサンプルコードを10本用意した。すべてv6対応、すべて実用的なインジケーターだ。「教材用の最小コード」ではなく、実際のトレードで使えるレベルのコードを厳選している。</p>



<p class="wp-block-paragraph">使い方は簡単だ。TradingViewのPineエディタを開き、コードをコピペして「チャートへ追加」をクリックするだけ。動作を確認したら、パラメータを変えたりロジックを改造したりして、自分のオリジナルに育てていってほしい。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践的な活用法を見る</a></p>



<h2 class="wp-block-heading">サンプルの使い方</h2>



<p class="wp-block-paragraph">コードの貼り付け手順を確認しておこう。</p>



<p class="wp-block-paragraph">TradingViewでチャートを開き、画面下部の「Pineエディタ」タブをクリックする。エディタが開いたら、既存のコードをすべて削除し、この記事のサンプルコードを貼り付ける。右上の「保存」をクリックし、任意の名前で保存する。そのまま「チャートへ追加」をクリックすれば、チャート上にインジケーターが表示される。</p>



<p class="wp-block-paragraph">各サンプルには<code>input</code>関数でパラメータを設定してあるので、チャートに追加した後でインジケーターの設定画面から数値や色を自由に変更できる。</p>



<h2 class="wp-block-heading">① EMAクロス＋シグナル矢印</h2>



<p class="wp-block-paragraph">移動平均線のクロスでシグナルを表示する、最も基本的なインジケーター。短期EMAが長期EMAを上抜けたら買いシグナル、下抜けたら売りシグナルを矢印で表示する。</p>



<pre class="pine-code">
//@version=6
indicator("EMAクロス シグナル", overlay=true)

// パラメータ
fastLen = input.int(12, "短期EMA", minval=1, group="EMA設定")
slowLen = input.int(26, "長期EMA", minval=1, group="EMA設定")
showSignal = input.bool(true, "シグナル表示", group="表示設定")

// 計算
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)

// クロス判定
bullCross = ta.crossover(emaFast, emaSlow)
bearCross = ta.crossunder(emaFast, emaSlow)

// EMA描画
plot(emaFast, "短期EMA", color.new(color.blue, 0), 2)
plot(emaSlow, "長期EMA", color.new(color.red, 0), 2)

// シグナル矢印
plotshape(showSignal and bullCross, "買い", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(showSignal and bearCross, "売り", shape.triangledown, location.abovebar, color.red, size=size.small)

// クロス時にアラート
alertcondition(bullCross, "ゴールデンクロス", "{{ticker}}: EMAゴールデンクロス発生")
alertcondition(bearCross, "デッドクロス", "{{ticker}}: EMAデッドクロス発生")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ポイントは<code>ta.crossover()</code>と<code>ta.crossunder()</code>だ。前のバーでは条件を満たさず、現在のバーで初めて条件を満たした瞬間だけ<code>true</code>を返す。これにより、クロスした1本目のバーにだけ矢印が出る。</p>



<h2 class="wp-block-heading">② ボリンジャーバンド＋スクイーズ検知</h2>



<p class="wp-block-paragraph">ボリンジャーバンドの幅が縮小する「スクイーズ」を自動検知し、背景色で可視化するインジケーター。スクイーズはブレイクアウトの前兆として多くのトレーダーに注目されている。</p>



<pre class="pine-code">
//@version=6
indicator("BB スクイーズ検知", overlay=true)

// パラメータ
length = input.int(20, "BB期間", minval=1)
mult = input.float(2.0, "BB倍率", minval=0.1, step=0.1)
sqzLen = input.int(120, "スクイーズ判定期間", minval=20)
sqzPct = input.float(20.0, "スクイーズ閾値(%)", minval=5, maxval=50, tooltip="BBの幅が指定期間内の下位何%に入ったらスクイーズとみなすか")

// ボリンジャーバンド計算
[upper, middle, lower] = ta.bb(close, length, mult)
bbWidth = upper - lower

// スクイーズ判定: BB幅が過去N本の中で下位X%に入ったら
lowestWidth = ta.lowest(bbWidth, sqzLen)
highestWidth = ta.highest(bbWidth, sqzLen)
widthRange = highestWidth - lowestWidth
sqzThreshold = lowestWidth + widthRange * (sqzPct / 100)
isSqueeze = bbWidth <= sqzThreshold

// 描画
plot(upper, "Upper", color.new(color.blue, 30))
plot(middle, "Middle", color.new(color.blue, 60), style=plot.style_circles)
plot(lower, "Lower", color.new(color.blue, 30))
fill(plot(upper, display=display.none), plot(lower, display=display.none), color=color.new(color.blue, 92))

bgcolor(isSqueeze ? color.new(color.yellow, 85) : na)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">スクイーズの判定ロジックは「BB幅が過去N本の中で下位X%に入ったかどうか」で行っている。固定値ではなく相対的に判定するので、ボラティリティの異なる銘柄でも機能する。</p>



<h2 class="wp-block-heading">③ RSI＋ダイバージェンス検知</h2>



<p class="wp-block-paragraph">RSIの値だけでなく、価格とRSIの乖離（ダイバージェンス）を自動検出するインジケーター。隠れた転換シグナルを見逃さない。</p>



<pre class="pine-code">
//@version=6
indicator("RSI ダイバージェンス", overlay=false)

// パラメータ
rsiLen = input.int(14, "RSI期間", minval=2)
lbBack = input.int(5, "ピボット左バー", minval=1)
lbFwd = input.int(5, "ピボット右バー", minval=1)
obLevel = input.int(70, "買われすぎ")
osLevel = input.int(30, "売られすぎ")

// RSI計算
rsi = ta.rsi(close, rsiLen)

// ピボット検出
pivotLow = ta.pivotlow(rsi, lbBack, lbFwd)
pivotHigh = ta.pivothigh(rsi, lbBack, lbFwd)

// ブリッシュ・ダイバージェンス: 価格は安値更新、RSIは安値切り上げ
var float prevPivLowPrice = na
var float prevPivLowRSI = na
var int prevPivLowBar = na

bullDiv = false
if not na(pivotLow)
    if not na(prevPivLowPrice)
        if low[lbFwd] < prevPivLowPrice and pivotLow > prevPivLowRSI
            bullDiv := true
    prevPivLowPrice := low[lbFwd]
    prevPivLowRSI := pivotLow
    prevPivLowBar := bar_index - lbFwd

// ベアリッシュ・ダイバージェンス: 価格は高値更新、RSIは高値切り下げ
var float prevPivHighPrice = na
var float prevPivHighRSI = na
var int prevPivHighBar = na

bearDiv = false
if not na(pivotHigh)
    if not na(prevPivHighPrice)
        if high[lbFwd] > prevPivHighPrice and pivotHigh < prevPivHighRSI
            bearDiv := true
    prevPivHighPrice := high[lbFwd]
    prevPivHighRSI := pivotHigh
    prevPivHighBar := bar_index - lbFwd

// 描画
plot(rsi, "RSI", color.purple, 2)
hline(obLevel, "買われすぎ", color.new(color.red, 50))
hline(osLevel, "売られすぎ", color.new(color.green, 50))
hline(50, "50", color.new(color.gray, 70))

plotshape(bullDiv, "強気乖離", shape.labelup, location.bottom, color.green, text="Bull", textcolor=color.white, size=size.tiny, offset=-lbFwd)
plotshape(bearDiv, "弱気乖離", shape.labeldown, location.top, color.red, text="Bear", textcolor=color.white, size=size.tiny, offset=-lbFwd)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ダイバージェンスの検出には<code>ta.pivotlow()</code>と<code>ta.pivothigh()</code>でRSIのピボット（山と谷）を特定し、前回のピボットと比較している。<code>offset=-lbFwd</code>により、シグナルがピボット確定位置に正しく表示される。</p>



<h2 class="wp-block-heading">④ ATRベースの動的サポレジライン</h2>



<p class="wp-block-paragraph">ATR（Average True Range）を使って、現在のボラティリティに応じたサポートラインとレジスタンスラインを自動描画する。固定幅のラインではなく、相場の勢いに連動するのが特徴だ。</p>



<pre class="pine-code">
//@version=6
indicator("ATR サポレジ", overlay=true)

// パラメータ
atrLen = input.int(14, "ATR期間", minval=1)
atrMult = input.float(1.5, "ATR倍率", minval=0.1, step=0.1)
src = input.source(close, "ソース")

// 計算
atrValue = ta.atr(atrLen)
basis = ta.sma(src, atrLen)
upperBand = basis + atrValue * atrMult
lowerBand = basis - atrValue * atrMult

// トレンド判定
isAbove = close > basis

// 描画
basisPlot = plot(basis, "基準線", color.gray, 1)
upperPlot = plot(upperBand, "レジスタンス", color.new(color.red, 20), 2)
lowerPlot = plot(lowerBand, "サポート", color.new(color.green, 20), 2)
fill(upperPlot, basisPlot, color=color.new(color.red, 92))
fill(basisPlot, lowerPlot, color=color.new(color.green, 92))

// バーが上下バンドを超えたらマーク
plotshape(ta.crossover(close, upperBand), "上抜け", shape.diamond, location.abovebar, color.red, size=size.tiny)
plotshape(ta.crossunder(close, lowerBand), "下抜け", shape.diamond, location.belowbar, color.green, size=size.tiny)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>fill()</code>で帯状に色を塗ることで、サポートゾーンとレジスタンスゾーンが視覚的に把握しやすくなる。ATR倍率を大きくするとバンドが広がり、小さくすると狭まる。</p>



<h2 class="wp-block-heading">⑤ 出来高プロファイル（簡易版）</h2>



<p class="wp-block-paragraph">直近N本のバーの出来高を価格帯別に集計し、テーブルで表示する簡易的な出来高プロファイル。本格的なVPに近い情報をPineスクリプトだけで実現する。</p>



<pre class="pine-code">
//@version=6
indicator("簡易出来高プロファイル", overlay=true)

// パラメータ
lookback = input.int(100, "集計バー数", minval=20, maxval=500)
numBins = input.int(10, "価格帯数", minval=5, maxval=20)
tablePos = input.string("右上", "テーブル位置", options=["左上", "右上", "左下", "右下"])

// テーブル位置の変換
pos = switch tablePos
    "左上" => position.top_left
    "右上" => position.top_right
    "左下" => position.bottom_left
    "右下" => position.bottom_right
    => position.top_right

// 価格レンジの計算
highestPrice = ta.highest(high, lookback)
lowestPrice = ta.lowest(low, lookback)
priceRange = highestPrice - lowestPrice
binSize = priceRange / numBins

// 出来高の集計
var table vpTable = table.new(pos, 3, numBins + 1, bgcolor=color.new(color.black, 80), border_width=1)

if barstate.islast
    // ヘッダー
    table.cell(vpTable, 0, 0, "価格帯", text_color=color.gray, text_size=size.tiny)
    table.cell(vpTable, 1, 0, "出来高", text_color=color.gray, text_size=size.tiny)
    table.cell(vpTable, 2, 0, "バー", text_color=color.gray, text_size=size.tiny)

    // 各価格帯の出来高を集計
    maxVol = 0.0
    volArray = array.new<float>(numBins, 0.0)
    for i = 0 to lookback - 1
        binIndex = math.min(int((close[i] - lowestPrice) / binSize), numBins - 1)
        if binIndex >= 0 and binIndex < numBins
            currentVol = array.get(volArray, binIndex) + volume[i]
            array.set(volArray, binIndex, currentVol)
            if currentVol > maxVol
                maxVol := currentVol

    // テーブルに描画
    for i = 0 to numBins - 1
        priceLevel = lowestPrice + binSize * i
        vol = array.get(volArray, i)
        barLen = maxVol > 0 ? int(vol / maxVol * 10) : 0
        barStr = str.repeat("█", barLen)
        isCurrentBin = close >= priceLevel and close < priceLevel + binSize
        txtColor = isCurrentBin ? color.yellow : color.white

        table.cell(vpTable, 0, i + 1, str.tostring(priceLevel, "#.##"), text_color=txtColor, text_size=size.tiny)
        table.cell(vpTable, 1, i + 1, str.tostring(vol, "#"), text_color=txtColor, text_size=size.tiny)
        table.cell(vpTable, 2, i + 1, barStr, text_color=color.teal, text_size=size.tiny, text_halign=text.align_left)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">テーブル表示で出来高の多い価格帯が一目でわかる。現在の価格が属する価格帯は黄色でハイライトされる。<code>str.repeat()</code>で棒グラフ風の表示を実現しているのがポイントだ。</p>



<p class="wp-block-paragraph">構文の基礎をもう少しじっくり理解したい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-kakikata/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/8-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトの書き方｜基本構文をコード付きで完全解説</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの活用テクニックを探す</a></p>



<h2 class="wp-block-heading">⑥ マルチタイムフレームMA表示</h2>



<p class="wp-block-paragraph">上位足の移動平均線を現在のチャートに重ねて表示する。15分足チャートに日足のSMAを表示するなど、マルチタイムフレーム分析に必須のインジケーターだ。</p>



<pre class="pine-code">
//@version=6
indicator("MTF 移動平均線", overlay=true)

// パラメータ
tf1 = input.timeframe("60", "時間足1", group="タイムフレーム")
tf2 = input.timeframe("D", "時間足2", group="タイムフレーム")
maLen = input.int(20, "MA期間", minval=1, group="MA設定")
maType = input.string("EMA", "MA種類", options=["SMA", "EMA", "WMA"], group="MA設定")

// MA計算関数
calcMA(src, len, typ) =>
    switch typ
        "SMA" => ta.sma(src, len)
        "EMA" => ta.ema(src, len)
        "WMA" => ta.wma(src, len)
        => ta.ema(src, len)

// 上位足データ取得
ma1 = request.security(syminfo.tickerid, tf1, calcMA(close, maLen, maType))
ma2 = request.security(syminfo.tickerid, tf2, calcMA(close, maLen, maType))

// 現在の足のMA
maCurrent = calcMA(close, maLen, maType)

// 描画
plot(maCurrent, "現在足 " + maType, color.new(color.gray, 40), 1)
plot(ma1, tf1 + " " + maType, color.new(color.blue, 0), 2)
plot(ma2, tf2 + " " + maType, color.new(color.orange, 0), 3)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>request.security()</code>の第2引数に<code>input.timeframe()</code>で取得した値を渡すことで、ユーザーが設定画面から時間足を自由に切り替えられる。v6ではダイナミックリクエストが標準なので、このコードはそのまま動く。</p>



<h2 class="wp-block-heading">⑦ 市場セッション時間帯ハイライト</h2>



<p class="wp-block-paragraph">東京・ロンドン・ニューヨークの各市場時間を背景色でハイライトする。FXトレーダーなら必ず入れておきたいインジケーターだ。</p>



<pre class="pine-code">
//@version=6
indicator("市場セッション", overlay=true)

// パラメータ
showTokyo = input.bool(true, "東京セッション", group="表示設定")
showLondon = input.bool(true, "ロンドンセッション", group="表示設定")
showNY = input.bool(true, "NYセッション", group="表示設定")
tokyoColor = input.color(color.new(color.red, 90), "東京色", group="色設定")
londonColor = input.color(color.new(color.green, 90), "ロンドン色", group="色設定")
nyColor = input.color(color.new(color.blue, 90), "NY色", group="色設定")

// セッション判定
tokyoSession = not na(time(timeframe.period, "0000-0900", "Asia/Tokyo"))
londonSession = not na(time(timeframe.period, "0800-1630", "Europe/London"))
nySession = not na(time(timeframe.period, "0930-1600", "America/New_York"))

// 背景色
bgcolor(showTokyo and tokyoSession ? tokyoColor : na, title="東京")
bgcolor(showLondon and londonSession ? londonColor : na, title="ロンドン")
bgcolor(showNY and nySession ? nyColor : na, title="NY")

// セッション開始ラインの表示
if showTokyo and tokyoSession and not tokyoSession[1]
    line.new(bar_index, high, bar_index, low, color=color.red, style=line.style_dotted, extend=extend.both)
if showLondon and londonSession and not londonSession[1]
    line.new(bar_index, high, bar_index, low, color=color.green, style=line.style_dotted, extend=extend.both)
if showNY and nySession and not nySession[1]
    line.new(bar_index, high, bar_index, low, color=color.blue, style=line.style_dotted, extend=extend.both)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>time()</code>関数の第3引数でタイムゾーンを指定しているのがポイントだ。これにより、TradingViewのチャートがどのタイムゾーンに設定されていても、正しいセッション時間が判定される。夏時間にも自動で対応する。</p>



<p class="wp-block-paragraph">時間指定のロジックをもっと詳しく知りたい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-time/">Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-time/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/11-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<h2 class="wp-block-heading">⑧ 前日の高値・安値・終値ライン</h2>



<p class="wp-block-paragraph">前日の高値（PDH）、安値（PDL）、終値（PDC）を水平線として当日のチャートに表示する。デイトレーダーが意識する価格帯を自動で可視化できる。</p>



<pre class="pine-code">
//@version=6
indicator("前日 高値・安値・終値", overlay=true)

// パラメータ
showPDH = input.bool(true, "前日高値", group="表示")
showPDL = input.bool(true, "前日安値", group="表示")
showPDC = input.bool(true, "前日終値", group="表示")
pdhColor = input.color(color.red, "高値色", group="色")
pdlColor = input.color(color.green, "安値色", group="色")
pdcColor = input.color(color.orange, "終値色", group="色")

// 前日データ取得
pdh = request.security(syminfo.tickerid, "D", high[1])
pdl = request.security(syminfo.tickerid, "D", low[1])
pdc = request.security(syminfo.tickerid, "D", close[1])

// 描画
plot(showPDH ? pdh : na, "PDH", pdhColor, 2, plot.style_stepline_diamond)
plot(showPDL ? pdl : na, "PDL", pdlColor, 2, plot.style_stepline_diamond)
plot(showPDC ? pdc : na, "PDC", pdcColor, 1, plot.style_stepline)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>request.security()</code>で日足の<code>high[1]</code>を取得することで、前日の高値を得ている。<code>[1]</code>を付けないと当日のデータ（リアルタイムで変動する値）になるので注意。<code>plot.style_stepline_diamond</code>で階段状のラインとして描画し、日足の切り替わりが視覚的にわかるようにしている。</p>



<h2 class="wp-block-heading">⑨ EMAクロス・ストラテジー（バックテスト用）</h2>



<p class="wp-block-paragraph">EMAのクロスでエントリーし、ATRベースの損切り・利確で決済するストラテジー。バックテストの結果をストラテジーテスターで確認できる。</p>



<pre class="pine-code">
//@version=6
strategy("EMAクロス戦略", overlay=true, initial_capital=1000000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)

// パラメータ
fastLen = input.int(12, "短期EMA", minval=1, group="EMA")
slowLen = input.int(26, "長期EMA", minval=1, group="EMA")
atrLen = input.int(14, "ATR期間", minval=1, group="リスク")
slMult = input.float(2.0, "損切り(ATR倍)", minval=0.1, step=0.1, group="リスク")
tpMult = input.float(3.0, "利確(ATR倍)", minval=0.1, step=0.1, group="リスク")

// 計算
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)
atr = ta.atr(atrLen)

// エントリー条件
longCond = ta.crossover(emaFast, emaSlow)
shortCond = ta.crossunder(emaFast, emaSlow)

// ロングエントリー
if longCond
    slPrice = close - atr * slMult
    tpPrice = close + atr * tpMult
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", from_entry="Long", stop=slPrice, limit=tpPrice)

// ショートでクローズ（ドテンせず決済のみ）
if shortCond
    strategy.close("Long")

// 描画
plot(emaFast, "EMA Fast", color.blue, 2)
plot(emaSlow, "EMA Slow", color.red, 2)
bgcolor(strategy.position_size > 0 ? color.new(color.green, 92) : na)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">損切り・利確をATR基準にしているため、ボラティリティに応じて自動的に幅が調整される。<code>strategy.exit()</code>の<code>from_entry</code>にエントリーIDを指定するのはv6の必須事項だ。バックテスト結果はチャート下部の「ストラテジーテスター」タブで確認できる。</p>



<h2 class="wp-block-heading">⑩ マルチ情報ダッシュボード</h2>



<p class="wp-block-paragraph">RSI、MACD、ATR、出来高比率、トレンド判定などの情報を1つのテーブルにまとめて表示するダッシュボード型インジケーター。複数のインジケーターを同時に確認できる。</p>



<pre class="pine-code">
//@version=6
indicator("トレードダッシュボード", overlay=true)

// パラメータ
rsiLen = input.int(14, "RSI期間")
emaLen = input.int(20, "EMA期間")
atrLen = input.int(14, "ATR期間")

// 計算
rsi = ta.rsi(close, rsiLen)
ema = ta.ema(close, emaLen)
atr = ta.atr(atrLen)
[macdLine, signalLine, hist] = ta.macd(close, 12, 26, 9)
avgVol = ta.sma(volume, 20)
volRatio = volume / avgVol

// トレンド判定
trend = close > ema and ema > ema[1] ? "上昇" : close < ema and ema < ema[1] ? "下降" : "レンジ"
trendColor = trend == "上昇" ? color.green : trend == "下降" ? color.red : color.gray

// RSI判定
rsiZone = rsi > 70 ? "過熱" : rsi < 30 ? "売られ" : "中立"
rsiColor = rsi > 70 ? color.red : rsi < 30 ? color.green : color.gray

// MACD判定
macdSignal = hist > 0 and hist > hist[1] ? "強気↑" : hist > 0 ? "強気" : hist < 0 and hist < hist[1] ? "弱気↓" : "弱気"
macdColor = hist > 0 ? color.green : color.red

// テーブル作成
var table dash = table.new(position.top_right, 2, 7, bgcolor=color.new(color.black, 75), border_width=1, border_color=color.new(color.gray, 60))

if barstate.islast
    // ヘッダー
    table.cell(dash, 0, 0, syminfo.ticker, text_color=color.white, text_size=size.normal, bgcolor=color.new(color.blue, 60))
    table.cell(dash, 1, 0, str.tostring(close, format.mintick), text_color=color.white, text_size=size.normal, bgcolor=color.new(color.blue, 60))
    // トレンド
    table.cell(dash, 0, 1, "トレンド", text_color=color.gray, text_size=size.small)
    table.cell(dash, 1, 1, trend, text_color=trendColor, text_size=size.small)
    // RSI
    table.cell(dash, 0, 2, "RSI(" + str.tostring(rsiLen) + ")", text_color=color.gray, text_size=size.small)
    table.cell(dash, 1, 2, str.tostring(rsi, "#.#") + " " + rsiZone, text_color=rsiColor, text_size=size.small)
    // MACD
    table.cell(dash, 0, 3, "MACD", text_color=color.gray, text_size=size.small)
    table.cell(dash, 1, 3, macdSignal, text_color=macdColor, text_size=size.small)
    // ATR
    table.cell(dash, 0, 4, "ATR(" + str.tostring(atrLen) + ")", text_color=color.gray, text_size=size.small)
    table.cell(dash, 1, 4, str.tostring(atr, format.mintick), text_color=color.white, text_size=size.small)
    // 出来高比率
    table.cell(dash, 0, 5, "出来高比", text_color=color.gray, text_size=size.small)
    table.cell(dash, 1, 5, str.tostring(volRatio, "#.##") + "x", text_color=volRatio > 1.5 ? color.yellow : color.white, text_size=size.small)
    // EMA
    table.cell(dash, 0, 6, "EMA(" + str.tostring(emaLen) + ")", text_color=color.gray, text_size=size.small)
    table.cell(dash, 1, 6, str.tostring(ema, format.mintick), text_color=color.white, text_size=size.small)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>table.new()</code>でチャート右上にダッシュボードを固定配置している。各指標の状態を色分けすることで、チャートを見ながら複数の判断材料を一画面で確認できる。出来高が通常の1.5倍を超えると黄色でハイライトされるなど、実用的な工夫も入れてある。</p>



<h2 class="wp-block-heading">サンプルのカスタマイズ方法</h2>



<p class="wp-block-paragraph">10本のサンプルはすべて<code>input</code>関数でパラメータを外出ししてあるので、コードを書き換えずに数値を調整できる。チャートにインジケーターを追加した後、歯車アイコンから設定画面を開いてパラメータを変更するだけだ。</p>



<p class="wp-block-paragraph">より深いカスタマイズをしたい場合は、コードを直接編集する。たとえば、①のEMAクロスにRSIフィルターを追加するなら、エントリー条件にRSIの閾値チェックを加えればいい。</p>



<pre class="pine-code">
// RSIフィルターを追加する例
rsi = ta.rsi(close, 14)
bullCross = ta.crossover(emaFast, emaSlow) and rsi < 70   // 買われすぎでないとき限定
bearCross = ta.crossunder(emaFast, emaSlow) and rsi > 30   // 売られすぎでないとき限定
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">複数のサンプルのロジックを組み合わせるのも有効だ。⑦のセッション時間と①のシグナルを組み合わせれば「ロンドン時間のみシグナルを出す」インジケーターが作れる。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">全10本のサンプルをv6対応・コピペ可能な形で紹介した。基本的なEMAクロスから、ダイバージェンス検知、出来高プロファイル、マルチ情報ダッシュボードまで、実用的なインジケーターを網羅している。</p>



<p class="wp-block-paragraph">まずは気になったサンプルを1つ選んでチャートに追加してみてほしい。動いているコードを読む・改造するのが、Pineスクリプトを最速で習得する方法だ。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践ノウハウをもっと見る</a></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-sample/">Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-sample/">Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pineスクリプトの書き方｜基本構文をコード付きで完全解説</title>
		<link>https://pinescript-pro.com/pine-script-kakikata/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 02:12:36 +0000</pubDate>
				<category><![CDATA[作る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1286</guid>

					<description><![CDATA[<p>Pineスクリプトを書いてみたいけど、何から始めればいいかわからない。公式リファレンスを見ても情報が多すぎて、最初の一歩が踏み出せない。 Pineスクリプトの構文はシンプルだ。PythonやJavaScriptを知らなく...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pineスクリプトを書いてみたいけど、何から始めればいいかわからない。公式リファレンスを見ても情報が多すぎて、最初の一歩が踏み出せない。</p>



<p class="wp-block-paragraph">Pineスクリプトの構文はシンプルだ。PythonやJavaScriptを知らなくても、基本的な書き方のパターンさえ押さえれば、インジケーターもストラテジーも書ける。実際、Pineスクリプトはトレーダーが使うことを前提に設計された言語で、汎用プログラミング言語よりもはるかに覚えることが少ない。</p>



<p class="wp-block-paragraph">この記事では、Pineスクリプトの基本構文をv6ベースで体系的に解説する。すべてのセクションにコピペで動くコード例を付けたので、Pineエディタに貼り付けて実際に動かしながら読み進めてほしい。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの全体像と活用法を見る</a></p>



<h2 class="wp-block-heading">スクリプトの基本構造</h2>



<p class="wp-block-paragraph">Pineスクリプトは、どんなコードでも必ず同じ3つのパートで構成される。この構造を頭に入れておけば、他人のコードを読むときにも迷わない。</p>



<pre class="pine-code">
//@version=6                           // ① バージョン宣言
indicator("マイインジケーター", overlay=true) // ② スクリプト種別宣言
plot(close)                            // ③ ロジック＋出力
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>① バージョン宣言</strong>は必ず1行目に書く。2025年現在の最新はv6だ。<code>//@version=6</code>と書けばいい。古いサンプルコードでは<code>//@version=5</code>や<code>//@version=4</code>になっているが、新規で書く場合はv6を使うこと。</p>



<p class="wp-block-paragraph"><strong>② スクリプト種別宣言</strong>は、このスクリプトが何をするものかをTradingViewに伝える部分だ。選択肢は2つ。チャートに線やシグナルを表示するなら<code>indicator()</code>。売買のバックテストをするなら<code>strategy()</code>。どちらか一方を必ず記述する。</p>



<p class="wp-block-paragraph"><strong>③ ロジック＋出力</strong>がスクリプトの本体だ。計算処理を書き、<code>plot()</code>などの出力関数でチャートに結果を表示する。</p>



<h2 class="wp-block-heading">indicator()とstrategy()の違い</h2>



<p class="wp-block-paragraph">スクリプト種別宣言をもう少し掘り下げる。<code>indicator()</code>と<code>strategy()</code>はそれぞれ異なる引数を持っており、スクリプト全体の挙動に影響する。</p>



<p class="wp-block-paragraph"><code>indicator()</code>の基本的な書き方:</p>



<pre class="pine-code">
//@version=6
indicator("RSIインジケーター", overlay=false)
rsiValue = ta.rsi(close, 14)
plot(rsiValue, "RSI", color.purple)
hline(70, "買われすぎ", color.red)
hline(30, "売られすぎ", color.green)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>overlay=true</code>にするとメインチャートに重ねて表示される。移動平均線やボリンジャーバンドなど、ローソク足と同じスケールのインジケーターで使う。<code>overlay=false</code>にすると、チャート下部に別パネルとして表示される。RSIやMACDなど、価格とは異なるスケールのオシレーター系で使う。</p>



<p class="wp-block-paragraph"><code>strategy()</code>の基本的な書き方:</p>



<pre class="pine-code">
//@version=6
strategy("SMAクロス", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
smaFast = ta.sma(close, 20)
smaSlow = ta.sma(close, 50)
if ta.crossover(smaFast, smaSlow)
    strategy.entry("Buy", strategy.long)
if ta.crossunder(smaFast, smaSlow)
    strategy.close("Buy")
plot(smaFast, "SMA20", color.blue)
plot(smaSlow, "SMA50", color.red)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>strategy()</code>には注文数量の設定（<code>default_qty_type</code>、<code>default_qty_value</code>）や初期資金（<code>initial_capital</code>）など、バックテスト固有のパラメータがある。</p>



<p class="wp-block-paragraph">Pineスクリプトがそもそも何かを知りたい方は、こちらの記事で全体像を掴んでから戻ってくるとスムーズだ。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-guide/">Pineスクリプト（Pine Script）とは？できること・始め方を完全解説</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-guide/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/1-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/1-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/1-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/1-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/1-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/1-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプト（Pine Script）とは？できること・始め方を完全解説</div><time class="time__date gf">2026.02.21</time></div></a></div>


<h2 class="wp-block-heading">変数の宣言と型</h2>



<p class="wp-block-paragraph">Pineスクリプトの変数宣言は直感的だ。型を明示することもできるし、省略して自動推論に任せることもできる。</p>



<pre class="pine-code">
//@version=6
indicator("変数の例", overlay=true)

// 型を省略（自動推論）
length = 20
src = close

// 型を明示
int length2 = 50
float threshold = 1.5
bool isUpTrend = close > ta.sma(close, 200)
string label_text = "トレンド"
color lineColor = isUpTrend ? color.green : color.red

smaValue = ta.sma(src, length)
plot(smaValue, "SMA", lineColor, 2)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">基本型は5つだ。<code>int</code>（整数）、<code>float</code>（小数）、<code>bool</code>（真偽値）、<code>string</code>（文字列）、<code>color</code>（色）。これに加えて、<code>line</code>、<code>label</code>、<code>box</code>、<code>table</code>といった描画オブジェクト型がある。</p>



<p class="wp-block-paragraph">型を明示する必要があるのは、変数の初期値が<code>na</code>（値なし）のときだ。Pineスクリプトでは初期値が<code>na</code>だと型を推論できないため、明示が必要になる。</p>



<pre class="pine-code">
float previousHigh = na   // OK: 型を明示
// previousHigh = na      // NG: 型がわからない
</pre>



<h2 class="wp-block-heading">varとvaripの使い分け</h2>



<p class="wp-block-paragraph">Pineスクリプト特有の概念が「バーごとの実行」だ。スクリプトはチャートの左端から右端に向かって、1本のバーごとに繰り返し実行される。変数の宣言方法によって、値の保持のされ方が変わる。</p>



<pre class="pine-code">
//@version=6
indicator("var と varip の違い")

// 通常の変数: バーごとに再初期化される
count1 = 0
count1 := count1 + 1   // 常に 1

// var変数: 最初のバーでのみ初期化。以降は値を保持
var int count2 = 0
count2 := count2 + 1   // 1, 2, 3, 4, ...

// varip変数: リアルタイムバーのティックごとに更新
varip int count3 = 0
count3 := count3 + 1   // ヒストリカルは var と同じ。リアルタイムはティックごとに加算

plot(count1, "通常", color.red)
plot(count2, "var", color.blue)
plot(count3, "varip", color.green)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>var</code>なしで宣言した変数は、バーごとにリセットされる。前のバーの値を保持したい場合は<code>var</code>を付ける。これはカウンター、フラグ、累計値の管理で頻繁に使うパターンだ。</p>



<p class="wp-block-paragraph"><code>varip</code>は<code>var</code>の拡張版で、リアルタイムバー（確定前の最新バー）でティックごとに値が更新される。ヒストリカルバーでは<code>var</code>と同じ挙動になる。リアルタイムの価格変動を追跡したい場合に使う。</p>



<h2 class="wp-block-heading">演算子</h2>



<p class="wp-block-paragraph">Pineスクリプトの演算子は他のプログラミング言語とほぼ同じだ。</p>



<p class="wp-block-paragraph">算術演算子は<code>+</code>（加算）、<code>-</code>（減算）、<code>*</code>（乗算）、<code>/</code>（除算）、<code>%</code>（剰余）。</p>



<p class="wp-block-paragraph">比較演算子は<code>==</code>（等しい）、<code>!=</code>（等しくない）、<code>&gt;</code>（より大きい）、<code>&lt;</code>（より小さい）、<code>&gt;=</code>（以上）、<code>&lt;=</code>（以下）。</p>



<p class="wp-block-paragraph">論理演算子は<code>and</code>、<code>or</code>、<code>not</code>。v6ではこれらが遅延評価されるため、<code>and</code>の左側が<code>false</code>なら右側は評価されない。</p>



<p class="wp-block-paragraph">代入演算子は<code>=</code>（初回代入）と<code>:=</code>（再代入）。Pineスクリプトでは初回の代入と再代入で演算子を使い分ける必要がある。</p>



<pre class="pine-code">
//@version=6
indicator("演算子の例")

// 初回代入は =
a = 10
b = 3

// 再代入は :=
var int total = 0
total := total + 1

// 比較と論理
isAbove = close > ta.sma(close, 20) and volume > ta.sma(volume, 20)

plot(isAbove ? 1 : 0, "条件成立")
</pre>



<p class="wp-block-paragraph">特に重要なのは<code>=</code>と<code>:=</code>の違いだ。最初に変数に値を入れるときは<code>=</code>。すでに宣言済みの変数に新しい値を入れるときは<code>:=</code>。これを間違えるとコンパイルエラーになる。</p>



<h2 class="wp-block-heading">条件分岐（if文とswitch文）</h2>



<p class="wp-block-paragraph">条件分岐の書き方は2種類ある。</p>



<p class="wp-block-paragraph"><code>if</code>文はシンプルな条件分岐に使う:</p>



<pre class="pine-code">
//@version=6
indicator("if文の例", overlay=true)
sma20 = ta.sma(close, 20)

// 基本形
if close > sma20
    label.new(bar_index, high, "上")

// if-else
direction = if close > sma20
    "上昇"
else
    "下降"

// if-else if-else
var color bgColor = na
if close > sma20 * 1.02
    bgColor := color.new(color.green, 80)
else if close < sma20 * 0.98
    bgColor := color.new(color.red, 80)
else
    bgColor := na

bgcolor(bgColor)
plot(sma20, "SMA20", color.orange)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Pineスクリプトのインデントにはスペース4つを使う。タブでもスペース2つでもなく、スペース4つだ。インデントが正しくないとコンパイルエラーになるので注意すること。</p>



<p class="wp-block-paragraph"><code>switch</code>文は複数の条件を整理するときに便利だ:</p>



<pre class="pine-code">
//@version=6
indicator("switch文の例")
rsi = ta.rsi(close, 14)

zone = switch
    rsi >= 70 => "買われすぎ"
    rsi <= 30 => "売られすぎ"
    => "中立"

plotchar(zone == "買われすぎ", "Over", "▲", location.top, color.red)
plotchar(zone == "売られすぎ", "Under", "▼", location.bottom, color.green)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">v6では<code>switch</code>文に必ずデフォルトケース（<code>=&gt;</code>で始まる行）を含める必要がある。省略するとコンパイルエラーになる。</p>



<h2 class="wp-block-heading">ループ（forとwhile）</h2>



<p class="wp-block-paragraph">繰り返し処理には<code>for</code>ループと<code>while</code>ループがある。</p>



<pre class="pine-code">
//@version=6
indicator("forループの例")

// 過去10本のバーの最高値を取得
highestInRange = high
for i = 1 to 9
    if high[i] > highestInRange
        highestInRange := high[i]

plot(highestInRange, "過去10本の最高値", color.blue)

// for...in でコレクションを処理
periods = array.from(10, 20, 50)
var label infoLabel = na
label.delete(infoLabel)
labelText = ""
for period in periods
    smaVal = ta.sma(close, period)
    labelText := labelText + "SMA" + str.tostring(period) + ": " + str.tostring(smaVal, "#.##") + "\n"
infoLabel := label.new(bar_index, high, labelText, style=label.style_label_down)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>while</code>ループは条件が<code>false</code>になるまで実行を続ける:</p>



<pre class="pine-code">
//@version=6
indicator("whileループの例")

// ボリュームが平均以上のバーを過去から探す
avgVol = ta.sma(volume, 20)
var int barsBack = 0
i = 1
while i <= 100
    if volume[i] > avgVol * 2
        barsBack := i
        break
    i := i + 1

plot(barsBack, "大出来高のバー数前")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ループ内で<code>break</code>を使うと途中で抜けられる。<code>continue</code>を使うと現在の反復をスキップして次に進む。</p>



<h2 class="wp-block-heading">関数の定義</h2>



<p class="wp-block-paragraph">Pineスクリプトでは、自分でオリジナルの関数を定義できる。繰り返し使う処理をまとめるのに便利だ。</p>



<pre class="pine-code">
//@version=6
indicator("関数定義の例", overlay=true)

// 単一行の関数（アロー記法）
percent(a, b) => (a - b) / b * 100

// 複数行の関数
getSignal(fastLen, slowLen) =>
    fast = ta.ema(close, fastLen)
    slow = ta.ema(close, slowLen)
    signal = ta.crossover(fast, slow) ? 1 : ta.crossunder(fast, slow) ? -1 : 0
    [fast, slow, signal]   // 複数の値を返す

// 関数の呼び出し
[emaFast, emaSlow, sig] = getSignal(12, 26)

plot(emaFast, "EMA12", color.blue)
plot(emaSlow, "EMA26", color.red)
plotshape(sig == 1, "買い", shape.triangleup, location.belowbar, color.green)
plotshape(sig == -1, "売り", shape.triangledown, location.abovebar, color.red)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">関数は<code>[値1, 値2]</code>のように複数の値を返すことができる。受け取り側も<code>[変数1, 変数2] = 関数名(引数)</code>の形式で書く。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">動くコードをすぐに試したい方はこちら</a></p>



<h2 class="wp-block-heading">input関数でユーザー入力を受け付ける</h2>



<p class="wp-block-paragraph"><code>input</code>関数を使うと、インジケーターの設定画面からパラメータを変更できるようになる。コードを書き換えずに数値を調整できるので、実用的なスクリプトには必須だ。</p>



<pre class="pine-code">
//@version=6
indicator("input関数の例", overlay=true)

// 数値入力
length = input.int(20, "期間", minval=1, maxval=200, step=1, group="SMA設定")
src = input.source(close, "ソース", group="SMA設定")

// 色入力
lineColor = input.color(color.blue, "線の色", group="表示設定")
lineWidth = input.int(2, "線の太さ", minval=1, maxval=5, group="表示設定")

// ON/OFF切り替え
showBand = input.bool(true, "バンド表示", group="表示設定")
bandMult = input.float(2.0, "バンド幅（倍率）", minval=0.5, maxval=5.0, step=0.1, group="SMA設定")

// 計算と表示
smaValue = ta.sma(src, length)
dev = ta.stdev(src, length) * bandMult

plot(smaValue, "SMA", lineColor, lineWidth)
plot(showBand ? smaValue + dev : na, "Upper", color.new(lineColor, 60))
plot(showBand ? smaValue - dev : na, "Lower", color.new(lineColor, 60))
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>input</code>関数は型ごとに専用の関数が用意されている。<code>input.int</code>（整数）、<code>input.float</code>（小数）、<code>input.bool</code>（真偽値）、<code>input.string</code>（文字列）、<code>input.color</code>（色）、<code>input.source</code>（データソース）など。</p>



<p class="wp-block-paragraph"><code>group</code>引数を使うと、設定画面でパラメータをグループ分けできる。項目が多いインジケーターでは整理のために必須だ。<code>tooltip</code>引数でマウスオーバー時のヒント文を追加することもできる。</p>



<h2 class="wp-block-heading">ヒストリー参照演算子（[]）</h2>



<p class="wp-block-paragraph">Pineスクリプト特有の重要な構文が、ヒストリー参照演算子<code>[]</code>だ。過去のバーの値を取得するために使う。</p>



<pre class="pine-code">
//@version=6
indicator("ヒストリー参照の例")

// 1本前の終値
prevClose = close[1]

// 2本前の高値
prevPrevHigh = high[2]

// 変化率の計算
change1 = close - close[1]           // 前日比
changePct = (close - close[1]) / close[1] * 100   // 前日比（%）

plot(changePct, "前日比%", color.blue)
hline(0, "ゼロライン")
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>close[1]</code>で1本前のバーの終値、<code>close[2]</code>で2本前、という具合に数字を増やしていく。<code>close[0]</code>は現在のバーの終値で、<code>close</code>と同じだ。</p>



<p class="wp-block-paragraph">この演算子は<code>series</code>型の値にのみ使える。v6ではリテラル（数値や文字列の固定値）にヒストリー参照を付けることはできなくなったので注意すること。たとえば<code>100[1]</code>はv6ではエラーになる。</p>



<h2 class="wp-block-heading">組み込み変数</h2>



<p class="wp-block-paragraph">Pineスクリプトには、よく使うデータがあらかじめ変数として用意されている。</p>



<p class="wp-block-paragraph">価格データは<code>open</code>（始値）、<code>high</code>（高値）、<code>low</code>（安値）、<code>close</code>（終値）、<code>volume</code>（出来高）、<code>hl2</code>（高値と安値の中間値）、<code>hlc3</code>（高値・安値・終値の平均）、<code>ohlc4</code>（4本値の平均）。</p>



<p class="wp-block-paragraph">時間データは<code>time</code>（バーの時刻）、<code>bar_index</code>（バーのインデックス番号）、<code>dayofweek</code>（曜日）、<code>hour</code>（時）、<code>minute</code>（分）。</p>



<p class="wp-block-paragraph">バー情報は<code>barstate.isconfirmed</code>（バーが確定したか）、<code>barstate.islast</code>（最新バーか）、<code>barstate.isrealtime</code>（リアルタイムバーか）。</p>



<p class="wp-block-paragraph">シンボル情報は<code>syminfo.ticker</code>（ティッカー名）、<code>syminfo.currency</code>（通貨）、<code>syminfo.mintick</code>（最小ティック）。</p>



<p class="wp-block-paragraph">これらはすべて宣言不要でそのまま使える。</p>



<pre class="pine-code">
//@version=6
indicator("組み込み変数の例", overlay=true)
// 金曜日の終値に色をつける
isFriday = dayofweek == dayofweek.friday
barColor = isFriday ? color.orange : na
barcolor(barColor)
</pre>



<h2 class="wp-block-heading">テクニカル分析関数（ta.系）</h2>



<p class="wp-block-paragraph"><code>ta.</code>名前空間には50以上のテクニカル分析関数がある。よく使うものを紹介する。</p>



<pre class="pine-code">
//@version=6
indicator("テクニカル関数の例", overlay=false)

// 移動平均
sma20 = ta.sma(close, 20)      // 単純移動平均
ema20 = ta.ema(close, 20)      // 指数移動平均

// オシレーター
rsi = ta.rsi(close, 14)         // RSI
[macdLine, signalLine, histogram] = ta.macd(close, 12, 26, 9)  // MACD

// ボラティリティ
atr = ta.atr(14)                // ATR
[upper, middle, lower] = ta.bb(close, 20, 2.0)   // ボリンジャーバンド

// クロス判定
goldenCross = ta.crossover(sma20, ta.sma(close, 50))   // ゴールデンクロス
deadCross = ta.crossunder(sma20, ta.sma(close, 50))     // デッドクロス

// 最高値・最安値
highest20 = ta.highest(high, 20)   // 過去20本の最高値
lowest20 = ta.lowest(low, 20)      // 過去20本の最安値

plot(rsi, "RSI", color.purple)
hline(70)
hline(30)
</pre>



<p class="wp-block-paragraph"><code>ta.macd</code>や<code>ta.bb</code>のように複数の値を返す関数は、<code>[変数1, 変数2, 変数3] = 関数()</code>の形式で受け取る。</p>



<h2 class="wp-block-heading">出力関数（plot系）</h2>



<p class="wp-block-paragraph">計算結果をチャートに表示するための出力関数を整理する。</p>



<pre class="pine-code">
//@version=6
indicator("出力関数の例", overlay=true)
sma = ta.sma(close, 20)
isUp = close > sma

// 基本的なライン描画
plot(sma, "SMA", color.blue, 2)

// 条件付きの色分け
plot(close, "終値", isUp ? color.green : color.red, style=plot.style_linebr)

// バーの色を変更
barcolor(isUp ? color.green : color.red)

// 背景色を変更
bgcolor(isUp ? color.new(color.green, 90) : color.new(color.red, 90))

// シェイプ（矢印やマーク）の表示
plotshape(ta.crossover(close, sma), "上抜け", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(ta.crossunder(close, sma), "下抜け", shape.triangledown, location.abovebar, color.red, size=size.small)

// 水平線
hline(0, "ゼロライン", color.gray, hline.style_dashed)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>plot()</code>はライン描画の基本。<code>plotshape()</code>は条件成立時に矢印やマークを表示する。<code>barcolor()</code>はローソク足の色を変える。<code>bgcolor()</code>は背景色を変える。<code>hline()</code>は水平線を引く。</p>



<p class="wp-block-paragraph">色の透明度は<code>color.new(色, 透明度)</code>で指定する。透明度は0（不透明）から100（完全透明）の範囲だ。</p>



<h2 class="wp-block-heading">アラートの設定</h2>



<p class="wp-block-paragraph">price action やテクニカル条件にもとづいてアラートを鳴らすコードの書き方だ。</p>



<pre class="pine-code">
//@version=6
indicator("アラートの例", overlay=true)
sma = ta.sma(close, 20)

// alertcondition: アラート作成ダイアログで使用可能な条件を定義
alertcondition(ta.crossover(close, sma), "SMA上抜け", "{{ticker}}: 終値がSMA20を上抜けました")
alertcondition(ta.crossunder(close, sma), "SMA下抜け", "{{ticker}}: 終値がSMA20を下抜けました")

// alert(): スクリプト実行中に直接アラートを発火
if ta.crossover(close, sma)
    alert("SMA上抜け: " + syminfo.ticker + " 価格=" + str.tostring(close), alert.freq_once_per_bar)

plot(sma, "SMA20", color.blue)
</pre>



<p class="wp-block-paragraph"><code>alertcondition()</code>は条件を登録するだけで、実際にアラートを有効にするにはTradingView上で手動設定が必要だ。<code>alert()</code>は直接アラートを発火する関数で、Webhookとの連携にも使える。</p>



<p class="wp-block-paragraph">メッセージ内の<code>{{ticker}}</code>や<code>{{close}}</code>はTradingViewが自動で実際の値に置換してくれるプレースホルダだ。</p>



<h2 class="wp-block-heading">ストラテジーの書き方</h2>



<p class="wp-block-paragraph">バックテスト用のストラテジーを書く基本パターンを示す。</p>



<pre class="pine-code">
//@version=6
strategy("EMAクロス戦略", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)

// パラメータ
fastLen = input.int(12, "短期EMA")
slowLen = input.int(26, "長期EMA")
slPct = input.float(2.0, "損切り%")
tpPct = input.float(4.0, "利確%")

// 計算
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)

// エントリー条件
longCondition = ta.crossover(emaFast, emaSlow)
shortCondition = ta.crossunder(emaFast, emaSlow)

// 注文
if longCondition
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", from_entry="Long", profit=close * tpPct / 100 / syminfo.mintick, loss=close * slPct / 100 / syminfo.mintick)

if shortCondition
    strategy.close("Long")

// 表示
plot(emaFast, "EMA Fast", color.blue)
plot(emaSlow, "EMA Slow", color.red)
bgcolor(strategy.position_size > 0 ? color.new(color.green, 90) : na)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><code>strategy.entry()</code>でエントリー、<code>strategy.exit()</code>で利確・損切り、<code>strategy.close()</code>で全ポジション決済。v6では<code>strategy.exit()</code>の<code>from_entry</code>パラメータが必須なので、必ずエントリーIDを指定すること。</p>



<p class="wp-block-paragraph"><code>strategy.position_size</code>は現在のポジションサイズを返す変数で、ポジションの有無を判定するのに使える。</p>



<p class="wp-block-paragraph">コピペで使える実用的なサンプルをもっと見たい方はこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-sample/">Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選</a></p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://pinescript-pro.com/pine-script-sample/"><figure class="eyecatch of-cover thum"><img loading="lazy" decoding="async" width="485" height="255" src="https://pinescript-pro.com/wp-content/uploads/2026/02/9-2-485x255.png" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://pinescript-pro.com/wp-content/uploads/2026/02/9-2-485x255.png 485w, https://pinescript-pro.com/wp-content/uploads/2026/02/9-2-300x158.png 300w, https://pinescript-pro.com/wp-content/uploads/2026/02/9-2-1024x538.png 1024w, https://pinescript-pro.com/wp-content/uploads/2026/02/9-2-768x403.png 768w, https://pinescript-pro.com/wp-content/uploads/2026/02/9-2.png 1200w" sizes="auto, (max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選</div><time class="time__date gf undo">2026.02.21</time></div></a></div>


<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの実践的な活用法を探す</a></p>



<h2 class="wp-block-heading">描画オブジェクト（line, label, box, table）</h2>



<p class="wp-block-paragraph">チャート上に動的な図形やテキストを描画するオブジェクト系の書き方だ。</p>



<pre class="pine-code">
//@version=6
indicator("描画オブジェクトの例", overlay=true)

// ラベル: 最新バーに情報を表示
if barstate.islast
    label.new(bar_index, high, "現在値: " + str.tostring(close, "#.##"), style=label.style_label_down, color=color.blue, textcolor=color.white)

// ライン: 直近の最高値に水平線
var line highLine = na
line.delete(highLine)
h20 = ta.highest(high, 20)
highLine := line.new(bar_index - 20, h20, bar_index, h20, color=color.red, style=line.style_dashed, width=2)

// テーブル: 画面端に情報パネル
var table infoTable = table.new(position.top_right, 2, 3, bgcolor=color.new(color.black, 80), border_width=1)
if barstate.islast
    table.cell(infoTable, 0, 0, "SMA20", text_color=color.gray, text_size=size.small)
    table.cell(infoTable, 1, 0, str.tostring(ta.sma(close, 20), "#.##"), text_color=color.white, text_size=size.small)
    table.cell(infoTable, 0, 1, "RSI", text_color=color.gray, text_size=size.small)
    table.cell(infoTable, 1, 1, str.tostring(ta.rsi(close, 14), "#.##"), text_color=color.white, text_size=size.small)
    table.cell(infoTable, 0, 2, "ATR", text_color=color.gray, text_size=size.small)
    table.cell(infoTable, 1, 2, str.tostring(ta.atr(14), "#.##"), text_color=color.white, text_size=size.small)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">描画オブジェクトは<code>var</code>で宣言してバーごとに削除→再作成するパターンが基本だ。<code>var</code>を使わないとバーごとにオブジェクトが増え続けてしまう。<code>barstate.islast</code>で最新バーでのみ実行する条件を加えると、不要な描画を防げる。</p>



<p class="wp-block-paragraph"><code>table</code>はチャートの端に固定されるパネルで、リアルタイムの情報表示に便利だ。<code>position.top_right</code>などで配置位置を指定する。</p>



<h2 class="wp-block-heading">request.security()で別の時間足を取得</h2>



<p class="wp-block-paragraph">マルチタイムフレーム分析をするには、<code>request.security()</code>で別の時間足のデータを取得する。</p>



<pre class="pine-code">
//@version=6
indicator("マルチタイムフレームの例", overlay=true)

// 日足のSMA20を15分足チャートに表示
dailySMA = request.security(syminfo.tickerid, "D", ta.sma(close, 20))
plot(dailySMA, "日足SMA20", color.orange, 2)

// 4時間足のRSIを取得
h4RSI = request.security(syminfo.tickerid, "240", ta.rsi(close, 14))
plotchar(h4RSI > 70, "4H RSI > 70", "●", location.abovebar, color.red, size=size.tiny)
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">第2引数の時間足は<code>"D"</code>（日足）、<code>"W"</code>（週足）、<code>"M"</code>（月足）、<code>"240"</code>（4時間足＝240分）のように文字列で指定する。v6ではこの引数に<code>series string</code>を渡せるようになり、動的に時間足を変更できるようになった。</p>



<h2 class="wp-block-heading">コメントの書き方</h2>



<p class="wp-block-paragraph">コードにコメントを付ける方法は2種類ある。</p>



<pre class="pine-code">
// 1行コメント: スラッシュ2つ
sma = ta.sma(close, 20)   // 行末コメントも可能

/* 
   複数行コメント:
   スラッシュ+アスタリスクで囲む
   長い説明を書くときに便利
*/
</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">コメントはコード量が増えてきたときに必ず役立つ。特に<code>input</code>のパラメータが多いスクリプトや、複雑なロジックを含むストラテジーでは、各セクションにコメントを入れる習慣をつけておくとメンテナンスが楽になる。</p>



<h2 class="wp-block-heading">よくあるエラーと対処法</h2>



<p class="wp-block-paragraph">Pineスクリプトを書いていて遭遇しやすいエラーを5つ紹介する。</p>



<p class="wp-block-paragraph"><strong>「Mismatched input」</strong> — インデントのミス。Pineスクリプトはスペース4つのインデントが必須。タブ文字やスペース2つでは動かない。</p>



<p class="wp-block-paragraph"><strong>「Cannot call '関数名' with argument」</strong> — 関数に渡した引数の型が間違っている。リファレンスで正しい型を確認する。</p>



<p class="wp-block-paragraph"><strong>「Undeclared identifier」</strong> — 変数名のタイプミス。または、変数を宣言する前に使おうとしている。</p>



<p class="wp-block-paragraph"><strong>「Script has too many local scopes」</strong> — v5でスコープ数の制限（550）を超えた。v6ではこの制限が撤廃されている。</p>



<p class="wp-block-paragraph"><strong>「The 'when' argument is not supported」</strong> — v6で廃止された<code>when</code>パラメータを使っている。<code>if</code>文に書き換える。</p>



<p class="wp-block-paragraph">エラーメッセージは必ず英語で表示される。メッセージ内のキーワードでリファレンスを検索すれば、正しい書き方が見つかる。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Pineスクリプトの書き方は「バージョン宣言 → 種別宣言 → ロジック＋出力」の3パートが基本だ。変数宣言、条件分岐、ループ、関数定義、input設定、出力関数、テクニカル分析関数。この記事で解説した構文を組み合わせれば、インジケーターもストラテジーもゼロから書ける。</p>



<p class="wp-block-paragraph">最初は短いコードから始めて、動くことを確認しながら少しずつ要素を追加していくのがおすすめだ。一度に完璧なコードを書こうとする必要はない。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">Pineスクリプトの応用テクニックと実践コードはこちら</a></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
