「株テック | Kabutech Lab.」は、日本株トレードを初心者向けに解説するメディアです。

ツールの使い方や考え方、環境構築方法を学ぶ場として、主に以下の内容を解説しています:

  • TradingViewを使ったバックテスト・ストラテジーの実践情報
    (プログラミング知識がなくても始めやすい検証ツールです)
  • 三菱UFJ eスマート証券のkabu APIを使った環境構築
    (日本株の発注が可能な数少ないAPI接続サービスです)

バックテストは自作プログラム(Pandasなど)で応用可能、発注は他の証券会社のRSSなどでも対応できます。
特定の証券会社やツールを強く推奨するものではありません。

以下の点にご留意ください:

  • 個別銘柄の売買や投資判断の助言は行いません。
  • サンプルのストラテジーやコードは学習・検証用の参考資料であり、実際の売買や利益を保証しません。
  • バックテストは過去データに基づく結果であり、将来の成果を保証しません。
  • 自動売買環境はエラーハンドリングと十分な整備が必須です。
  • 市場変動、システム障害、予期せぬ遅延やエラーなどのリスクがあります。

投資はあくまで自己責任です。リスクを理解して慎重に取り組んでください。

当サイトでは一部アフィリエイト広告を利用しています (プライバシーポリシー)。

ご質問はこちらまでお気軽にどうぞ。

GC戦略の出口を再設計する | ATR・デッドクロス・当日クローズ

🧭 はじめての方へ:基礎 → 実践 → 設計 → 検証 → 理論。最短で再現性に辿り着くためのロードマップ
👉️ Kabutech Lab.のおすすめの進め方

更新情報

ストラテジーSTEPを刷新しました(📘 新構成は無料公開・旧版購入者様特典あり)

これまで有料で展開していた ストラテジー 実装解説を、より分かりやすく、より実践的に全面リニューアルしています。
新シリーズは、基礎から応用までを体系的に学べるよう【全5ステップ・完全無料】で順次公開中です。

📢 旧シリーズをご購入いただいた方へ
これまで多くのフィードバックをお寄せいただき、誠にありがとうございます。
旧版をご購入いただいた皆様には、環境構築代行に関する優待特典をご用意しております。

特典の受け取り方法や代行内容の詳細は、下記の案内ページをご確認ください。
👉 (KFO) 環境構築代行・優待特典のご案内

📊 利確と損切りはどう決めればいい?

ゴールデンクロス で綺麗に入れて

  • 「伸びたのに、逆行して結局 損切り
  • 「入り方は合っている気がするのに、結果が噛み合わない」

そういった経験がある方も多いはずです。

エントリー ばかり考えて、出口を「なんとなく」で決めていると、こうしたズレが起きやすくなります。

こんな方には、 ATR (平均真幅)を使った出口設計を試してみるのがおすすめです。

💡 この STEP シリーズでは、 バックテスト や検証の詳細には踏み込まず、Pine スクリプトによる ストラテジー 実装の理解にフォーカスしています。
本記事は学習目的の内容であり、利益や 勝率 を保証するものではありません。検証や改善の進め方については、以下の記事を参考にしてください。
👉 TradingView で学ぶバックテスト入門|売買ルールの検証と最適化ガイド

👥 この記事は誰向け?

  • ゴールデンクロス などの エントリー 手法は作れたが、出口設計に自信がない人
  • デッドクロス 以外の利確・ 損切り ルールを検討してみたい人
  • 相場の値動きに合わせて柔軟に手仕舞いしたい初心者
  • TradingView ストラテジー を作り始めたばかりの人
  • エントリー 後の「どう終わるか」を整理したい人

📖 この記事でわかること

  • ATR (Average True Range)の基本的な考え方
  • なぜ ATR が出口設計と相性がいいのか
  • シグナル型出口( デッドクロス )との違い
  • ATR を使ったシンプルな利確・ 損切り ルール例
  • 出口ルール設計で注意すべき落とし穴

ATRとは何か?

ATR は、値動き幅をもとにして、相場の ボラティリティ を表現するための指標です。

