Tick-V Traderは、無料公開されているStop-Grid Traderを筆者が改造したものです。

エントリータイミングを厳選しているため、高密度のストラドル(両建て)グリッドを展開してもダマシに遭いにくく、利益を出しやすい構造になっています。
ソースコードも完全無料で公開しています。(IB口座縛りなし)
Tick-V Traderの無料公開ソースコード
右上のクリップボードボタンをクリックすると、コピペできます。
# tick_v_trader.py
# Tick-V Trader (CLI only)
# 2026-01 compatible / MT5 Python API
import time
import threading
import sys
import signal
import math
from datetime import datetime, timedelta, timezone
import MetaTrader5 as mt5
# ==============================
# 固定パラメータ(入力なし)
# ==============================
SYMBOL = "XAUUSD"
TIMEFRAME = mt5.TIMEFRAME_M1
PRICE_DIGITS = 2
BASE_LOT = 0.02
ORDERS_SIDE = 10
GRID_MULTIPLIER = 2.0
MAGIC_NUMBER = 555176
SPREAD_LIMIT = 30 # point
GRID_TIMEOUT = 120 # 秒
CHECK_INTERVAL = 1.0
# EWMA + Z-Score
EWMA_ALPHA = 0.30
Z_THRESHOLD = 2.6 # 緩め設定
# JST
JST = timezone(timedelta(hours=9))
DEVIATION = 100
GRID_TAG = "VOL_GRID"
running = True
# ==============================
# ロギング
# ==============================
def log(msg, level="INFO"):
ts = datetime.now(JST).strftime("%Y-%m-%d %H:%M:%S")
print(f"[{ts}] {level:<5} {msg}", flush=True)
# ==============================
# MT5 初期化(自動接続)
# ==============================
def mt5_init():
if not mt5.initialize():
code, msg = mt5.last_error()
raise RuntimeError(f"MT5 init failed: {code} {msg}")
if not mt5.symbol_select(SYMBOL, True):
raise RuntimeError(f"Cannot select symbol {SYMBOL}")
log("MT5 connected")
# ==============================
# 終了時 強制クローズ
# ==============================
def full_close():
log("SCRIPT_ABORT_FULL_CLOSE", "WARN")
# pending削除
for o in mt5.orders_get(symbol=SYMBOL) or []:
if o.magic != MAGIC_NUMBER:
continue
mt5.order_send({
"action": mt5.TRADE_ACTION_REMOVE,
"order": o.ticket,
"symbol": o.symbol
})
tick = mt5.symbol_info_tick(SYMBOL)
# 全ポジション決済
for p in mt5.positions_get(symbol=SYMBOL) or []:
if p.magic != MAGIC_NUMBER:
continue
mt5.order_send({
"action": mt5.TRADE_ACTION_DEAL,
"symbol": SYMBOL,
"position": p.ticket,
"volume": p.volume,
"type": mt5.ORDER_TYPE_SELL if p.type == mt5.POSITION_TYPE_BUY else mt5.ORDER_TYPE_BUY,
"price": tick.bid if p.type == mt5.POSITION_TYPE_BUY else tick.ask,
"deviation": DEVIATION,
"magic": MAGIC_NUMBER,
"comment": "SCRIPT_EXIT"
})
log("FULL_CLOSE_DONE")
def signal_handler(sig, frame):
global running
running = False
full_close()
mt5.shutdown()
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
# ==============================
# EWMA + Z-Score 管理
# ==============================
class AccelFilter:
def __init__(self):
self.prev_mid = None
self.prev_ret = 0.0
self.mean = 0.0
self.var = 1e-6
def update(self, mid):
if self.prev_mid is None:
self.prev_mid = mid
return 0.0, 0.0
ret = mid - self.prev_mid
accel = ret - self.prev_ret
# EWMA
self.mean = EWMA_ALPHA * accel + (1 - EWMA_ALPHA) * self.mean
diff = accel - self.mean
self.var = EWMA_ALPHA * (diff * diff) + (1 - EWMA_ALPHA) * self.var
z = accel / math.sqrt(self.var) if self.var > 0 else 0.0
self.prev_mid = mid
self.prev_ret = ret
return accel, z
# ==============================
# フィルター群(ログ出力なし)
# ==============================
def time_filter():
now = datetime.now(JST)
if 5 <= now.hour < 8:
full_close()
return False
return True
def spread_filter():
tick = mt5.symbol_info_tick(SYMBOL)
info = mt5.symbol_info(SYMBOL)
spread = int((tick.ask - tick.bid) / info.point)
if spread >= SPREAD_LIMIT:
return False
return True
# ==============================
# グリッド構築
# ==============================
def norm_vol(vol):
info = mt5.symbol_info(SYMBOL)
step = info.volume_step or 0.01
return round(max(info.volume_min, min(vol, info.volume_max)) / step) * step
def pend(ord_type, price, sl, tp=0.0, vol=None, tag=GRID_TAG):
if vol is None:
vol = BASE_LOT
mt5.order_send({
"action": mt5.TRADE_ACTION_PENDING,
"symbol": SYMBOL,
"volume": norm_vol(vol),
"type": ord_type,
"price": price,
"sl": sl,
"tp": tp,
"deviation": DEVIATION,
"magic": MAGIC_NUMBER,
"comment": tag,
"type_time": mt5.ORDER_TIME_GTC
})
def build_grid():
tick = mt5.symbol_info_tick(SYMBOL)
info = mt5.symbol_info(SYMBOL)
mid = round((tick.bid + tick.ask) / 2, PRICE_DIGITS)
raw_spd_pts = int((tick.ask - tick.bid) / info.point)
step_pts = int(raw_spd_pts * GRID_MULTIPLIER)
pt = info.point
tp_high = tp_low = None
for i in range(1, ORDERS_SIDE + 1):
buy = mid + i * step_pts * pt
sell = mid - i * step_pts * pt
if i == ORDERS_SIDE:
tp_high = buy + step_pts * pt
tp_low = sell - step_pts * pt
tp_b, tp_s = tp_high, tp_low
else:
tp_b = tp_s = 0.0
pend(mt5.ORDER_TYPE_BUY_STOP , buy , mid, tp=tp_b)
pend(mt5.ORDER_TYPE_SELL_STOP, sell, mid, tp=tp_s)
log(f"GRID_START mid={mid} spread={raw_spd_pts}")
return time.time(), tp_high, tp_low, step_pts
# ==============================
# メインループ
# ==============================
def main():
mt5_init()
accel_filter = AccelFilter()
grid_active = False
grid_start = None
tp_high = tp_low = None
step_pts = None
while running:
time.sleep(CHECK_INTERVAL)
# 時間フィルター
if not time_filter():
continue
tick = mt5.symbol_info_tick(SYMBOL)
mid = (tick.bid + tick.ask) / 2
accel, z = accel_filter.update(mid)
# ボラ判定
vol_ok = abs(z) >= Z_THRESHOLD
if not grid_active:
if not vol_ok:
continue
# 時間フィルター再確認
time_ok = time_filter()
if not time_ok:
continue
# スプレッド判定(ログ用に値取得)
tick2 = mt5.symbol_info_tick(SYMBOL)
info2 = mt5.symbol_info(SYMBOL)
spread = int((tick2.ask - tick2.bid) / info2.point)
spread_ok = spread < SPREAD_LIMIT
if not spread_ok:
continue
# ===== エントリー時フィルター情報ログ(ここだけ出力)=====
log(
f"ENTRY_FILTER "
f"accel={accel:.6f} "
f"z={z:.2f} "
f"vol_ok={vol_ok} "
f"spread={spread} "
f"time_ok={time_ok}"
)
# グリッド開始
grid_start, tp_high, tp_low, step_pts = build_grid()
grid_active = True
continue
# ===== グリッド監視 =====
now = time.time()
# タイムアウト強制終了
if now - grid_start >= GRID_TIMEOUT:
log("GRID_TIMEOUT_EXIT", "WARN")
full_close()
grid_active = False
continue
mid_now = (tick.bid + tick.ask) / 2
# 外TP到達
if (tp_high and mid_now >= tp_high) or (tp_low and mid_now <= tp_low):
log("OUTER_TP_EXIT")
full_close()
grid_active = False
continue
# 部分利確チェック
info = mt5.symbol_info(SYMBOL)
pt = info.point
half = BASE_LOT / 2
for pos in mt5.positions_get(symbol=SYMBOL) or []:
if pos.magic != MAGIC_NUMBER:
continue
trg = (
pos.price_open + step_pts * pt
if pos.type == mt5.POSITION_TYPE_BUY
else pos.price_open - step_pts * pt
)
hit = (
pos.type == mt5.POSITION_TYPE_BUY and tick.bid >= trg or
pos.type == mt5.POSITION_TYPE_SELL and tick.ask <= trg
)
if hit and abs(pos.volume - BASE_LOT) < 1e-6:
mt5.order_send({
"action": mt5.TRADE_ACTION_DEAL,
"symbol": SYMBOL,
"position": pos.ticket,
"volume": half,
"type": mt5.ORDER_TYPE_SELL if pos.type == mt5.POSITION_TYPE_BUY else mt5.ORDER_TYPE_BUY,
"price": tick.bid if pos.type == mt5.POSITION_TYPE_BUY else tick.ask,
"deviation": DEVIATION,
"magic": MAGIC_NUMBER,
"comment": "PARTIAL_TP"
})
if __name__ == "__main__":
try:
main()
finally:
full_close()
mt5.shutdown()
Tick-V Traderのトレードロジック
このプログラムは、**「ボラティリティの急増(価格の加速)を検知して、順張りのストップ注文(逆指値)を網状に仕掛ける」**という、非常にアグレッシブなブレイクアウト戦略をとっています。
主な特徴は、単純な価格変動ではなく「価格の加速度(Z-Score)」をトリガーにしている点と、短時間(120秒)で決着をつける超短期決戦型である点です。
トレードロジックを5つのステップで詳しく解説します。
1. エントリーのトリガー(ボラティリティ判定)
このコードの核心部は AccelFilter クラスです。
- 加速の算出: 単純な価格の上下ではなく、価格の「変化率の変化(加速度)」を計算しています。
- EWMA(指数移動平均): 加速度の平均と分散を常に計算し、直近の動きに重みを置いています。
- Z-Score判定: 現在の加速度が、統計的に「異常」と言えるレベル(Z_THRESHOLD = 2.6)に達した瞬間に、ボラティリティが爆発したとみなしてグリッド(網)を仕掛けます。
- つまり、「動き出した瞬間」を狙い撃ちします。
2. グリッド(網)の構築
ボラティリティ判定をパスすると、build_grid() 関数が呼ばれ、現在の価格を中心(Mid)として上下に注文を並べます。
- 注文の種類: BUY_STOP(買い逆指値)と SELL_STOP(売り逆指値)。価格が上がれば買い、下がれば売りという順張り設定です。
- 本数: 片側10本、計20本(ORDERS_SIDE = 10)。
- 間隔(ステップ): その時の「スプレッド × 2.0」を注文間隔にします。スプレッドが狭い時に仕掛けるほど、密な網になります。
- ストップロス (SL):全ての注文の損切りを、グリッドを開始した中心価格(Mid)に設定します。
- これにより、価格が反転して中心に戻ってきたら全てのポジションがカットされる仕組みです。
3. 利確(テイクプロフィット)戦略
2段階の利確ロジックが組み込まれています。
- 部分利確 (Partial TP):
- 各ポジションが「1ステップ分」の含み益が出た瞬間、ロットの半分(0.02 → 0.01)を決済します。
- これにより、早い段階で利益を確保し、残りの半分でさらなる伸びを狙います。
- 全決済 (Outer TP):
- 一番外側(10本目)のさらに先に設定された最終ターゲット(tp_high / tp_low)に価格が到達すると、全てのポジションと未約定注文を削除して終了します。
4. 徹底した守りと制限(フィルタリング)
リスク回避のために厳しい制約が設けられています。
- タイムアウト (GRID_TIMEOUT = 120): グリッドを仕掛けてから120秒経過しても決着がつかない場合、強制的に全決済します。ボラティリティが収束して「ダマシ」になるのを防ぐためです。
- スプレッド制限 (SPREAD_LIMIT = 30): スプレッドが広すぎる(流動性が低い)時はエントリーしません。
- 時間制限 (time_filter): 日本時間の早朝(5時〜8時)など、スプレッドが拡大しやすく不安定な時間帯は稼働を停止し、ポジションがあれば強制クローズします。
5. ロジックのまとめ(トレードの流れ)
- 監視: 1秒ごとに価格をチェックし、加速度(Z-Score)を計算。
- 爆発: Z-Scoreが2.6を超えたら「チャンス到来」と判断。
- 展開: 現在地から上下に逆指値注文を20本ばらまく。
- 追随: 価格が勢いよく一方向に動くと、次々に注文が約定。
- 刈り取り:
- 少し進むたびに半分ずつ利確。
- 一番端まで行けば全利確。
- 逆行して中心に戻れば損切り。
- 120秒経っても決着がつかなければ撤退。
このロジックの強みと弱み
- 強み:
- ゴールド(XAUUSD)のような、一度動き出すと止まらない「強いトレンド」や「急騰・急落」に非常に強い。
- 部分利確があるため、勝率を高めつつ大相場も取れる設計。
- 滞在時間を短くすることで、予期せぬ反転リスクを最小化している。
- 弱み:
- 往復ビンタ(ノイズ)に弱い: 価格が中心付近で上下に振れると、買いと売りの両方の損切りにかかる可能性があります。
- スリッページ: 激しい動きの中で逆指値を出すため、実際の約定価格が設定より滑るリスクがあります。
このスクリプトは、**「静寂から爆発的な動きに変わる瞬間だけを短時間で狩り取る」**という、非常に洗練されたスキャルピング・グリッド戦略と言えます。
加速度統計フィルター (Z-Score Filter) の補足説明
Tick-V Traderに搭載されている「加速度統計フィルター」は、物理学の**「加速度」と統計学の「Z-Score(標準得点)」**を組み合わせた非常に高度なロジックです。
数学的な手順に沿って、何が行われているのかを深掘りします。
1. 「速度」ではなく「加速度」を見る理由
多くのインジケーター(移動平均線など)は「価格がいくらか」を見ますが、このフィルターは以下の3段階で計算します。
- 価格 (Distance): 現在の価格。
- 速度 (Velocity): 前回の価格からの変化量(どれくらい動いたか)。
- 加速度 (Acceleration): 「速度の変化量」(どれくらい「勢い」が増したか)。
なぜ加速度か?
相場が大きく動く時、価格は突然「ガクッ」と動きます。速度の変化(=加速度)を監視することで、「おだやかな動き」と「爆発的な動き」を明確に区別できるからです。
2. EWMA(指数平滑移動平均)による「相場の今の体感」の学習
相場は、静かな時もあれば、常に激しい時もあります。このフィルターは EWMA_ALPHA = 0.30 という設定を使い、**「直近数秒間の相場の空気感」**を常に学習しています。
- 平均加速度の算出: 直近の加速度の平均値を更新し続けます。
- 分散(ボラティリティの標準偏差)の算出: 加速度がどれくらい「普段からバラついているか」を計算します。
ここがポイント:
固定値で「10ドル動いたらエントリー」とするのではなく、「さっきまで静かだったから、今は0.5ドル動いただけでも大事件だ」、あるいは**「今は激動中だから、2ドル動いてもまだ普通だ」**という風に、基準をリアルタイムで変化させています。
3. Z-Score(ゼットスコア)による異常検知
ここで統計学が登場します。Z-Scoreとは、**「現在の値が、平均からみて標準偏差(バラつき)の何倍離れているか」**を示す指標です。
- 計算式: Z = (現在の加速度 – 平均) / 標準偏差
- 閾値(しきい値): Z_THRESHOLD = 2.6
統計学的な意味:
正規分布において、データが 「平均 ± 2.6倍の標準偏差」 の外側に出る確率は、わずか 約0.9% です。
つまり、Z-Scoreが2.6を超えるということは、
「今この瞬間の価格の跳ね上がり方は、直近の相場のリズムからすると**99%以上ありえないレベルの異常事態(爆発)**である」
と数学的に断定したことを意味します。この「異常事態」こそが、ブレイクアウトの初動(ロケットの点火)です。
4. 設定値(0.30 / 2.6)の絶妙なバランス
コード内の数値には意図があります。
- EWMA_ALPHA = 0.30:
- かなり高い数値です。これは「古いデータはすぐに忘れて、数秒前の最新の動きを最優先しろ」という設定です。超短期のスキャルピングに特化させています。
- Z_THRESHOLD = 2.6:
- 一般的に「異常値」とされるのは2.0(上位約5%)からですが、あえて 2.6 と厳しめに設定しています。
- これにより、ちょっとしたノイズ(小刻みな上下)では反応せず、明確に「ドカン」と火柱が立った時だけを狙い撃ちできるようになっています。
まとめ:このフィルターが見ているもの
このフィルターは、チャートを見ているトレーダーが**「おっ、急に動きが速くなったぞ!?」**と感じる、その直感的な驚きを数値化したものです。
- 「静寂」(Z-Scoreが低い状態)
- 「異変」(加速度が急増し、Z-Scoreが2.6を突破)
- 「着火」(グリッドを敷いて、その勢いに飛び乗る)
この仕組みにより、Tick-V Traderは**「トレンドが発生していない時は死んだように静かだが、ボラティリティが爆発した瞬間にだけ獲物を狩るスナイパー」**のような挙動を実現しています。
Tick-V Traderの使い方
このスクリプトはMetaTrader 5 (MT5) のPython APIを利用して動作します。Windows環境でMT5がインストールされていることが前提となります。
具体的な使い方を、準備から実行、停止までステップバイステップで解説します。
1. 準備:環境の構築
まずはPythonからMT5を操作できるように設定します。
- Pythonのインストール:
Pythonがインストールされていない場合は、python.orgからインストールしてください(3.8以上を推奨)。 - ライブラリのインストール:
コマンドプロンプト(またはターミナル)を開き、以下のコマンドを実行します。 code Bashdownloadcontent_copyexpand_lesspip install MetaTrader5
2. MT5側の設定
MT5の設定で、外部からの自動売買許可を出す必要があります。
- MT5を起動し、取引口座にログインします。
- 自動売買を許可:
- 上部メニューの「ツール」→「オプション」を開く。
- 「エキスパートアドバイザ」タブをクリック。
- **「アルゴリズム取引を許可する」**にチェックを入れる。
- (任意)「DLLの使用を許可する」にもチェックを入れておくとトラブルが少ないです。
- アルゴリズム取引ボタン:
- ツールバーにある「アルゴリズム取引」ボタンが**緑色(再生マーク)**になっていることを確認してください。
3. コードの準備と修正(任意)
提供されたコードを stop_grid_vol_cli.py という名前で保存します。実行前に、以下の箇所を自分の環境に合わせて確認してください。
- SYMBOL: “XAUUSD” (ゴールド) になっています。他の通貨ペアにしたい場合はここを書き換えます。
- BASE_LOT: 0.02 になっています。最初は 0.01 など最小ロットでテストすることを強く推奨します。
- MAGIC_NUMBER: 555176 です。他のEAと被らないようにしてください。
4. スクリプトの実行
- コマンドプロンプトでスクリプトを保存したフォルダに移動します。
- 以下のコマンドで起動します。 code Bashdownloadcontent_copyexpand_less
python stop_grid_vol_cli.py - 起動後の挙動:
- [INFO] MT5 connected と表示されれば成功です。
- プログラムは待機状態に入ります。
- ゴールドの価格が急激に動く(加速度がしきい値を超える)まで、注文は出されません。
5. 運用中の監視
- ENTRY_FILTER: 加速度(Z-Score)が条件を満たしたときにこのログが出て、一気に上下20本の注文が入ります。
- GRID_START: 網が敷かれた合図です。MT5の「ツールボックス」→「取引」タブに注文が並ぶのを確認してください。
- PARTIAL_TP: 利益が出始めると、半分ずつ決済されるログが流れます。
- GRID_TIMEOUT / OUTER_TP: 120秒経つか、目標値に達すると自動的に全決済(全削除)されて待機状態に戻ります。
6. 安全な停止方法
- 強制終了: コマンドプロンプトで Ctrl + C を押してください。
- 終了時の挙動: full_close() 関数が呼ばれ、現在このスクリプトが出している未約定の注文と、持っているポジションをすべて成行で決済して終了します。安全に終了できるように設計されています。
⚠️ 重要なアドバイス(必ず読んでください)
- まずはデモ口座で:
このロジックは非常に高速に注文と決済を繰り返します。まずは必ずデモ口座(Demo Account)で数日間動かし、挙動に納得してからリアル口座を検討してください。 - スプレッドの監視:
SPREAD_LIMIT = 30(3.0pips相当)に設定されています。これよりスプレッドが広い時は動きませんが、利用している証券会社のスプレッドが常にこれより広い場合は、エントリーされません。 - 証拠金に注意:
一気に最大10ポジション(片側)持つ可能性があります。BASE_LOT = 0.02 の場合、合計 0.2ロット になるため、証拠金に余裕があることを確認してください。 - VPS(仮想サーバー)の利用:
ネット回線が切れると決済(タイムアウト処理など)が行われないリスクがあります。安定した運用のために、Windows VPS上での稼働を推奨します。
まずは最小ロット(0.01)かつデモ口座で、MT5のチャートの横にコマンドプロンプトを並べて、ボラティリティが跳ねる瞬間を待ってみてください。
Tick-V TraderとStop-Grid Trader(CLI版)の比較
最初にご提示いただいた「Tick-V Trader (Volatility Edition)」と、今回の「Stop-Grid Trader v3.2」は、どちらも**「逆指値を使ったグリッド(網)戦略」という点では共通していますが、「いつ、どのように戦うか」という哲学が根本的に異なります。**
大きな違いを「狙い・エントリー・リスク管理」の3点で比較解説します。
1. 戦略のコンセプト(狙い)の違い
| 項目 | Tick-V Trader | Stop-Grid Trader v3.2 |
|---|---|---|
| 愛称 | スナイパー型 | 農耕(ループ)型 |
| 狙い | 嵐(急騰・急落)が来た瞬間だけを狩る。 | 常に網を仕掛け、相場の上下を拾い続ける。 |
| 動作形態 | 条件(ボラティリティ)が整うまで「待機」。 | 起動した瞬間にグリッドを開始。終われば「再開」。 |
2. エントリー条件とフィルター(攻めの違い)
- Tick-V Trader:
- Z-Score判定: 価格の「加速度」を統計的に監視し、異常な動き(ボラティリティ爆発)がない限り何もしません。
- 徹底した拒否: スプレッドが広い時や、特定の魔の時間帯(早朝など)は、チャンスに見えても「絶対に手を出さない」フィルターが入っています。
- v3.2:
- 即時実行: 起動した場所がスタート地点になります。
- 連続稼働: LOOP_COUNT(100回など)を設定でき、1つのグリッドが利確で終わると、またすぐに次の網を敷きます。相場環境を問わず、回数分トレードを繰り返す設定です。
3. ポジション管理と出口(守りの違い)
ここが最も技術的に異なる点です。
- Tick-V Trader (シンプル・高回転):
- 出口: 「120秒のタイムアウト」があります。短期決戦で、伸びなければすぐ撤退します。
- 部分利確: 利益が出たら半分決済して、残りはそのまま伸ばします。
- v3.2 (複雑・ヘッジ要素あり):
- BE-REV(ブレイクイーブン・リバース):
- 部分利確(半分決済)をした後、残ったポジションの損切りを建値(買値)に移動させます。
- さらに、その建値に**「逆方向の注文(BE-REV)」**を配置します。
- つまり、価格が戻ってきたらトントンで逃げるだけでなく、そのまま反対方向に突き抜けた場合に備えて「ドテン」のような網を張り直すという、より粘り強いロジックになっています。
- タイムアウトなし: 時間で切る設定がなく、ターゲットに届くまで(あるいは損切られるまで)保持します。
- BE-REV(ブレイクイーブン・リバース):
どちらを使うべきか?
Tick-V Trader (スキャルピング寄り) が向いている人
- ゴールドのような激しい銘柄を好む人。
- 「無駄なトレードはしたくない、チャンスの時だけ入りたい」という人。
- 急なトレンドに便乗し、短時間で利益を抜いて逃げたい人。
Stop-Grid Trader v3.2 (グリッドトレード寄り) が向いている人
- レンジ相場や、行ったり来たりする相場を好む人。
- 常にポジションを回して、チャリンチャリンと利益を積み上げたい人。
- ボラティリティ判定を待たず、自分のタイミングで稼働を開始したい人。
まとめ
- 最初のコード (Tick-V): **「ボラティリティの波」**に乗るためのインテリジェントなEA。安全性と効率を重視。
- 今回のコード (v3.2): **「網」**そのものの機能を強化したEA。建値付近での攻防(BE-REV)に強く、ループ機能で何度も稼働させることを想定。
安全性を重視するなら、**最初のコード(Tick-V)**の方が、時間フィルターやタイムアウト、スプレッド監視が備わっているため、初心者の方には扱いやすい(大怪我しにくい)設計になっています。
Tick-V Traderの収益目安(グリッド1回あたり)
Tick-V Trader(ロット0.02 / 片側10本 / ゴールド XAUUSD)の設定で、1回のエントリー(1回のボラティリティ爆発)から得られる収益の目安をシミュレーションします。
収益は**「その時のスプレッド」**に依存します。ゴールドのスプレッドが標準的な 20ポイント(0.2ドル幅)とし、ステップ幅がその2倍の 40ポイント(0.4ドル幅)であると仮定して計算します。
1. 収益計算の前提条件
- 銘柄: XAUUSD(1ロット=100オンス)
- ベースロット: 0.02ロット(0.01ずつ分割決済)
- ステップ幅: 40ポイント($0.40) ※スプレッド20ポイント×倍率2.0
- グリッド数: 片側10本
- 最大TP(10本目): 中心から11ステップ離れた場所
2. シミュレーション:最強のシナリオ(一撃必殺)
価格が片側に猛烈に突き抜け、10本すべての注文を拾ってからターゲット(Outer TP)に到達した場合。
- 部分利確による利益(10本分):
- 各ポジションが1ステップ($0.40)動いた瞬間に半分(0.01ロット)を利確。
- 0.01ロット ×
0.40×10本=∗∗0.40 × 10本 = **0.40×10本=∗∗4.00**
- 残りの半分(0.01ロット)が最終TPで決済された時の利益:
- 1本目(10ステップ分): $4.00
- 2本目(9ステップ分): $3.60
- …
- 10本目(1ステップ分): $0.40
- 合計: $22.00
- 合計収益:
- $4.00 +
22.00=∗∗22.00 = **22.00=∗∗26.00**
- $4.00 +
【結論】 完璧にトレンドが出た場合、0.02ロット運用で1回あたり約25ドル〜30ドル程度の利益が目安になります。
3. シミュレーション:中程度の動き
価格が5本目まで約定し、少し揉み合ってからタイムアウト(120秒)または中心に戻って損切りされた場合。
- 部分利確(5本分):
- 0.01ロット ×
0.40×5本=∗∗0.40 × 5本 = **0.40×5本=∗∗2.00**(利益確定済み)
- 0.01ロット ×
- 残りの半分が中心(Mid)に戻って損切りされた場合:
- 建値から「逆方向に」ステップ数分マイナスになります。
- 1本目(1ステップ損): -$0.40
- …
- 5本目(5ステップ損): -$2.00
- 合計: -$6.00
- トータル:
- $2.00(益) –
6.00(損)=∗∗−6.00(損) = **-6.00(損)=∗∗−4.00**
- $2.00(益) –
4. シミュレーション:最悪のケース(往復ビンタ)
価格が1本目を約定させた直後、部分利確(1ステップ先)に届かずに中心(Mid)へ戻って損切り。これが上下で発生した場合。
- 0.02ロット × 1ステップ(
0.40)×2回(往復)=∗∗−0.40) × 2回(往復) = **-0.40)×2回(往復)=∗∗−1.60** - もし数本拾ってから全戻しすると、–
10.00〜10.00〜10.00〜15.00 程度の損失になる可能性があります。
収益目安のまとめ
| シナリオ | 収益(0.02ロット) | 状況 |
| パーフェクト | + 25.00〜+25.00 〜 +25.00〜+ 35.00 | 120秒以内に一方向に爆発 |
| 半分ヒット | + 5.00〜+5.00 〜 +5.00〜+ 10.00 | 数本拾ってからターゲット手前で停滞 |
| 失速(微損) | – 2.00〜−2.00 〜 -2.00〜− 5.00 | 数本拾って部分利確したが、その後反転 |
| 全戻し(損切り) | – 10.00〜−10.00 〜 -10.00〜− 15.00 | 大量に拾った直後に急反転 |
運用のアドバイス
- 収益の柱: このEAは「10回に数回のパーフェクトな爆発」で利益を出し、それ以外の微損を耐え忍ぶトレンドフォロー型の収益曲線を描きます。
- ロットの影響: 利益をもっと増やしたい場合は BASE_LOT を上げますが、同時に「全戻し」を食らった時のダメージも大きくなります。
- ボラティリティの重要性: ターゲットに届くかどうかは、エントリー時の「Z-Score(勢い)」がいかに本物であるかにかかっています。
一言で言えば、**「1回の成功で2,000円〜4,000円稼ぎ、失敗した時は数百円〜1,500円程度で撤退する」**という繰り返しを狙うツールと言えます。
