Pine Scriptの注文・決済設計|分割決済と注文の優先順 | SG Group
本文へ移動
TradingView解説 · 最終内容確認 英語で読む
Pineストラテジー設計 · TV17

Pine Scriptストラテジーの注文・決済設計|指値・逆指値・分割決済

条件が成立したバー、注文が作成された時点、ブローカーエミュレーターが約定した時点、建玉が閉じた時点は同じとは限りません。さらに複数のstrategy.exit()は、コードの記述順に建玉数量を予約します。本記事は「どこで利確・損切りすべきか」ではなく、Pine Script v6の注文を状態遷移モデルとして読み、想定外の反転・部分決済・未決済の残数量を取引一覧まで追跡する方法を扱います。

この記事が役立つ方: Pineストラテジーの注文が想定外のバーや数量で約定する人/利確・損切り注文・部分決済・同方向の追加建玉を監査したい人

まず押さえる重要ポイント

注文の状態遷移

シグナルは注文ではなく、注文は約定ではない

  1. 01条件成立コードが注文関数を呼ぶ
  2. 02作成済みID・方向・価格・数量を持つ注文
  3. 03未約定指値/逆指値条件を待つ
  4. 04約定済み建玉または損益を更新
  5. 05取消済み明示的な取消またはOCAで失効
状態の進み方
  • 成行:作成済み → 次に利用可能なティック → 約定済み
  • 価格指定注文:作成済み → 未約定 → 発動・約定または取消
  • 利確・損切り注文:一方が約定 → 同系列の注文は縮小または取消
履歴バーではブローカーエミュレーターがチャートデータから約定をシミュレートします。注文タイプと計算設定により経路は変わります。
01 · 注文の流れの要点

結論:注文を「関数名」ではなく状態遷移で読む

Pineの注文トラブルは、コード上の関数呼び出しを建玉更新と同じ出来事だと扱うと起きやすくなります。本記事は作成済み・未約定・約定済み・取消済みという論理状態と数量の所有関係を追います。「なぜそのバー・価格で約定したか」というブローカーエミュレーターの経路監査はTV12へ移し、決済予約の修正と混ぜません。

  1. 条件を記録する

    どのバーで、どの確定値を使って条件が成立したか。

  2. 注文作成を記録する

    関数、ID、方向、注文数量、指値、逆指値、from_entryを控える。

  3. 未約定を追う

    価格注文が有効か、変更・再発行・取消されたかを確認する。

  4. 約定済みを記録する

    状態が約定済みへ進んだことと有効数量を記録し、バー・価格の原因分析はTV12へ渡す。

  5. 建玉更新を確認する

    反転、追加、部分決済、残数量、OCA取消を取引一覧と照合する。

02 · 注文種類

成行・指値・逆指値・ストップリミットの発動条件を分ける

注文タイプの概念整理
タイプ作成時の指定待つ条件よくある誤読
成行指値/逆指値なし次の利用可能ティック条件成立バーの確定時に必ず約定すると思う
指値指値価格指定価格または有利側現在価格より不利/有利の方向を取り違える
逆指値逆指値価格指定価格または不利側で発動損切り専用と考える。エントリーにも使える
ストップリミットエントリー/注文で逆指値と指値逆指値で指値を有効化後、指値注文の約定を待つ逆指値到達だけで建玉が開くと思う
決済の利確・損切り注文決済で指値と逆指値TPまたはSLのうち先に発動した側ストップリミットと同じ1注文だと思う

買いと売りでは有利・不利方向が反転します。公式例と小さな数量で確認してください。

strategy.entry()strategy.order()へ逆指値と指値の両方を渡すと、逆指値が指値注文を有効化する一つのストップリミット注文です。一方、strategy.exit()へ両方を渡すと、指値側の利確と逆指値側の逆指値による損切りという二つの決済注文を作ります。この差はコードレビュー表へ明記する価値があります。

03 · 注文コマンドごとの役割

エントリー・注文・価格指定決済・成行決済を交換可能な関数として扱わない

主要注文コマンドの責任範囲
コマンド主な役割建玉との関係監査ポイント
strategy.entry()エントリーと既定反転同方向の追加は追加建玉数の上限設定に従う反対建玉を閉じる数量が約定数量へ加算され得る
strategy.order()方向付きの基本注文差引建玉を増減し、一部設定項目を無視同方向の追加建玉を安全弁と思わない
strategy.exit()エントリーに結び付く価格ベース決済利確・損切り注文・部分決済・追従型from_entry、予約数量、OCAを確認
strategy.close()エントリーIDに対応する成行決済次の利用可能ティックで約定FIFO/ANYとIDの期待を照合
strategy.cancel()未約定注文の取消保有中の建玉は閉じない毎バー再発行していないか確認

