🧩 FO_Util | ストラテジー実装を支える共通ライブラリ
FO_Utilは、
TradingView
(
Pine Script
)での
ストラテジー
開発を効率化するための共通ライブラリです。
当ラボで公開している
ストラテジー
は、すべてこのFO_Utilをベースに構築されています。
👉️ FO_Util(TradingView公開リンク)
FO_Utilは、
ストラテジー
開発における面倒な共通処理をまとめて解決し、戦略ロジックに集中できる環境を提供します。
🎯 このライブラリでできること
ストラテジー
開発で毎回必要になる処理を、シンプルに実装できます。
- セッション管理(時間帯制御・日付またぎ対応)
- 発注禁止時間の制御(日本株・先物対応)
-
ATR
ベースの
損切り
・利確
-
出来高
・
ヒゲ
・
ATR
ボラティリティ
などの各種フィルター
- ドテン対応
エントリー
-
引け
決済(セッション終了時の強制クローズ)
- 週末決済(
スイング
運用の週跨ぎ抑止クローズ)
実務前提の設計でそのまま実口座へ発注まで
検証用ではなく、実際の運用を前提としたロジック構成になっています。
市場ごとのセッションや発注制御など、実運用で必要になる条件を考慮して設計されています。
TradingView
の
バックテスト
だけで終わらせず、そのまま日本株の実注文へ接続したい方には、FO(Flex Order)をご用意しています。
TradingView
アラート
→ 実口座注文まで、自動化環境を構築可能です。
👉 FO(Flex Order)を見る
📦 対応市場
- 日本株(JP_STOCK)
- 日経先物(JP_FUT)
※ セッション・発注制御に対応
✔ 数行で実装できる
複雑になりがちな処理も、関数呼び出しだけで完結します。
✔ 戦略ロジックに集中できる
面倒な共通処理を切り離すことで、
エントリー
・ロジックそのものに集中できる設計です。
📚 FO_Util リファレンス
以降はFO_Utilで利用できる主要関数をまとめています。
f_allowEntry()
セッション判定と発注禁止時間判定を統合した
エントリー
許可関数です。
allowEntry = util.f_allowEntry(
useSessionFilter,
startHour,
startMinute,
endHour,
endMinute,
marketTypeInput
)
| 引数 |
型 / 選択肢 |
説明 |
| useSessionFilter |
bool (true / false) |
時間フィルターを有効化するか |
| startHour |
int |
開始時(例: 9) |
| startMinute |
int |
開始分(例: 0) |
| endHour |
int |
終了時(例: 14) |
| endMinute |
int |
終了分(例: 30) |
| marketTypeInput |
string ("JP_STOCK" / "JP_FUT") |
制御対象の市場タイプ(日本株 or 先物) |
| fromDays |
int |
開始側を何日後ろにずらすか |
| toDays |
int |
終了側を何日前にずらすか |
内部で
- セッション時間
- 昼休み
-
引け
前
- 先物ナイト
- ストップ高・
ストップ安
接近
を考慮します。
※「市場タイプ」で日本株(JP_STOCK)か日経先物(JP_FUT)を選ぶだけで、昼休みや
引け
際の発注制御が自動で切り替わります。
なぜ必要なのか
TradingView
の
バックテスト
では
エントリー
シグナルが出た価格で
約定
したように見えますが、実際の市場では注文できない時間帯が存在します。
例えば日本株の場合、
- 11:30に買いシグナル発生
-
バックテスト
上は1,000円で
エントリー
- 実際は昼休みのため未
約定
-
後場
寄り(12:30)の価格で
約定
というズレが発生します
このようなケースでは、
の乖離が大きくなりやすくなります。
FO_Utilでは、実際に注文できない時間帯の
エントリー
をあらかじめ除外することで、
バックテスト
と実運用の乖離をできる限り小さくすることを目的としています。
fromDays / toDays(バックテスト期間調整)
バックテスト
の期間をざっくり分割するための設定です。
通常の期間指定でも検証はできますが、この設定を使うことで
これにより、同一ロジックでも
- 過去データ(In-Sample)
- 直近データ(Out-of-Sample)
を簡易的に分離して検証できます。
ディープ
バックテスト
環境(※要有料プラン)ではより厳密な分割検証を行いますが、
これはあくまで手元でざっくり相場の当たり外れを見るための簡易機能です。
ディープ
バックテスト
機能を利用するには
TradingView
の有料プランが必要です。
👉️ トレーディングビュー(TradingView)
f_executeEntry()
ロング
・
ショート
の発注処理を行います。
util.f_executeEntry(
longSignal,
shortSignal
)
特徴
- ドテン売買対応
-
ポジション
重複防止
- LONG / SHORT の注文管理を共通化
- FO(Flex Order)連携向けの注文処理を標準搭載
本関数を利用することで、
ストラテジー
ごとに注文IDや発注管理を実装する必要がありません。
FO環境では、そのまま
TradingView
アラート
→発注へと利用できる構成を想定しています。
なぜ必要なのか
TradingView
の
バックテスト
だけであれば、
strategy.entry("LONG", strategy.long)
のように直接発注しても問題ありません。
実運用では、
-
ロング
保有中に
ショート
シグナルが出た場合のドテン処理
-
ポジション
重複防止
- 注文処理の統一
- 返済と新規発注の順序管理
などを考慮する必要があります。
FO連携を前提とした設計
当ラボで公開している
ストラテジー
は、
TradingView
→ FO →
証券会社
への自動発注を前提に設計されています。
そのため f_executeEntry() には、FOが認識できる注文管理ルールがあらかじめ組み込まれています。
f_executeSessionClose()
指定時刻、または週末の固定時刻に
ポジション
を
強制決済
します。
デイトレード
向けの補助機能として利用できます。
util.f_executeSessionClose(
useSessionClose,
closeHour,
closeMinute,
marketTypeInput,
useWeekendClose
)
主な用途
- 日本株の
引け
決済
- 先物デイのみ運用
-
オーバーナイト
回避
- 週末決済
- FO連携向け決済メッセージを標準搭載
通常は
ストラテジー
ごとに、決済それぞれの通知メッセージを管理する必要がありますが
FO_Utilではこれらを共通化しているため、利用者は売買ロジックの実装に集中できます。
スイング運用の場合
スイング
トレードなど
ポジション
を持ち越す戦略では、
useSessionCloseやuseWeekendCloseを任意指定する事で
引け
決済を無効化できます。
※ useSessionClose=true の場合は指定時刻での決済が優先され、週末決済は実行されません。
| useSessionClose |
useWeekendClose |
結果 |
| true |
true |
指定時間のみ |
| true |
false |
指定時間のみ |
| false |
true |
週末固定時間のみ |
| false |
false |
決済なし |
f_calcATRExit()
ATR
ベースの
損切り
・利確を行う出口管理関数です。
多くのテンプレートで共通利用されている標準的な出口管理ロジックで、
ATR
を基準に利確・
損切り
価格を自動計算します。
[longStop, shortStop, longLimit, shortLimit] = util.f_calcATRExit(
strategy.position_avg_price,
atrValue,
atrStopMult,
atrLimitMult,
maxStopPerc
)
| 引数 |
説明 |
| atrStopMult |
損切り倍率 |
| atrLimitMult |
利確倍率 |
| maxStopPerc |
最大損失率 |
補足
ATR
(Average True Range)は相場の
ボラティリティ
を表す指標です。
本関数では
ATR
を基準として、
-
ATR
×倍率で
損切り
位置を計算
-
ATR
×倍率で利確位置を計算
します。
また、急激な
ボラティリティ
上昇時に過大な損失幅にならないよう、
maxStopPercを利用して最大損失率による上限制御も行っています。
これにより、相場環境に応じた柔軟な出口管理と
リスク管理
を両立できます。
f_atrRangeFilter()
ATR
を基準に
ローソク足
の
値幅
を判定する
ボラティリティ
フィルターです。
rangeFilter = util.f_atrRangeFilter(
high,
low,
atrValue,
atrMultiplier,
atrMultiplierMax
)
| 引数 |
説明 |
| high |
高値 |
| low |
安値 |
| atrValue |
ATR値 |
| atrMultiplier |
ATR下限倍率 |
| atrMultiplierMax |
ATR上限倍率 |
なぜ必要なのか
相場には、
が存在します。
例えば、
などの局面では、通常の売買ロジックが機能しにくくなることがあります。
そこで
ATR
を基準に現在の
値幅
を評価し、ローソク足の値幅÷ATRによって、適切な
ボラティリティ
環境のみ
エントリー
を許可します。
使用例
rangeFilter = util.f_atrRangeFilter(
high,
low,
atrValue,
0.5,
2.0
)
上記の場合、
の
値幅
でのみ
エントリー
を許可します。
主な用途
-
ボラティリティ
不足の除外
- 異常な急騰・急落の除外
-
ブレイク
アウト戦略の精度向上
-
レンジ
戦略の過剰
エントリー
抑制
補足
atrMultiplier = 0
atrMultiplierMax = 0
に設定することでフィルターを無効化できます。
ATR
は銘柄や価格帯が変わっても相対的な
値幅
として評価できるため、固定値による
値幅
判定より汎用性の高いフィルターとして利用できます。
f_volumeFilter()
出来高
条件を判定します。
volOK = util.f_volumeFilter(
volLength,
volMultiplier,
volLookback,
"above"
)
出来高
が平均以下の相場では、
が増加しやすくなります。
平均出来高 × 指定倍率
を指定する事で、既定値以上の
出来高
が発生した場合のみ
エントリー
を制限する事が可能です。
使用例
volOK =
util.f_volumeFilter(
20,
1.5,
3
)
主な用途
-
出来高
急増のみ
エントリー
- 閑散相場の除外
-
ブレイク
アウト強化
f_wickFilter()
ヒゲ
条件を判定します。
wickLongOK = util.f_wickFilter(
wickRatio,
-1,
wickLookback
)
長い上
ヒゲ
や下
ヒゲ
は、
を示唆することがあります。
そこで、
一定割合以上のヒゲ
が発生している場合のみ
エントリー
を許可できます。
押し目
・
戻り
の判定補助として利用できます。
使用例
wickLongOK =
util.f_wickFilter(
0.5,
-1,
3
)
f_dmiAdxFilter()
DMI
・ADXフィルターを取得します。
[dmiLongMode, dmiShortMode, adxOK] =
util.f_dmiAdxFilter(
dmiLength,
true,
adxThreshold,
"above"
)
DMI方向フィルター
DMI
は、
を判断するための指標です。
TREND
+DI > -DI
なら買い
REVERSAL
-DI > +DI
なら買い
のような切り替えも可能です。
ADXフィルター
ADXは、
トレンド
の強さ を表します。
例えば、
ADX > 25
なら強い
トレンド
相場のみ参加。
逆に、
ADX < 25
なら
レンジ
戦略向けの設定も可能です。
f_chopFilter()
下位足
チャート
(5分足等)から、
日足
ベースのChop(
レンジ
相場)を判定する相場環境フィルター関数です。
TradingView
の通常の上位足参照request.securityで発生しがちな、
バックテスト
の成績が良くなりすぎるリペイント(未来のデータの先読み)を回避します
[chopValue, chopOK] =
util.f_chopFilter(
chopLength,
chopThreshold,
"below"
)
Choppinessフィルター
Chopは、
を判定するための指標です。
例えば、
Chop が低い
↓
強いトレンド
Chop が高い
↓
レンジ
という形で利用できます。
コメント
@管理人
質問・リクエスト・感想など、お気軽にコメントしてください。
※ コメント同士での情報交換は歓迎しています。
運営から個別返信は行っていませんが、すべて拝見し、今後のコンテンツ改善や記事作成の参考にしています。 誹謗中傷・スパムなどは予告なく非表示・削除する場合があります。