📌 「 ATR = ボラそのもの」ではなく。「 ATR = 値動き幅から算出した指標」

ポイントは、

  • 上がるか下がるかは示さない
  • 「どれくらい動きやすいか」だけを表す

という点です。

なぜ出口設計でATRが使われるのか

  • エントリー 方向を決める指標 ではなく、
  • 出口や ポジション 管理を補助する指標 として使われることが多くなります。

💡 ボラティリティ フィルターとして、 エントリー 条件の一部に使われるケースもあります

📌 ATRのメリット

  • 今の相場がどれくらい動きやすいか に応じて、
  • 利確・ 損切り 幅を調整する

という考え方が可能になります。

ATRを使ったシンプルな出口ルール例

考え方はとてもシンプルです。

  • 損切り エントリー 価格 ± ATR × n
  • 利確 : エントリー 価格 ± ATR × m

💡「n」「m」は調整用の倍率です。

Pineスクリプト例(ATR取得)

atrValue = ta.atr(14)

💡 このように、Pineでは 簡単に ATR を取得することが可能です。

デッドクロスとATRは対立しない

例えば、

  • デッドクロス :大きな流れの終了判断
  • ATR :想定外の値動きへの保険

というように、 役割を分けて併用する設計もよく使われます。

💡 出口ルールは1つだけである必要はありません。

ATR出口ロジック

// --------------------
// ATRベース出口
// --------------------
if strategy.position_size > 0 // ポジション保有中のみ 実行
    entryPrice = strategy.position_avg_price // エントリー価格 (正確には平均の約定価格)

    stopPrice  = entryPrice - atrValue * 1.5 // エントリー価格 - ATR × 1.5倍で 損切り(ストップ)
    limitPrice = entryPrice + atrValue * 2.0 // エントリー価格 + ATR × 2倍で 利確(リミット)

    strategy.exit(
        "ATR Exit",
        from_entry="Long",
        stop=stopPrice,
        limit=limitPrice
    )

この部分では、 ポジション を持っている間だけ有効になる「自動の利確・ 損切り ルール」 を設定しています。 「stop= 逆指値 損切り 」「limit= 逆指値 利確」と思うとわかりやすいと思います。

📌 今回は一歩進めて「ドテン」を採用してみる

ここまでは、 ゴールデンクロス エントリー デッドクロス で手仕舞いという、シンプルな構成で考えてきました。

今回はこの流れを少し発展させて、 デッドクロス が出たら決済するだけでなく、そのまま反対方向( ショート )に入る「ドテン」構成

にしてみましょう。

  • ゴールデンクロス → LONG
  • デッドクロス → SHORT(同時にLONGは終了)

という形です。

このようにすると、

  • トレンド 転換を「終了」ではなく「次のチャンス」として扱える
  • 上下どちらの動きも戦略に取り込める

という特徴を持った ストラテジー になります。

もちろん、ドテンが常に正解というわけではありませんが、シグナルの使い方を広げる例として、「出口」と「次の エントリー 」をつなげる設計の一例です。

// --------------------
// エントリー(ドテン)
// --------------------
if goldenCross and volumeOK
    strategy.entry("Long", strategy.long)

if deathCross and volumeOK
    strategy.entry("Short", strategy.short)

ここで起きていること(要点)

  • strategy.entry(“Short”, strategy.short)
    LONG保有中なら自動でクローズ → 即SHORT
  • ATR 出口は
    • LONG:下がったら 損切り / 上がったら利確
    • SHORT:上がったら 損切り / 下がったら利確
  • デッドクロス 「決済」ではなく「次の方向への エントリー シグナル」 になる

📌 デイトレでは「当日クローズ」も出口ルールに入れる

ここまで見てきたように、出口ルールには

  • デッドクロス :流れの終了判断
  • ATR :想定外の値動きへの保険

といった役割分担があります。

デイトレ 前提の場合、ここにもう一つ、当日中に必ず手仕舞うという 時間ベースの出口 を加えることがあります。

なぜ当日クローズを入れるのか

  • 翌日の ギャップ リスクを避けたい
  • 引け 後のニュースに振り回されたくない

