<?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/feed/" rel="self" type="application/rss+xml" />
	<link>https://pinescript-pro.com/</link>
	<description>専業トレーダーによるTradingViewインジケーター作成代行</description>
	<lastBuildDate>Tue, 24 Feb 2026 10:02:49 +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/</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/feed/"/>
	<item>
		<title>Pineスクリプト（Pine Script）とは？できること・始め方を完全解説</title>
		<link>https://pinescript-pro.com/pine-script-guide/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Sat, 21 Feb 2026 00:02:06 +0000</pubDate>
				<category><![CDATA[知る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1345</guid>

					<description><![CDATA[<p>Pineスクリプト（Pine Script）は、TradingViewが開発したプログラミング言語だ。チャート上に自分だけのインジケーターを表示したり、トレード手法をバックテストで検証したり、条件を満たしたときにスマホに...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-guide/">Pineスクリプト（Pine Script）とは？できること・始め方を完全解説</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-guide/">Pineスクリプト（Pine Script）とは？できること・始め方を完全解説</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pineスクリプト（Pine Script）は、TradingViewが開発したプログラミング言語だ。チャート上に自分だけのインジケーターを表示したり、トレード手法をバックテストで検証したり、条件を満たしたときにスマホに通知を飛ばしたり。トレードに必要な「こんなことできたらいいのに」を、自分の手で実現できる。</p>



<p class="wp-block-paragraph">プログラミングと聞くと身構えるかもしれない。でも安心してほしい。Pineスクリプトは、PythonやJavaScriptのような汎用言語とは違い、チャート分析に特化して設計されている。だから、たった3行のコードで移動平均線を表示できるし、10行で売買シグナルを出せる。環境構築も不要。TradingViewを開いて、Pineエディタにコードを書いて、保存を押すだけ。</p>



<p class="wp-block-paragraph">この記事では、Pineスクリプトの全体像を解説する。「Pineスクリプトとは何か」「何ができるのか」「どう始めるのか」「どこまで学べば実用レベルになるのか」。これからPineスクリプトを学びたい人にとっての出発点になるよう、関連する個別記事へのリンクも含めてまとめた。</p>



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



<h2 class="wp-block-heading">Pineスクリプトとは</h2>



<p class="wp-block-paragraph">Pineスクリプトは、TradingView専用のプログラミング言語だ。2013年にリリースされ、2024年11月にバージョン6（v6）が公開された。世界中のトレーダーが使うTradingViewのチャート上で、インジケーターやストラテジーを動かすために存在する。</p>



<p class="wp-block-paragraph">特徴を3つ挙げる。</p>



<p class="wp-block-paragraph"><strong>チャート分析に特化している。</strong> 汎用プログラミング言語では、チャートを描画するだけで何十行もコードを書く必要がある。Pineスクリプトは<code>plot(ta.ema(close, 20))</code>の1行で20期間EMAをチャートに描画できる。テクニカル指標の計算関数（EMA、RSI、MACD、ボリンジャーバンドなど）が組み込み関数として用意されており、呼び出すだけで使える。</p>



<p class="wp-block-paragraph"><strong>環境構築が不要。</strong> TradingViewのブラウザ上で動作する。Pythonのようにインストール作業やライブラリ管理は一切不要。TradingViewの無料アカウントがあれば、今すぐ書き始められる。</p>



<p class="wp-block-paragraph"><strong>バーごとに実行される。</strong> Pineスクリプトは、チャート上のすべてのバー（ローソク足）に対して、左から右へ順番にコードを実行する。新しいバーが追加されるたびに再実行される。この仕組みにより、時系列データの処理が自然に行える。</p>



<p class="wp-block-paragraph">現在のバージョンはv6。この記事を含め、PineScript Proのすべてのコンテンツはv6を基準にしている。</p>



<h2 class="wp-block-heading">Pineスクリプトでできること</h2>



<p class="wp-block-paragraph">Pineスクリプトでできることを、具体的な用途別に整理する。</p>



<p class="wp-block-paragraph"><strong>①カスタムインジケーターの作成。</strong> TradingViewには200以上の組み込みインジケーターがあるが、自分のトレード手法に完全に合うものはなかなかない。Pineスクリプトを使えば、「EMA3本＋RSIフィルター＋時間帯限定」のように、複数の条件を組み合わせたオリジナルインジケーターを作れる。</p>



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



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="3GnFqolHJB"><a href="https://pinescript-pro.com/indicator-jisaku/">TradingViewインジケーター自作｜Pineスクリプトで作る手順</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;TradingViewインジケーター自作｜Pineスクリプトで作る手順&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/indicator-jisaku/embed/#?secret=kBM3R4DCQi#?secret=3GnFqolHJB" data-secret="3GnFqolHJB" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph"><strong>②バックテスト（ストラテジーの検証）。</strong> 自分のトレード手法を過去データでシミュレーションし、勝率・プロフィットファクター・最大ドローダウンなどの数字で検証できる。「この手法は本当に勝てるのか？」を、感覚ではなくデータで確認する。</p>



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



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="5L7SxxJAh4"><a href="https://pinescript-pro.com/pine-script-strategy/">Pineスクリプトで勝てるストラテジーを作る方法｜検証の実際</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトで勝てるストラテジーを作る方法｜検証の実際&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-strategy/embed/#?secret=YeOVcTd3fb#?secret=5L7SxxJAh4" data-secret="5L7SxxJAh4" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph"><strong>③アラート通知。</strong> 「RSIが30を下回ったら通知」「EMAがクロスしたら通知」のように、条件成立時にスマホ通知・メール・Webhookで知らせる。チャートに張り付かなくてもトレードチャンスを逃さない。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-alert/">Pineスクリプトalert関数の完全ガイド｜通知設定から実践活用まで</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="71zjExxsf0"><a href="https://pinescript-pro.com/pine-script-alert/">Pineスクリプトアラート実装｜alertcondition()の使い方</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトアラート実装｜alertcondition()の使い方&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-alert/embed/#?secret=HITRrkNhiC#?secret=71zjExxsf0" data-secret="71zjExxsf0" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



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



<p class="wp-block-paragraph"><strong>⑤マルチタイムフレーム分析。</strong> <code>request.security()</code>関数で、上位足の情報を現在の時間足に表示できる。日足のEMAを15分足チャートに重ねる、週足のRSI値をラベルで表示するなど。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-time/">Pineスクリプトtime関数の使い方｜時間帯フィルター・セッション区切りの実装法</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="7uWQzMAldD"><a href="https://pinescript-pro.com/pine-script-time/">Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトで時間指定する方法｜東京・ロンドン・NY時間の実装コード&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-time/embed/#?secret=IxaUBt3AUN#?secret=7uWQzMAldD" data-secret="7uWQzMAldD" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph"><strong>⑥ライン描画の自動化。</strong> 前日高安、ピボットポイント、ラウンドナンバーなどの水平線を自動描画。毎朝手動で引いていた線を自動化できる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-draw/">Pineスクリプトline関数の使い方｜水平線・トレンドラインの自動描画</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="ONl4nslMo4"><a href="https://pinescript-pro.com/pine-script-draw/">Pineスクリプトで水平線・ラインを描画する方法【line.new】</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトで水平線・ラインを描画する方法【line.new】&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-draw/embed/#?secret=hIarw43rGd#?secret=ONl4nslMo4" data-secret="ONl4nslMo4" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph"><strong>⑦Webhook経由の自動売買連携。</strong> Pineスクリプト単体では注文を送れないが、アラートのWebhook機能を使えば、外部サーバー経由で取引所APIに注文を送ることができる。</p>



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



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="Hl75D01hjK"><a href="https://pinescript-pro.com/pine-script-auto-trade/">Pineスクリプトで自動売買｜TradingView→実口座の連携方法</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトで自動売買｜TradingView→実口座の連携方法&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-auto-trade/embed/#?secret=M8CAK6IX1W#?secret=Hl75D01hjK" data-secret="Hl75D01hjK" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph"><strong>⑧インジケーターの販売。</strong> 作成したインジケーターは「招待限定スクリプト」として公開し、月額課金モデルで販売できる。Pineスクリプトのスキルがそのまま収益になる。</p>



<h2 class="wp-block-heading">Pineスクリプトでできないこと</h2>



<p class="wp-block-paragraph">期待しすぎないために、できないことも明確にしておく。</p>



<p class="wp-block-paragraph"><strong>取引所への直接注文。</strong> Pineスクリプトは描画とアラートに特化した言語。注文送信機能はない。自動売買にはWebhook経由の外部システム連携が必要。</p>



<p class="wp-block-paragraph"><strong>外部データの読み込み。</strong> TradingView上で提供されるOHLCV（四本値＋出来高）とテクニカル指標のみ。独自CSVの読み込みなどはできない。</p>



<p class="wp-block-paragraph"><strong>機械学習・ディープラーニング。</strong> Pythonのようなライブラリ（scikit-learn、TensorFlowなど）は使えない。統計的な計算は可能だが、本格的な機械学習は対象外。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-python/">PineスクリプトとPythonの違い｜トレーダーがどちらを選ぶべきか</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="W5vp86wiLf"><a href="https://pinescript-pro.com/pine-script-python/">Pineスクリプト×Python連携｜データ分析と自動売買の方法</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプト×Python連携｜データ分析と自動売買の方法&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-python/embed/#?secret=QQxg9k8bq5#?secret=W5vp86wiLf" data-secret="W5vp86wiLf" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<h2 class="wp-block-heading">Pineスクリプトの始め方</h2>



<p class="wp-block-paragraph">必要なものはTradingViewの無料アカウントだけ。環境構築は不要。</p>



<p class="wp-block-paragraph"><strong>ステップ1: TradingViewにログインする。</strong> <a href="https://jp.tradingview.com/?aff_id=20123" target="_blank" rel="noreferrer noopener">tradingview.com</a>にアクセスし、アカウントを作成してログイン。</p>



<p class="wp-block-paragraph"><strong>ステップ2: チャートを開く。</strong> 適当な銘柄（USDJPYなど）のチャートを表示する。</p>



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



<p class="wp-block-paragraph"><strong>ステップ4: 最初のコードを書く。</strong> 以下のコードをPineエディタに貼り付けて、「保存」→「チャートに追加」をクリック。</p>



<pre class="pine-code">
//@version=6
indicator("はじめてのインジケーター", overlay=true)
plot(ta.ema(close, 20), "EMA20", color.blue)
plot(ta.ema(close, 50), "EMA50", color.red)
</pre>



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



<p class="wp-block-paragraph">チャートに青いライン（20EMA）と赤いライン（50EMA）が表示されたら成功だ。たった4行で、オリジナルのインジケーターが完成した。</p>



<p class="wp-block-paragraph">このコードの意味を解説する。</p>



<p class="wp-block-paragraph"><code>//@version=6</code> — Pineスクリプトのバージョンを指定。2025年現在はv6が最新。</p>



<p class="wp-block-paragraph"><code>indicator("はじめてのインジケーター", overlay=true)</code> — このスクリプトがインジケーターであることを宣言。<code>overlay=true</code>でメインチャートに重ねて表示。</p>



<p class="wp-block-paragraph"><code>plot(ta.ema(close, 20), "EMA20", color.blue)</code> — 終値ベースの20期間EMAを青色でチャートに描画。</p>



<p class="wp-block-paragraph"><code>plot(ta.ema(close, 50), "EMA50", color.red)</code> — 終値ベースの50期間EMAを赤色でチャートに描画。</p>



<h2 class="wp-block-heading">コードの基本構造</h2>



<p class="wp-block-paragraph">すべてのPineスクリプトは、以下の3パートで構成される。</p>



<p class="wp-block-paragraph"><strong>①バージョン宣言。</strong> <code>//@version=6</code>。必ず1行目に書く。</p>



<p class="wp-block-paragraph"><strong>②種類宣言。</strong> <code>indicator()</code>か<code>strategy()</code>のどちらかを書く。インジケーターを作るなら<code>indicator()</code>、バックテスト用のストラテジーを作るなら<code>strategy()</code>。</p>



<p class="wp-block-paragraph"><strong>③本体。</strong> テクニカル指標の計算、条件判定、描画、アラートなどの処理を記述する。</p>



<p class="wp-block-paragraph">もう少し実用的なコードを見てみよう。EMAクロスのシグナルを表示するインジケーター。</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)

// クロスの検出
longSignal  = ta.crossover(fast, slow)
shortSignal = ta.crossunder(fast, slow)

// EMAの描画
plot(fast, "短期EMA", color.blue)
plot(slow, "長期EMA", color.red)

// シグナルの表示
plotshape(longSignal, "買い", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(shortSignal, "売り", shape.triangledown, location.abovebar, color.red, size=size.small)

// アラート
alertcondition(longSignal, "買いシグナル", "EMAゴールデンクロス")
alertcondition(shortSignal, "売りシグナル", "EMAデッドクロス")
</pre>



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



<p class="wp-block-paragraph">このコードでは、<code>input.int()</code>でパラメータを設定画面から変更可能にし、<code>ta.crossover()</code>/<code>ta.crossunder()</code>でクロスを検出し、<code>plotshape()</code>で矢印を表示し、<code>alertcondition()</code>でアラート通知を設定している。25行で、パラメータ変更可能なEMAクロスインジケーター＋アラートが完成する。</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>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="MSIvECemjP"><a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトの書き方｜基本構文をコード付きで完全解説&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-kakikata/embed/#?secret=Q1zFmaCaUf#?secret=MSIvECemjP" data-secret="MSIvECemjP" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<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">Pineスクリプトには、トレードに必要な関数が最初から用意されている。主要なものを分類して紹介する。</p>



<p class="wp-block-paragraph"><strong>テクニカル指標（ta.系）。</strong> <code>ta.sma()</code> 単純移動平均線、<code>ta.ema()</code> 指数移動平均線、<code>ta.rsi()</code> RSI、<code>ta.macd()</code> MACD、<code>ta.bb()</code> ボリンジャーバンド、<code>ta.atr()</code> ATR、<code>ta.crossover()</code> 上抜け判定、<code>ta.crossunder()</code> 下抜け判定、<code>ta.highest()</code> 期間内最高値、<code>ta.lowest()</code> 期間内最安値。</p>



<p class="wp-block-paragraph"><strong>入力（input.系）。</strong> <code>input.int()</code> 整数入力、<code>input.float()</code> 小数入力、<code>input.bool()</code> ON/OFFスイッチ、<code>input.string()</code> 文字列入力、<code>input.color()</code> 色選択、<code>input.session()</code> 時間帯入力。設定パネルからパラメータを変更可能にする。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-input/">Pineスクリプトinput関数の使い方｜設定パネルのカスタマイズ完全ガイド</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="MOGWNLpmkW"><a href="https://pinescript-pro.com/pine-script-function/">Pineスクリプトのinput関数完全解説｜ユーザー設定パネルの作り方</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトのinput関数完全解説｜ユーザー設定パネルの作り方&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-function/embed/#?secret=Qn1jbLH8BP#?secret=MOGWNLpmkW" data-secret="MOGWNLpmkW" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph"><strong>描画（plot系）。</strong> <code>plot()</code> ライン描画、<code>plotshape()</code> マーク描画、<code>plotchar()</code> 文字描画、<code>bgcolor()</code> 背景色、<code>barcolor()</code> バーの色変更、<code>hline()</code> 水平線。</p>



<p class="wp-block-paragraph"><strong>データ取得（request.系）。</strong> <code>request.security()</code> 他の時間足・銘柄のデータ取得。マルチタイムフレーム分析に不可欠。</p>



<p class="wp-block-paragraph"><strong>注文（strategy.系）。</strong> <code>strategy.entry()</code> エントリー、<code>strategy.close()</code> クローズ、<code>strategy.exit()</code> TP/SL設定。ストラテジー（バックテスト）で使う。</p>



<h2 class="wp-block-heading">バージョンの違い — v4 / v5 / v6</h2>



<p class="wp-block-paragraph">Pineスクリプトはバージョンごとに関数名や書き方が異なる。ネット上の情報を参考にするとき、バージョンの違いが最も多いトラブルの原因になる。</p>



<p class="wp-block-paragraph"><strong>v4（2019年）。</strong> <code>study()</code>でインジケーターを宣言。<code>sma()</code>、<code>ema()</code>、<code>rsi()</code>のように<code>ta.</code>プレフィックスなし。<code>security()</code>で他の時間足を取得。<code>input()</code>に型指定なし。</p>



<p class="wp-block-paragraph"><strong>v5（2021年）。</strong> <code>study()</code>が<code>indicator()</code>に変更。テクニカル関数に<code>ta.</code>プレフィックス追加（<code>ta.sma()</code>）。<code>security()</code>が<code>request.security()</code>に。<code>input()</code>が<code>input.int()</code>/<code>input.float()</code>などの型付き関数に。ライブラリ機能の追加。</p>



<p class="wp-block-paragraph"><strong>v6（2024年）。</strong> v5からの主な変更は、メソッド構文の改善、型システムの強化、一部関数の引数変更。v5との互換性は比較的高い。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-v5">Pineスクリプトv5の変更点まとめ｜v4からのアップグレード完全対応表</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="rjtLebOo3S"><a href="https://pinescript-pro.com/pine-script-v5/">Pineスクリプト v5→v6移行ガイド｜変更点と書き換え方法まとめ</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプト v5→v6移行ガイド｜変更点と書き換え方法まとめ&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-v5/embed/#?secret=7SoTexlhTb#?secret=rjtLebOo3S" data-secret="rjtLebOo3S" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph">コードをコピペして動かないときは、まず<code>//@version=</code>の数字を確認しよう。v4のコードをv6で動かそうとすると、確実にエラーになる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-error/">Pineスクリプトエラー一覧と解決方法｜よくあるエラーTOP10と対処法</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="oXcu4ZsEHu"><a href="https://pinescript-pro.com/pine-script-error/">Pineスクリプトエラー一覧と解決方法｜よくあるエラーTOP10と対処法</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトエラー一覧と解決方法｜よくあるエラーTOP10と対処法&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-error/embed/#?secret=X9MKNutaCf#?secret=oXcu4ZsEHu" data-secret="oXcu4ZsEHu" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<h2 class="wp-block-heading">学習ロードマップ</h2>



<p class="wp-block-paragraph">Pineスクリプトを「実用レベル」まで学ぶためのロードマップ。</p>



<p class="wp-block-paragraph"><strong>レベル1: 既存コードの読解（1〜2日）。</strong> TradingViewの組み込みインジケーターのソースコードを読む。<code>indicator()</code>、<code>plot()</code>、<code>ta.ema()</code>の意味を理解する。コピペで動かしてみる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-sample/">Pineスクリプト サンプルコード集｜コピペで使える実践コード</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="1R7OLoj0qI"><a href="https://pinescript-pro.com/pine-script-sample/">Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトサンプルコード集｜コピペで動く実用インジケーター10選&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-sample/embed/#?secret=qj71913Nra#?secret=1R7OLoj0qI" data-secret="1R7OLoj0qI" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-example">Pineスクリプトのコード例を読み解く｜サンプルで学ぶ実践テクニック</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="1Iq0nDg1DI"><a href="https://pinescript-pro.com/pine-script-example/">Pineスクリプトコード例｜初心者向けシンプルなインジケーター実例集</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトコード例｜初心者向けシンプルなインジケーター実例集&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-example/embed/#?secret=9xDQYm1Wdo#?secret=1Iq0nDg1DI" data-secret="1Iq0nDg1DI" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph"><strong>レベル2: 基本構文の習得（3〜7日）。</strong> 変数宣言、条件分岐（<code>if</code>）、<code>input()</code>によるパラメータ化、<code>plot()</code>と<code>plotshape()</code>による描画。この段階で、シンプルなオリジナルインジケーターが作れるようになる。</p>



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



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="MSIvECemjP"><a href="https://pinescript-pro.com/pine-script-kakikata/">Pineスクリプトの書き方｜基本構文をコード付きで完全解説</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトの書き方｜基本構文をコード付きで完全解説&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-kakikata/embed/#?secret=Q1zFmaCaUf#?secret=MSIvECemjP" data-secret="MSIvECemjP" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph"><strong>レベル3: 実用インジケーターの作成（1〜2週間）。</strong> <code>request.security()</code>によるマルチタイムフレーム、<code>line.new()</code>によるライン描画、<code>alertcondition()</code>によるアラート設定。この段階で、日常のトレードに使えるインジケーターが作れる。</p>



<p class="wp-block-paragraph"><strong>レベル4: ストラテジーとバックテスト（2〜4週間）。</strong> <code>strategy()</code>によるバックテスト、<code>strategy.entry()</code>/<code>strategy.exit()</code>による売買ロジック、検証結果の読み方。手法を数字で検証できるようになる。</p>



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



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="5L7SxxJAh4"><a href="https://pinescript-pro.com/pine-script-strategy/">Pineスクリプトで勝てるストラテジーを作る方法｜検証の実際</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトで勝てるストラテジーを作る方法｜検証の実際&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-strategy/embed/#?secret=YeOVcTd3fb#?secret=5L7SxxJAh4" data-secret="5L7SxxJAh4" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph"><strong>レベル5: 応用と自動化。</strong> Webhook経由の自動売買連携、インジケーターの販売、複雑なロジックの実装。</p>



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



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="Hl75D01hjK"><a href="https://pinescript-pro.com/pine-script-auto-trade/">Pineスクリプトで自動売買｜TradingView→実口座の連携方法</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトで自動売買｜TradingView→実口座の連携方法&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-auto-trade/embed/#?secret=M8CAK6IX1W#?secret=Hl75D01hjK" data-secret="Hl75D01hjK" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph">学習に役立つリソースについてはこちら。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-study">Pineスクリプトの勉強法｜効率よく身につける学習ロードマップ</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="7tSIln4EHp"><a href="https://pinescript-pro.com/pine-script-study/">Pineスクリプトの勉強法｜本・動画・公式ドキュメント比較レビュー</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトの勉強法｜本・動画・公式ドキュメント比較レビュー&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-study/embed/#?secret=E7VbUxGmya#?secret=7tSIln4EHp" data-secret="7tSIln4EHp" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-book">Pineスクリプトおすすめ本｜独学で使えるレベルになる参考書</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="HjLAwQAxk9"><a href="https://pinescript-pro.com/pine-script-book/">Pineスクリプトのおすすめ本｜独学で挫折しないための学習書ガイド</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトのおすすめ本｜独学で挫折しないための学習書ガイド&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-book/embed/#?secret=CmcKivXMu3#?secret=HjLAwQAxk9" data-secret="HjLAwQAxk9" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-reference/">Pineスクリプト リファレンスの使い方｜公式ドキュメント完全活用法</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="53U1g6ypsu"><a href="https://pinescript-pro.com/pine-script-reference/">Pineスクリプトリファレンスの読み方｜公式マニュアルを使いこなすコツ</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトリファレンスの読み方｜公式マニュアルを使いこなすコツ&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-reference/embed/#?secret=tAEYb3EXw5#?secret=53U1g6ypsu" data-secret="53U1g6ypsu" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-manual/">Pineスクリプト マニュアル活用法｜ユーザーマニュアルの効率的な読み方</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="LHNRnf5fZ0"><a href="https://pinescript-pro.com/pine-script-manual/">Pineスクリプトマニュアル｜公式ドキュメントの効率的な使い方</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプトマニュアル｜公式ドキュメントの効率的な使い方&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-manual/embed/#?secret=LGI4MRzPDt#?secret=LHNRnf5fZ0" data-secret="LHNRnf5fZ0" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<h2 class="wp-block-heading">TradingViewのプラン別制限</h2>



<p class="wp-block-paragraph">Pineスクリプト自体は無料プランでも使えるが、プランによって制限がある。</p>



<p class="wp-block-paragraph"><strong>無料プラン。</strong> インジケーター同時表示は3つまで。アラートは件。Webhookは使えない。スクリプトの保存・実行は可能。学習段階なら無料プランで十分。</p>



<p class="wp-block-paragraph"><strong>Pro以上の有料プラン。</strong> インジケーター枠の増加（Proで5、Pro+で10）。アラート数の増加。Webhook機能の利用可能（自動売買連携に必須）。秒足チャートの利用。</p>



<p class="wp-block-paragraph">Pineスクリプトを「学ぶ」段階では無料プランで問題ない。「使う」段階になったら、インジケーター枠とアラート数に応じてプランを検討する。</p>



<h2 class="wp-block-heading">Pineスクリプトと他言語の比較</h2>



<p class="wp-block-paragraph">トレードに使うプログラミング言語はPineスクリプトだけではない。主要な選択肢と比較する。</p>



<p class="wp-block-paragraph"><strong>Pineスクリプト vs MQL4/MQL5。</strong> MQLはMetaTrader用の言語。自動売買（EA）を直接実行でき、バックテストの自動最適化機能がある。ただし学習コストが高く、環境構築も必要。「TradingViewで完結したい」ならPine、「MT4/MT5で自動売買を動かしたい」ならMQL。</p>



<p class="wp-block-paragraph"><strong>Pineスクリプト vs Python。</strong> Pythonは汎用言語。機械学習、大量データ処理、取引所API連携など、Pineスクリプトでは不可能なことができる。ただしチャート描画は自前で構築する必要がある。「チャート上でサクッとインジケーターを作る」ならPine、「高度なデータ分析や機械学習」ならPython。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/pine-script-python/">PineスクリプトとPythonの違い｜トレーダーがどちらを選ぶべきか</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="W5vp86wiLf"><a href="https://pinescript-pro.com/pine-script-python/">Pineスクリプト×Python連携｜データ分析と自動売買の方法</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Pineスクリプト×Python連携｜データ分析と自動売買の方法&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/pine-script-python/embed/#?secret=QQxg9k8bq5#?secret=W5vp86wiLf" data-secret="W5vp86wiLf" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<h2 class="wp-block-heading">「自分で作る」か「依頼する」か</h2>



<p class="wp-block-paragraph">Pineスクリプトを学んで自分で作るか、プロに依頼するか。どちらが正解かは、目的と時間のバランスによる。</p>



<p class="wp-block-paragraph"><strong>自分で作るのが向いている人。</strong> プログラミングに興味がある。時間に余裕がある。複数のインジケーターを継続的に作り続けたい。手法を頻繁に修正・改善したい。</p>



<p class="wp-block-paragraph"><strong>依頼するのが向いている人。</strong> 今すぐインジケーターが必要。コードの勉強に時間を使うよりトレードに集中したい。手法は固まっていて、それをコード化してほしい。</p>



<p class="wp-block-paragraph">PineScript Proでは、トレーダーが直接コードを書くインジケーター作成代行を行っている。ロジックのヒアリングから、トレーダー目線での改善提案、v6対応のプロ品質コード、納品後の運用サポートまで対応する。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/indicator-daikou">TradingViewインジケーター作成代行｜手法をコード化</a></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-pinescript-pro wp-block-embed-pinescript-pro"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="nxNmbsv8WT"><a href="https://pinescript-pro.com/indicator-daikou/">TradingViewインジケーター作成代行｜手法をコード化</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;TradingViewインジケーター作成代行｜手法をコード化&#8221; &#8212; PineScript Pro" src="https://pinescript-pro.com/indicator-daikou/embed/#?secret=VqS4Ebit1I#?secret=nxNmbsv8WT" data-secret="nxNmbsv8WT" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



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



<p class="wp-block-paragraph"><strong>Q: プログラミング未経験でもPineスクリプトは学べる？</strong></p>



<p class="wp-block-paragraph">学べる。Pineスクリプトはプログラミング入門として最適な言語の1つ。チャートという視覚的なフィードバックがあるため、「コードを書く→結果が見える」のサイクルが速い。</p>



<p class="wp-block-paragraph"><strong>Q: 日本語の情報は少ない？</strong></p>



<p class="wp-block-paragraph">英語に比べると少ないが、増えてきている。TradingViewの公式リファレンスには日本語版もある。当サイト（PineScript Pro）では、実践的な日本語コンテンツを体系的に公開している。</p>



<p class="wp-block-paragraph"><strong>Q: どのくらいで実用レベルになる？</strong></p>



<p class="wp-block-paragraph">毎日30分学習すれば、2週間で基本的なインジケーターが作れるようになる。1ヶ月でストラテジー（バックテスト）まで到達できる。</p>



<p class="wp-block-paragraph"><strong>Q: v5のコードはv6で動く？</strong></p>



<p class="wp-block-paragraph">基本的に動く。v5→v6の変更はv4→v5ほど大きくない。ただし一部の関数引数に変更があるため、エラーが出た場合は公式リリースノートを確認する。</p>



<p class="wp-block-paragraph"><strong>Q: 無料プランで十分？</strong></p>



<p class="wp-block-paragraph">学習段階なら十分。実際にトレードで使い始めると、インジケーター枠（3つ）の制限が気になってくる。複数インジケーターを1つに統合するテクニックで対応することも可能。</p>



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



<p class="wp-block-paragraph">Pineスクリプトは、TradingView上でインジケーターの作成、バックテスト、アラート通知、自動売買連携を実現するための専用言語だ。</p>



<p class="wp-block-paragraph">チャート分析に特化しているから少ないコード量で結果が出る。環境構築不要だからすぐに始められる。無料プランでも使える。プログラミング未経験者でも2週間あれば基本的なインジケーターが作れるようになる。</p>



<p class="wp-block-paragraph">学びたい人は、まずこの記事の「最初のコード」をTradingViewのPineエディタに貼り付けて動かしてみてほしい。チャートに自分が書いたコードの結果が表示される体験が、Pineスクリプト学習の第一歩になる。</p>



<p class="wp-block-paragraph">→ <a href="https://pinescript-pro.com/">PineScript Proですべての記事を見る</a></p>



<p class="wp-block-paragraph">　</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-guide/">Pineスクリプト（Pine Script）とは？できること・始め方を完全解説</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-guide/">Pineスクリプト（Pine Script）とは？できること・始め方を完全解説</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pineスクリプトで自動売買｜TradingView→実口座の連携方法</title>
		<link>https://pinescript-pro.com/pine-script-auto-trade/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 23:43:09 +0000</pubDate>
				<category><![CDATA[稼ぐ]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1343</guid>

					<description><![CDATA[<p>「Pineスクリプトで自動売買はできますか？」 この質問の答えは「直接はできないが、仕組みを作れば実現できる」だ。 Pineスクリプトはチャート上の描画とアラート発信に特化した言語であり、取引所に直接注文を送る機能は持っ...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-auto-trade/">Pineスクリプトで自動売買｜TradingView→実口座の連携方法</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-auto-trade/">Pineスクリプトで自動売買｜TradingView→実口座の連携方法</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">この質問の答えは「直接はできないが、仕組みを作れば実現できる」だ。</p>



<p class="wp-block-paragraph">Pineスクリプトはチャート上の描画とアラート発信に特化した言語であり、取引所に直接注文を送る機能は持っていない。しかし、TradingViewのアラートには「Webhook」という外部通知機能がある。この仕組みを使えば、Pineスクリプトで検出したシグナルを外部サーバーに送り、そこから取引所のAPIで注文を実行する——という自動売買パイプラインを構築できる。</p>



<p class="wp-block-paragraph">つまり、Pineスクリプトは自動売買システムの「シグナル発生装置」として機能する。実際の注文執行は、PythonやNode.jsなどの外部プログラムが担う。</p>



<p class="wp-block-paragraph">この記事では、この連携の全体像を解説する。Pineスクリプト側のアラート設定、Webhook送信のJSON設計、受信サーバーの構築、取引所APIとの接続、そして本番運用で絶対に押さえるべきセキュリティと障害対策まで。「アラートは設定できたけど、その先がわからない」という人に向けて書いた。</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>



<pre class="pine-code">
Pineスクリプト（シグナル検出）
  ↓ アラート発火
TradingView（Webhook送信）
  ↓ HTTP POST（JSON）
中継サーバー（Python / Node.js）
  ↓ 注文パラメータ生成
取引所API（注文執行）
  ↓
実口座で約定
</pre>



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



<p class="wp-block-paragraph">登場人物は4つ。それぞれの役割を明確にしておこう。</p>



<p class="wp-block-paragraph"><strong>Pineスクリプト。</strong> エントリー/エグジットの条件をコードで定義し、条件が成立したらアラートを発火させる。シグナルの検出と通知が役割。注文の実行はしない。</p>



<p class="wp-block-paragraph"><strong>TradingView。</strong> アラート発火時にWebhook URLへHTTP POSTリクエストを送信する。JSON形式のメッセージ本文を添えて送れる。</p>



<p class="wp-block-paragraph"><strong>中継サーバー。</strong> TradingViewからのWebhookを受信し、注文パラメータ（銘柄、方向、数量、価格）を組み立て、取引所APIに注文を送信する。リスク管理、認証、ログ記録もここで行う。</p>



<p class="wp-block-paragraph"><strong>取引所API。</strong> 実際に注文を執行する。FXブローカー、暗号資産取引所、株式ブローカーなどが提供するREST APIやWebSocket API。</p>



<h2 class="wp-block-heading">ステップ1: Pineスクリプト — アラート対応のシグナル</h2>



<p class="wp-block-paragraph">自動売買に使うPineスクリプトは、通常のインジケーターに<code>alertcondition()</code>を追加するだけで準備できる。</p>



<pre class="pine-code">
//@version=6
indicator("自動売買シグナル", overlay=true)

// === パラメータ ===
emaFast = input.int(12, "短期EMA", group="EMA設定")
emaSlow = input.int(26, "長期EMA", group="EMA設定")
rsiLen  = input.int(14, "RSI期間", group="フィルター")
rsiMax  = input.int(70, "RSI上限", group="フィルター")
rsiMin  = input.int(30, "RSI下限", group="フィルター")

// === 計算 ===
fast = ta.ema(close, emaFast)
slow = ta.ema(close, emaSlow)
rsi  = ta.rsi(close, rsiLen)

// === シグナル ===
longSignal  = ta.crossover(fast, slow) and rsi < rsiMax
shortSignal = ta.crossunder(fast, slow) and rsi > rsiMin

// === 描画 ===
plot(fast, "短期EMA", color.blue)
plot(slow, "長期EMA", color.red)
plotshape(longSignal, "ロング", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(shortSignal, "ショート", shape.triangledown, location.abovebar, color.red, size=size.small)

// === アラート条件 ===
alertcondition(longSignal, "ロングシグナル", "LONG")
alertcondition(shortSignal, "ショートシグナル", "SHORT")
</pre>



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



<p class="wp-block-paragraph"><code>alertcondition()</code>は、TradingViewのアラート作成画面で「条件」として選べるようになる関数だ。第3引数の文字列がアラートメッセージのデフォルトになる。</p>



<p class="wp-block-paragraph">ただし、Webhook経由で自動売買を行う場合は、アラートメッセージをJSON形式で構造化するほうが扱いやすい。これは次のステップで設定する。</p>



<h2 class="wp-block-heading">ステップ2: アラート設定 — Webhookの送信</h2>



<p class="wp-block-paragraph">TradingViewでアラートを作成するとき、「通知」タブにWebhook URLを入力する欄がある。ここに中継サーバーのURLを設定する。</p>



<p class="wp-block-paragraph"><strong>Webhookを使うにはTradingViewの有料プラン（Pro以上）が必要。</strong> 無料プランではWebhook機能は使えない。</p>



<p class="wp-block-paragraph"><strong>アラートメッセージの設計。</strong> アラート作成画面の「メッセージ」欄に、以下のようなJSONテンプレートを入力する。</p>



<pre class="pine-code">
{
  "secret": "your_secret_token_here",
  "action": "{{strategy.order.action}}",
  "symbol": "{{ticker}}",
  "price": "{{close}}",
  "time": "{{time}}"
}
</pre>



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



<p class="wp-block-paragraph">TradingViewの<code>{{ }}</code>プレースホルダーは、アラート発火時に実際の値に置換される。<code>{{ticker}}</code>は銘柄名、<code>{{close}}</code>は終値、<code>{{time}}</code>はタイムスタンプ。</p>



<p class="wp-block-paragraph"><strong>インジケーターの場合の注意点。</strong> <code>alertcondition()</code>で作ったアラートでは<code>{{strategy.order.action}}</code>が使えない（ストラテジー専用）。インジケーターベースの場合は、ロング用とショート用で別々のアラートを作り、メッセージを固定文字列にする。</p>



<p class="wp-block-paragraph">ロング用アラートのメッセージ:</p>



<pre class="pine-code">
{
  "secret": "your_secret_token_here",
  "action": "buy",
  "symbol": "{{ticker}}",
  "price": "{{close}}",
  "time": "{{time}}"
}
</pre>



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



<p class="wp-block-paragraph">ショート用アラートのメッセージ:</p>



<pre class="pine-code">
{
  "secret": "your_secret_token_here",
  "action": "sell",
  "symbol": "{{ticker}}",
  "price": "{{close}}",
  "time": "{{time}}"
}
</pre>



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



<p class="wp-block-paragraph"><code>secret</code>フィールドは、不正なリクエストを弾くための認証トークン。後述するセキュリティ対策で詳しく説明する。</p>



<h2 class="wp-block-heading">ステップ3: 中継サーバー — Webhook受信と注文実行</h2>



<p class="wp-block-paragraph">TradingViewからのWebhookを受信し、取引所APIに注文を送信するサーバーを構築する。以下はPython（Flask）の例。</p>



<pre class="pine-code">
from flask import Flask, request, jsonify
import ccxt
import os
import logging
from datetime import datetime

app = Flask(__name__)
logging.basicConfig(level=logging.INFO)

# === 設定 ===
SECRET_TOKEN = os.environ.get("WEBHOOK_SECRET", "your_secret_token_here")
API_KEY = os.environ.get("EXCHANGE_API_KEY")
API_SECRET = os.environ.get("EXCHANGE_API_SECRET")

# === 取引所接続 ===
exchange = ccxt.bybit({
    "apiKey": API_KEY,
    "secret": API_SECRET,
    "options": {"defaultType": "swap"},
})

@app.route("/webhook", methods=["POST"])
def webhook():
    try:
        data = request.get_json()
        
        # 認証チェック
        if data.get("secret") != SECRET_TOKEN:
            logging.warning(f"認証失敗: {request.remote_addr}")
            return jsonify({"error": "unauthorized"}), 401
        
        action = data.get("action")
        symbol = data.get("symbol")
        
        logging.info(f"シグナル受信: {action} {symbol}")
        
        # 注文実行
        if action == "buy":
            order = exchange.create_market_buy_order(symbol, 0.001)
        elif action == "sell":
            order = exchange.create_market_sell_order(symbol, 0.001)
        else:
            return jsonify({"error": "invalid action"}), 400
        
        logging.info(f"注文完了: {order['id']}")
        return jsonify({"status": "ok", "order_id": order["id"]})
    
    except Exception as e:
        logging.error(f"エラー: {str(e)}")
        return jsonify({"error": str(e)}), 500

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



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



<p class="wp-block-paragraph"><strong>ccxt。</strong> 暗号資産取引所のAPIを統一インターフェースで扱えるPythonライブラリ。Binance、Bybit、OKXなど100以上の取引所に対応。FXブローカー（OANDA、FXCM等）の場合は、各ブローカーのPython SDKやREST APIを使う。</p>



<p class="wp-block-paragraph"><strong>環境変数。</strong> APIキーやシークレットはコード内にハードコードしない。必ず環境変数で管理する。</p>



<p class="wp-block-paragraph"><strong>ログ記録。</strong> すべてのWebhook受信と注文実行をログに記録する。問題発生時の原因特定に不可欠だ。</p>



<h2 class="wp-block-heading">ステップ4: サーバーの公開 — HTTPSの確保</h2>



<p class="wp-block-paragraph">TradingViewのWebhookは、<strong>HTTPS</strong>のURLにしか送信できない。中継サーバーをインターネットに公開し、SSL証明書を設定する必要がある。</p>



<p class="wp-block-paragraph">主な方法は3つ。</p>



<p class="wp-block-paragraph"><strong>方法1: VPS + Let&#8217;s Encrypt。</strong> <a href="https://fxvm.net/?aff=113694" rel="noopener">FXVM</a>、<a href="https://www.vultr.com/?ref=9686316" rel="noopener">Vultr</a> (読み方 ヴァルチャー)、などのVPSにサーバーを設置し、Let&#8217;s Encryptで無料SSL証明書を取得する。最も自由度が高いが、サーバー管理スキルが必要。</p>



<p class="wp-block-paragraph"><strong>方法2: ngrok（開発・テスト用）。</strong> ローカルPCに一時的なHTTPS URLを割り当てるツール。テストに便利だが、無料プランではURLが毎回変わるため本番運用には不向き。</p>



<p class="wp-block-paragraph"><strong>方法3: Cloudflare Tunnel。</strong> 無料でローカルサーバーにHTTPS URLを固定割り当てできる。Cloudflareのセキュリティ機能（DDoS防御、アクセス制御）も利用可能。</p>



<p class="wp-block-paragraph">開発段階ではngrok、本番運用ではVPS + Let&#8217;s EncryptかCloudflare Tunnelを推奨する。</p>



<h2 class="wp-block-heading">ステップ5: セキュリティ対策 — 絶対に省略しない</h2>



<p class="wp-block-paragraph">自動売買は「お金に直結する」システム。セキュリティの妥協は許されない。</p>



<p class="wp-block-paragraph"><strong>①シークレットトークン認証。</strong> Webhook URLが第三者に漏れた場合、偽リクエストで不正注文が実行される。JSONの<code>secret</code>フィールドで正当性を検証する。32文字以上のランダム文字列を使う。</p>



<p class="wp-block-paragraph"><strong>②IPアドレス制限。</strong> TradingViewのWebhook送信元IPアドレスは公開されている。サーバー側ファイアウォールで、TradingViewのIPのみ許可する。</p>



<p class="wp-block-paragraph"><strong>③APIキーの権限制限。</strong> 取引所APIキーは「注文のみ」許可。「出金」は絶対に許可しない。IPホワイトリストも設定する。</p>



<p class="wp-block-paragraph"><strong>④注文の重複防止。</strong> アラートが短時間に複数回発火する場合がある。タイムスタンプで重複チェックを行い、二重注文を防ぐ。</p>



<pre class="pine-code">
last_order_time = {}

def is_duplicate(symbol, action, interval_seconds=60):
    key = f"{symbol}_{action}"
    now = datetime.now()
    if key in last_order_time:
        elapsed = (now - last_order_time[key]).total_seconds()
        if elapsed < interval_seconds:
            return True
    last_order_time[key] = now
    return False
</pre>



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



<p class="wp-block-paragraph"><strong>⑤テスト環境の分離。</strong> 本番APIに接続する前に、必ずテストネット（Bybit Testnet等）で動作検証を行う。</p>



<h2 class="wp-block-heading">ストラテジー型のWebhook連携</h2>



<p class="wp-block-paragraph"><code>strategy()</code>を使う方法もある。バックテストとアラートを1スクリプトで管理できるメリットがある。</p>



<pre class="pine-code">
//@version=6
strategy("Webhook対応ストラテジー", overlay=true)

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

if ta.crossover(fast, slow)
    strategy.entry("Long", strategy.long, 
      alert_message='{"action":"buy","symbol":"' + syminfo.ticker + '"}')

if ta.crossunder(fast, slow)
    strategy.close("Long", 
      alert_message='{"action":"sell","symbol":"' + syminfo.ticker + '"}')

plot(fast, "短期EMA", color.blue)
plot(slow, "長期EMA", color.red)
</pre>



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



<p class="wp-block-paragraph"><code>alert_message</code>引数を使うと、<code>strategy.entry()</code>や<code>strategy.close()</code>の実行タイミングで指定メッセージがアラートに含まれる。バックテストで検証済みのロジックをそのままWebhook経由の自動売買に転用できる。</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>


<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"><strong>最大ポジション数の制限。</strong> シグナル連続発火で大量ポジションを持つことを防ぐ。</p>



<pre class="pine-code">
MAX_POSITIONS = 3

def check_position_limit(exchange, symbol):
    positions = exchange.fetch_positions([symbol])
    open_count = sum(1 for p in positions if float(p["contracts"]) > 0)
    return open_count < MAX_POSITIONS
</pre>



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



<p class="wp-block-paragraph"><strong>1回あたりのリスク制限。</strong> 1トレードの最大損失を口座資金の1〜2%に制限する。</p>



<p class="wp-block-paragraph"><strong>日次損失上限。</strong> 1日の累積損失が一定額を超えたら、その日の自動売買を停止する。</p>



<p class="wp-block-paragraph"><strong>異常検知と通知。</strong> エラー発生時にSlack/LINE/メールで即通知する。</p>



<pre class="pine-code">
import requests

def notify_slack(message):
    webhook_url = os.environ.get("SLACK_WEBHOOK_URL")
    if webhook_url:
        requests.post(webhook_url, json={"text": f"<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> {message}"})
</pre>



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



<p class="wp-block-paragraph"><strong>緊急停止機能。</strong> 1分以内に自動売買を停止できる手順を確立しておく。APIキー無効化、サーバーシャットダウン、全ポジション決済など、複数の停止手段を確保する。</p>



<h2 class="wp-block-heading">対応取引所・ブローカー</h2>



<p class="wp-block-paragraph"><strong>暗号資産。</strong> ccxtライブラリでBybit、Binance、OKX、Bitgetなどに対応。テストネットがある取引所を選ぶと開発がスムーズ。</p>



<p class="wp-block-paragraph"><strong>海外FX。</strong> OANDA（REST API v20）、FXCM（REST API）、cTrader（FIX/REST API）。各ブローカーのAPIドキュメントに沿って接続する。</p>



<p class="wp-block-paragraph"><strong>国内株式。</strong> auカブコム証券（kabuステーションAPI）など。Webhook連携サービスのTradestand（旧TradeStudio）もあるが、稼働状況は要確認。</p>



<p class="wp-block-paragraph"><strong>Webhook中継サービス。</strong> 3Commas、Cornixなどの連携サービスを使えば、サーバー構築なしで自動売買が可能。設定は簡単だが、サービス側にAPIキーを預けるリスクがある。</p>



<h2 class="wp-block-heading">運用開始前のチェックリスト</h2>



<p class="wp-block-paragraph">本番稼働前に、以下をすべて確認する。</p>



<p class="wp-block-paragraph">テストネットでの動作確認は完了したか。シークレットトークンは十分な長さのランダム文字列か。APIキーの権限は「注文のみ」に制限しているか。WebhookのURLはHTTPSか。重複注文防止の仕組みはあるか。最大ポジション数制限はあるか。日次損失上限はあるか。異常通知の設定は完了しているか。緊急停止手順は確立しているか。すべてのWebhook受信と注文をログに記録しているか。</p>



<p class="wp-block-paragraph">1つでも「NO」があるなら、本番稼働は見送るべきだ。</p>



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



<p class="wp-block-paragraph"><strong>Q: Pineスクリプトだけで自動売買はできる？</strong></p>



<p class="wp-block-paragraph">直接はできない。Pineスクリプトはシグナル検出とアラート発信まで。注文実行はWebhook経由で外部サーバーから行う。</p>



<p class="wp-block-paragraph"><strong>Q: TradingView無料プランでもWebhookは使える？</strong></p>



<p class="wp-block-paragraph">使えない。Webhook機能はPro以上の有料プランで利用可能。</p>



<p class="wp-block-paragraph"><strong>Q: 遅延はどのくらいある？</strong></p>



<p class="wp-block-paragraph">アラート発火から約定まで通常1〜5秒。スキャルピングのような超短期売買には向かない。1時間足以上の戦略が適している。</p>



<p class="wp-block-paragraph"><strong>Q: TradingViewが落ちたらどうなる？</strong></p>



<p class="wp-block-paragraph">アラートが発火せず注文も実行されない。ポジションを持ったまま停止するリスクがあるため、取引所側でストップロス注文を別途入れておくのが安全策。</p>



<p class="wp-block-paragraph"><strong>Q: プログラミング経験がなくても自動売買できる？</strong></p>



<p class="wp-block-paragraph">中継サーバーの構築にはPython等の知識が必要。3CommasやCornixなどの連携サービスなら、プログラミングなしでも可能だが自由度は下がる。</p>



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



<p class="wp-block-paragraph">Pineスクリプトで自動売買を実現する構成は、「Pine（シグナル）→ TradingView（Webhook）→ 中継サーバー（注文生成）→ 取引所API（約定）」の4段構成だ。</p>



<p class="wp-block-paragraph">Pineスクリプトが担うのはシグナルの検出とアラートの発火まで。実際の注文執行は外部サーバーが担う。この役割分担を理解していれば、システム全体の設計で迷うことはない。</p>



<p class="wp-block-paragraph">最も重要なのはセキュリティとリスク管理。シークレットトークン認証、APIキーの権限制限、重複注文防止、最大ポジション制限、日次損失上限、異常通知、緊急停止手順。これらを省略した自動売買は、利益以上のリスクを抱えることになる。</p>



<p class="wp-block-paragraph">まずはテストネットで小さく始めて、1つずつ確認しながら本番に移行しよう。</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-auto-trade/">Pineスクリプトで自動売買｜TradingView→実口座の連携方法</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-auto-trade/">Pineスクリプトで自動売買｜TradingView→実口座の連携方法</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-strategy/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 23:30:43 +0000</pubDate>
				<category><![CDATA[任せる]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1341</guid>

					<description><![CDATA[<p>「バックテストで勝率70%」。この数字だけを見て安心していないだろうか。 Pineスクリプトのストラテジー機能を使えば、自分のトレード手法を過去データで検証できる。strategy()で宣言し、strategy.entr...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-strategy/">Pineスクリプトで勝てるストラテジーを作る方法｜検証の実際</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-strategy/">Pineスクリプトで勝てるストラテジーを作る方法｜検証の実際</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「バックテストで勝率70%」。この数字だけを見て安心していないだろうか。</p>



<p class="wp-block-paragraph">Pineスクリプトのストラテジー機能を使えば、自分のトレード手法を過去データで検証できる。strategy()で宣言し、strategy.entry()でエントリーし、ストラテジーテスターで成績を確認する。手順自体は難しくない。</p>



<p class="wp-block-paragraph">問題は「その数字が信頼できるかどうか」だ。</p>



<p class="wp-block-paragraph">バックテストの勝率70%は、パラメータを過去データに合わせて調整した結果かもしれない。スプレッドやスリッページを考慮していないかもしれない。特定の相場環境でたまたまハマっただけかもしれない。こうした落とし穴を知らずにリアル運用に移ると、「バックテストでは勝てたのに実際は負ける」という典型的な失敗パターンにはまる。</p>



<p class="wp-block-paragraph">この記事では、Pineスクリプトでストラテジーを作成する方法を、「コードの書き方」だけでなく「検証結果の読み方」「数字の信頼性の判断方法」まで含めて解説する。コピペで動くサンプルコードを複数掲載しているので、実際にTradingViewで動かしながら読んでほしい。</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スクリプトのストラテジーは、<code>indicator()</code>の代わりに<code>strategy()</code>で宣言する。これだけで、TradingViewのストラテジーテスターが有効になり、バックテスト結果を確認できるようになる。</p>



<p class="wp-block-paragraph">最小構成のストラテジーはこうなる。</p>



<pre class="pine-code">
//@version=6
strategy("最小ストラテジー", overlay=true)

// エントリー条件
if ta.crossover(ta.ema(close, 12), ta.ema(close, 26))
    strategy.entry("Long", strategy.long)

// エグジット条件
if ta.crossunder(ta.ema(close, 12), ta.ema(close, 26))
    strategy.close("Long")
</pre>



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



<p class="wp-block-paragraph">たった8行。12EMAが26EMAを上抜けたらロング、下抜けたらクローズ。これをチャートに追加すると、過去データ全体で売買シミュレーションが実行され、ストラテジーテスターに成績が表示される。</p>



<p class="wp-block-paragraph">ストラテジーのコードは、大きく4つのパートで構成される。</p>



<p class="wp-block-paragraph"><strong>①宣言部:</strong> <code>strategy()</code>で名前、初期資金、ポジションサイズ、手数料などを設定する。</p>



<p class="wp-block-paragraph"><strong>②計算部:</strong> テクニカル指標の計算、条件判定、フィルターの適用を行う。</p>



<p class="wp-block-paragraph"><strong>③注文部:</strong> <code>strategy.entry()</code>でエントリー、<code>strategy.close()</code>でクローズ、<code>strategy.exit()</code>でTP/SLを設定する。</p>



<p class="wp-block-paragraph"><strong>④描画部:</strong> <code>plot()</code>や<code>plotshape()</code>でインジケーターやシグナルを可視化する。</p>



<h2 class="wp-block-heading">strategy()の設定 — ここで結果が大きく変わる</h2>



<p class="wp-block-paragraph"><code>strategy()</code>の引数は、バックテスト結果に直接影響する。適当に設定すると、結果の信頼性が大きく下がる。</p>



<pre class="pine-code">
//@version=6
strategy("EMAクロス", 
  overlay=true,
  initial_capital=1000000,       // 初期資金100万円
  default_qty_type=strategy.percent_of_equity,
  default_qty_value=10,          // 資金の10%でエントリー
  commission_type=strategy.commission.percent,
  commission_value=0.1,          // 往復0.1%の手数料
  slippage=2,                    // 2ティックのスリッページ
  process_orders_on_close=false, // バーの終値で注文を処理しない
  calc_on_every_tick=false)      // ティックごとの計算を無効化
</pre>



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



<p class="wp-block-paragraph">特に重要な設定を説明する。</p>



<p class="wp-block-paragraph"><strong>initial_capital（初期資金）。</strong> デフォルトは$1,000,000だが、自分の実際のトレード資金に近い値を設定する。資金量によってポジションサイズが変わり、成績も変わる。</p>



<p class="wp-block-paragraph"><strong>commission_value（手数料）。</strong> デフォルトは0（手数料なし）。手数料なしのバックテストは現実離れしている。FXなら0.01〜0.05%、暗号資産なら0.05〜0.1%が目安。スプレッドを含めたい場合は、手数料をやや大きめに設定するか、slippageで調整する。</p>



<p class="wp-block-paragraph"><strong>slippage（スリッページ）。</strong> 実際の約定では、指定価格と約定価格にずれが生じる。1〜3ティックを設定しておくと現実に近い結果が得られる。</p>



<p class="wp-block-paragraph"><strong>process_orders_on_close。</strong> <code>true</code>にすると、バーの終値確定時点で注文が処理される。<code>false</code>（デフォルト）だと次のバーの始値で約定する。<code>true</code>は「未来の情報を使っている」ことになりやすいので、基本は<code>false</code>のままにする。</p>



<h2 class="wp-block-heading">エントリーとエグジットの書き方</h2>



<p class="wp-block-paragraph">ストラテジーの注文関数は3つある。</p>



<p class="wp-block-paragraph"><strong>strategy.entry()</strong> — 新規エントリー。同じIDで複数回呼ぶと、最新の注文で上書きされる。</p>



<p class="wp-block-paragraph"><strong>strategy.close()</strong> — 指定IDのポジションを成行でクローズ。</p>



<p class="wp-block-paragraph"><strong>strategy.exit()</strong> — TP（利確）/SL（損切）/トレーリングストップを設定。エントリー後に自動で機能する。</p>



<p class="wp-block-paragraph">この3つの使い分けを、実践的なストラテジーで見てみよう。</p>



<h2 class="wp-block-heading">サンプル①: EMAクロス＋RSIフィルター＋固定TP/SL</h2>



<p class="wp-block-paragraph">最も基本的で応用しやすい構成。トレンドフォロー系のストラテジーだ。</p>



<pre class="pine-code">
//@version=6
strategy("EMAクロス+RSI", overlay=true,
  initial_capital=1000000,
  default_qty_type=strategy.percent_of_equity,
  default_qty_value=10,
  commission_value=0.05,
  slippage=2)

// === パラメータ ===
emaFast   = input.int(12, "短期EMA", minval=1, group="EMA設定")
emaSlow   = input.int(26, "長期EMA", minval=1, group="EMA設定")
rsiLen    = input.int(14, "RSI期間", minval=1, group="フィルター")
rsiUpper  = input.int(70, "RSI上限", group="フィルター")
rsiLower  = input.int(30, "RSI下限", group="フィルター")
tpPips    = input.float(100, "利確(pips)", group="決済")
slPips    = input.float(50, "損切(pips)", group="決済")

// === 計算 ===
fast = ta.ema(close, emaFast)
slow = ta.ema(close, emaSlow)
rsi  = ta.rsi(close, rsiLen)

// === pips → 価格変換 ===
pipValue = syminfo.mintick * 10
tp = tpPips * pipValue
sl = slPips * pipValue

// === エントリー条件 ===
longCond  = ta.crossover(fast, slow) and rsi < rsiUpper
shortCond = ta.crossunder(fast, slow) and rsi > rsiLower

// === 注文 ===
if longCond
    strategy.entry("Long", strategy.long)
    strategy.exit("Long TP/SL", "Long", profit=tp/syminfo.mintick, loss=sl/syminfo.mintick)

if shortCond
    strategy.entry("Short", strategy.short)
    strategy.exit("Short TP/SL", "Short", profit=tp/syminfo.mintick, loss=sl/syminfo.mintick)

// === 描画 ===
plot(fast, "短期EMA", color.blue)
plot(slow, "長期EMA", color.red)
</pre>



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



<p class="wp-block-paragraph">このストラテジーのポイントを解説する。</p>



<p class="wp-block-paragraph"><strong>RSIフィルター。</strong> EMAクロスだけでは、レンジ相場でダマシのシグナルが乱発する。RSIが買われすぎ圏（70超）でのロングを除外し、売られすぎ圏（30未満）でのショートを除外することで、無駄なエントリーを減らす。</p>



<p class="wp-block-paragraph"><strong>strategy.exit()のprofit/loss。</strong> <code>profit</code>と<code>loss</code>は「ティック数」で指定する。pips単位で入力したい場合は、上記のようにpipValueで変換する必要がある。FXの場合、1pip = 10 mintick（5桁ブローカー）が一般的。</p>



<p class="wp-block-paragraph"><strong>ロングとショートの両方向。</strong> トレンドフォロー系は、売りと買いの両方向をテストすることで、ストラテジーの堅牢性を確認できる。片方向だけの検証は、相場の方向性にバイアスがかかる。</p>



<h2 class="wp-block-heading">サンプル②: ブレイクアウト＋ATRベースTP/SL</h2>



<p class="wp-block-paragraph">固定pipsのTP/SLは、ボラティリティが変動する相場では機能しにくい。ATR（Average True Range）でTP/SLを動的に調整するストラテジーを紹介する。</p>



<pre class="pine-code">
//@version=6
strategy("ATRブレイクアウト", overlay=true,
  initial_capital=1000000,
  default_qty_type=strategy.percent_of_equity,
  default_qty_value=10,
  commission_value=0.05,
  slippage=2)

// === パラメータ ===
lookback  = input.int(20, "ブレイクアウト期間", minval=5, group="エントリー")
atrLen    = input.int(14, "ATR期間", minval=1, group="ATR")
atrTPmul  = input.float(2.0, "ATR × TP倍率", step=0.1, group="決済")
atrSLmul  = input.float(1.0, "ATR × SL倍率", step=0.1, group="決済")

// === 計算 ===
highestHigh = ta.highest(high, lookback)
lowestLow   = ta.lowest(low, lookback)
atr         = ta.atr(atrLen)

// === エントリー条件 ===
longBreak  = close > highestHigh[1]
shortBreak = close < lowestLow[1]

// === 注文 ===
if longBreak
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", "Long",
      profit=atr * atrTPmul / syminfo.mintick,
      loss=atr * atrSLmul / syminfo.mintick)

if shortBreak
    strategy.entry("Short", strategy.short)
    strategy.exit("Short Exit", "Short",
      profit=atr * atrTPmul / syminfo.mintick,
      loss=atr * atrSLmul / syminfo.mintick)

// === 描画 ===
plot(highestHigh, "高値ライン", color.green, style=plot.style_stepline)
plot(lowestLow, "安値ライン", color.red, style=plot.style_stepline)
</pre>



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



<p class="wp-block-paragraph"><strong>ATRベースの利点。</strong> ボラティリティが高い相場ではTP/SLが広がり、低い相場では狭まる。相場環境に自動適応するため、固定pipsよりも堅牢性が高い。</p>



<p class="wp-block-paragraph"><strong>ATR倍率の目安。</strong> TP=ATR×2倍、SL=ATR×1倍が一般的な起点。リスクリワード比2:1になる。ここからパラメータを調整していく。</p>



<h2 class="wp-block-heading">サンプル③: 時間帯フィルター付きストラテジー</h2>



<p class="wp-block-paragraph">FXやゴールドは、東京・ロンドン・ニューヨークの各セッションで値動きの性質が異なる。時間帯フィルターを入れることで、有効な時間帯だけにエントリーを限定できる。</p>



<pre class="pine-code">
//@version=6
strategy("セッション限定EMAクロス", overlay=true,
  initial_capital=1000000,
  default_qty_type=strategy.percent_of_equity,
  default_qty_value=10,
  commission_value=0.05,
  slippage=2)

// === パラメータ ===
emaFast   = input.int(12, "短期EMA", group="EMA設定")
emaSlow   = input.int(26, "長期EMA", group="EMA設定")
useSession = input.bool(true, "セッション限定", group="時間帯")
sessionStr = input.session("0800-1600", "許可時間帯(UTC)", group="時間帯")

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

// === 時間帯フィルター ===
inSession = useSession ? not na(time(timeframe.period, sessionStr)) : true

// === エントリー条件 ===
longCond  = ta.crossover(fast, slow) and inSession
shortCond = ta.crossunder(fast, slow) and inSession

// === 注文 ===
if longCond
    strategy.entry("Long", strategy.long)
if shortCond
    strategy.entry("Short", strategy.short)

// セッション外で全ポジションクローズ
if useSession and not inSession
    strategy.close_all("セッション終了")

// === 描画 ===
plot(fast, "短期EMA", color.blue)
plot(slow, "長期EMA", color.red)
bgcolor(inSession ? color.new(color.blue, 95) : na)
</pre>



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



<p class="wp-block-paragraph"><strong>input.session()。</strong> 時間帯を「HHMM-HHMM」形式で設定パネルから指定できる。UTC基準なので、東京時間（JST）の場合は-9時間で計算する。ロンドン時間08:00-16:00（UTC）が「0800-1600」。</p>



<p class="wp-block-paragraph"><strong>strategy.close_all()。</strong> セッション外に入ったタイミングで全ポジションをクローズする。ポジションを持ち越さないデイトレードスタイルのテストに使う。</p>



<p class="wp-block-paragraph"><strong>bgcolor()で時間帯を可視化。</strong> 許可されている時間帯の背景色を薄く塗ることで、エントリーが制限されている時間帯を目視で確認できる。</p>



<h2 class="wp-block-heading">ストラテジーテスターの読み方</h2>



<p class="wp-block-paragraph">ストラテジーをチャートに追加すると、画面下部の「ストラテジーテスター」タブに結果が表示される。数字の意味を正しく理解しないと、判断を誤る。</p>



<p class="wp-block-paragraph"><strong>純利益（Net Profit）。</strong> 全トレードの損益合計。プラスならトータルで勝ち、マイナスなら負け。ただし、この数字だけでは判断できない。初期資金に対する割合（%）で見ることが重要。</p>



<p class="wp-block-paragraph"><strong>勝率（Percent Profitable）。</strong> 勝ちトレード数 ÷ 全トレード数。勝率50%でもプロフィットファクターが高ければ収益性はある。勝率だけに注目しないこと。</p>



<p class="wp-block-paragraph"><strong>プロフィットファクター（Profit Factor）。</strong> 総利益 ÷ 総損失。1.0なら損益トントン、1.5以上なら優秀、2.0以上はかなり良い。ただし、トレード数が少ないと偶然で2.0以上になることもある。</p>



<p class="wp-block-paragraph"><strong>最大ドローダウン（Max Drawdown）。</strong> 資産がピークからどれだけ落ち込んだかの最大値。これが許容範囲を超えるストラテジーは、リアル運用で精神的に耐えられない。一般的に資金の20%以内が目安。</p>



<p class="wp-block-paragraph"><strong>トレード数（Total Trades）。</strong> バックテストの信頼性を左右する。30回未満のトレードでは統計的に有意ではない。最低100回以上のトレード数を目指す。</p>



<p class="wp-block-paragraph"><strong>平均トレード（Avg Trade）。</strong> 1回のトレードあたりの平均損益。これが手数料＋スリッページより大きくなければ、実運用では負ける。</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>


<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"><strong>カーブフィッティング（過剰最適化）。</strong> パラメータを微調整して、過去データに完璧にフィットさせること。EMA期間を12→13に変えたら利益が20%増えた。さらに14にしたら25%。こうやって過去データに最適化したパラメータは、将来の相場では機能しない。</p>



<p class="wp-block-paragraph">対策は「パラメータの安定領域を探す」こと。EMA期間10〜16のどれでもプロフィットファクターが1.3以上あるなら、そのストラテジーは堅牢だ。特定の1つの値でだけ良い結果が出るなら、それはカーブフィッティングの可能性が高い。</p>



<p class="wp-block-paragraph"><strong>手数料・スリッページの無視。</strong> デフォルト設定（手数料0、スリッページ0）でバックテストすると、現実よりもかなり良い数字が出る。特にスキャルピング系のストラテジーは、手数料を入れた途端に収益がマイナスに転じることがある。</p>



<p class="wp-block-paragraph"><strong>バーの終値ベースの約定。</strong> TradingViewのストラテジーテスターは、基本的にバーの終値（または次のバーの始値）で約定を計算する。バー内の値動き（ヒゲ部分）は考慮されない。リアルタイムでは、バーの途中で条件が成立してエントリーするため、バックテスト通りの価格で約定しないことがある。</p>



<p class="wp-block-paragraph"><strong>生存者バイアス。</strong> 上場廃止になった銘柄はTradingViewのチャートから消えている。生き残った銘柄だけでバックテストすると、結果が良く見える傾向がある。</p>



<h2 class="wp-block-heading">堅牢性を確かめる方法</h2>



<p class="wp-block-paragraph">カーブフィッティングを避け、リアル運用でも通用するストラテジーかどうかを確認する方法。</p>



<p class="wp-block-paragraph"><strong>複数銘柄テスト。</strong> USDJPY、EURUSD、GBPUSD、XAUUSD（ゴールド）など、複数の銘柄で同じストラテジーを走らせる。1つの銘柄でしか機能しないストラテジーは汎用性が低い。</p>



<p class="wp-block-paragraph"><strong>複数時間足テスト。</strong> 15分足、1時間足、4時間足、日足で同じストラテジーをテストする。特定の時間足でだけ良い結果が出る場合は、その時間足のデータ特性に依存している可能性がある。</p>



<p class="wp-block-paragraph"><strong>分割テスト（イン/アウトサンプル）。</strong> 過去データを前半と後半に分ける。前半でパラメータを決め、後半でそのパラメータのまま検証する。前半は良いが後半は悪い、というパターンならカーブフィッティングの兆候だ。</p>



<p class="wp-block-paragraph">Pineスクリプトでは、<code>time</code>関数を使ってテスト期間を分割できる。</p>



<pre class="pine-code">
//@version=6
strategy("分割テスト", overlay=true)

// テスト期間の分割
cutoff = timestamp(2024, 1, 1)
isInSample  = time < cutoff   // 2024年以前 = パラメータ調整用
isOutSample = time >= cutoff   // 2024年以降 = 検証用

// 背景色でイン/アウトサンプルを可視化
bgcolor(isInSample ? color.new(color.blue, 95) : color.new(color.green, 95))
</pre>



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



<p class="wp-block-paragraph"><strong>パラメータ感度分析。</strong> EMA期間を10→12→14→16と変えたとき、プロフィットファクターが1.5→1.8→0.5→1.6と不安定に変動するなら、そのストラテジーはパラメータに敏感すぎる。1.3→1.4→1.5→1.4のように安定的に推移するなら、堅牢性が高い。</p>



<h2 class="wp-block-heading">strategy.exit()の応用 — 決済ロジックを磨く</h2>



<p class="wp-block-paragraph">多くの初心者は、エントリーロジックに時間をかけすぎて、決済ロジックを軽視する。実際には、「いつ出るか」の方が収益に大きく影響する。</p>



<p class="wp-block-paragraph"><strong>トレーリングストップ。</strong> 利益が伸びたら損切りラインを切り上げる。</p>



<pre class="pine-code">
strategy.exit("Trail", "Long",
  trail_points=50,      // 50ティック利益が出たらトレーリング開始
  trail_offset=20)      // 高値から20ティック逆行で決済
</pre>



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



<p class="wp-block-paragraph"><strong>TP/SLとトレーリングの併用。</strong> 利確ラインに達する前にトレーリングで利益を確保する。</p>



<pre class="pine-code">
strategy.exit("複合決済", "Long",
  profit=200,           // 200ティックで利確
  loss=100,             // 100ティックで損切
  trail_points=80,      // 80ティック利益でトレーリング開始
  trail_offset=30)      // 高値から30ティック逆行で決済
</pre>



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



<p class="wp-block-paragraph"><strong>時間ベースの決済。</strong> 一定時間（バー数）が経過してもTP/SLに到達しない場合、ポジションを閉じる。含み損が膨らむ前に撤退するロジック。</p>



<pre class="pine-code">
//@version=6
strategy("時間決済", overlay=true)

var int entryBar = 0

if ta.crossover(ta.ema(close, 12), ta.ema(close, 26))
    strategy.entry("Long", strategy.long)
    entryBar := bar_index

// エントリーから10バー経過で強制クローズ
if strategy.position_size > 0 and bar_index - entryBar >= 10
    strategy.close("Long", comment="時間切れ")
</pre>



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



<p class="wp-block-paragraph">バックテストで有効性を確認したストラテジーは、実際のトレードではインジケーターとして使う。<code>strategy()</code>を<code>indicator()</code>に変え、<code>strategy.entry()</code>を<code>plotshape()</code>に、<code>strategy.exit()</code>を<code>alertcondition()</code>に置き換える。</p>



<pre class="pine-code">
//@version=6
// strategy("EMAクロス", overlay=true)  // ← コメントアウト
indicator("EMAクロス シグナル", overlay=true)

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

longCond  = ta.crossover(fast, slow)
shortCond = ta.crossunder(fast, slow)

// strategy.entry() の代わりにシグナル表示
plotshape(longCond, "ロング", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(shortCond, "ショート", shape.triangledown, location.abovebar, color.red, size=size.small)

// アラート条件（スマホ通知用）
alertcondition(longCond, "ロングシグナル", "EMAゴールデンクロス")
alertcondition(shortCond, "ショートシグナル", "EMAデッドクロス")

plot(fast, "短期EMA", color.blue)
plot(slow, "長期EMA", color.red)
</pre>



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



<p class="wp-block-paragraph">ストラテジーは「過去データでの検証」、インジケーターは「リアルタイムでのシグナル表示とアラート」。この2つをセットで作ることで、検証済みの手法をリアルトレードに活かせる。</p>



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



<p class="wp-block-paragraph"><strong>Q: ストラテジーとインジケーターの違いは？</strong></p>



<p class="wp-block-paragraph">ストラテジーは<code>strategy()</code>で宣言し、仮想の売買を実行してバックテスト結果を表示する。インジケーターは<code>indicator()</code>で宣言し、チャート上に描画する。ストラテジーは検証用、インジケーターはリアルトレード用。</p>



<p class="wp-block-paragraph"><strong>Q: ストラテジーで自動売買はできる？</strong></p>



<p class="wp-block-paragraph">Pineスクリプト単体では取引所に注文を送れない。ただし、<code>alertcondition()</code>やアラートのWebhook機能を使えば、外部の自動売買システムと連携できる。</p>



<p class="wp-block-paragraph"><strong>Q: バックテスト期間はどのくらい必要？</strong></p>



<p class="wp-block-paragraph">最低でも100トレード以上が出る期間。日足なら2〜5年、1時間足なら半年〜1年、15分足なら3〜6ヶ月が目安。短すぎると統計的に信頼できない。</p>



<p class="wp-block-paragraph"><strong>Q: 勝率とプロフィットファクター、どちらが重要？</strong></p>



<p class="wp-block-paragraph">プロフィットファクター。勝率40%でもプロフィットファクター2.0なら十分に利益が出る（損小利大型）。逆に勝率80%でもプロフィットファクターが1.0以下なら長期的に負ける（コツコツドカン型）。</p>



<p class="wp-block-paragraph"><strong>Q: process_orders_on_closeはtrueにすべき？</strong></p>



<p class="wp-block-paragraph">基本はfalse（デフォルト）のままにする。trueにすると「バーの終値を見てからそのバーの終値で約定する」という、リアルでは不可能な動作になり、バックテスト結果が過大評価される。</p>



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



<p class="wp-block-paragraph">Pineスクリプトのストラテジーは「コードを書いてバックテストする」までは簡単だ。難しいのは「その結果が信頼できるかを判断する」こと。</p>



<p class="wp-block-paragraph">手数料とスリッページは必ず設定する。カーブフィッティングを避けるため、パラメータの安定領域を探す。複数銘柄・時間足でテストして堅牢性を確認する。分割テストでイン/アウトサンプルの成績を比較する。</p>



<p class="wp-block-paragraph">バックテストの数字が良いことと、リアルで勝てることは別の話だ。この記事で紹介した検証手法を使って、「本当に使えるストラテジー」を見極めてほしい。</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-strategy/">Pineスクリプトで勝てるストラテジーを作る方法｜検証の実際</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-strategy/">Pineスクリプトで勝てるストラテジーを作る方法｜検証の実際</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pineスクリプトエラー一覧と解決方法｜よくあるエラーTOP10と対処法</title>
		<link>https://pinescript-pro.com/pine-script-error/</link>
		
		<dc:creator><![CDATA[松風]]></dc:creator>
		<pubDate>Fri, 20 Feb 2026 23:21:03 +0000</pubDate>
				<category><![CDATA[困る]]></category>
		<guid isPermaLink="false">https://pinescript-pro.com/?p=1337</guid>

					<description><![CDATA[<p>Pineスクリプトを書いていて、赤いエラーメッセージが出た瞬間、手が止まる。英語のエラー文を読んでも、何が間違っているのかわからない。 安心してほしい。Pineスクリプトで遭遇するエラーは、実はパターンが限られている。同...</p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-error/">Pineスクリプトエラー一覧と解決方法｜よくあるエラーTOP10と対処法</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-error/">Pineスクリプトエラー一覧と解決方法｜よくあるエラーTOP10と対処法</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スクリプトで遭遇するエラーは、実はパターンが限られている。同じエラーに何度もつまずく人が多いのは、エラーメッセージの「読み方」を知らないからだ。</p>



<p class="wp-block-paragraph">この記事では、Pineスクリプト開発で実際によく遭遇するエラーをTOP10形式で紹介する。それぞれ「エラーメッセージの原文」「原因」「エラーが出るコード」「修正後のコード」をセットで掲載しているので、同じエラーに遭遇したらこのページに戻ってきて、該当するエラーを探してほしい。</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>コンパイルエラー（Compilation Error）。</strong> 「保存」や「チャートに追加」を押した瞬間に出るエラー。コードの文法が間違っている。スペルミス、カッコの閉じ忘れ、型の不一致など。Pineエディタの下部に赤字で表示される。コードを修正しない限り、インジケーターはチャートに追加できない。</p>



<p class="wp-block-paragraph"><strong>ランタイムエラー（Runtime Error）。</strong> チャートに追加した後、実際にデータを処理する段階で発生するエラー。ゼロ除算、配列の範囲外アクセス、描画オブジェクトの上限超過など。チャート上のインジケーター名の横にビックリマークが表示される。特定の銘柄や時間足でだけ発生することもあるため、発見が遅れやすい。</p>



<p class="wp-block-paragraph">以下のTOP10では、コンパイルエラーを【C】、ランタイムエラーを【R】で表記する。</p>



<h2 class="wp-block-heading">第1位【C】Mismatched input — 構文の不一致</h2>



<p class="wp-block-paragraph">最も遭遇頻度が高いエラー。Pineスクリプトが「ここにはXが来るはずなのに、Yが書いてある」と言っている。</p>



<p class="wp-block-paragraph"><strong>エラーメッセージ:</strong></p>



<pre class="wp-block-code"><code>Mismatched input 'X' expecting 'Y'</code></pre>



<p class="wp-block-paragraph"><strong>主な原因:</strong> カッコの閉じ忘れ、カンマの抜け、引数の順序間違い、予約語のスペルミス。</p>



<p class="wp-block-paragraph"><strong>エラーが出るコード:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト" overlay=true)  // カンマが抜けている
plot(close)</code></pre>



<p class="wp-block-paragraph"><strong>修正後:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト", overlay=true)  // カンマを追加
plot(close)</code></pre>



<p class="wp-block-paragraph">このエラーが出たら、エラーメッセージに表示されている行番号の周辺を確認しよう。カッコ <code>()</code> の対応関係、カンマ <code>,</code> の有無、引用符 <code>""</code> の閉じ忘れ。これらが原因の大半だ。</p>



<p class="wp-block-paragraph">もう1つよくあるパターンが、<code>if</code>文や<code>for</code>文の後のインデントミス。Pineスクリプトではインデント（字下げ）がコードの構造を決めるため、スペースの数が合っていないとこのエラーになる。</p>



<h2 class="wp-block-heading">第2位【C】Could not find function or function reference — 関数が見つからない</h2>



<p class="wp-block-paragraph">関数名のスペルミス、または存在しない関数を呼び出そうとしたときに出るエラー。</p>



<p class="wp-block-paragraph"><strong>エラーメッセージ:</strong></p>



<pre class="wp-block-code"><code>Could not find function or function reference 'xxx'</code></pre>



<p class="wp-block-paragraph"><strong>主な原因:</strong> 関数名のタイプミス。v6では<code>ta.</code>プレフィックスが必要な組み込み関数に付け忘れている。v4/v5の古い関数名を使っている。</p>



<p class="wp-block-paragraph"><strong>エラーが出るコード:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
value = sma(close, 20)     // v4の書き方。v6では動かない
plot(value)</code></pre>



<p class="wp-block-paragraph"><strong>修正後:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
value = ta.sma(close, 20)  // v6では ta. プレフィックスが必要
plot(value)</code></pre>



<p class="wp-block-paragraph">v6でよく引っかかるのがこのパターン。v4では<code>sma()</code>、<code>ema()</code>、<code>rsi()</code>と書けたが、v6ではすべて<code>ta.sma()</code>、<code>ta.ema()</code>、<code>ta.rsi()</code>に変わっている。同様に、<code>security()</code>は<code>request.security()</code>、<code>input()</code>は<code>input.int()</code>/<code>input.float()</code>などの型付き関数に変わっている。</p>



<p class="wp-block-paragraph">ネット上のサンプルコードをコピペしたときに最も発生しやすいエラーなので、バージョン番号を必ず確認しよう。</p>



<h2 class="wp-block-heading">第3位【C】Cannot call &#8216;xxx&#8217; with argument — 型の不一致</h2>



<p class="wp-block-paragraph">関数に渡した引数の型が、その関数が期待する型と合っていないときに出るエラー。</p>



<p class="wp-block-paragraph"><strong>エラーメッセージ:</strong></p>



<pre class="wp-block-code"><code>Cannot call 'xxx' with argument 'yyy'. 
An argument of 'series float' type was used but a 'input float' is expected</code></pre>



<p class="wp-block-paragraph"><strong>主な原因:</strong> <code>hline()</code>に変数（seriesの値）を渡している。<code>input.int()</code>に小数を渡している。定数を期待する場所に動的な値を入れている。</p>



<p class="wp-block-paragraph"><strong>エラーが出るコード:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
level = ta.sma(close, 20)
hline(level)  // hline()は定数のみ。変数は渡せない</code></pre>



<p class="wp-block-paragraph"><strong>修正後:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
level = ta.sma(close, 20)
plot(level, style=plot.style_stepline)  // 変数はplot()で描画する</code></pre>



<p class="wp-block-paragraph"><code>hline()</code>は定数（リテラル値やinput値）しか受け付けない。動的に変わる値を水平線のように表示したい場合は、<code>plot()</code>に<code>plot.style_stepline</code>を指定する。</p>



<p class="wp-block-paragraph">もう1つの頻出パターンは、<code>color</code>引数に<code>series color</code>型の値を渡すケース。<code>plot()</code>の<code>color</code>引数は<code>series color</code>を受け付けるが、<code>hline()</code>の<code>color</code>引数は<code>input color</code>しか受け付けない。</p>



<h2 class="wp-block-heading">第4位【C】Undeclared identifier — 未宣言の変数</h2>



<p class="wp-block-paragraph">変数を使おうとしたが、その変数がどこにも宣言されていないときに出るエラー。</p>



<p class="wp-block-paragraph"><strong>エラーメッセージ:</strong></p>



<pre class="wp-block-code"><code>Undeclared identifier 'xxx'</code></pre>



<p class="wp-block-paragraph"><strong>主な原因:</strong> 変数名のタイプミス。<code>if</code>文の中で宣言した変数を外で使おうとしている。宣言より前の行で変数を参照している。</p>



<p class="wp-block-paragraph"><strong>エラーが出るコード:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
if close &gt; open
    myColor = color.green
plot(close, color=myColor)  // myColorはif文の中でしか存在しない</code></pre>



<p class="wp-block-paragraph"><strong>修正後:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
myColor = close &gt; open ? color.green : color.red  // 三項演算子で外で宣言
plot(close, color=myColor)</code></pre>



<p class="wp-block-paragraph">Pineスクリプトでは、<code>if</code>文や<code>for</code>文の中で宣言した変数は、そのブロックの外からはアクセスできない（スコープの制約）。ブロックの外で使いたい場合は、外で先に変数を宣言しておくか、三項演算子 <code>条件 ? 値A : 値B</code> を使う。</p>



<p class="wp-block-paragraph">もう1つの原因は単純なタイプミス。<code>colse</code>（closeのミス）、<code>opne</code>（openのミス）など。英語のスペルに自信がなければ、Pineエディタの自動補完機能を活用しよう。</p>



<h2 class="wp-block-heading">第5位【C】The function should be called on each calculation — 関数のスコープ警告</h2>



<p class="wp-block-paragraph">厳密にはエラーではなく警告（warning）だが、無視すると計算結果がおかしくなるため、ここに含める。</p>



<p class="wp-block-paragraph"><strong>警告メッセージ:</strong></p>



<pre class="wp-block-code"><code>The function 'xxx' should be called on each calculation for consistency. 
It is recommended to extract the call from this scope.</code></pre>



<p class="wp-block-paragraph"><strong>主な原因:</strong> <code>ta.crossover()</code>、<code>ta.rsi()</code>、<code>ta.ema()</code>などの関数を<code>if</code>文の中で呼んでいる。</p>



<p class="wp-block-paragraph"><strong>警告が出るコード:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
if close &gt; 100
    cross = ta.crossover(ta.ema(close, 12), ta.ema(close, 26))  // if文の中
    if cross
        label.new(bar_index, high, "Buy")</code></pre>



<p class="wp-block-paragraph"><strong>修正後:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
cross = ta.crossover(ta.ema(close, 12), ta.ema(close, 26))  // 外に出す
if close &gt; 100 and cross
    label.new(bar_index, high, "Buy")</code></pre>



<p class="wp-block-paragraph"><code>ta.crossover()</code>や<code>ta.rsi()</code>はバーごとに連続して呼ばれることを前提に設計されている。<code>if</code>文の中に入れると、条件が<code>false</code>のバーでは関数が呼ばれず、内部の計算が途切れてしまう。結果として、次に条件が<code>true</code>になったときの計算結果が不正確になる。</p>



<p class="wp-block-paragraph">対処は簡単。これらの関数をすべてグローバルスコープ（<code>if</code>文の外）で呼び、結果を変数に格納してから、<code>if</code>文の条件として使う。</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">第6位【C】Variable was declared with &#8216;xxx&#8217; type — 型の再代入エラー</h2>



<p class="wp-block-paragraph">整数型で宣言した変数に小数を代入しようとしたときなどに出るエラー。</p>



<p class="wp-block-paragraph"><strong>エラーメッセージ:</strong></p>



<pre class="wp-block-code"><code>Variable 'x' was declared with 'integer' type. 
Cannot assign it expression of type 'series&#91;float]'</code></pre>



<p class="wp-block-paragraph"><strong>主な原因:</strong> 変数の初期値で型が自動決定された後、異なる型の値を代入しようとしている。</p>



<p class="wp-block-paragraph"><strong>エラーが出るコード:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
x = 0         // 整数型として認識される
x := close    // close は float型。整数型の変数には代入できない
plot(x)</code></pre>



<p class="wp-block-paragraph"><strong>修正後:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
x = 0.0       // 0.0にすることでfloat型として認識される
x := close    // float同士なのでOK
plot(x)</code></pre>



<p class="wp-block-paragraph">Pineスクリプトでは、変数の型は最初の代入で自動的に決まる。<code>x = 0</code>と書くと整数型、<code>x = 0.0</code>と書くとfloat型になる。後から異なる型の値を代入しようとするとエラーになる。</p>



<p class="wp-block-paragraph">明示的に型を指定する方法もある。<code>float x = 0</code>と書けば、初期値が整数の<code>0</code>でもfloat型として扱われる。</p>



<h2 class="wp-block-heading">第7位【C】Script must have at least one output function call — 出力関数がない</h2>



<p class="wp-block-paragraph">インジケーターに<code>plot()</code>などの出力関数が1つもないときに出るエラー。</p>



<p class="wp-block-paragraph"><strong>エラーメッセージ:</strong></p>



<pre class="wp-block-code"><code>The script must have at least one output function call 
(e.g. plot, barcolor, etc.). Reason: AST is Empty</code></pre>



<p class="wp-block-paragraph"><strong>主な原因:</strong> <code>plot()</code>、<code>plotshape()</code>、<code>bgcolor()</code>、<code>barcolor()</code>などの描画関数を1つも書いていない。計算だけして、結果をどこにも表示していない。</p>



<p class="wp-block-paragraph"><strong>エラーが出るコード:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
// 計算しただけで、plotしていない</code></pre>



<p class="wp-block-paragraph"><strong>修正後:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
plot(ema20, "EMA20", color.blue)
plot(ema50, "EMA50", color.red)</code></pre>



<p class="wp-block-paragraph">インジケーターは「チャートに何かを表示するもの」なので、出力関数が最低1つは必要。もし計算結果を表示する必要がない場合（アラート専用のスクリプトなど）は、<code>plot(na)</code>を1行書いておけばエラーを回避できる。</p>



<h2 class="wp-block-heading">第8位【R】Array is out of bounds — 配列の範囲外アクセス</h2>



<p class="wp-block-paragraph">配列の存在しないインデックスにアクセスしようとしたときに出るランタイムエラー。</p>



<p class="wp-block-paragraph"><strong>エラーメッセージ:</strong></p>



<pre class="wp-block-code"><code>Array is out of bounds. Index: X, array size: Y</code></pre>



<p class="wp-block-paragraph"><strong>主な原因:</strong> <code>array.get()</code>や<code>array.remove()</code>で、配列のサイズを超えたインデックスを指定している。空の配列に対して操作を行っている。</p>



<p class="wp-block-paragraph"><strong>エラーが出るコード:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
var prices = array.new&lt;float&gt;(0)
array.push(prices, close)
// 配列サイズが1なのに、インデックス5を取得しようとする
val = array.get(prices, 5)
plot(val)</code></pre>



<p class="wp-block-paragraph"><strong>修正後:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
var prices = array.new&lt;float&gt;(0)
array.push(prices, close)
// サイズを確認してからアクセスする
val = array.size(prices) &gt; 5 ? array.get(prices, 5) : na
plot(val)</code></pre>



<p class="wp-block-paragraph">配列操作を行う前に、<code>array.size()</code>でサイズを確認する習慣をつけよう。特に、チャートの最初の数バー（データが少ない状態）でエラーが発生しやすい。</p>



<h2 class="wp-block-heading">第9位【R】Max number of drawings exceeded — 描画オブジェクトの上限超過</h2>



<p class="wp-block-paragraph"><code>line.new()</code>、<code>label.new()</code>、<code>box.new()</code>で作成したオブジェクトが上限を超えたときに出るランタイムエラー。</p>



<p class="wp-block-paragraph"><strong>エラーメッセージ:</strong></p>



<pre class="wp-block-code"><code>Max number of drawings of type 'line' exceeded. Max: 500</code></pre>



<p class="wp-block-paragraph"><strong>主な原因:</strong> ループや条件分岐の中で描画オブジェクトを大量に生成し、古いものを削除していない。</p>



<p class="wp-block-paragraph"><strong>エラーが出るコード:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト", overlay=true)
if ta.crossover(ta.ema(close, 12), ta.ema(close, 26))
    line.new(bar_index, low, bar_index, high, color=color.green)
// 削除していないので、500本を超えるとエラー</code></pre>



<p class="wp-block-paragraph"><strong>修正後:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト", overlay=true, max_lines_count=500)
var lines = array.new&lt;line&gt;(0)
if ta.crossover(ta.ema(close, 12), ta.ema(close, 26))
    newLine = line.new(bar_index, low, bar_index, high, color=color.green)
    array.push(lines, newLine)
    // 古いラインを削除
    if array.size(lines) &gt; 50
        line.delete(array.shift(lines))</code></pre>



<p class="wp-block-paragraph">対策は2つある。<code>indicator()</code>に<code>max_lines_count=500</code>を指定して上限を引き上げること（最大500）。それでも足りない場合は、<code>array</code>で管理して古いオブジェクトを<code>line.delete()</code>で明示的に削除すること。</p>



<h2 class="wp-block-heading">第10位【C】Cannot use &#8216;var&#8217; with a function result — varの使い方エラー</h2>



<p class="wp-block-paragraph"><code>var</code>宣言と関数呼び出しの組み合わせで発生するエラー。</p>



<p class="wp-block-paragraph"><strong>エラーメッセージ:</strong></p>



<pre class="wp-block-code"><code>Cannot use 'var' with this expression</code></pre>



<p class="wp-block-paragraph"><strong>主な原因:</strong> <code>var</code>を使ってバーごとに値が変わる関数の結果を保持しようとしている。<code>var</code>は初回のみ実行されるため、毎バー更新される値には使えない。</p>



<p class="wp-block-paragraph"><strong>エラーが出るコード:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
var ema = ta.ema(close, 20)  // varはta.ema()と組み合わせられない
plot(ema)</code></pre>



<p class="wp-block-paragraph"><strong>修正後:</strong></p>



<pre class="wp-block-code"><code>//@version=6
indicator("テスト")
ema = ta.ema(close, 20)  // varを外す。毎バー再計算される
plot(ema)</code></pre>



<p class="wp-block-paragraph"><code>var</code>は「スクリプトの初回実行時に一度だけ値を設定し、以降はその値を保持する」宣言だ。カウンターやフラグの状態管理に使う。毎バー更新されるテクニカル指標の計算結果には使わない。</p>



<p class="wp-block-paragraph"><code>var</code>が必要な場面は、<code>var int count = 0</code>のように状態を蓄積していく変数だけだ。</p>



<h2 class="wp-block-heading">エラーを効率的に解決する5つのコツ</h2>



<p class="wp-block-paragraph">個別のエラーを覚えるだけでなく、エラー解決の「型」を持っておくと、未知のエラーにも対応できる。</p>



<p class="wp-block-paragraph"><strong>コツ1: エラーメッセージの行番号を見る。</strong> エラーメッセージには必ず行番号が含まれている。まずその行を確認し、前後数行も含めてチェックする。エラーの真の原因は、表示された行の1〜2行前にあることが多い（カッコの閉じ忘れなど）。</p>



<p class="wp-block-paragraph"><strong>コツ2: 複数エラーが出たら、最初の1つだけ直す。</strong> エラーが5つ表示されていても、最初の1つを直すだけで残り4つが消えることがある。1つのミスが連鎖的にエラーを引き起こすパターンだ。必ず上から順に対処する。</p>



<p class="wp-block-paragraph"><strong>コツ3: 直前の変更を元に戻す。</strong> 「さっきまで動いていたのにエラーが出た」なら、直前に追加・変更した部分が原因。Ctrl+Zで元に戻して、変更箇所を特定する。</p>



<p class="wp-block-paragraph"><strong>コツ4: 最小構成で再現する。</strong> 複雑なスクリプトでエラーが出た場合、問題の箇所だけを切り出して3〜5行の最小コードを作り、そこでエラーが再現するか確認する。問題の切り分けが格段に速くなる。</p>



<p class="wp-block-paragraph"><strong>コツ5: バージョン番号を確認する。</strong> コピペしたコードが動かないときは、まず1行目の<code>//@version=</code>を確認する。v4のコードをv6の環境で動かそうとしているケースが非常に多い。</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>



<h2 class="wp-block-heading">デバッグに使える便利テクニック</h2>



<p class="wp-block-paragraph">エラーメッセージだけでは原因がわからないとき、変数の中身を「見える化」するテクニックが役立つ。</p>



<p class="wp-block-paragraph"><strong>plot()で値を確認する。</strong> 計算結果が期待通りかどうかを、チャート上に線として表示して目視確認する。</p>



<pre class="wp-block-code"><code>//@version=6
indicator("デバッグ", overlay=false)
myValue = ta.rsi(close, 14)
plot(myValue, "RSI確認用", color.orange)
hline(70)
hline(30)</code></pre>



<p class="wp-block-paragraph"><strong>label.new()でテキスト表示する。</strong> 特定の条件が成立したバーで、変数の値をテキストとして表示する。</p>



<pre class="wp-block-code"><code>//@version=6
indicator("デバッグ", overlay=true)
if barstate.islast
    label.new(bar_index, high, 
      "RSI: " + str.tostring(ta.rsi(close, 14), "#.##") + 
      "\nEMA: " + str.tostring(ta.ema(close, 20), "#.##"),
      style=label.style_label_down, color=color.yellow)</code></pre>



<p class="wp-block-paragraph"><code>barstate.islast</code>を条件にすれば、最新のバーにだけラベルが表示される。複数の変数を改行（<code>\n</code>）で区切って1つのラベルにまとめると見やすい。</p>



<p class="wp-block-paragraph"><strong>bgcolor()で条件の成立タイミングを確認する。</strong> 条件が<code>true</code>になるバーの背景色を変えることで、「いつ条件が成立しているか」を視覚的に確認できる。</p>



<pre class="wp-block-code"><code>//@version=6
indicator("デバッグ", overlay=true)
isBullish = ta.crossover(ta.ema(close, 12), ta.ema(close, 26))
bgcolor(isBullish ? color.new(color.green, 80) : na)</code></pre>



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



<p class="wp-block-paragraph"><strong>Q: エラーメッセージが英語で読めない。</strong></p>



<p class="wp-block-paragraph">Pineスクリプトのエラーメッセージはすべて英語だが、パターンは限られている。この記事のTOP10でカバーされているエラーが全体の8割以上を占める。エラーメッセージの冒頭のキーワード（Mismatched、Could not find、Cannot callなど）で、この記事内を検索してほしい。</p>



<p class="wp-block-paragraph"><strong>Q: エラーは出ないけど、インジケーターの動きがおかしい。</strong></p>



<p class="wp-block-paragraph">これは「論理エラー」と呼ばれるもの。コード自体は文法的に正しいが、ロジックが意図と異なっている。前述のデバッグテクニック（plot、label、bgcolor）を使って、各変数の値が期待通りかどうかを1つずつ確認していこう。</p>



<p class="wp-block-paragraph"><strong>Q: v4のコードをv6で動かしたい。</strong></p>



<p class="wp-block-paragraph">TradingViewにはv4→v5の自動変換ツールがあるが、v6への変換は手動になる。主な変更点は、<code>study()</code>→<code>indicator()</code>、<code>sma()</code>→<code>ta.sma()</code>、<code>security()</code>→<code>request.security()</code>、<code>input()</code>→<code>input.int()</code>/<code>input.float()</code>など。</p>



<p class="wp-block-paragraph"><strong>Q: 警告（Warning）は無視しても大丈夫？</strong></p>



<p class="wp-block-paragraph">動作はする。ただし、第5位で紹介した「関数のスコープ警告」のように、無視すると計算結果が不正確になるものがある。警告はできるだけ解消しておくことをおすすめする。</p>



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



<p class="wp-block-paragraph">Pineスクリプトのエラーは怖くない。パターンを知っていれば、ほとんどのエラーは数秒で原因を特定できる。</p>



<p class="wp-block-paragraph">今回紹介したTOP10をおさらいする。第1位: Mismatched input（構文ミス）、第2位: Could not find function（関数名ミス・v6対応）、第3位: Cannot call with argument（型の不一致）、第4位: Undeclared identifier（未宣言変数）、第5位: Function should be called on each calculation（スコープ警告）、第6位: Variable was declared with type（型の再代入）、第7位: Script must have output（出力関数なし）、第8位: Array out of bounds（配列範囲外）、第9位: Max drawings exceeded（描画上限）、第10位: Cannot use var（var使い方エラー）。</p>



<p class="wp-block-paragraph">エラーに遭遇したら、まずエラーメッセージの冒頭キーワードでこの記事を検索しよう。原因と修正コードがすぐ見つかるはずだ。</p>



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



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



<p class="wp-block-paragraph"></p>
<p>投稿 <a rel="nofollow" href="https://pinescript-pro.com/pine-script-error/">Pineスクリプトエラー一覧と解決方法｜よくあるエラーTOP10と対処法</a> は <a rel="nofollow" href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
<p>投稿 <a href="https://pinescript-pro.com/pine-script-error/">Pineスクリプトエラー一覧と解決方法｜よくあるエラーTOP10と対処法</a> は <a href="https://pinescript-pro.com">PineScript Pro</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<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 loading="lazy" 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="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>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 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">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 loading="lazy" 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="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">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>
	</channel>
</rss>
