今回紹介するのはエンベロープを使った戦略です。
バックテスト
BTCUSD

📝 概要
「MA を基準に、段階的なエンベロープでポジションを積み、価格が戻ったらまとめて回収する」
という、王道の平均回帰ロジックを柔軟に組み上げた戦略です。
単純なナンピン系と違って、
- エンベロープは最大4段
- ロットは固定 / 残高比例 / エンベロープ平均価格ベースから選択可
- エントリーMAと決済MAを分離できる
- マルチタイムフレーム対応
と、実運用を意識した“痒いところに手が届く”構成になっています。
🎯 作成の意図
この戦略を作った背景はかなりシンプルです。
- 「エンベロープ戦略って、結局どこでロット決めるのが一番マシなんだ?」
- 「MA割れたら積んで、戻ったら一気に逃げたい」
- 「でも時間足は変えたいし、Closeは別MAにしたい」
こういう実際に検証していると必ず出てくる不満を、全部一度コードに落とし込もう、という発想です。
特に意識したのはこの3点です。
- 段階エントリーを前提にしたロット設計
- 「Close専用MA」を持たせることで、逃げ遅れを減らす
- 後から最適化しやすい構造(if地獄にならない)
結果として、いわゆる「ナンピン戦略」よりも
“価格乖離に対するリバランス” というニュアンスの方がしっくり来る設計になっています。
📘 コード(戦略部分)の解説
ここでは戦略のコアだけをかいつまんで解説します。
■ ① エンベロープを「レイヤー」として扱う
lvlS1 = lvl(maShort, envS1)
lvlS2 = lvl(maShort, envS2)
lvlS3 = lvl(maShort, envS3)
lvlS4 = lvl(maShort, envS4)
MA を中心に、%指定で最大4段の価格帯を作っています。
0 を指定すれば、そのレイヤーは無効化されます。
これにより、
- 2段だけの軽い構成
- 4段フルのグリッド構成
をスイッチ一つで切り替えられます。
■ ② ロットサイズは「平均エンベロープ価格基準」が肝
avgShPct = cntS > 0 ? (envS1 + envS2 + envS3 + envS4) / cntS : 0.0
lotS = bal / (maShort * (1 + avgShPct / 100))
この戦略のちょっと面白いところがここです。
「一番深いエンベロープ基準」ではなく、
有効なエンベロープの“平均位置”を想定価格としてロットを決める
という考え方を採用しています。
結果として、
- 最初からロットが重くなりすぎない
- フルで刺さった時の想定ポジションサイズが安定する
というメリットがあります。
■ ③ エントリーとクローズを完全に分離
maShortClose = i_shortCloseOn ? devLvl(resolveMA(...), i_shortCloseDev) : maShort
多くのエンベロープ戦略は
「エントリーMAに戻ったら利確」
ですが、それだと逃げ遅れることも多いです。
この戦略では、
- エントリー用MA
- クローズ用MA(別TF・別タイプ・Deviation付き)
を完全に分けています。
これにより、(賛否はあるかもですが)
「積むロジック」と「逃げるロジック」を独立して最適化
できるようになります。
■ ④ ポジション数で“次に積むか”を判断
eCntS = envCount(lotS, false)
if envS2 != 0 and eCntS <= eCntLP + 1
strategy.entry(...)
現在のポジションサイズから
「いま何段目まで積んでいるか」を逆算し、
- まだ浅ければ次のエンベロープへ
- 行き過ぎていたらストップ
という制御を入れています。
これにより、
想定外にポジションが膨らむ事故を防止
しています。
🚀 ワン モア ステップ
- ATR やボラティリティで エンベロープ幅を可変化
- トレンド判定を入れて 逆張り禁止ゾーンを作る
- 「全決済」ではなく 段階的リバランス決済
などを足すと、一気に“運用向け”になります。
個人的には、
「レンジ判定 × Layered Envelope」
の組み合わせはかなり相性が良いと思っています。
ベースはシンプルなので、
自分の相場観をどう上に乗せるか
を試す土台として、ぜひいじり倒してみてください。
コアメンバー向けソースコード
こちらからどうぞ。


コメント