といった理由から、 ポジション を持ち越さない設計が有効なケースも多いです。

制度変更対応

2024年11月5日(火)から東京証券取引所の株式取引時間が30分延長されています。 これらを加味した バックテスト を行うには少し工夫が必要です。

string tz = "Asia/Tokyo" // 日本時間

// 制度変更日(2024-11-05 00:00)
int changeDate = timestamp(tz, 2024, 11, 5, 0, 0)

// 現在バーが制度変更前か後か
bool isBeforeChange = time < changeDate

Pine Scriptの計算タイミング

Pine Script は基本的に「バーが確定した瞬間(終値が決まった時)」にしか計算を行いません。

つまり

  • 5分足 チャート で動かしている場合:
    → 15:20:00に計算
  • 30分足 チャート で動かしている場合:
    → 15:30:00に計算

こういった挙動を加味した実装が必要になります。

// --------------------
// 当日クローズ(デイトレ用)
// --------------------
string tz = "Asia/Tokyo" // 日本時間

// 制度変更日(2024-11-05 00:00)
int changeDate = timestamp(tz, 2024, 11, 5, 0, 0)

// 現在バーが制度変更前か後か
bool isBeforeChange = time < changeDate

// 時刻条件
bool isAfter1450 = hour(time, tz) > 14 or (hour(time, tz) == 14 and minute(time, tz) >= 50)
bool isAfter1520 = hour(time, tz) > 15 or (hour(time, tz) == 15 and minute(time, tz) >= 20)

// 制度に応じた引け判定
bool isDayClose =
     (isBeforeChange and isAfter1450) or
     (not isBeforeChange and isAfter1520)

// バー確定 + ポジションあり → 決済
if isDayClose and barstate.isconfirmed and strategy.position_size != 0
    strategy.close_all(comment="制度対応・引け決済", immediately=true)
  • barstate.isconfirmed の意味:
    「バーが動いている最中に何度も通知が飛ばないように、しっかり確定してから1回だけ実行してね」という指示です。
  • immediately=true の意味:
    通常、 ストラテジー の注文は「条件を満たした次のバーの始値」で執行されますが、これを true にすることで、条件を満たしたバーの終値(確定したその瞬間) で決済しようとします。 引け 間際の デイトレ では必須の設定です。

⚠️ デイトレでの当日クローズに関する注意点(時間足依存)

ここで紹介した当日クローズ処理は、 バックテスト 上では意図どおりに動作します。

ただし、 Pine Script の仕様上、 時間足 によって挙動に差が出る点には注意が必要です。

  • 5分足などの短い 時間足 では → 引け 付近(15:20 や 15:25)のバーで評価されるため、 ほぼ想定どおりのタイミングで決済されます。
  • 15分足・30分足などの 時間足 では → 条件は「バーが確定したタイミング」でしか評価されないため、 引け 後(15:30 など)にまとめて決済判定が行われます。

その結果、

  • バックテスト 上は「当日 引け 決済」に見えていても
  • リアルタイム通知では 翌営業日の寄り付きで手仕舞い指示が飛ぶ という挙動になる可能性があります。

📌 これはロジックの誤りではなく、 Pine Script が「バー確定ベース」で動作する仕様による制限です。

✅ まとめ|出口設計は調整の余地を広げる

ATR を使うことで、

  • 相場の値動きを考慮した出口設計 が可能になります。

エントリー 手法が同じでも、

  • どのような出口ルールを組み合わせるか によって、戦略の性格は大きく変わります。

さらに ATR デッドクロス ・当日クローズは それぞれ別の役割を持つ出口ルールです。

まずはシンプルな形で導入し、 出口にも設計の選択肢があるという感覚を掴むことが大切です。

GC + 出来高 + ATR出口ストラテジー

//@version=6
strategy(
    "GC + 出来高 + ATR出口",
    overlay=true,
    initial_capital=1000000,
    default_qty_value=100
)

// --------------------
// 移動平均
// --------------------
sma5  = ta.sma(close, 5)
sma25 = ta.sma(close, 25)