関数の詳細は現行TradingView公式ドキュメントを優先してください。

設定項目の「同方向の追加建玉」は、strategy.entry()が同方向に保持できるエントリー数の上限です。既定値は1ですが、同じティックに複数の価格注文が作られて発動する場合など、単純な「一バーに一つ」の安全弁とは限りません。またstrategy.order()は同方向の追加建玉設定を無視するため、混在させるならIDと差引建玉の変化を別に追います。

04 · 決済数量の予約

部分決済は「合計数量」だけでなく予約順序を確認する

複数のstrategy.exit()を同じエントリーへ向けると、各呼び出しはコードの実行順に建玉の一部を予約します。後続の呼び出しが指定した注文数量が残数量より大きければ、作成される決済数量は縮小されます。先に19を予約し、次に20を指定しても、元建玉が20なら後続の呼び出しが利用できるのは1だけです。

決済予約の逐次計算実効決済数量1 = min(要求数量1、保有数量)残数量1 = 保有数量 − 実効決済数量1実効決済数量2 = min(要求数量2、残数量1)未予約数量 = max(保有数量 − 実効決済数量の合計、0)負値は0として扱う概念モデルです。実際の注文変更、約定、取消、エントリー追加では再評価が必要です。

同一のstrategy.exit()が作るTPとSLは、片方が約定するともう片方が取消される利確・損切り注文として働きます。複数の決済関数が作る注文は既定でstrategy.oca.reduceグループに入り、他注文の約定に応じて数量が減る場合があります。エントリー側のOCAの取消/縮小/未指定とは、グループ名と目的をコードコメントに残してください。

05 · 予約数量の検証

二段階利確・損切り注文を数量の保存則として実装する

以下は4単位の買いエントリーを2単位ずつ二つの利確・損切り注文へ割り当てる教育例です。エントリー条件は説明用であり、将来成績を示しません。各決済関数の呼び出しが2単位を予約し、合計がエントリー数量を超えない構造にしています。

Pine Script v6:部分決済利確・損切り注文と予約数量pine
//@version=6
strategy("Two-bracket reservation audit", overlay = true, pyramiding = 1,
         initial_capital = 100000, margin_long = 100, margin_short = 100)

int fastLength = input.int(20, "Fast length", minval = 1)
int slowLength = input.int(50, "Slow length", minval = 2)
float fast = ta.sma(close, fastLength)
float slow = ta.sma(close, slowLength)
bool enterLong = ta.crossover(fast, slow) and strategy.position_size == 0

if enterLong
    strategy.entry("Long", strategy.long, qty = 4)

if strategy.position_size > 0
    float average = strategy.position_avg_price
    float stopPrice = average * 0.98
    float targetOne = average * 1.02
    float targetTwo = average * 1.04
    strategy.exit("Bracket 1", from_entry = "Long", qty = 2,
                  limit = targetOne, stop = stopPrice)
    strategy.exit("Bracket 2", from_entry = "Long", qty = 2,
                  limit = targetTwo, stop = stopPrice)

plot(fast, "Fast", color.aqua)
plot(slow, "Slow", color.orange)
plot(strategy.position_size, "Position size", display = display.data_window)

各利確・損切り注文はTPとSLを作り、それぞれ2単位を予約します。価格ギャップ・スリッページ・バー内経路は単純化できません。

監査用には、各注文ID、作成バー、指値/逆指値価格、要求注文数量、有効予約注文数量、約定バー、決済IDを表へ記録します。注文数量を3と3へ変えた場合、後続の呼び出しがどのように縮小されるかをミニ計算機で先に確認できます。

06 · 取引履歴の照合

チャート・データウィンドウ・取引一覧を三点照合する

  1. 注文作成を可視化する

    ラベルやプロットで条件成立バー、指値、逆指値、エントリーIDを表示します。

  2. 状態変数を確認する

    strategy.position_sizestrategy.opentradesstrategy.closedtradesstrategy.position_avg_priceをデータウィンドウで追います。

  3. 取引一覧へ移る

    エントリーID/決済ID、時刻、価格、数量を取引一覧で照合します。

  4. 想定外を分類する

    作成遅延、未約定、反転、予約縮小、OCA取消、FIFOのどれかへ分けます。

  5. 約定経路をTV12へ渡す

    状態と数量が整合してなおバー・価格が違う場合だけ、同じ版IDでブローカーエミュレーター監査へ進みます。