// --------------------
// 出来高フィルター
// --------------------
volMA   = ta.sma(volume, 20)
volumeOK = volume > volMA

// --------------------
// ATR設定
// --------------------
atrValue = ta.atr(14)

// --------------------
// 条件判定
// --------------------
goldenCross = ta.crossover(sma5, sma25)
deathCross  = ta.crossunder(sma5, sma25)

// --------------------
// 描画
// --------------------
plot(sma5, color=color.blue)
plot(sma25, color=color.red)

// --------------------
// エントリー(ドテン)
// --------------------
if goldenCross and volumeOK
    strategy.entry("Long", strategy.long)

if deathCross and volumeOK
    strategy.entry("Short", strategy.short)


// --------------------
// ATRベース出口(LONG)
// --------------------
if strategy.position_size > 0
    entryPrice = strategy.position_avg_price

    stopPrice  = entryPrice - atrValue * 1.5
    limitPrice = entryPrice + atrValue * 2.0

    strategy.exit(
        "ATR Exit Long",
        from_entry="Long",
        stop=stopPrice,
        limit=limitPrice
    )


// --------------------
// ATRベース出口(SHORT)
// --------------------
if strategy.position_size < 0
    entryPrice = strategy.position_avg_price

    stopPrice  = entryPrice + atrValue * 1.5
    limitPrice = entryPrice - atrValue * 2.0

    strategy.exit(
        "ATR Exit Short",
        from_entry="Short",
        stop=stopPrice,
        limit=limitPrice
    )

// --------------------
// 引け前 全決済(制度変更対応)
// --------------------
string tz = "Asia/Tokyo" // 日本時間

// 制度変更日(2024-11-05 00:00)
int changeDate = timestamp(tz, 2024, 11, 5, 0, 0)

// 現在バーが制度変更前か後か
bool isBeforeChange = time < changeDate

// 時刻条件
bool isAfter1450 = hour(time, tz) > 14 or (hour(time, tz) == 14 and minute(time, tz) >= 50)
bool isAfter1520 = hour(time, tz) > 15 or (hour(time, tz) == 15 and minute(time, tz) >= 20)

// 制度に応じた引け判定
bool isDayClose =
     (isBeforeChange and isAfter1450) or
     (not isBeforeChange and isAfter1520)

// バー確定 + ポジションあり → 決済
if isDayClose and barstate.isconfirmed and strategy.position_size != 0
    strategy.close_all(comment="制度対応・引け決済", immediately=true)

💡 次のステップ

ここまでで ストラテジー を設計し・検証し・改良するための土台 は完成しました。

次回はこの ストラテジー をさらに一段引き上げ、

  • input を使った 実践向けの調整設計
  • バックテスト 結果を踏まえた 戦略の磨き込み
  • そして 自動売買 へつなげるための考え方と構成

といった、「作れる」から「使える」へ進むステップを解説していきます。

👉️ Pine Scriptで作るオリジナルストラテジーまとめ | バックテスト&自動売買へのステップ

🧭 はじめての方へ:基礎 → 実践 → 設計 → 検証 → 理論。最短で再現性に辿り着くためのロードマップ
👉️ Kabutech Lab.のおすすめの進め方

ストラテジー作成 ステップ一覧

本シリーズは、ストラテジー作成を基礎から応用まで実践的に学べる構成です。
STEP1:概念 → STEP2:実装体験 → STEP3以降:実践・応用

ストラテジー実装をすべて丸投げで代行するプランもあります。
※ あくまで指示頂いた戦略をコードに落とし込む実装サポートであり、投資助言はおこないません。

📈 【無料】テクニカル分析

テクニカル指標をTradingViewで実践活用

詳しく見る

🛠️ 自動売買の構築

TradingView, kabu API を使った環境構築

詳しく見る

📊 戦略設計

戦略を検証し、改善するための手法と実装

詳しく見る

🔧 ストラテジー作成

Pineスクリプトでの戦略実装をガイド

詳しく見る

📦 システム拡張

Slack連携/プロセス監視で安定・拡張

詳しく見る
背景画像
「戦略が、自律する。」