想定外の症状から見る確認先
症状最初の確認次の確認
後続逆指値数量が小さい先行決済の予約数量OCAによる縮小と未予約残
利確・損切り注文要求合計が建玉を超える呼び出し順と要求注文数量各呼び出しの有効予約注文数量
取消した注文が戻る毎バーの再発行条件IDとstrategy.cancel()の順序
反転マーカーが大きい既存建玉数量約定数量と新規建玉数量の差
指定IDと違う取引が先に閉じるFIFO設定close_entries_rule

原因を一つずつ切り分け、複数設定を同時に変更しないことが再現性につながります。

07 · 注文状態台帳

一注文一行の状態台帳で修正前後を分ける

注文デバッグの出口は、事象ごとに一行を持つ注文状態台帳です。版ID、バー番号、注文コマンド、注文ID、from_entry、状態、要求注文数量、有効予約注文数量、建玉の変更前/変更後、OCA動作を記録し、修正前後を別版として保存します。

台帳の合格条件は、各エントリー数量が予約済み・未予約・約定済み・取消済みのいずれかへ重複なく保存され、最終建玉数量と一致することです。バー・約定価格の説明列はTV12の監査記録へ外部キーで接続し、同じ表へ無理に詰め込みません。

決済数量の予約確認

複数の決済関数による予約数量

コードの記述順に3つの決済要求を適用し、後続注文が残数量へ縮小される概念を確認します。

有効予約数量の合計単位
決済3の有効数量単位
未予約の残数量単位

逐次計算:r1=min(b, a)、r2=min(c, max(a−r1, 0))、r3=min(d, max(a−r1−r2, 0))。合計=r1+r2+r3、未予約=max(a−合計, 0)。約定・取消・再発行は含まない概念モデルです。

よくある質問

strategy.exit()で指値と逆指値を指定するとストップリミット注文になりますか?

なりません。決済では利確の指値注文と損切りの逆指値注文という利確・損切り注文を作ります。エントリー/注文で両方を指定した場合はストップリミット注文です。

後に書いた逆指値が全建玉を閉じないのはなぜですか?

前のstrategy.exit()の呼び出しが建玉数量の一部を予約している可能性があります。後続の呼び出しは未予約の残数量しか利用できず、有効注文数量が自動縮小されることがあります。

同方向の追加建玉=1なら同方向注文は必ず一つだけですか?

単純にそうとは限りません。同方向の追加建玉は主にstrategy.entry()の同方向エントリー取引へ作用します。strategy.order()や同一ティックで発動する複数価格注文など、別の動作も公式仕様で確認してください。

strategy.cancel()は保有中の建玉も閉じますか?

閉じません。strategy.cancel()は指定IDの未約定注文を取り消す注文コマンドです。保有建玉を閉じる処理はstrategy.close()strategy.close_all()、または適切な決済注文と区別します。

根拠資料と確認先

  1. TradingView Pine Script — Strategies注文タイプ、エントリー・注文・決済、部分決済、予約、OCA、追加建玉の公式解説。
  2. TradingView Pine Script — Strategies FAQ利確・損切り注文、複数利確、トレーリングストップ、注文デバッグの公式FAQ。
  3. TradingView Pine Script — Execution model履歴バー・リアルタイムバーの実行とロールバックの公式仕様。
  4. TradingView Help — Strategy properties注文約定・再計算・追加建玉などと設定項目の対応。

編集・発行: SG Group · 編集方針: TradingView公式ヘルプとPine Script公式文書を優先し、金融市場・商品に関する説明は取引所、監督当局、一次資料で補完しています。機能、データ、料金、接続条件は変わるため、実際の利用前に公式画面とリンク先の最新情報を確認してください。

重要事項: 本記事はTradingViewの画面、チャート、アラート、スクリーナー、ペーパートレード、Pine Script等の一般的な学習情報です。投資助言、売買シグナル、特定商品・データ提供者・ブローカーの推奨、将来価格や利益の保証ではありません。機能、料金、データ、取引所区分、通知、注文連携、Pine Scriptの仕様はプラン・地域・接続先・時点で異なり変更されることがあります。実際の資金を使う前に、TradingView公式資料、データ提供元、接続先事業者の最新条件を確認し、架空データまたはペーパートレードで手順を検証してください。