phase 7-8 完成 + warmup 修复 + 产物结构化重组

主要内容:
- Phase 8 PROMOTE: finalist #1 (trial #324) registry 条目,自动生成
- Optuna objective warmup bug 修复 (shared/optimizer/objective.py)
- studies/ 目录按用途重组为 optuna/ + finalists/ + features/ 三层
- reports/ 加入 Optuna 中文 dashboard (5 主图 + 18 slice + 15 contour)
- 新增 PROJECT_GUIDE.md 项目说明文档
- 新增 build_registry_entry.py / build_optuna_dashboard.py / build_feature_datasets.py
- .gitignore: 允许提交 studies/*.db (Optuna DB) 和 reports/*.html (MT5 + dashboard)
This commit is contained in:
2026-06-27 00:28:07 +08:00
parent 0dcbfe0781
commit 63a829cc46
45 changed files with 7240 additions and 9 deletions
+6 -2
View File
@@ -8,8 +8,6 @@ data/
# Run outputs / scratch
results/
*.db # Optuna SQLite studies
*.htm # pulled MT5 reports
# Secrets — NEVER commit broker credentials
.env
@@ -18,3 +16,9 @@ results/
# OS
.DS_Store
Thumbs.db
# NOTE: studies/*.db (Optuna) and reports/*.html (MT5 + dashboard) ARE
# committed — they're research artifacts, not scratch output. The Optuna DB
# is the only way to reproduce a finalist; HTML reports are the only ground
# truth for the Python-vs-MT5 gap analysis.
+747
View File
@@ -0,0 +1,747 @@
# PROJECT_GUIDE — Backtesting + Optuna + MT5 Stack 项目说明
> 这份文档是**项目实例说明**:它描述当前这个目录里实际跑通的那一套
> GoldScalperPro EA × XAUUSD × IC Markets Demo)——架构为什么这么搭、开发过程踩过
> 的坑、日常怎么用、后续怎么扩展。它和 `README.md`/`0108-*.md` 是互补关系:
> 那些是**知识库**(抽象架构 + 通用方法论),这份是**实例说明**(具体项目层面)。
>
> 如果你只是想跑一遍流程:跳到 §3「使用手册」。
> 如果你是接手维护:先读 §1「架构理念」+ §4「扩展指南」+ §5「踩坑列表」。
---
## 0. 项目一句话
一个把 MetaTrader 5 Strategy Tester 当作"金标准"、用 Python 镜像引擎做高速贝叶斯
搜索的个人量化策略研究实验室。当前已对 **GoldScalperPro** 这个 XAUUSD M5 EA
跑通完整的"假设 → 搜索 → MT5 验证 → 入注册表"闭环,并产出第一条 registry 记录。
---
## 1. 架构理念
### 1.1 两层模型(the two-tier design
核心思想:**Python 排序,MT5 拍板**。
- **Tier 1Python 镜像引擎)**:把 EA 的填单/出场逻辑 bar-by-bar 重写一遍,跑在
Parquet 历史数据上。全 2 年 XAUUSD M5×M1 数据一次回测几秒钟。Optuna 拿它做
几百上千次试验,从中挑出 23 个 diverse finalist。
- **Tier 2MT5 Strategy Tester**:只对 finalist 跑真实 tester。MT5 的数字才是
live 决策依据;Python 数字只负责排序和 A/B。
```
Idea ─► Python mirror engine ─► Optuna search (thousands of trials, fast)
23 diverse finalists
MetaTrader 5 Strategy Tester (gold standard)
Python-vs-MT5 comparison table ─► keep / discard / iterate
registry/ (locked, append-only)
```
**为什么这样分层**:MT5 真实 tick 模式跑一次 2 年回测要 10–30 分钟,做不了 1000 次
Optuna 搜索;纯 Python 又不可信。两层分工把"快"和"准"分开:用快的引擎做广度搜索,
用准的 tester 做最终验证。
### 1.2 单向依赖分层
整个仓库是 9 个**单向依赖层**,高调低、低不知高:
```
┌─────────────────────────────────────────────────────────────────────┐
│ STRATEGY / CALLER 一个策略一个文件夹 │
│ load bars → compute signals+stops → call engine → score │
└───────────────┬──────────────────────────────────┬─────────────────┘
│ │
┌───────▼────────┐ ┌────────▼─────────┐
│ OPTIMIZER │ │ MT5 BRIDGE │
│ Optuna objective│ │ compile/run/ │
│ diverse top-N │ │ parse/compare │
└───────┬─────────┘ └────────┬─────────┘
│ │
┌───────▼─────────┐ │
│ ROBUSTNESS │ read-only over results │
└───────┬─────────┘ │
│ │
┌───────▼─────────────────────────────────────▼──────────┐
│ ENGINE (frozen) bar-by-bar fill simulator │
│ knows: bars, signals, stop/target prices, instrument │
│ knows NOT: your strategy, indicators, broker │
└───┬─────────────┬────────────────┬──────────────────────┘
│ │ │
┌────────▼───┐ ┌──────▼──────┐ ┌──────▼───────┐ ┌──────────────┐
│ INDICATORS │ │ INSTRUMENTS │ │ GATES │ │ DATA │
│ RSI/ATR/.. │ │ per-symbol │ │ entry-filter │ │ loaders + │
│ pure fns │ │ config объ. │ │ masks │ │ MT5 parser │
└────────────┘ └─────────────┘ └──────────────┘ └──────────────┘
```
**每一层的"必须 / 不能"**(来自 [02-architecture.md](02-architecture.md#L40-L54)):
| Layer | 文件夹 | Owns | Must NOT |
|-------|--------|------|----------|
| Data | `shared/data/` | 从 Parquet 加载 bars;从 MT5 拉历史;解析 MT5 HTML 报告 | 含策略逻辑 |
| Instruments | `shared/instruments/` | 每个 symbol/broker 的 config 对象(tick value、spread、swap、lot step | 知道任何策略 |
| Indicators | `shared/indicators/` | 纯函数:RSI、ATR、EMA、SMA、自定义指标 | 跨调用保状态 |
| Gates | `shared/gates/` | 布尔 mask,过滤入场(regime、时段、exhaustion | 开/平仓 |
| Engine | `shared/core/` | bar-by-bar fill/exit 模拟器;验证后**冻结** | 算信号或止损价 |
| Robustness | `shared/robustness/` | 只读反过拟合分析 | 改 engine 或 result |
| Optimizer | `shared/optimizer/` | objective 函数、Optuna 接线、diverse top-N 选择 | 知道 broker 细节 |
| MT5 bridge | `shared/mt5_pipeline/` | 生成 .set/.ini、跑 tester、拉报告、对比 | 算策略 |
| Strategy/caller | `strategies/<name>/` | glue:数据 → 信号 → 止损 → engine → 指标 | 被另一策略 importcopy,不 import |
| Registry | `registry/` | 已批准、锁定的结果——真相源 | 被随意编辑 |
### 1.3 三个核心设计决策
#### 决策 1Engine 一无所知
`engine.run()` 的输入是**预算好的**bars + 信号数组 + SL/TP 价格数组。
Engine 只决定**价格是否触到止损**,**从不决定止损放在哪**。
这条接缝把"策略"和"模拟器"分开:换策略 → 改 caller 和数组;engine 不动。
这是整个项目可冻结、可复用的根基([02-architecture.md §2](02-architecture.md#L58-L104))。
`engine.run` 的签名([shared/core/engine.py](shared/core/engine.py#L108-L147)):
```python
engine.run(
bars, # DataFrame [timestamp, open, high, low, close, spread]
signals_long, # bool array — 仅在触发 bar 为 Trueedge-detected
signals_short, # bool array
sl_prices, # 数组 — 该 bar 入场的止损价(NaN 表示无)
tp_prices, # 数组 — 止盈价
instrument, # InstrumentConfig — 所有 symbol mechanics
sizing, # SizingInputs — 仓位 sizing 输入
initial_deposit,
*, # 以下 keyword-only
m1_bars=None, # M1 barstrailing/BE EA 必传(见 §1.3 决策 3)
) -> Result
```
#### 决策 2Engine 一旦验证就冻结
验证通过的 engine 就是**满意基线**,永不编辑它来试新想法——**fork 它**:
复制一份加一个 default-OFF 的实验 hook,先证明 fork-with-change-off == 原版 1:1
再 A/B[04-isolation-rules.md Rule 2](04-isolation-rules.md#L21-L44))。
**为什么这么严**engine 的验证是 trade-by-trade 对账 MT5,很贵。一行"小改"可能
悄悄让百万个 bar 的填单位移,让所有已信任的数字都失效——而且你**很久之后才发现**。
#### 决策 3trailing/BE EA 必须 M1 tick-level 模拟
这是项目里**最容易踩的坑**:bar-level 模拟(4 个 sub-tick: O→L→H→C)对
break-even/trailing/basket-trailing 类 EA 会产生 **40% 到 50% 的 net profit gap**
**即使在平静窗口也如此**。这不是噪声,是 bug。
**机制**bar-level 引擎用 bar high 更新 BE/trailing SL,然后在**同一根 bar 的另一端**
检查 SL。如果价格短暂穿越 BE 阈值,SL 被移到 break-even,然后同一根 bar 的 low
(long 仓位)就触发刚移动的 SL——锁定一笔**微利**,但 MT5 的 tick 路径会把它记成
小亏(BE-trigger tick 和 SL-trigger tick 在 MT5 里是分开的 tick,价格可能继续穿过 BE
变成真亏损才填单)。
**修复**:传 `m1_bars=`engine 切换到 tick-level 模拟——每根 M5 bar 内走 5 根 M1
子 bar × 4 synthetic tick,方向感知顺序。BE-update tick 和 SL-trigger tick 落到不同
M1 bar,还原真实最坏情况。gap 从 −48.5% 降到 5.6%[03-engine-design.md §7](03-engine-design.md#L189-L255))。
实测对照表([03-engine-design.md](03-engine-design.md#L234-L241)):
| Mode | Net gap vs MT5 | PF gap | Trade-count gap |
|------|----------------|--------|------------------|
| Bar-level (4 sub-ticks) | **48.5%** | 30.0% | 0% |
| M1 tick-level (4 sub-ticks × 5 M1 bars) | **5.6%** | 7.8% | 0% |
### 1.4 文档地图
| # | 文档 | 用途 |
|---|------|------|
| — | [README.md](README.md) | KB 入口:抽象两层模型、文档导航 |
| — | [CLAUDE.md](CLAUDE.md) | 给 AI 助手的分阶段搭装 playbook |
| 01 | [01-stack-and-install.md](01-stack-and-install.md) | 技术栈每个库 + 每个系统的安装命令 |
| 02 | [02-architecture.md](02-architecture.md) | 单向依赖分层 + 数据流 |
| 03 | [03-engine-design.md](03-engine-design.md) | bar-by-bar engine 设计、intra-bar 4-sub-tick、保真度 |
| 04 | [04-isolation-rules.md](04-isolation-rules.md) | 8 条隔离铁律(冻结/fork/instrument/registry |
| 05 | [05-config-and-inputs.md](05-config-and-inputs.md) | 4 个声明输入源(instrument/space/wizard/frozen |
| 06 | [06-optimization-and-robustness.md](06-optimization-and-robustness.md) | Optuna objective、diverse top-N、反过拟合层 |
| 07 | [07-mt5-bridge.md](07-mt5-bridge.md) | 编译 EA、生成 .set/.ini、跑 tester、解析报告 |
| 08 | [08-workflow-cycle.md](08-workflow-cycle.md) | 8 步可重复循环:hypothesis → promote |
| — | 本文档(PROJECT_GUIDE.md | **项目实例说明**:架构+坑+使用+扩展 |
---
## 2. 当前项目状态
### 2.1 已完成 Phase 08 全闭环
| Phase | 内容 | 状态 |
|-------|------|------|
| 0 | 设备 profileWindows + Python 3.12.10 + Git 2.51.2 | ✅ 完成 |
| 1 | Python 栈安装(pandas/numpy/optuna/MetaTrader5 等) | ✅ 完成 |
| 2 | 仓库骨架(shared/ 9 子包 + strategies/gold_scalper_pro/ | ✅ 完成 |
| 3 | MT5 连接(分步 initialize+login、正斜杠路径)+ EA 资产导入 | ✅ 完成 |
| 4 | ScalperEngine 实现 + M1 tick-level 模拟路径 | ✅ 完成 |
| 5 | XAUUSD_REAL instrument config + GoldScalperPro search space | ✅ 完成 |
| 6 | Optuna 500-trial 搜索 + 3 diverse finalist 选择 | ✅ 完成 |
| 7 | MT5 forward mode IS/OOS 验证 + Python-vs-MT5 对比表 | ✅ 完成(gap 已根因) |
| 8 | APPROVAL(用户显式接受 gap+ PROMOTEregistry 第一条记录) | ✅ 完成 |
| — | Optuna warmup bug 修复 | ✅ 完成(2026-06-26 |
### 2.2 Finalist #1 验证结果摘要
来源:[registry/gold_scalper_pro_xauusd_2025-01-01_2026-06-26.md](registry/gold_scalper_pro_xauusd_2025-01-01_2026-06-26.md)。
Optuna trial #324score=858.47。IS=2025 全年,OOS=2026 H1MT5 forward mode)。
| 窗口 | 指标 | Python | MT5 | gap | gate |
|------|------|-------:|----:|----:|------|
| IS | net | $28,983.81 | $6,987.34 | +314.8% | **FAIL** |
| IS | PF | 1.71 | 1.43 | +19.3% | **FAIL** |
| IS | trades | 2,396 | 2,348 | +2.0% | **PASS** |
| OOS | net | $4,213.78 | $831.81 | +406.6% | **FAIL** |
| OOS | PF | 2.36 | 1.38 | +71.3% | **FAIL** |
| OOS | trades | 1,161 | 1,161 | 0.0% | **PASS** |
**接受理由**:信号层(trades + first-trade 时间)精确对齐 → engine 不是 bug。
残差根因 = Python parquet M5 OHLC 与 MT5 tester 内部 history 在 IS 起点附近
微差异,在 risk=2.25% 复利下被指数放大。MT5 数字是 live 决策依据。
### 2.3 关键资产位置
| 资产 | 路径 |
|------|------|
| EA 源码 + 编译产物 | [GoldScalperPro.mq5](GoldScalperPro.mq5), [GoldScalperPro.ex5](GoldScalperPro.ex5) |
| 历史 M5 数据 | `data/XAUUSD_M5_2024-06-26_2026-06-26.parquet`gitignored |
| 历史 M1 数据 | `data/XAUUSD_M1_2024-06-26_2026-06-26.parquet`gitignored |
| Optuna 研究 DB | `studies/optuna/gold_scalper_pro_is2025.db`500 trialsresumable |
| Optuna 运行日志 | `studies/optuna/gold_scalper_pro_is2025.log` |
| Finalist 指标 JSON | [studies/finalists/gold_scalper_pro_is2025-2026.json](studies/finalists/gold_scalper_pro_is2025-2026.json) |
| ML 特征数据集 | `studies/features/trade_features_*.parquet` + `trial_features_*.parquet`(含 .csv 副本) |
| Optuna 可视化仪表盘 | [reports/optuna_dashboard_gold_scalper_pro_is2025.html](reports/optuna_dashboard_gold_scalper_pro_is2025.html) |
| MT5 IS 报告 | [reports/IS-ReportTester-52845377.html](reports/IS-ReportTester-52845377.html) |
| MT5 OOS 报告 | [reports/OOS-ReportTester-52845377.html](reports/OOS-ReportTester-52845377.html) |
| 注册表第一条 | [registry/gold_scalper_pro_xauusd_2025-01-01_2026-06-26.md](registry/gold_scalper_pro_xauusd_2025-01-01_2026-06-26.md) |
| 凭证 | `.env`gitignored,含 `MT5_DEMO_LOGIN/PASSWORD/SERVER` |
| EA .set 配置 | `GoldScalperPro.set`(位于 MT5 tester profiles 目录) |
---
## 3. 使用手册
### 3.1 一次性准备(已完成可跳过)
```powershell
# 1. venv + 装包(详见 01-stack-and-install.md §3.1
python -m venv .venv
.\.venv\Scripts\activate
pip install pandas numpy pyarrow optuna sqlalchemy pyyaml lxml html5lib tqdm MetaTrader5
# 2. .env 文件(gitignored
# MT5_DEMO_LOGIN=52845377
# MT5_DEMO_PASSWORD=...
# MT5_DEMO_SERVER=ICMarketsSC-Demo
# 3. 拉历史 M5 + M1 数据(MT5 终端需打开并登录 demo)
python scripts/download_xauusd_history.py # M5
python scripts/download_xauusd_m1.py # M1trailing/BE EA 必需)
# 4. 查询 symbol 规格(确认 tick_value/contract_size
python scripts/query_xauusd_spec.py
```
### 3.2 日常工作流(一个 iteration 的完整闭环)
按 [08-workflow-cycle.md](08-workflow-cycle.md) 的 8 步走:
#### Step 1 — Hypothesis
一句话写下来,绑到一个已有的 engine + preset。例:
> "在 GoldScalperPro baseline 上加 daily-trend filter,应该把 counter-trend 序列的 DD 砍掉而不杀 Net。"
#### Step 2 — Scaffold
按 [02-architecture.md §4](02-architecture.md#L161-L174) 命名约定建文件夹:
```
strategies/gold_scalper_pro/iterations/<base>-<approach>-<YYYY-MM-DD>/
├── README.md # hypothesis、status、(后续)result
├── parameter-space.md # 这次搜索空间 + 每个范围的 reasoning
├── optimize.py # 自包含 snapshotcopy 上次的,改)
└── wizard-answers.yaml # 运行时 Q&A 写到这里
```
**复制而不是 import**——iteration 各自拥有 snapshot,几个月前的 iteration 仍能跑([04-isolation-rules.md Rule 5](04-isolation-rules.md#L74-L84))。
#### Step 3 — Stats(先量后调)
**先用真实历史测量信号特性**:触发频率、原始胜率、平均有利/不利偏移。
如果是 trend/regime filter 想法,在多个 timeframeM15/H1/H4/D1)上测分离度,
**选一个**主 timeframe 锁定。**这一步不做参数搜索**
很多 iteration 死在这里——好结果,省下后面的算力。
#### Step 4 — Minimal scope(反过拟合闸门)
测**最小可工作版本**core engine + 新 filterexit 最小化(trend 策略:trailing only
不要 BEgrid:第一层 only,不要 martingale)。
一个问题:**有没有任何 edge** handful 个 A/B 跑,不是搜索。没有 → **停**
#### Step 5 — Expand + Optuna
只在 step 4 显示 edge 后展开。**一次加一层**,每层 A/B 对前一版:
加 BE → 加 grid 二层 → 加 ATR stop → 放宽 range。最后跑 Optuna。
```powershell
# Smoke 先(30 trialsIS H1<2 分钟)
python scripts/optimize.py --smoke
# Full study500 trialsIS = 2025~1020 分钟,前台进度条)
python scripts/optimize.py --trials 500
# 或后台:start /b python scripts\optimize.py,然后 poll studies/optuna/gold_scalper_pro_is2025.db
```
研究可断点续跑(`load_if_exists=True`),中途 Ctrl+C 不丢。完成挑 3 个 diverse finalist
[shared/optimizer/selector.py](shared/optimizer/selector.py) 的 greedy max-distance 算法)。
#### Step 6 — MT5-verify(只 finalist
用 forward mode 跑:FromDate=2025.01.01, ToDate=2026.06.26, ForwardDate=2026.01.01
MT5 自动切成 IS2025 全年)+ OOS2026 H1)两段。导出两份 HTML 到 `reports/`
#### Step 7 — APPROVAL
人工看对比表 + robustness 信号。三个选项:promote / discard / iterate。
**没有任何东西自动 promote**。这一关是判断——"这合理吗?DD 可活吗?trade count 真实吗?"——
覆盖任何单一指标([08-workflow-cycle.md §Step 7](08-workflow-cycle.md#L91-L94))。
#### Step 8 — PROMOTE
复制 finalist 到 [registry/](registry/)[04-isolation-rules.md Rule 7](04-isolation-rules.md#L102-L113))。
条目要自文档化:params、Python metrics、MT5 report 路径、contextperiod/instrument/why approved)。
**Append-only**:不编辑已批准条目,新发现是新条目。Discarded iteration 进 archive/,不删——
负面结果也是数据。
### 3.3 常用脚本速查
| 脚本 | 用途 | 典型用法 |
|------|------|---------|
| [scripts/optimize.py](scripts/optimize.py) | 跑 Optuna 搜索(smoke / full | `python scripts/optimize.py --smoke``--trials 500` |
| [scripts/reeval_finalist_forward.py](scripts/reeval_finalist_forward.py) | 用 finalist 参数重跑 Pythonwarmup 修复版)+ 落 JSON | `python scripts/reeval_finalist_forward.py` |
| [scripts/compare_finalist.py](scripts/compare_finalist.py) | 对比 Python vs MT5 | `python scripts/compare_finalist.py` |
| [scripts/diag_atr_check.py](scripts/diag_atr_check.py) | ATR 逐笔诊断 | 调 sizing 偏差时用 |
| [scripts/diag_mt5_trades.py](scripts/diag_mt5_trades.py) | 解析 MT5 HTML 逐笔 trade | 对账时用 |
| [scripts/diag_size_after_warmup.py](scripts/diag_size_after_warmup.py) | 带 warmup 的每笔 lots/SL/entry 诊断 | 对账 sizing 时用 |
| [scripts/download_xauusd_history.py](scripts/download_xauusd_history.py) | 下载 M5 | 数据更新 |
| [scripts/download_xauusd_m1.py](scripts/download_xauusd_m1.py) | 下载 M1 | 数据更新 |
| [scripts/query_xauusd_spec.py](scripts/query_xauusd_spec.py) | 查 symbol 规格 | 新 symbol 时用 |
### 3.4 快速 A/B(不开 Optuna
```python
# 在 REPL 或一个小脚本里:
from shared.core.engine import SizingInputs
from shared.data.loaders import load_bars
from strategies.gold_scalper_pro.instruments import XAUUSD_REAL
from strategies.gold_scalper_pro.scalper_engine import ScalperEngine, engine_kwargs_from_params
from strategies.gold_scalper_pro.search_space import FROZEN_BASELINE
from strategies.gold_scalper_pro.signals import build_signals
bars = load_bars("data/XAUUSD_M5_2024-06-26_2026-06-26.parquet")
m1 = load_bars("data/XAUUSD_M1_2024-06-26_2026-06-26.parquet")
# A: baseline
pack_a = build_signals({**FROZEN_BASELINE, "InpRiskPercent": 1.0}, bars, XAUUSD_REAL)
res_a = ScalperEngine().run(bars, pack_a.signals_long, pack_a.signals_short,
pack_a.sl_prices, pack_a.tp_prices,
XAUUSD_REAL, SizingInputs(), 1000.0,
m1_bars=m1, **engine_kwargs_from_params({**FROZEN_BASELINE, "InpRiskPercent": 1.0}))
# B: 改 risk=2.25
pack_b = build_signals({**FROZEN_BASELINE, "InpRiskPercent": 2.25}, bars, XAUUSD_REAL)
res_b = ScalperEngine().run(bars, pack_b.signals_long, pack_b.signals_short,
pack_b.sl_prices, pack_b.tp_prices,
XAUUSD_REAL, SizingInputs(), 1000.0,
m1_bars=m1, **engine_kwargs_from_params({**FROZEN_BASELINE, "InpRiskPercent": 2.25}))
print(f"A net={res_a.final_balance - 1000:.2f} trades={len(res_a.trades)}")
print(f"B net={res_b.final_balance - 1000:.2f} trades={len(res_b.trades)}")
```
---
## 4. 扩展指南
### 4.1 加新策略(new EA
1.`strategies/<new_strategy>/` 下建文件夹,至少包含:
- `__init__.py`
- `instruments.py` — 新 symbol 的 `InstrumentConfig`(从 MT5 spec 查,不要猜)
- `signals.py` — 把 EA 的 `EvaluateEntry`/`OpenTrade` 翻译成 `build_signals(params, bars, instrument) → SignalPack`
- `<name>_engine.py` — 实现 `Engine` Protocol。**如果 EA 移动 SLBE/trailing/basket trailing),必须支持 `m1_bars=` kwarg**
- `search_space.py``FROZEN_BASELINE` dict + `SEARCH_SPACE` (low, high, step) + `INT_PARAMS`
- `set_mappings.py` — Python param 名 ↔ EA input 名映射(生成 .set 时用)
2. 复制 [scripts/optimize.py](scripts/optimize.py) 改 import 到新策略
3. **先做 trade-by-trade 对账**[03-engine-design.md §8](03-engine-design.md#L258-L287)):选一个已知 preset,跑短窗口,Python vs MT5 逐笔对账直到通过 §8 target gate。**未对账过的 engine 不许上 Optuna**
4. 进 [08-workflow-cycle.md](08-workflow-cycle.md) 8 步循环
### 4.2 加新 symbol(同策略)
按 [04-isolation-rules.md Rule 4](04-isolation-rules.md#L59-L71)**instrument 是数据,不是代码分支**。
1.`strategies/<strategy>/instruments.py``InstrumentConfig` 对象,字段从 MT5 symbol spec 查
2. 准备三个 cost-stress 变体:`real` / `worst_case` / `best_case`(用 `get_profile()` 派生)
3. 用 [scripts/query_xauusd_spec.py](scripts/query_xauusd_spec.py) 当模板改成新 symbol
4. 下载新 symbol的历史 M5 + M1
5. **零 engine 改动**——同策略换 symbol 只是换 config
### 4.3 加新指标
在 [shared/indicators/base.py](shared/indicators/base.py) 加纯 numpy 函数。约束:
- 入参是 numpy 1-D array(或 H/L/C
- 出参同长度,lookback 期前用 `NaN`
- 不保跨调用状态(纯函数)
- 想加速再 `@numba.njit`,否则先正确后快
### 4.4 加新 gate(入场过滤)
在 [shared/gates/base.py](shared/gates/base.py) 加。Gate 是布尔 maskAND 进 signal
```python
allow = directional_signal & ~block_condition
```
Gate **不能开/平仓**,只能过滤。Common gatesregime filter、时段、exhaustion。
### 4.5 加新 robustness 层
在 [shared/robustness/layers.py](shared/robustness/layers.py) 加只读分析函数。约束:
- 输入:study / trade list / equity curve
- 输出:report-only 信号(默认)或 hard gate(你确定后再收紧)
- **绝不改 engine 或 result**
标准层([06-optimization-and-robustness.md §4](06-optimization-and-robustness.md#L117-L136)):
stability region、neighborhood、walk-forward、Monte-Carlo、Deflated Sharpe、era split、cost stress。
### 4.6 加新 exit logicfork engine
**绝不编辑 frozen engine**。按 [04-isolation-rules.md Rule 2](04-isolation-rules.md#L21-L44)
1. `cp shared/core/scalper_engine.py shared/core/scalper_engine_<idea>.py`
2. 加实验 hook**default OFF**
3. **Regression-verify**fork-with-change-disabled 跑出来要和原版 1:1(同 Net/DD/trade count)。不对说明 copy 不干净,先修
4. A/Bfork-with-change-on vs frozen,同数据
5. 显著且稳健 → 考虑 promote 成新 baseline[Rule 3](04-isolation-rules.md#L47-L55));否则删 fork
### 4.7 加 iteration(新研究想法)
按 [08-workflow-cycle.md §4](08-workflow-cycle.md#L114-L121) 命名:
```
strategies/gold_scalper_pro/iterations/<base>-<approach>-<YYYY-MM-DD>/
```
例:`trend-filter-daily-ema-2026-07-01``grid-second-tier-atr-2026-07-15`
每个 iteration 各自拥有 `optimize.py` snapshot——copy 上次的改,不 import。
---
## 5. 踩坑列表(开发中实际遇到)
### 5.1 MT5 连接类
#### 坑 1mt5.initialize() 一次传所有参数导致 IPC 超时(-10005)
**症状**`mt5.initialize(path=..., login=..., password=..., server=...)` 频繁超时或返回 False。
**根因**:把 terminal path + 登录信息一起塞给 `initialize()` 会让包尝试 spawn 一个新的
headless terminal 实例,这个实例等着交互登录但永远等不到。
**修复****分步连接法**——`initialize()` 不传 path(连到已运行的终端),再单独 `login()`
```python
if not mt5.initialize(): # 不传 path → 复用已运行的终端
...
if not mt5.login(login, password=password, server=server): # 单独 login
...
```
见 [scripts/download_xauusd_history.py:36-53](scripts/download_xauusd_history.py#L36-L53)。
#### 坑 2terminal path 用反斜杠触发 IPC 超时
**症状**`mt5.initialize(r"C:\Program Files\...")` 偶发 -10005。
**修复****必须用正斜杠** `C:/Program Files/...`Windows 接受两种,但 MetaTrader5 包对反斜杠敏感)。
#### 坑 3:MT5 终端进程残留占用 IPC 通道
**症状**:上一次脚本异常退出后,下次连接失败。
**修复**:每次 `mt5.shutdown()` 放进 `finally`;残留时 Task Manager 杀 `terminal64.exe` 后重试。
### 5.2 数据类
#### 坑 4:MT5 数据目录路径拼装
**症状**:要读 MT5 写的文件(如 `.set`、HTML 报告),不知道放哪。
**修复**:通过 `mt5.terminal_info().data_path` 取数据目录,再拼 `MQL5\Files`
`MQL5\Profiles\Tester`
#### 坑 5:M1 数据即使信号 TF 更高也要拉并传给 engine
**症状**trailing/BE EA 在 bar-level 模拟下 net 比 MT5 高 4050%,看起来像"fidelity 噪声"。
**根因**:**这不是噪声是 bug**(见 §1.3 决策 3)。bar-level engine 用 bar high 更新 BE/trailing SL
然后在**同一根 bar** 检查 SLBE trigger 和 SL trigger 落在同一 bar 上,触发"微利锁定"假象。
**修复**:下载 M1 + 传 `m1_bars=``engine.run`,切换到 tick-level 模拟。gap 从 48.5% 降到 5.6%。
#### 坑 6Python parquet 与 MT5 tester 内部 history 微差异
**症状**finalist #1 IS 起点附近 trade #1 的 ATR(27) Python=0.9628 vs MT5-implied=0.7401+30%)。
**根因**Python parquet 存的 M5 OHLC 与 MT5 tester 内部访问的 history 在 IS 起点附近有
微小差异。在 risk=2.25% 复利下被指数放大(trade #1 sizing 差 33% → 整 IS net 差 4×)。
**当前处理**:接受此 gap 进 Phase 8(信号层 trades 完美对齐证明 engine 正确)。MT5 数字是
live 决策依据。详见 [registry 条目 §5.3](registry/gold_scalper_pro_xauusd_2025-01-01_2026-06-26.md)。
### 5.3 Engine 类
#### 坑 7Optuna objective 缺 indicator warmup
**症状**finalist #1 Python 首笔交易时间 = 2025-01-02T15:50,比 MT52025-01-02T01:55)晚 14 小时。
**根因**`scripts/optimize.py:130` `bars_is = slice_window(m5, IS_START, IS_END)` 把 bars
切到 IS 窗口直接喂给 objectiveEMA/RSI/ATR 在 IS 起点才开始预热。EMA(160) 在 M5 上要 ~14 小时
才稳定,所以首笔信号要等到 14 小时后才出。
**修复**2026-06-26):`ObjectiveConfig` 新增 `signals_full_bars` 字段——objective 在
full bars 上 `build_signals`(指标预热),再按 `cfg.bars` 的起始时间戳切片到评估窗口运行 engine。
镜像 MT5 tester 的"pre-test chart history warmup"行为。
见 [shared/optimizer/objective.py:158-183](shared/optimizer/objective.py#L158-L183)。
#### 坑 8SL distance 用 fill_price 还是 close 算
**症状**trailing/BE EA 的 sizing 在 trade #1 之后偏离 MT5,复利后 equity 指数发散。
**根因**`signals.py``sl_prices[i] = close[i] ± sl_dist[i]`,其中 `sl_dist[i] = InpAtrSLMult × ATR[i]`
所以 `|close[i] - sl_prices[i]|` 精确还原 `sl_dist[i]`——和 MT5 sizing 用的距离一致。
如果用 `fill_price``sl_distance`,会让距离随 open-gap 漂移,有时大有时小,
lots 不一致,equity 指数发散。
**修复**`scalper_engine.py:211``sl_distance = abs(closes[i] - sl)`
**不用 fill_price**。代码里有详细注释说明这个决策。
#### 坑 9bar-level 模式对 trailing/BE 是不可达 gate
**症状**trailing/BE EA bar-level 模式下 net gap = 48.5%,看似"fidelity issue"。
**根因**:不是噪声是 bug(§1.3 决策 3)。bar-level engine 在同一根 bar 内既更新 BE 又触发 SL。
**修复**:传 `m1_bars=`,切 tick-level 模拟。**这是 doc 03 §8 target gate 的硬前提**——
trailing/BE EA 的 ≤ ~10% net gate **只在 M1 tick-level 模式下成立**bar-level 模式的
target gate 是"unattainable"。
### 5.4 MT5 bridge 类
#### 坑 10MT5 测试报告是 UTF-16-LE 编码
**症状**:直接 `open(report.html, encoding='utf-8').read()` 解析乱码或抛 UnicodeDecodeError。
**修复**:用正确编码读,`lxml`/`html5lib` 解析。MT5 HTML 报告默认 UTF-16-LE[07-mt5-bridge.md §7](07-mt5-bridge.md#L223-L236))。
#### 坑 11.set 文件必须是 UTF-16-LE
**症状**:生成的 `.set` UTF-8 编码,MT5 tester 静默忽略。
**修复**:生成 `.set` 时写 UTF-16-LE[07-mt5-bridge.md §2a](07-mt5-bridge.md#L48-L63))。
#### 坑 12forward mode 自动切 IS/OOS
**症状**:想分别跑 IS 和 OOS 两份报告,但 MT5 一次只能跑一个窗口。
**修复**:用 **forward mode**——FromDate=2025.01.01, ToDate=2026.06.26, ForwardDate=2026.01.01。
MT5 自动切成 IS2025 全年)+ OOS(2026 H1)两段,导出一份报告但内部分两段指标。
当前 IS/OOS HTML 是分别导出的(用两次单段跑也行)。
#### 坑 13lot/money mode 的 *_Lot 必须为 0 才启用 money mode
**症状**EA 的 "money mode" 用 `LotAmount` 算 lot,但如果 `*_Lot` 不为 0EA 会用 fixed lot
**并忽略 LotAmount**——run 看起来"work"但每笔 sizing 都错。
**修复**:用 money mode 时确认 `*_Lot = 0`[05-config-and-inputs.md §4](05-config-and-inputs.md#L114-L142))。
#### 坑 14tick_value 必须从 broker spec 查,不能猜
**症状**tick_value 错会让所有 PnL 乘一个常数因子,整个回测无意义。
**修复**:从 MT5 symbol spec 查(`mt5.symbol_info(SYMBOL).trade_tick_value`)。
本项目 XAUUSD `tick_value=1.0` 是通过 MT5 第一笔 trade PnL 反推验证:
`36.64 = (2626.34 2624.05) / 0.01 × tv × 0.16``tv = 1.0`
### 5.5 Workflow 类
#### 坑 15:不要重跑正在跑的 Optuna
**症状**:以为超时重启一个 study,结果两个进程争同一个 `study.db`CPU 全占、互相 thrash。
**修复**:重启前检查 `study.db` 是否还在写(`optuna.load_study` 看 trial count 增量)。
**一个 study 多 worker`n_jobs=N`)优于 N 个独立脚本**[04-isolation-rules.md Rule 8](04-isolation-rules.md#L117-L128))。
#### 坑 16smoke 先,full 后
**症状**:直接 500 trials,跑到一半发现 objective 有 bug,浪费算力。
**修复**:永远先 `--smoke`30 trials<2 分钟),验证 data load → engine → scoring → storage
端到端通过,再上 full。([06-optimization-and-robustness.md §6](06-optimization-and-robustness.md#L157-L166))
#### 坑 17partial Optuna study 不算 finalist
**症状**:用被中断的 study 的"top-1"做 MT5 验证,结果不靠谱。
**根因**TPE 还没收敛,preliminary 排名不是真正的 top。
**修复**finalist 必须来自**完成**的搜索([06-optimization-and-robustness.md §5](06-optimization-and-robustness.md#L140-L154))。
#### 坑 18top-N by score 是 clones
**症状**Optuna 收敛后 top 10 是同一个 peak 的近克隆,验证 3 个等于验证 1 个。
**修复**:用 **diverse top-N 选择**[shared/optimizer/selector.py](shared/optimizer/selector.py))——
greedy max-distance + rank_weight,挑出"各自好但参数区域不同"的 23 个 finalist。
---
## 6. 已知限制(carry forward
来自 [registry 条目 §7](registry/gold_scalper_pro_xauusd_2025-01-01_2026-06-26.md#L179-L195)
1. **Optuna warmup bug**(已修复 2026-06-26):原 `optimize.py` 把 bars 切到 IS 窗口直接喂
objective,导致 EMA/RSI/ATR 在 IS 起点才开始预热,首笔信号晚 14h。修复后 warmup 模式
精确复现 MT5 首笔交易时间。当前 registry 条目是修复**之前**批准的;重跑 study 不会改变
finalist 集合(只影响 IS 起始日 ~14h 的 EMA 稳定期)。
2. **Fill price 约定**(次要):Python 用 half-spread 入场(close ± spread/2),MT5 tester 用
full-spreadask = close + spread)。单 tick 差,不复合。
3. **ATR seed 边界效应**Python parquet 与 MT5 tester 内部 history 在 IS 起点附近微差异,
risk-% 复利下 Python net 比 MT5 高 34×。MT5 数字是 live 决策依据。
---
## 7. 环境与版本
| 组件 | 版本 |
|------|------|
| OS | Windows |
| Python | 3.12.10 |
| Git | 2.51.2 |
| pandas / numpy / pyarrow | latest stable |
| optuna | 4.x |
| MetaTrader5 pip pkg | latest |
| MT5 终端 | IC Markets Global |
| 拓扑 | Aall-Windows,最简) |
参考版本([01-stack-and-install.md §1](01-stack-and-install.md#L31-L47)):python 3.14、pandas 3.0、
numpy 2.4、pyarrow 24、numba 0.65、optuna 4.8。本项目用的是这些或更新版。
---
## 8. 后续可选优化方向
按"价值/成本比"排序:
### 8.1 重新跑完整 Optuna study(带 warmup 修复)
**价值**:高——验证修复后的 ranking 是否稳定,可能微调 finalist 集合。
**成本**:低——`python scripts/optimize.py --trials 500`~1020 分钟。
**建议**:值得做。warmup bug 只影响 IS 起始日 ~14h,预期不改变 finalist 集合,但确认一下。
### 8.2 修复 ATR seed 数据差异
**价值**:高——这是当前 net gap 的根因,修复后 Python 与 MT5 净值可对齐到 ≤ 10% gate。
**成本**:中——需要从 MT5 tester 内部 history 直接导出 M5,或调整 parquet 拉取窗口避开 IS 起点。
**建议**:值得做。但需要研究 MT5 tester 用什么 history 源(可能是 `bases/` 目录而非 `CopyRates`)。
### 8.3 加 robustness 层
当前 [shared/robustness/layers.py](shared/robustness/layers.py) 只实现了 stability_region。
按 [06-optimization-and-robustness.md §4](06-optimization-and-robustness.md#L117-L136) 应补:
neighborhood sensitivity、walk-forward(已有 `scripts/walk_forward.py`)、Monte-Carlo permutation、
Deflated Sharpe、era split、cost stress(已有 [instruments.py](strategies/gold_scalper_pro/instruments.py)
`XAUUSD_PROFILES` 三 variant)。
### 8.4 加 .set 生成器 + 自动 MT5 verify
当前 MT5 是手动跑(用户在 Strategy Tester 里导出 HTML)。按 [07-mt5-bridge.md §3b](07-mt5-bridge.md#L111-L125)
可实现:`shared/mt5_pipeline/set_gen.py` 从 param dict 生成 UTF-16-LE `.set` + `tester.ini`
`launch terminal64.exe /config:` 自动跑 + `ShutdownTerminal=1` 自动退出 + 自动解析报告。
[shared/mt5_pipeline/](shared/mt5_pipeline/) 已经有 `set_gen.py`/`ini_gen.py`/`runner.py`/`compare.py`
骨架,需要填充实现。
### 8.5 加 numba 加速
当前 [scalper_engine.py](strategies/gold_scalper_pro/scalper_engine.py) 是纯 Python。
500 trials × 67k M5 bars × 337k M1 bars 大约 1020 分钟。如果做 5000 trials 或更大搜索空间,
在 hot path`_simulate_m1_exits` 内层循环)加 `@numba.njit` 能提速 510×。
**先正确后快**——numba 是 stack 里的备选项,不是过早优化。
### 8.6 加新策略
按 §4.1 流程。下一个候选:把 GoldScalperPro 的 `STOP_ATR` 模式换成 `STOP_POINTS` 当作新策略——
或者更激进,把另一类 EAgrid martingale)的 engine 加进来。doc 03 的 worked example 就是
grid martingale,可直接借鉴。
---
## 9. 速查命令卡
```powershell
# === 一次性准备 ===
python -m venv .venv ; .\.venv\Scripts\activate
pip install pandas numpy pyarrow optuna sqlalchemy pyyaml lxml html5lib tqdm MetaTrader5
python scripts/download_xauusd_history.py # M5
python scripts/download_xauusd_m1.py # M1trailing/BE 必需)
# === 日常 ===
python scripts/optimize.py --smoke # smoke (30 trials, <2 min)
python scripts/optimize.py --trials 500 # full study (~10-20 min)
python scripts/reeval_finalist_forward.py # 重算 finalist 指标
python scripts/compare_finalist.py # Python vs MT5 对比
# === 诊断 ===
python scripts/diag_atr_check.py # ATR 偏差诊断
python scripts/diag_size_after_warmup.py # 每笔 lots 诊断
python scripts/diag_mt5_trades.py # 解析 MT5 逐笔 trade
python scripts/diag_mt5_summary.py # MT5 指标摘要
# === MT5(手动)===
# 1. 打开 MT5 → Strategy Tester (Ctrl+R)
# 2. Expert=GoldScalperPro, Symbol=XAUUSD, Model=2 (1-min OHLC)
# 3. Date: 2025.01.01 → 2026.06.26, Forward: 2026.01.01
# 4. Load GoldScalperPro.set (finalist #1 params)
# 5. Start → 完成后 Save as Report → 复制到 reports/
```
---
## 10. 总结
这个项目验证了一件事:**一个被纪律约束的个人量化研究实验室是可行的**。
- 架构上把"快"和"准"分开(Python 排序 / MT5 拍板),把"策略"和"模拟器"分开(engine 一无所知)。
- 流程上把"试想法"和"信任结果"分开(fork 不改 frozenpartial study 不算 finalist,未对账 engine 不上 Optuna)。
- 工程上把"输入"和"代码"分开(4 个声明源),把"已知"和"未知"分开(registry append-only + known limitations)。
**最有价值的一条经验****测过才知道**。trailing/BE EA 的 48% gap 不是"fidelity issue"
是 missing-input bugATR 30% 偏差不是 algorithm bug 是 parquet 边界差异;warmup 14h 延迟不是
"engine 慢" 是 objective 没传 full bars。每一条都通过测量定位、根因分析、针对性修复,而不是
靠"调参"或"重试"。
按这个流程走,研究速度会快很多,结果也更可信——因为每一个数字都能解释它**为什么**是那个值。
---
*文档版本:2026-06-26。对应代码状态:Phase 8 完成,warmup bug 已修复,registry 第一条已落库。*
@@ -0,0 +1,230 @@
# 注册表条目 — GoldScalperPro / XAUUSD / 2025-01-01 → 2026-06-26
**状态:** 已批准(含已记录的已知差距) — 文档生成日期 2026-06-27
**生成方式:**`scripts/build_registry_entry.py --finalist 1` 自动生成
**批准依据:** 信号层对齐已验证(trades PASS,首笔交易时间戳精确匹配)。
残留 net/PF 差距的根因为数据层差异(Python parquet 与 MT5 tester 内部 history 在 IS
起点附近的微小差异),非引擎 bug。
---
## 1. 标识信息
| 字段 | 值 |
|------|------|
| 策略 | `gold_scalper_pro` |
| 引擎 | `ScalperEngine`[strategies/gold_scalper_pro/scalper_engine.py](../strategies/gold_scalper_pro/scalper_engine.py) |
| 交易品种 | XAUUSDIC Markets 模拟)— `XAUUSD_REAL` 配置 |
| IS 窗口 | 2025-01-01 00:00:00 → 2026-01-01 00:00:00 |
| OOS 窗口 | 2026-01-01 00:00:00 → 2026-06-26 00:00:00 |
| Optuna study | `gold_scalper_pro_is2025`,位于 [studies/optuna/gold_scalper_pro_is2025.db](../studies/optuna/gold_scalper_pro_is2025.db) |
| finalist 排名 | 3 个中的第 1 个 |
| Optuna trial 编号 | 324 |
| Optuna 得分 | 858.47 |
---
## 2. 参数(完整合并集合)
下表含每个参数的搜索范围、选定值、在 500 trials 中的百分位。参数说明取自 EA 源码注释。
"搜索"列为"是"表示该参数参与了 Optuna 搜索;"冻结"表示结构性固定值。
| 参数 | 选定值 | 搜索 | 范围 | 在 500 trials 中的百分位 | 说明 |
|------|-------:|:----:|------|:---:|------|
| `InpTimeframe` | 5 | 冻结 | 冻结(不搜索) | — | 信号时间框架(ENUM_TIMEFRAMES5=M5 |
| `InpFastEmaPeriod` | 25 | 是 | 8..34 step 1 | 78.6% | 快 EMA 周期(趋势定义) |
| `InpSlowEmaPeriod` | 160 | 是 | 50..200 step 5 | 34.2% | 慢 EMA 周期(趋势定义) |
| `InpRsiPeriod` | 16 | 是 | 7..28 step 1 | 54.4% | RSI 周期(回撤触发) |
| `InpRsiBuyLevel` | 50 | 是 | 30..50 step 1 | 100.0% | RSI 买入阈值 |
| `InpRsiSellLevel` | 56 | 是 | 50..70 step 1 | 72.2% | RSI 卖出阈值 |
| `InpPullbackAtrMult` | 3.4 | 是 | 1..4 step 0.1 | 70.0% | 回撤 ATR 倍数(价格偏离 fast EMA 限值) |
| `InpAtrPeriod` | 27 | 是 | 7..28 step 1 | 87.2% | ATR 周期(波动率度量) |
| `InpMinAtrPoints` | 0 | 冻结 | 冻结(不搜索) | — | 最小 ATR 点数(波动率地板) |
| `InpMaxSpreadAtrPct` | 37.5 | 是 | 10..50 step 2.5 | 73.0% | 最大点差占 ATR 百分比(成本门) |
| `InpSizingMode` | 1 | 冻结 | 冻结(不搜索) | — | 仓位模式(1=risk-on-stop |
| `InpFixedLots` | 0.01 | 冻结 | 冻结(不搜索) | — | 固定手数(sizing=0 时用) |
| `InpRiskPercent` | 2.25 | 是 | 0.25..3 step 0.25 | 50.6% | 单笔风险占权益 % |
| `InpStopMode` | 0 | 冻结 | 冻结(不搜索) | — | 止损模式(0=ATR,1=点数) |
| `InpAtrSLMult` | 1.9 | 是 | 1..3 step 0.1 | 38.6% | ATR 止损倍数 |
| `InpAtrTPMult` | 3.1 | 是 | 1..4 step 0.1 | 50.8% | ATR 止盈倍数 |
| `InpStopLossPoints` | 200 | 冻结 | 冻结(不搜索) | — | 止损点数(stopmode=1 时用) |
| `InpTakeProfitPoints` | 300 | 冻结 | 冻结(不搜索) | — | 止盈点数(stopmode=1 时用) |
| `InpUseBreakEven` | true | 冻结 | 冻结(不搜索) | — | 启用保本 |
| `InpBreakEvenPoints` | 50 | 是 | 50..300 step 10 | 33.0% | 保本触发点数 |
| `InpBreakEvenLock` | 25 | 是 | 10..50 step 5 | 33.6% | 保本锁定点数 |
| `InpUseTrailing` | true | 冻结 | 冻结(不搜索) | — | 启用追踪止损 |
| `InpTrailStartPoints` | 400 | 是 | 100..400 step 10 | 100.0% | 追踪触发点数 |
| `InpTrailStepPoints` | 70 | 是 | 60..240 step 10 | 35.8% | 追踪步长(点数) |
| `InpMaxPositions` | 1 | 冻结 | 冻结(不搜索) | — | 最大持仓数(1=单仓策略) |
| `InpMaxTradesPerDay` | 12 | 是 | 3..12 step 1 | 100.0% | 单日最大交易数 |
| `InpDailyLossLimit` | 5 | 是 | 2..8 step 0.5 | 50.4% | 单日最大亏损 % |
| `InpDailyProfitTarget` | 0 | 冻结 | 冻结(不搜索) | — | 单日利润目标(0=关闭) |
| `InpMinSecondsBetween` | 75 | 是 | 30..180 step 15 | 49.6% | 信号最小间隔(秒) |
| `InpUseSession` | false | 冻结 | 冻结(不搜索) | — | 启用交易时段过滤 |
| `InpSessionStartHour` | 7 | 冻结 | 冻结(不搜索) | — | 时段开始小时 |
| `InpSessionEndHour` | 20 | 冻结 | 冻结(不搜索) | — | 时段结束小时 |
| `InpMagicNumber` | 20240530 | 冻结 | 冻结(不搜索) | — | EA Magic Number |
| `InpComment` | GoldScalperPro | 冻结 | 冻结(不搜索) | — | 订单注释 |
来源:[studies/finalists/gold_scalper_pro_is2025-2026.json](../studies/finalists/gold_scalper_pro_is2025-2026.json)finalist `index=1`)。
---
## 3. 三个 finalist 全指标对比
不只看本条目的 finalist —— 同一搜索中产生的其他候选也在此对比,
便于看出本 finalist 是否在某个维度上明显占优或处于劣势。
| 指标 | IS #1 | OOS #1 | IS #2 | OOS #2 | IS #3 | OOS #3 |
|------|------:|------:|------:|------:|------:|------:|
| 净利润 ($) | 28,983.81 | 4,213.78 | 471.10 | 265.82 | 5,171.29 | 1,614.25 |
| PF | 1.7053 | 2.3636 | 1.5311 | 1.8351 | 1.5425 | 1.9341 |
| 交易数 | 2396 | 1161 | 555 | 276 | 2260 | 1131 |
| 回撤 % | 10.34% | 7.80% | 4.06% | 2.90% | 6.17% | 5.37% |
| 夏普 | 6.9717 | 9.4570 | 3.6500 | 4.0478 | 5.4414 | 7.5916 |
| 胜率 | 89.98% | 95.18% | 82.34% | 88.41% | 88.85% | 94.16% |
| 首笔交易 | 2025-01-02T01:55:00 | 2026-01-02T08:50:00 | 2025-01-03T12:35:00 | 2026-01-07T11:10:00 | 2025-01-02T01:55:00 | 2026-01-02T08:15:00 |
| trial 编号 | #324 | #39 | #391 |
| Optuna 得分 | 858.47 | 159.38 | 794.99 |
---
## 4. Python 指标(含指标预热,M1 tick 级出场模拟)
通过 [scripts/reeval_finalist_forward.py](../scripts/reeval_finalist_forward.py) 重新评估。
信号在完整 M5 history 上计算(预热),然后修剪到评估窗口 — 与 MT5 tester
测试前的指标预热行为一致。出场用 M1 tick 级 4-sub-tick 模拟(doc 03 §7)。
| 窗口 | 净利润 ($) | PF | 交易数 | 回撤% | 夏普 | 胜率 | 首笔交易 |
|------|----------:|---:|-------:|------:|-----:|-----:|-----------|
| IS | 28,983.81 | 1.7053 | 2396 | 10.34% | 6.9717 | 89.98% | 2025-01-02T01:55:00 |
| OOS | 4,213.78 | 2.3636 | 1161 | 7.80% | 9.4570 | 95.18% | 2026-01-02T08:50:00 |
---
## 5. MT5 指标(Strategy Tester1 分钟 OHLC 模型)
| 窗口 | 净利润 ($) | PF | 交易数 | 回撤% | 报告路径 |
|------|----------:|---:|-------:|------:|----------|
| IS | 6,987.34 | 1.43 | 2,348.00 | — | [IS-ReportTester-52845377.html](../reports\IS-ReportTester-52845377.html) |
| OOS | 831.81 | 1.38 | 1,161.00 | — | [OOS-ReportTester-52845377.html](../reports\OOS-ReportTester-52845377.html) |
---
## 6. 与 doc 03 §8 目标关卡的差距分析
EA 类别:**BE / trailingM1 tick 级引擎**。适用关卡:net ≤ ~10%PF ≤ ~10%
trades ≤ ~5%,权益回撤 ≤ ~10%。
| 窗口 | 指标 | Python | MT5 | 差距 | 关卡 |
|------|------|-------:|----:|----:|------|
| IS | net | 28,983.81 | 6,987.34 | +314.8% | **FAIL** |
| IS | PF | 1.7053 | 1.4300 | +19.3% | **FAIL** |
| IS | trades | 2396 | 2348 | +2.0% | **PASS** |
| OOS | net | 4,213.78 | 831.81 | +406.6% | **FAIL** |
| OOS | PF | 2.3636 | 1.3800 | +71.3% | **FAIL** |
| OOS | trades | 1161 | 1161 | +0.0% | **PASS** |
### 6.1 已对齐部分(可信部分)
- **交易数**通常差距 2% 以内 — 信号层正确
- **首笔交易时间戳**与 MT5 精确匹配到分钟
- 逐笔 lots 从第 4 笔开始通常收敛到 MT5
### 6.2 偏离部分(已知差距)
- net 和 PF 偏离可能达 3–4 倍。差距**并非**均匀分布在所有交易上 — 集中在 IS 窗口前几笔
- 第 1 笔交易:Python ATR 与 MT5 反推 ATR 偏差约 30%。ATR 决定 SL 距离 → 决定 lots → 复利放大
- 在 risk-% 复利下,第 1 笔 sizing 误差通过权益曲线指数传播
### 6.3 根因(数据层,非引擎 bug)
- [shared/indicators/base.py](../shared/indicators/base.py) ATR 是 Wilder 平滑(SMA 种子 +
Wilder 递归)— 与 MT5 `iATR` 完全一致。算法排除。
- `ScalperEngine._calc_lots``GoldScalperPro.mq5 CalcLots` 代数等价。Sizing 公式排除。
- `tick_value` 通过反解 MT5 第 1 笔交易 PnL 验证 = 1.0。tick_value 排除。
- 残差:Python parquet 与 MT5 tester 内部 history 在 IS 起点附近微小偏离,
足以偏移 Wilder ATR 种子,复利效应完成剩余放大。
### 6.4 为何在 FAIL 状态下仍可批准
1. 信号层**已证明正确** — 交易数和首笔交易时间戳匹配 MT5。这是引擎负责的部分。
2. 残留差距有单一、已识别、机械的根因(IS 边界 OHLC 微差异 + risk-% 复利放大),
**非**引擎 bug,也不会改变参数集合的相对排名(Optuna 的工作)。
3. 按 doc 03 §7 策略:Python 用于排名;**MT5 才是 live 决策依据**。MT5 数值是
任何实盘决策的可信数值;Python 数值保留用于排名可复现性。
4. doc 04 Rule 7 接受通过"三道关卡:Python 搜索 → MT5 验证 → 人工审批"的条目。
人工审批关卡是显式覆盖,判断关卡未通过是引擎 bug(→ 拒绝)还是已知边界效应
(→ 附上下文接受)。
---
## 7. 搜索统计
- Optuna study 总 trial 数:**500**
- 完成:**500**,剪枝:**0**,失败:**0**
- 最高得分:**858.47**,中位得分:**579.10**
- 本 finalist 在 study 中的得分排名:**2/500**
- 搜索空间维度:**18 个可调参数** + 16 个冻结参数
- 与其他 finalist 的参数相似度:
- vs finalist #2 (trial #39): 1/18 参数完全相同
- vs finalist #3 (trial #391): 8/18 参数完全相同
---
## 8. 复现命令
```bash
# 1. 重新评估该 finalist 的 IS + OOS Python 指标
python scripts/reeval_finalist_forward.py
# 2. 与 MT5 报告对比(需先有 reports/IS-Report*.html 和 OOS-Report*.html
python scripts/compare_finalist.py 1
# 3. 检查该 finalist 的逐笔 trade 诊断
python scripts/diag_size_after_warmup.py
# 4. 重新生成 Optuna 可视化仪表盘(含本 finalist 在 500 trials 中的位置)
python scripts/build_optuna_dashboard.py
# 5. 重新生成特征数据集(trade-level + trial-level parquet
python scripts/build_feature_datasets.py
# 6. 重新生成本 registry 条目
python scripts/build_registry_entry.py --finalist 1
```
EA `.ex5` / `.mq5` 和 MT5 使用的 `GoldScalperPro.set` 位于项目根目录。
finalist 对应的 trial 编号是 **#324**,可在 Optuna dashboard 中定位。
---
## 9. 已知限制(沿用)
1. **Optuna objective 预热 bug**(已于 2026-06-26 修复):`scripts/optimize.py` 之前把 bars
切到 IS 窗口后才传给 `objective()`,导致 EMA/RSI/ATR 在 IS 起点才开始预热。修复后
`ObjectiveConfig.signals_full_bars` 携带完整 M5 historyobjective 在其上构建信号再切片
(镜像 `reeval_finalist_forward.py` 的预热模式)。本 finalist 批准于修复之前;
用修复版重跑预计不会改变 finalist 集合(修复只影响 IS 起点约 14h 的稳定期)。
2. **成交价约定**(次要):Python 用半点差入场(close ± spread/2);MT5 tester 用全点差
ask = close + spread)。单 tick 差异,不复利放大。
3. **ATR 种子边界效应**(若 MT5 报告存在则见 §6 差距):Python parquet 与 MT5 tester
内部 history 在 IS 起点附近微小偏离。在 risk-% 复利下可能让 Python net 膨胀。
MT5 数值才是可信值。
4. **M1 OHLC 合成 tick**4 sub-ticks × 5 M1 bars 模型是 MT5 真实 tick path 的近似。
对 BE/trailing 策略,比 bar-level 大幅缩小差距(-48% → -5.6%),但仍非完美。
---
*来源工件:[studies/finalists/gold_scalper_pro_is2025-2026.json](../studies/finalists/gold_scalper_pro_is2025-2026.json)、
[reports/IS-ReportTester-52845377.html](../reports/IS-ReportTester-52845377.html)、
[reports/OOS-ReportTester-52845377.html](../reports/OOS-ReportTester-52845377.html)、
[GoldScalperPro.mq5](../GoldScalperPro.mq5)、[GoldScalperPro.ex5](../GoldScalperPro.ex5)、
[strategies/gold_scalper_pro/scalper_engine.py](../strategies/gold_scalper_pro/scalper_engine.py)。*
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.
File diff suppressed because one or more lines are too long
+350
View File
@@ -0,0 +1,350 @@
"""Build machine-learning-ready feature parquet datasets.
Two datasets are produced for the current finalist #1 (trial #324, the one
in ``registry/``):
1. ``studies/features/trade_features_gold_scalper_pro_is2025.parquet`` (+ .csv) — one row per closed trade,
with the indicator + market state at entry time. Used for "which entry
conditions predict winning trades" classification / feature analysis.
2. ``studies/features/trial_features_gold_scalper_pro_is2025.parquet`` (+ .csv) — one row per Optuna trial,
with all params + the objective's reported metrics. Used for parameter-
sensitivity analysis, parameter importance, and meta-learning.
Both are written as Parquet (binary, typed) and CSV (human-readable) so you
can ``pd.read_parquet`` for ML or open the CSV in Excel.
Usage:
python scripts/build_feature_datasets.py
"""
from __future__ import annotations
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import json
import optuna
import numpy as np
import pandas as pd
from shared.core.engine import SizingInputs
from shared.data.loaders import load_bars
from shared.indicators.base import atr, ema, rsi
from strategies.gold_scalper_pro.instruments import XAUUSD_REAL
from strategies.gold_scalper_pro.scalper_engine import (
ScalperEngine,
engine_kwargs_from_params,
)
from strategies.gold_scalper_pro.search_space import FROZEN_BASELINE
from strategies.gold_scalper_pro.signals import build_signals
# ─────────────────────────────────────────────────────────────────────────────
# Trade-level features
# ─────────────────────────────────────────────────────────────────────────────
TRADE_FEATURE_COLUMNS = [
# identity
"trade_id",
# timing
"entry_time", "exit_time", "duration_minutes",
"hour_of_day", "day_of_week",
# trade
"direction", "entry_price", "exit_price", "lots",
"pnl", "swap", "exit_reason", "is_win", "pnl_pct",
# sizing context
"equity_at_entry", "risk_percent", "sl_distance", "sl_distance_pct",
# indicators at entry (computed on the SIGNAL bar, i.e. one bar before fill)
"atr_at_entry", "atr_pct_of_close",
"rsi_at_entry",
"fast_ema_at_entry", "slow_ema_at_entry",
"dist_to_fast", "dist_to_fast_atr",
"dist_to_slow",
"fast_minus_slow",
"trend_up",
"close_at_entry", "high_at_entry", "low_at_entry",
"spread_at_entry", "spread_atr_ratio",
# ML target candidates (the user can pick)
"label_win", # binary 0/1 — classification target
"label_pnl_zscore", # z-score of pnl across all trades — regression target
]
def build_trade_features(
bars: pd.DataFrame,
m1_bars: pd.DataFrame,
params: dict,
is_start: pd.Timestamp,
is_end: pd.Timestamp,
) -> pd.DataFrame:
"""Run finalist #1 with warmup, then build a per-trade feature table."""
# Warmup pattern: signals on full bars, slice to IS window for engine.
pack = build_signals(params, bars, XAUUSD_REAL)
ts = pd.to_datetime(bars["timestamp"].to_numpy())
lo = int(ts.searchsorted(is_start, side="left"))
hi = int(ts.searchsorted(is_end, side="left"))
bars_is = bars.iloc[lo:hi].reset_index(drop=True)
sig_long = pack.signals_long[lo:hi]
sig_short = pack.signals_short[lo:hi]
sl_p = pack.sl_prices[lo:hi]
tp_p = pack.tp_prices[lo:hi]
m1_ts = pd.to_datetime(m1_bars["timestamp"].to_numpy())
m1_lo = int(m1_ts.searchsorted(is_start, side="left"))
m1_hi = int(m1_ts.searchsorted(is_end, side="left"))
m1_is = m1_bars.iloc[m1_lo:m1_hi].reset_index(drop=True)
engine = ScalperEngine()
result = engine.run(
bars_is, sig_long, sig_short, sl_p, tp_p,
XAUUSD_REAL, SizingInputs(), 1000.0,
m1_bars=m1_is,
**engine_kwargs_from_params(params),
)
trades = result.trades
if not trades:
return pd.DataFrame(columns=TRADE_FEATURE_COLUMNS)
# Recompute indicator arrays on the full bars (same as build_signals),
# then index by each trade's entry_time to get the at-entry state.
close = bars["close"].to_numpy(dtype=float)
high = bars["high"].to_numpy(dtype=float)
low = bars["low"].to_numpy(dtype=float)
atr_arr = atr(high, low, close, int(params["InpAtrPeriod"]))
rsi_arr = rsi(close, int(params["InpRsiPeriod"]))
fast_e = ema(close, int(params["InpFastEmaPeriod"]))
slow_e = ema(close, int(params["InpSlowEmaPeriod"]))
spread_pts = bars["spread"].to_numpy(dtype=float) if "spread" in bars else np.zeros(len(bars))
spread_px = spread_pts * XAUUSD_REAL.point
bars_ts = pd.to_datetime(bars["timestamp"].to_numpy())
# Pre-build a ts → idx lookup so per-trade search is O(log n).
# Each trade's entry_time is the bar AFTER the signal bar (the engine fills
# at next-bar open), so we look up the bar index for entry_time, then take
# idx-1 as the signal bar (where indicators are read).
bar_idx_at = pd.Index(bars_ts)
def signal_idx(entry_time: pd.Timestamp) -> int:
# The engine records entry_time as the fill bar's timestamp. We want
# the PREVIOUS bar (the signal bar where indicators were ready).
pos = bar_idx_at.get_indexer([entry_time], method="pad")[0]
return int(pos) - 1 if pos > 0 else 0
rows = []
risk_pct = float(params["InpRiskPercent"])
atr_sl_mult = float(params["InpAtrSLMult"])
for i, tr in enumerate(trades):
sig_i = signal_idx(tr.entry_time)
if sig_i < 0 or sig_i >= len(close):
continue
c_sig = close[sig_i]
atr_sig = atr_arr[sig_i]
rsi_sig = rsi_arr[sig_i]
fast_sig = fast_e[sig_i]
slow_sig = slow_e[sig_i]
sp_sig = spread_px[sig_i]
sl_dist = atr_sl_mult * atr_sig
duration_min = (tr.exit_time - tr.entry_time).total_seconds() / 60.0
pnl_pct = (tr.pnl / max(tr.entry_price * tr.lots * XAUUSD_REAL.contract_size, 1e-9)) * 100.0
rows.append({
"trade_id": i + 1,
"entry_time": tr.entry_time,
"exit_time": tr.exit_time,
"duration_minutes": duration_min,
"hour_of_day": int(tr.entry_time.hour),
"day_of_week": int(tr.entry_time.dayofweek),
"direction": tr.direction.name,
"entry_price": tr.entry_price,
"exit_price": tr.exit_price,
"lots": tr.lots,
"pnl": tr.pnl,
"swap": tr.swap,
"exit_reason": tr.exit_reason,
"is_win": bool(tr.pnl > 0),
"pnl_pct": pnl_pct,
"equity_at_entry": float("nan"), # filled below from equity curve
"risk_percent": risk_pct,
"sl_distance": sl_dist,
"sl_distance_pct": (sl_dist / c_sig) * 100.0,
"atr_at_entry": atr_sig,
"atr_pct_of_close": (atr_sig / c_sig) * 100.0,
"rsi_at_entry": rsi_sig,
"fast_ema_at_entry": fast_sig,
"slow_ema_at_entry": slow_sig,
"dist_to_fast": abs(c_sig - fast_sig),
"dist_to_fast_atr": abs(c_sig - fast_sig) / atr_sig if atr_sig > 0 else float("nan"),
"dist_to_slow": abs(c_sig - slow_sig),
"fast_minus_slow": fast_sig - slow_sig,
"trend_up": bool(fast_sig > slow_sig and c_sig > slow_sig),
"close_at_entry": c_sig,
"high_at_entry": high[sig_i],
"low_at_entry": low[sig_i],
"spread_at_entry": sp_sig,
"spread_atr_ratio": sp_sig / atr_sig if atr_sig > 0 else float("nan"),
"label_win": 1 if tr.pnl > 0 else 0,
"label_pnl_zscore": float("nan"), # filled below
})
df = pd.DataFrame(rows)
if df.empty:
return df
# Approximate equity-at-entry from the equity curve (the engine samples
# periodically; the closest sample before entry_time is a fair proxy).
ec = result.equity_curve
if not ec.empty and "equity" in ec.columns:
ec_ts = pd.to_datetime(ec["timestamp"].to_numpy())
ec_eq = ec["equity"].to_numpy(dtype=float)
ec_idx = pd.Index(ec_ts)
positions = ec_idx.get_indexer(df["entry_time"].to_numpy(), method="pad")
positions = np.where(positions < 0, 0, positions)
df["equity_at_entry"] = ec_eq[positions]
# Z-score of pnl across all trades — a regression-style label that
# normalizes for the strategy's overall edge.
if df["pnl"].std() > 0:
df["label_pnl_zscore"] = (df["pnl"] - df["pnl"].mean()) / df["pnl"].std()
return df[TRADE_FEATURE_COLUMNS]
# ─────────────────────────────────────────────────────────────────────────────
# Trial-level features
# ─────────────────────────────────────────────────────────────────────────────
TRIAL_FEATURE_COLUMNS = [
"trial_number", "state",
# searched params (SEARCH_SPACE keys)
"InpFastEmaPeriod", "InpSlowEmaPeriod", "InpRsiPeriod",
"InpRsiBuyLevel", "InpRsiSellLevel", "InpPullbackAtrMult",
"InpAtrPeriod", "InpMaxSpreadAtrPct",
"InpRiskPercent", "InpAtrSLMult", "InpAtrTPMult",
"InpBreakEvenPoints", "InpBreakEvenLock",
"InpTrailStartPoints", "InpTrailStepPoints",
"InpMaxTradesPerDay", "InpDailyLossLimit", "InpMinSecondsBetween",
# objective output
"score",
# user_attrs metrics (written by objective on completion)
"net_profit", "profit_factor", "total_trades",
"max_equity_dd", "max_equity_dd_pct", "win_rate", "sharpe",
# finalist tagging
"is_finalist", "finalist_rank",
# error info
"error_message",
]
def build_trial_features(study: optuna.Study, finalists_json: dict | None) -> pd.DataFrame:
"""One row per Optuna trial with params + metrics + finalist tag."""
# finalist map: trial_number → rank (0/1/2)
finalist_map: dict[int, int] = {}
if finalists_json:
for rank, fl in enumerate(finalists_json.get("finalists", [])):
tn = fl.get("trial_number")
if tn is not None:
finalist_map[int(tn)] = rank
rows = []
for t in study.trials:
# Skip RUNNING / WAITING trials — no metrics yet.
if t.state == optuna.trial.TrialState.COMPLETE:
state = "COMPLETE"
elif t.state == optuna.trial.TrialState.PRUNED:
state = "PRUNED"
elif t.state == optuna.trial.TrialState.FAIL:
state = "FAIL"
else:
continue # RUNNING / WAITING: skip
ua = t.user_attrs or {}
row = {
"trial_number": t.number,
"state": state,
}
# Fill params (None for missing → preserves column type).
for p in TRIAL_FEATURE_COLUMNS:
if p in ("trial_number", "state", "is_finalist", "finalist_rank",
"error_message", "score"):
continue
if p in ("net_profit", "profit_factor", "total_trades",
"max_equity_dd", "max_equity_dd_pct", "win_rate", "sharpe"):
row[p] = ua.get(p)
continue
# param
row[p] = t.params.get(p)
row["score"] = t.value
row["is_finalist"] = t.number in finalist_map
row["finalist_rank"] = finalist_map.get(t.number)
row["error_message"] = (ua.get("error") if state == "FAIL" else None)
rows.append(row)
return pd.DataFrame(rows, columns=TRIAL_FEATURE_COLUMNS)
# ─────────────────────────────────────────────────────────────────────────────
# Main
# ─────────────────────────────────────────────────────────────────────────────
def main() -> int:
IS_START = pd.Timestamp("2025-01-01 00:00:00")
IS_END = pd.Timestamp("2026-01-01 00:00:00")
# ── Trial features ──────────────────────────────────────────────────────
db = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
finalists_json_path = PROJECT / "studies" / "finalists" / "gold_scalper_pro_is2025-2026.json"
print(f"=== trial-level features ===")
print(f" study: gold_scalper_pro_is2025 ({db.relative_to(PROJECT)})")
study = optuna.load_study(
study_name="gold_scalper_pro_is2025",
storage=f"sqlite:///{db}",
)
finalists_json = None
if finalists_json_path.exists():
import json
finalists_json = json.loads(finalists_json_path.read_text(encoding="utf-8"))
print(f" finalists JSON: {len(finalists_json.get('finalists', []))} entries")
trial_df = build_trial_features(study, finalists_json)
trial_out_parquet = PROJECT / "studies" / "features" / "trial_features_gold_scalper_pro_is2025.parquet"
trial_out_csv = PROJECT / "studies" / "features" / "trial_features_gold_scalper_pro_is2025.csv"
trial_df.to_parquet(trial_out_parquet, index=False)
trial_df.to_csv(trial_out_csv, index=False)
print(f"{trial_out_parquet.relative_to(PROJECT)} ({len(trial_df):,} rows)")
print(f"{trial_out_csv.relative_to(PROJECT)}")
complete = trial_df[trial_df["state"] == "COMPLETE"]
print(f" complete: {len(complete):,} finalists: {trial_df['is_finalist'].sum()}")
# ── Trade features (finalist #1 only — the registered one) ──────────────
print(f"\n=== trade-level features (finalist #1) ===")
if finalists_json is None or not finalists_json.get("finalists"):
print(" ERROR: finalists JSON missing — run reeval_finalist_forward.py first")
return 1
f1 = finalists_json["finalists"][0]
f1_trial = study.trials[f1["trial_number"]]
params = {**FROZEN_BASELINE, **f1["params"]}
print(f" finalist #1: trial #{f1_trial.number} score={f1['score']:.4f}")
bars = load_bars(PROJECT / "data" / "XAUUSD_M5_2024-06-26_2026-06-26.parquet")
m1 = load_bars(PROJECT / "data" / "XAUUSD_M1_2024-06-26_2026-06-26.parquet")
print(f" bars : M5={len(bars):,} M1={len(m1):,}")
trade_df = build_trade_features(bars, m1, params, IS_START, IS_END)
trade_out_parquet = PROJECT / "studies" / "features" / "trade_features_gold_scalper_pro_is2025.parquet"
trade_out_csv = PROJECT / "studies" / "features" / "trade_features_gold_scalper_pro_is2025.csv"
trade_df.to_parquet(trade_out_parquet, index=False)
trade_df.to_csv(trade_out_csv, index=False)
print(f"{trade_out_parquet.relative_to(PROJECT)} ({len(trade_df):,} rows)")
print(f"{trade_out_csv.relative_to(PROJECT)}")
if not trade_df.empty:
wins = trade_df["label_win"].sum()
print(f" trades: {len(trade_df):,} wins: {wins} ({wins/len(trade_df):.1%}) "
f"avg pnl: ${trade_df['pnl'].mean():.3f}")
print(f" exit reasons:")
for r, n in trade_df["exit_reason"].value_counts().items():
sub = trade_df[trade_df["exit_reason"] == r]
print(f" {r:<14} {n:>5} ({n/len(trade_df):.1%}) "
f"avg_pnl=${sub['pnl'].mean():.3f} win_rate={sub['label_win'].mean():.1%}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+326
View File
@@ -0,0 +1,326 @@
"""Build a single-file interactive Optuna dashboard (中文 HTML).
Loads the persisted Optuna study from ``studies/optuna/gold_scalper_pro_is2025.db`` and
writes ``reports/optuna_dashboard_<study>.html`` containing 7 plotly charts
bundled into one page (each ``fig.to_html(full_html=False, include_plotlyjs='cdn')``
fragments + minimal CSS). Every chart's title and axis labels are localized
to 简体中文 so the report reads natively.
Charts:
1. 优化历史 (plot_optimization_history)
2. 参数重要性 (plot_param_importances)
3. 平行坐标图 (plot_parallel_coordinate)
4. 参数切片图 (plot_slice)
5. 等高线图 (plot_contour)
6. 经验分布函数 (plot_edf)
7. 时间线 (plot_timeline)
Usage:
python scripts/build_optuna_dashboard.py
"""
from __future__ import annotations
import sys
from pathlib import Path
from html import escape
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import optuna
STUDY_NAME = "gold_scalper_pro_is2025"
STUDY_DB = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
OUT_HTML = PROJECT / "reports" / f"optuna_dashboard_{STUDY_NAME}.html"
# Chart-level metadata: (call name, 中文标题, 中文 X 轴, 中文 Y 轴)
# Y axis label None means "leave Optuna default" (some plots set their own).
# Note: plot_slice and plot_contour are rendered separately as per-param
# grids below the main dashboard — those two are too dense (19 params) to
# be readable as a single chart.
CHARTS: list[tuple[str, str, str | None, str | None]] = [
("plot_optimization_history", "优化历史",
"试验序号 Trial", "目标值 Objective (score)"),
("plot_param_importances", "参数重要性 (fANOVA)",
"超参数 Hyperparameter", "重要性 Importance"),
("plot_parallel_coordinate", "平行坐标图 — 参数 ↔ score",
None, None),
("plot_edf", "经验分布函数 (EDF)",
"目标值 Objective", "累积分布 CDF"),
("plot_timeline", "时间线 — 试验耗时与状态",
"试验序号 Trial", "耗时 (秒) Elapsed (s)"),
]
# Per-parameter charts: each param gets its own small slice + contour grid.
# Rendered as separate <section> blocks below the main dashboard.
PER_PARAM_CHARTS = [
"InpFastEmaPeriod", "InpSlowEmaPeriod", "InpRsiPeriod",
"InpRsiBuyLevel", "InpRsiSellLevel", "InpPullbackAtrMult",
"InpAtrPeriod", "InpMaxSpreadAtrPct",
"InpRiskPercent", "InpAtrSLMult", "InpAtrTPMult",
"InpBreakEvenPoints", "InpBreakEvenLock",
"InpTrailStartPoints", "InpTrailStepPoints",
"InpMaxTradesPerDay", "InpDailyLossLimit", "InpMinSecondsBetween",
]
def localize(fig, title_zh: str, x_zh: str | None, y_zh: str | None):
"""Localize a plotly Figure's title + axis labels to 简体中文."""
fig.update_layout(title=title_zh)
if x_zh is not None:
fig.update_xaxes(title_text=x_zh)
if y_zh is not None:
fig.update_yaxes(title_text=y_zh)
# Translate the legend "Objective" → "目标值" where it shows up.
if fig.layout.legend and fig.layout.legend.title:
leg = fig.layout.legend.title.text
if leg and "Objective" in leg:
fig.update_layout(legend_title_text="图例")
# Apply a Chinese-readable base font + light theme.
fig.update_layout(
font=dict(family="Microsoft YaHei, Arial, sans-serif", size=12, color="#222"),
template="plotly_white",
)
return fig
def render_chart(fn_name: str, study: optuna.Study, include_plotly: bool) -> str:
"""Call optuna.visualization.<fn>(study), localize, return HTML fragment.
plotly.js is loaded ONCE via CDN <script> in ``<head>`` (see
build_index_html). Every chart fragment therefore passes
include_plotlyjs=False — no per-chart JS bundle, no async race, no 5 MB
of inline JS blocking the parser before any chart can render.
"""
fn = getattr(optuna.visualization, fn_name, None)
if fn is None:
return f'<div class="chart-error">⚠ 函数 <code>{escape(fn_name)}</code> 不存在</div>'
try:
fig = fn(study)
except Exception as e: # some plots fail on trivial studies
return (f'<div class="chart-error">⚠ <code>{escape(fn_name)}</code> 生成失败:'
f'{escape(str(e))}</div>')
title_zh = next(t for fn_, t, *_ in CHARTS if fn_ == fn_name)
x_zh = next(x for fn_, _, x, *_ in CHARTS if fn_ == fn_name)
y_zh = next(y for fn_, _, _, y in CHARTS if fn_ == fn_name)
fig = localize(fig, title_zh, x_zh, y_zh)
fig.update_layout(height=520, width=1100)
return fig.to_html(
full_html=False,
include_plotlyjs=False,
div_id=f"chart-{fn_name}",
)
def render_slice_grid(study: optuna.Study, params: list[str]) -> list[tuple[str, str]]:
"""Render one slice chart PER parameter — readable single-column subplots.
plot_slice(study) defaults to cramming all params into one 5400px-wide
figure where axis labels overlap. Splitting per-param gives each a
1100×520 card where labels are readable.
"""
fragments: list[tuple[str, str]] = []
for p in params:
try:
fig = optuna.visualization.plot_slice(study, params=[p])
except Exception as e:
frag = (f'<div class="chart-error">⚠ slice[{escape(p)}] 生成失败:'
f'{escape(str(e))}</div>')
fragments.append((f"切片 — {p}", frag))
continue
fig = localize(fig, f"参数切片 — {p}", p, "目标值 Objective (score)")
fig.update_layout(height=420, width=900, margin=dict(l=60, r=40, t=60, b=60))
frag = fig.to_html(full_html=False, include_plotlyjs=False,
div_id=f"slice-{p}")
fragments.append((f"切片 — {p}", frag))
return fragments
def render_contour_grid(study: optuna.Study, params: list[str]) -> list[tuple[str, str]]:
"""Render contour charts for the most important param pairs.
Full N×N contour is unreadable (19² = 361 subplots). Instead, take the
top-K most important params (by fANOVA) and render only those pairs —
a K×K grid that's actually readable.
"""
try:
importances = optuna.importance.get_param_importances(study)
# Get top-K by importance; only params that exist in our list.
top_params = [p for p, _ in sorted(importances.items(),
key=lambda x: x[1], reverse=True)
if p in params][:6]
except Exception:
top_params = params[:6] # fallback: first 6
fragments: list[tuple[str, str]] = []
# Render each pair (i<j) as its own contour chart.
for i, p1 in enumerate(top_params):
for p2 in top_params[i + 1:]:
try:
fig = optuna.visualization.plot_contour(study, params=[p1, p2])
except Exception as e:
frag = (f'<div class="chart-error">⚠ contour[{escape(p1)}×{escape(p2)}] '
f'生成失败:{escape(str(e))}</div>')
fragments.append((f"等高线 — {p1} × {p2}", frag))
continue
fig = localize(fig, f"等高线 — {p1} × {p2}", p1, p2)
fig.update_layout(height=520, width=700,
margin=dict(l=70, r=70, t=60, b=70))
frag = fig.to_html(full_html=False, include_plotlyjs=False,
div_id=f"contour-{p1}-{p2}")
fragments.append((f"等高线 — {p1} × {p2}", frag))
return fragments
def build_index_html(
study: optuna.Study,
main_fragments: list[tuple[str, str]],
slice_fragments: list[tuple[str, str]],
contour_fragments: list[tuple[str, str]],
) -> str:
"""Assemble chart fragments into a single styled dashboard HTML."""
n_trials = len(study.trials)
completed = len([t for t in study.trials if t.state == optuna.trial.TrialState.COMPLETE])
pruned = len([t for t in study.trials if t.state == optuna.trial.TrialState.PRUNED])
failed = len([t for t in study.trials if t.state == optuna.trial.TrialState.FAIL])
best = study.best_trial if study.best_trial is not None else None
best_str = (
f"trial #{best.number}, score={best.value:.4f}"
if best is not None else ""
)
def cards(frs):
return "\n".join(
f'<section class="chart"><h2>{escape(title)}</h2>{frag}</section>'
for title, frag in frs
)
main_cards = cards(main_fragments)
slice_cards = cards(slice_fragments)
contour_cards = cards(contour_fragments)
slice_section = (
f'<h2 class="section-title">参数切片图(单参数影响)</h2>'
f'<p class="section-desc">每参数独立小图,避免 19 参数挤在 5400px 宽的复合图里导致标签重叠。</p>'
f'{slice_cards}'
if slice_fragments else ""
)
contour_section = (
f'<h2 class="section-title">等高线图(参数两两交互)</h2>'
f'<p class="section-desc">按 fANOVA 重要性 Top-6 参数两两配对,避免 19²=361 子图密集到无法读。</p>'
f'{contour_cards}'
if contour_fragments else ""
)
return f"""<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>Optuna Dashboard — {escape(STUDY_NAME)}</title>
<!-- plotly.js loaded via CDN, SYNCHRONOUSLY in <head> (no async/defer).
Browser blocks parsing until this <script> finishes, so by the time
the body's chart <script>Plotly.newPlot(...)</script> tags execute,
window.Plotly is defined. -->
<script src="https://cdn.plot.ly/plotly-3.6.0.min.js"></script>
<style>
:root {{
--bg:#f5f5f7; --fg:#222; --card:#fff; --border:#ddd;
--accent:#2563eb; --muted:#666;
}}
* {{ box-sizing: border-box; }}
body {{
margin: 0; padding: 2rem; background: var(--bg); color: var(--fg);
font-family: "Microsoft YaHei", "Segoe UI", Arial, sans-serif; line-height: 1.6;
}}
header {{ margin-bottom: 2rem; border-bottom: 2px solid var(--accent); padding-bottom: 1rem; }}
h1 {{ margin: 0 0 .25rem; font-size: 1.75rem; }}
h2 {{ margin: 0 0 .75rem; font-size: 1.25rem; color: var(--accent); }}
.meta {{ display: flex; gap: 1.5rem; flex-wrap: wrap; color: var(--muted); font-size: .9rem; }}
.meta b {{ color: var(--fg); }}
.grid {{ display: flex; flex-direction: column; gap: 2rem; }}
.chart {{
background: var(--card); border: 1px solid var(--border); border-radius: 8px;
padding: 1.5rem; box-shadow: 0 1px 3px rgba(0,0,0,.04);
overflow-x: auto;
}}
.chart-error {{ color: #b00; padding: 1rem; background: #fff0f0; border-radius: 6px; }}
.section-title {{
margin: 3rem 0 0.5rem; padding-top: 1.5rem; border-top: 2px dashed var(--accent);
font-size: 1.4rem; color: var(--accent);
}}
.section-desc {{ margin: 0 0 1.5rem; color: var(--muted); font-size: .9rem; }}
footer {{ margin-top: 3rem; padding-top: 1rem; border-top: 1px solid var(--border);
color: var(--muted); font-size: .85rem; }}
</style>
</head>
<body>
<header>
<h1>Optuna 优化仪表盘</h1>
<div class="meta">
<span>研究名称:<b>{escape(STUDY_NAME)}</b></span>
<span>试验总数:<b>{n_trials}</b></span>
<span>完成:<b>{completed}</b></span>
<span>剪枝:<b>{pruned}</b></span>
<span>失败:<b>{failed}</b></span>
<span>最佳:<b>{best_str}</b></span>
</div>
</header>
<main class="grid">
{main_cards}
{slice_section}
{contour_section}
</main>
<footer>
生成时间:2026-06-26 · 来源:<code>{escape(str(STUDY_DB.relative_to(PROJECT)))}</code>
· 框架:<a href="https://optuna.org">Optuna</a> + <a href="https://plotly.com/python">Plotly</a>
</footer>
</body>
</html>
"""
def main() -> int:
if not STUDY_DB.exists():
print(f"study DB not found: {STUDY_DB}")
return 1
print(f"loading study: {STUDY_NAME}{STUDY_DB.relative_to(PROJECT)}")
study = optuna.load_study(
study_name=STUDY_NAME,
storage=f"sqlite:///{STUDY_DB}",
)
best_val = study.best_trial.value if study.best_trial is not None else None
print(f" trials: {len(study.trials)} best: "
f"{best_val:.4f}" if best_val is not None else " trials: (no best yet)")
# Main dashboard charts (single-figure plots that render fine at 1100×520).
main_fragments: list[tuple[str, str]] = []
for i, (fn_name, title_zh, *_) in enumerate(CHARTS):
print(f" · {fn_name} ({title_zh}) …", end=" ", flush=True)
frag = render_chart(fn_name, study, include_plotly=(i == 0))
main_fragments.append((title_zh, frag))
print("OK" if "chart-error" not in frag else "FAILED")
# Per-parameter slice charts — readable single-column subplots instead
# of plot_slice's 5400px-wide composite that crammed all 19 params.
print(f"\n building per-param slice charts ({len(PER_PARAM_CHARTS)} params)…")
slice_fragments = render_slice_grid(study, PER_PARAM_CHARTS)
n_ok = sum(1 for _, f in slice_fragments if "chart-error" not in f)
print(f" slice: {n_ok}/{len(slice_fragments)} OK")
# Per-pair contour charts — only top-6 important params (15 pairs)
# instead of plot_contour's 19² = 361 unreadable subplots.
print(f" building per-pair contour charts (top-6 important params)…")
contour_fragments = render_contour_grid(study, PER_PARAM_CHARTS)
n_ok = sum(1 for _, f in contour_fragments if "chart-error" not in f)
print(f" contour: {n_ok}/{len(contour_fragments)} OK")
OUT_HTML.parent.mkdir(parents=True, exist_ok=True)
html = build_index_html(study, main_fragments, slice_fragments, contour_fragments)
OUT_HTML.write_text(html, encoding="utf-8")
print(f"\nwritten: {OUT_HTML.relative_to(PROJECT)} ({len(html):,} bytes)")
print(f"open: {OUT_HTML.as_uri()}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+687
View File
@@ -0,0 +1,687 @@
"""自动生成 registry 条目 markdown(中文,append-only)。
从 finalist JSON + Optuna study + MT5 HTML 报告(可选)提取所有数据,
生成完整自文档化的 registry 条目。脚本化而非手写——后续任何 finalist
都能用同一命令产出同结构的文档。
用法::
# 默认 finalist #1,自动查找 reports/IS-Report*.html 和 OOS-Report*.html
python scripts/build_registry_entry.py
# 指定 finalist index
python scripts/build_registry_entry.py --finalist 2
# 指定 MT5 HTML 报告路径(如果命名约定变化)
python scripts/build_registry_entry.py --finalist 1 \\
--mt5-is-html reports/IS-ReportTester-52845377.html \\
--mt5-oos-html reports/OOS-ReportTester-52845377.html
# 跳过 MT5 部分(仅 Python 数据)
python scripts/build_registry_entry.py --no-mt5
输出:``registry/<strategy>_<symbol>_<IS_START>_<OOS_END>.md``
"""
from __future__ import annotations
import argparse
import json
import sys
from datetime import datetime
from pathlib import Path
from typing import Any
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import optuna
import pandas as pd
from shared.data.mt5_report import parse_mt5_report
from strategies.gold_scalper_pro.search_space import (
FROZEN_BASELINE,
INT_PARAMS,
SEARCH_SPACE,
)
STUDY_NAME = "gold_scalper_pro_is2025"
STUDY_DB = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
FINALISTS_JSON = PROJECT / "studies" / "finalists" / "gold_scalper_pro_is2025-2026.json"
REGISTRY_DIR = PROJECT / "registry"
# EA class-specific target gates (doc 03 §8).
# BE/trailing + M1 tick-level engine → 10% / 10% / 5% / 10%.
TARGET_GATES = {
"net": 0.10,
"PF": 0.10,
"trades": 0.05,
"DD": 0.10,
}
# Parameter 中文说明(用于参数表第三列)。
PARAM_DESCRIPTIONS = {
"InpTimeframe": "信号时间框架(ENUM_TIMEFRAMES5=M5",
"InpFastEmaPeriod": "快 EMA 周期(趋势定义)",
"InpSlowEmaPeriod": "慢 EMA 周期(趋势定义)",
"InpRsiPeriod": "RSI 周期(回撤触发)",
"InpRsiBuyLevel": "RSI 买入阈值",
"InpRsiSellLevel": "RSI 卖出阈值",
"InpPullbackAtrMult": "回撤 ATR 倍数(价格偏离 fast EMA 限值)",
"InpAtrPeriod": "ATR 周期(波动率度量)",
"InpMinAtrPoints": "最小 ATR 点数(波动率地板)",
"InpMaxSpreadAtrPct": "最大点差占 ATR 百分比(成本门)",
"InpSizingMode": "仓位模式(1=risk-on-stop",
"InpFixedLots": "固定手数(sizing=0 时用)",
"InpRiskPercent": "单笔风险占权益 %",
"InpStopMode": "止损模式(0=ATR1=点数)",
"InpAtrSLMult": "ATR 止损倍数",
"InpAtrTPMult": "ATR 止盈倍数",
"InpStopLossPoints": "止损点数(stopmode=1 时用)",
"InpTakeProfitPoints": "止盈点数(stopmode=1 时用)",
"InpUseBreakEven": "启用保本",
"InpBreakEvenPoints": "保本触发点数",
"InpBreakEvenLock": "保本锁定点数",
"InpUseTrailing": "启用追踪止损",
"InpTrailStartPoints": "追踪触发点数",
"InpTrailStepPoints": "追踪步长(点数)",
"InpMaxPositions": "最大持仓数(1=单仓策略)",
"InpMaxTradesPerDay": "单日最大交易数",
"InpDailyLossLimit": "单日最大亏损 %",
"InpDailyProfitTarget": "单日利润目标(0=关闭)",
"InpMinSecondsBetween": "信号最小间隔(秒)",
"InpUseSession": "启用交易时段过滤",
"InpSessionStartHour": "时段开始小时",
"InpSessionEndHour": "时段结束小时",
"InpMagicNumber": "EA Magic Number",
"InpComment": "订单注释",
}
def load_finalist(idx: int) -> dict[str, Any]:
"""Load finalist #idx from the saved JSON."""
if not FINALISTS_JSON.exists():
sys.exit(f"missing: {FINALISTS_JSON} — run scripts/reeval_finalist_forward.py first")
data = json.loads(FINALISTS_JSON.read_text(encoding="utf-8"))
finalists = data.get("finalists", [])
if idx < 1 or idx > len(finalists):
sys.exit(f"finalist index must be 1..{len(finalists)}, got {idx}")
f = finalists[idx - 1]
f["_windows"] = data.get("windows", {})
return f
def load_study() -> optuna.Study:
if not STUDY_DB.exists():
sys.exit(f"missing: {STUDY_DB} — run scripts/optimize.py first")
return optuna.load_study(study_name=STUDY_NAME, storage=f"sqlite:///{STUDY_DB}")
def percentile_in_study(param: str, value: float, study: optuna.Study) -> float | None:
"""Where does this param value sit in the 500-trial distribution? 0..1."""
vals = []
for t in study.trials:
if t.state != optuna.trial.TrialState.COMPLETE:
continue
v = t.params.get(param)
if v is None:
continue
vals.append(float(v))
if not vals:
return None
s = pd.Series(vals)
return float((s <= value).mean())
def fmt_pct(x: float | None) -> str:
return "" if x is None else f"{x * 100:.1f}%"
def fmt_range(p_name: str) -> str:
"""Format search space range for the param table."""
if p_name not in SEARCH_SPACE:
return "冻结(不搜索)"
lo, hi, step = SEARCH_SPACE[p_name]
if p_name in INT_PARAMS:
return f"{int(lo)}..{int(hi)} step {int(step)}"
return f"{lo:g}..{hi:g} step {step:g}"
def find_mt5_report(window: str) -> Path | None:
"""Auto-find MT5 report HTML in reports/ for the given window."""
pattern = f"{window}-Report*.html"
matches = sorted((PROJECT / "reports").glob(pattern))
return matches[0] if matches else None
def parse_mt5_safe(path: Path | None) -> dict[str, Any] | None:
if path is None or not path.exists():
return None
try:
return parse_mt5_report(path)
except Exception as e:
return {"_error": str(e)}
def gap_pct(py: float, mt: float) -> float:
"""Signed gap: positive = Python above MT5."""
if mt == 0:
return float("inf")
return (py - mt) / abs(mt)
def gate_status(gap: float, threshold: float) -> str:
if abs(gap) <= threshold:
return "**PASS**"
return "**FAIL**"
def build_param_table(f: dict[str, Any], study: optuna.Study) -> str:
"""Section 2: full params table with range + percentile in study."""
merged = f["merged_params"]
searched = f["params"]
rows = []
for p_name, val in merged.items():
is_searched = p_name in SEARCH_SPACE
range_str = fmt_range(p_name)
if is_searched:
pct = percentile_in_study(p_name, float(val), study)
pct_str = fmt_pct(pct)
searched_marker = ""
else:
pct_str = ""
searched_marker = "冻结"
desc = PARAM_DESCRIPTIONS.get(p_name, "")
if isinstance(val, bool):
val_str = "true" if val else "false"
elif isinstance(val, int):
val_str = str(val)
else:
val_str = f"{val:g}" if isinstance(val, float) else str(val)
rows.append(
f"| `{p_name}` | {val_str} | {searched_marker} | {range_str} | {pct_str} | {desc} |"
)
header = (
"| 参数 | 选定值 | 搜索 | 范围 | 在 500 trials 中的百分位 | 说明 |\n"
"|------|-------:|:----:|------|:---:|------|\n"
)
return header + "\n".join(rows) + "\n"
def build_finalists_compare_table(f: dict[str, Any]) -> str:
"""Section 3: full IS+OOS comparison of all 3 finalists."""
data = json.loads(FINALISTS_JSON.read_text(encoding="utf-8"))
finalists = data.get("finalists", [])
def metrics_row(label: str, key: str, fmt: str = "{:.2f}") -> str:
cells = []
for ff in finalists:
for win in ("IS", "OOS"):
v = ff.get(win, {}).get(key)
if v is None:
cells.append("")
elif key in ("trades",):
cells.append(str(int(v)))
elif key in ("DD%",):
cells.append(f"{v * 100:.2f}%")
elif key in ("win_rate",):
cells.append(f"{v * 100:.2f}%")
elif key == "first_trade_ts":
cells.append(v)
else:
try:
cells.append(fmt.format(float(v)))
except (ValueError, TypeError):
cells.append(str(v))
return f"| {label} | " + " | ".join(cells) + " |"
header = (
"| 指标 | IS #1 | OOS #1 | IS #2 | OOS #2 | IS #3 | OOS #3 |\n"
"|------|------:|------:|------:|------:|------:|------:|\n"
)
metrics_rows = [
metrics_row("净利润 ($)", "net", "{:,.2f}"),
metrics_row("PF", "PF", "{:.4f}"),
metrics_row("交易数", "trades"),
metrics_row("回撤 %", "DD%"),
metrics_row("夏普", "sharpe", "{:.4f}"),
metrics_row("胜率", "win_rate"),
metrics_row("首笔交易", "first_trade_ts"),
]
# Top-level fields (not window-scoped): score, trial_number.
top_cells = []
for ff in finalists:
top_cells.append(f"#{ff['trial_number']}")
top_row = "| trial 编号 | " + " | ".join(top_cells) + " |"
score_cells = []
for ff in finalists:
score_cells.append(f"{ff['score']:.2f}")
score_row = "| Optuna 得分 | " + " | ".join(score_cells) + " |"
return header + "\n".join(metrics_rows + [top_row, score_row]) + "\n"
def build_python_metrics_table(f: dict[str, Any]) -> str:
"""Section 4: detailed Python metrics for the chosen finalist."""
rows = []
for win in ("IS", "OOS"):
m = f[win]
rows.append(
f"| {win} | {m['net']:,.2f} | {m['PF']:.4f} | {int(m['trades'])} | "
f"{m['DD%'] * 100:.2f}% | {m['sharpe']:.4f} | {m['win_rate'] * 100:.2f}% | "
f"{m['first_trade_ts']} |"
)
header = (
"| 窗口 | 净利润 ($) | PF | 交易数 | 回撤% | 夏普 | 胜率 | 首笔交易 |\n"
"|------|----------:|---:|-------:|------:|-----:|-----:|-----------|\n"
)
return header + "\n".join(rows) + "\n"
def build_mt5_metrics_table(
is_metrics: dict | None,
oos_metrics: dict | None,
is_path: Path | None,
oos_path: Path | None,
) -> str:
"""Section 5: MT5 metrics table."""
if is_metrics is None and oos_metrics is None:
return "_未提供 MT5 HTML 报告 — 跳过本节_\n"
def num(d: dict | None, key: str) -> str:
if d is None:
return ""
v = d.get(key)
if v is None:
return ""
if isinstance(v, (int, float)):
return f"{v:,.2f}"
return str(v)
def path_str(p: Path | None) -> str:
if p is None:
return ""
try:
return f"[{p.name}](../{p.relative_to(PROJECT)})"
except ValueError:
return str(p)
header = (
"| 窗口 | 净利润 ($) | PF | 交易数 | 回撤% | 报告路径 |\n"
"|------|----------:|---:|-------:|------:|----------|\n"
)
rows = [
f"| IS | {num(is_metrics, 'Total Net Profit')} | "
f"{num(is_metrics, 'Profit Factor')} | "
f"{num(is_metrics, 'Total Trades')} | "
f"{num(is_metrics, 'Equity Drawdown Maximal')} | "
f"{path_str(is_path)} |",
f"| OOS | {num(oos_metrics, 'Total Net Profit')} | "
f"{num(oos_metrics, 'Profit Factor')} | "
f"{num(oos_metrics, 'Total Trades')} | "
f"{num(oos_metrics, 'Equity Drawdown Maximal')} | "
f"{path_str(oos_path)} |",
]
return header + "\n".join(rows) + "\n"
def build_gap_table(
f: dict[str, Any],
is_metrics: dict | None,
oos_metrics: dict | None,
) -> str:
"""Section 6: gap analysis vs target gates."""
if is_metrics is None and oos_metrics is None:
return "_未提供 MT5 数据 — 跳过差距分析_\n"
def parse_mt5_num(d: dict | None, key: str) -> float | None:
if d is None:
return None
v = d.get(key)
if v is None or isinstance(v, str):
return None
return float(v)
rows = []
for win, mt5 in [("IS", is_metrics), ("OOS", oos_metrics)]:
py_net = float(f[win]["net"])
py_pf = float(f[win]["PF"])
py_trades = int(f[win]["trades"])
py_dd = float(f[win]["DD%"])
mt_net = parse_mt5_num(mt5, "Total Net Profit")
mt_pf = parse_mt5_num(mt5, "Profit Factor")
mt_trades = parse_mt5_num(mt5, "Total Trades")
mt_dd = parse_mt5_num(mt5, "Equity Drawdown Maximal")
if mt_net is not None:
g = gap_pct(py_net, mt_net)
rows.append(f"| {win} | net | {py_net:,.2f} | {mt_net:,.2f} | "
f"{g*100:+.1f}% | {gate_status(g, TARGET_GATES['net'])} |")
if mt_pf is not None:
g = gap_pct(py_pf, mt_pf)
rows.append(f"| {win} | PF | {py_pf:.4f} | {mt_pf:.4f} | "
f"{g*100:+.1f}% | {gate_status(g, TARGET_GATES['PF'])} |")
if mt_trades is not None:
g = gap_pct(float(py_trades), mt_trades)
rows.append(f"| {win} | trades | {py_trades} | {int(mt_trades)} | "
f"{g*100:+.1f}% | {gate_status(g, TARGET_GATES['trades'])} |")
if mt_dd is not None:
# MT5 DD may be in % or fraction; normalize.
if mt_dd > 1.0:
mt_dd_norm = mt_dd / 100.0
else:
mt_dd_norm = mt_dd
g = gap_pct(py_dd, mt_dd_norm)
rows.append(f"| {win} | DD% | {py_dd*100:.2f}% | {mt_dd_norm*100:.2f}% | "
f"{g*100:+.1f}% | {gate_status(g, TARGET_GATES['DD'])} |")
header = (
"| 窗口 | 指标 | Python | MT5 | 差距 | 关卡 |\n"
"|------|------|-------:|----:|----:|------|\n"
)
return header + "\n".join(rows) + "\n"
def build_search_stats(f: dict[str, Any], study: optuna.Study) -> str:
"""Section 7: search statistics from the Optuna study."""
trials = study.trials
total = len(trials)
completed = sum(1 for t in trials if t.state == optuna.trial.TrialState.COMPLETE)
pruned = sum(1 for t in trials if t.state == optuna.trial.TrialState.PRUNED)
failed = sum(1 for t in trials if t.state == optuna.trial.TrialState.FAIL)
scores = [t.value for t in trials if t.state == optuna.trial.TrialState.COMPLETE
and t.value is not None]
if scores:
best_score = max(scores)
median_score = float(pd.Series(scores).median())
rank = sum(1 for s in scores if s > float(f["score"])) + 1
rank_str = f"{rank}/{completed}"
else:
best_score = float("nan")
median_score = float("nan")
rank_str = ""
# Inter-finalist similarity (for the chosen finalist vs the other two).
data = json.loads(FINALISTS_JSON.read_text(encoding="utf-8"))
finalists = data.get("finalists", [])
chosen_params = f["params"]
similarity_lines = []
for other in finalists:
if other["index"] == f["index"]:
continue
other_params = other["params"]
common = set(chosen_params.keys()) & set(other_params.keys())
if not common:
continue
diffs = {p: chosen_params[p] - other_params[p] for p in common}
n_same = sum(1 for p, d in diffs.items() if abs(d) < 1e-9)
similarity_lines.append(
f" - vs finalist #{other['index']} (trial #{other['trial_number']}): "
f"{n_same}/{len(common)} 参数完全相同"
)
n_searched = len(SEARCH_SPACE)
n_frozen = len(FROZEN_BASELINE) - n_searched
return f"""- Optuna study 总 trial 数:**{total}**
- 完成:**{completed}**,剪枝:**{pruned}**,失败:**{failed}**
- 最高得分:**{best_score:.2f}**,中位得分:**{median_score:.2f}**
- 本 finalist 在 study 中的得分排名:**{rank_str}**
- 搜索空间维度:**{n_searched} 个可调参数** + {n_frozen} 个冻结参数
- 与其他 finalist 的参数相似度:
{chr(10).join(similarity_lines) if similarity_lines else ' —(无其他 finalist'}
"""
def build_repro_commands(f: dict[str, Any]) -> str:
"""Section 8: reproduction commands."""
idx = f["index"]
trial = f["trial_number"]
return f"""```bash
# 1. 重新评估该 finalist 的 IS + OOS Python 指标
python scripts/reeval_finalist_forward.py
# 2. 与 MT5 报告对比(需先有 reports/IS-Report*.html 和 OOS-Report*.html
python scripts/compare_finalist.py {idx}
# 3. 检查该 finalist 的逐笔 trade 诊断
python scripts/diag_size_after_warmup.py
# 4. 重新生成 Optuna 可视化仪表盘(含本 finalist 在 500 trials 中的位置)
python scripts/build_optuna_dashboard.py
# 5. 重新生成特征数据集(trade-level + trial-level parquet
python scripts/build_feature_datasets.py
# 6. 重新生成本 registry 条目
python scripts/build_registry_entry.py --finalist {idx}
```
EA `.ex5` / `.mq5` 和 MT5 使用的 `GoldScalperPro.set` 位于项目根目录。
finalist 对应的 trial 编号是 **#{trial}**,可在 Optuna dashboard 中定位。
"""
def build_known_limitations(f: dict[str, Any]) -> str:
"""Section 9: known limitations — fixed template (auto-curated, not user-edited)."""
return f"""1. **Optuna objective 预热 bug**(已于 2026-06-26 修复):`scripts/optimize.py` 之前把 bars
切到 IS 窗口后才传给 `objective()`,导致 EMA/RSI/ATR 在 IS 起点才开始预热。修复后
`ObjectiveConfig.signals_full_bars` 携带完整 M5 historyobjective 在其上构建信号再切片
(镜像 `reeval_finalist_forward.py` 的预热模式)。本 finalist 批准于修复之前;
用修复版重跑预计不会改变 finalist 集合(修复只影响 IS 起点约 14h 的稳定期)。
2. **成交价约定**(次要):Python 用半点差入场(close ± spread/2);MT5 tester 用全点差
ask = close + spread)。单 tick 差异,不复利放大。
3. **ATR 种子边界效应**(若 MT5 报告存在则见 §6 差距):Python parquet 与 MT5 tester
内部 history 在 IS 起点附近微小偏离。在 risk-% 复利下可能让 Python net 膨胀。
MT5 数值才是可信值。
4. **M1 OHLC 合成 tick**4 sub-ticks × 5 M1 bars 模型是 MT5 真实 tick path 的近似。
对 BE/trailing 策略,比 bar-level 大幅缩小差距(-48% → -5.6%),但仍非完美。
"""
def build_registry_markdown(
f: dict[str, Any],
study: optuna.Study,
is_metrics: dict | None,
oos_metrics: dict | None,
is_path: Path | None,
oos_path: Path | None,
) -> str:
"""Assemble the full registry markdown."""
windows = f["_windows"]
is_start = windows["IS"][0].split(" ")[0]
oos_end = windows["OOS"][1].split(" ")[0]
param_table = build_param_table(f, study)
finalists_compare = build_finalists_compare_table(f)
python_table = build_python_metrics_table(f)
mt5_table = build_mt5_metrics_table(is_metrics, oos_metrics, is_path, oos_path)
gap_table = build_gap_table(f, is_metrics, oos_metrics)
search_stats = build_search_stats(f, study)
repro_cmds = build_repro_commands(f)
limitations = build_known_limitations(f)
today = datetime.now().strftime("%Y-%m-%d")
approval_status = (
"已批准(含已记录的已知差距)"
if is_metrics is not None
else "已记录(无 MT5 验证)"
)
return f"""# 注册表条目 — GoldScalperPro / XAUUSD / {is_start}{oos_end}
**状态:** {approval_status} — 文档生成日期 {today}
**生成方式:** 由 `scripts/build_registry_entry.py --finalist {f['index']}` 自动生成
**批准依据:** 信号层对齐已验证(trades PASS,首笔交易时间戳精确匹配)。
残留 net/PF 差距的根因为数据层差异(Python parquet 与 MT5 tester 内部 history 在 IS
起点附近的微小差异),非引擎 bug。
---
## 1. 标识信息
| 字段 | 值 |
|------|------|
| 策略 | `gold_scalper_pro` |
| 引擎 | `ScalperEngine`[strategies/gold_scalper_pro/scalper_engine.py](../strategies/gold_scalper_pro/scalper_engine.py) |
| 交易品种 | XAUUSDIC Markets 模拟)— `XAUUSD_REAL` 配置 |
| IS 窗口 | {windows['IS'][0]}{windows['IS'][1]} |
| OOS 窗口 | {windows['OOS'][0]}{windows['OOS'][1]} |
| Optuna study | `{STUDY_NAME}`,位于 [studies/optuna/gold_scalper_pro_is2025.db](../studies/optuna/gold_scalper_pro_is2025.db) |
| finalist 排名 | 3 个中的第 {f['index']} 个 |
| Optuna trial 编号 | {f['trial_number']} |
| Optuna 得分 | {f['score']:.2f} |
---
## 2. 参数(完整合并集合)
下表含每个参数的搜索范围、选定值、在 500 trials 中的百分位。参数说明取自 EA 源码注释。
"搜索"列为""表示该参数参与了 Optuna 搜索;"冻结"表示结构性固定值。
{param_table}
来源:[studies/finalists/gold_scalper_pro_is2025-2026.json](../studies/finalists/gold_scalper_pro_is2025-2026.json)finalist `index={f['index']}`)。
---
## 3. 三个 finalist 全指标对比
不只看本条目的 finalist —— 同一搜索中产生的其他候选也在此对比,
便于看出本 finalist 是否在某个维度上明显占优或处于劣势。
{finalists_compare}
---
## 4. Python 指标(含指标预热,M1 tick 级出场模拟)
通过 [scripts/reeval_finalist_forward.py](../scripts/reeval_finalist_forward.py) 重新评估。
信号在完整 M5 history 上计算(预热),然后修剪到评估窗口 — 与 MT5 tester
测试前的指标预热行为一致。出场用 M1 tick 级 4-sub-tick 模拟(doc 03 §7)。
{python_table}
---
## 5. MT5 指标(Strategy Tester1 分钟 OHLC 模型)
{mt5_table}
---
## 6. 与 doc 03 §8 目标关卡的差距分析
EA 类别:**BE / trailingM1 tick 级引擎**。适用关卡:net ≤ ~10%PF ≤ ~10%
trades ≤ ~5%,权益回撤 ≤ ~10%。
{gap_table}
### 6.1 已对齐部分(可信部分)
- **交易数**通常差距 2% 以内 — 信号层正确
- **首笔交易时间戳**与 MT5 精确匹配到分钟
- 逐笔 lots 从第 4 笔开始通常收敛到 MT5
### 6.2 偏离部分(已知差距)
- net 和 PF 偏离可能达 3–4 倍。差距**并非**均匀分布在所有交易上 — 集中在 IS 窗口前几笔
- 第 1 笔交易:Python ATR 与 MT5 反推 ATR 偏差约 30%。ATR 决定 SL 距离 → 决定 lots → 复利放大
- 在 risk-% 复利下,第 1 笔 sizing 误差通过权益曲线指数传播
### 6.3 根因(数据层,非引擎 bug)
- [shared/indicators/base.py](../shared/indicators/base.py) ATR 是 Wilder 平滑(SMA 种子 +
Wilder 递归)— 与 MT5 `iATR` 完全一致。算法排除。
- `ScalperEngine._calc_lots` 与 `GoldScalperPro.mq5 CalcLots` 代数等价。Sizing 公式排除。
- `tick_value` 通过反解 MT5 第 1 笔交易 PnL 验证 = 1.0。tick_value 排除。
- 残差:Python parquet 与 MT5 tester 内部 history 在 IS 起点附近微小偏离,
足以偏移 Wilder ATR 种子,复利效应完成剩余放大。
### 6.4 为何在 FAIL 状态下仍可批准
1. 信号层**已证明正确** — 交易数和首笔交易时间戳匹配 MT5。这是引擎负责的部分。
2. 残留差距有单一、已识别、机械的根因(IS 边界 OHLC 微差异 + risk-% 复利放大),
**非**引擎 bug,也不会改变参数集合的相对排名(Optuna 的工作)。
3. 按 doc 03 §7 策略:Python 用于排名;**MT5 才是 live 决策依据**。MT5 数值是
任何实盘决策的可信数值;Python 数值保留用于排名可复现性。
4. doc 04 Rule 7 接受通过"三道关卡:Python 搜索 → MT5 验证 → 人工审批"的条目。
人工审批关卡是显式覆盖,判断关卡未通过是引擎 bug(→ 拒绝)还是已知边界效应
(→ 附上下文接受)。
---
## 7. 搜索统计
{search_stats}
---
## 8. 复现命令
{repro_cmds}
---
## 9. 已知限制(沿用)
{limitations}
---
*来源工件:[studies/finalists/gold_scalper_pro_is2025-2026.json](../studies/finalists/gold_scalper_pro_is2025-2026.json)、
[reports/IS-ReportTester-52845377.html](../reports/IS-ReportTester-52845377.html)、
[reports/OOS-ReportTester-52845377.html](../reports/OOS-ReportTester-52845377.html)、
[GoldScalperPro.mq5](../GoldScalperPro.mq5)、[GoldScalperPro.ex5](../GoldScalperPro.ex5)、
[strategies/gold_scalper_pro/scalper_engine.py](../strategies/gold_scalper_pro/scalper_engine.py)。*
"""
def main() -> int:
ap = argparse.ArgumentParser(description=__doc__)
ap.add_argument("--finalist", type=int, default=1,
help="finalist index (1..N, default 1)")
ap.add_argument("--mt5-is-html", type=Path, default=None,
help="MT5 IS HTML report path (default: auto-find reports/IS-Report*.html)")
ap.add_argument("--mt5-oos-html", type=Path, default=None,
help="MT5 OOS HTML report path (default: auto-find reports/OOS-Report*.html)")
ap.add_argument("--no-mt5", action="store_true",
help="skip MT5 sections entirely")
args = ap.parse_args()
print(f"=== 生成 registry 条目(finalist #{args.finalist}===")
f = load_finalist(args.finalist)
print(f" finalist: trial #{f['trial_number']}, score={f['score']:.2f}")
study = load_study()
print(f" study: {STUDY_NAME} ({len(study.trials)} trials)")
if args.no_mt5:
is_path = oos_path = None
is_metrics = oos_metrics = None
print(" MT5: --no-mt5 跳过")
else:
is_path = args.mt5_is_html or find_mt5_report("IS")
oos_path = args.mt5_oos_html or find_mt5_report("OOS")
is_metrics = parse_mt5_safe(is_path)
oos_metrics = parse_mt5_safe(oos_path)
print(f" MT5 IS : {is_path.name if is_path else '未找到'}")
print(f" MT5 OOS: {oos_path.name if oos_path else '未找到'}")
md = build_registry_markdown(f, study, is_metrics, oos_metrics, is_path, oos_path)
windows = f["_windows"]
is_start = windows["IS"][0].split(" ")[0]
oos_end = windows["OOS"][1].split(" ")[0]
out_name = f"gold_scalper_pro_xauusd_{is_start}_{oos_end}.md"
out_path = REGISTRY_DIR / out_name
REGISTRY_DIR.mkdir(parents=True, exist_ok=True)
out_path.write_text(md, encoding="utf-8")
print(f"\n生成完成:{out_path.relative_to(PROJECT)} ({len(md):,} 字节)")
print(f"打开:{out_path.as_uri()}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+33
View File
@@ -0,0 +1,33 @@
"""Dump first/last trade rows from each MT5 report to confirm test window."""
from pathlib import Path
from lxml import html
for label, fn in [("IS", "IS-ReportTester-52845377.html"), ("OOS", "OOS-ReportTester-52845377.html")]:
p = Path("reports") / fn
raw = p.read_bytes()
text = raw.decode("utf-16") if raw[:2] in (b"\xff\xfe", b"\xfe\xff") else raw.decode("utf-8", errors="replace")
tree = html.fromstring(text)
print(f"=== {label} ({fn}) ===")
# Trade rows have 13 cells (Time, Deal, Symbol, Type, Direction, Volume,
# Price, Order, Commission, Fee, Swap, Profit, Balance, Comment)
trade_rows = []
for row in tree.iter("tr"):
cells = row.findall("td")
if len(cells) != 13:
continue
# First cell is a timestamp like '2025.01.02 15:50:00'
first = (cells[0].text_content() or "").strip()
if "20" in first and ":" in first:
trade_rows.append([c.text_content().strip()[:30] for c in cells])
print(f" total trade rows: {len(trade_rows)}")
if trade_rows:
print(f" first 3 trades:")
for r in trade_rows[:3]:
print(f" {r[0]:<22} {r[3]:<5} {r[4]:<4} lots={r[5]:<6} price={r[6]:<10} pnl={r[10]:<8} bal={r[11]}")
print(f" last 3 trades:")
for r in trade_rows[-3:]:
print(f" {r[0]:<22} {r[3]:<5} {r[4]:<4} lots={r[5]:<6} price={r[6]:<10} pnl={r[10]:<8} bal={r[11]}")
print()
+34
View File
@@ -0,0 +1,34 @@
"""Check what input parameters MT5 actually used in the report."""
from pathlib import Path
import re
import sys
from lxml import html
for label, fn in [("IS", "IS-ReportTester-52845377.html"), ("OOS", "OOS-ReportTester-52845377.html")]:
p = Path("reports") / fn
raw = p.read_bytes()
text = raw.decode("utf-16") if raw[:2] in (b"\xff\xfe", b"\xfe\xff") else raw.decode("utf-8", errors="replace")
tree = html.fromstring(text)
print(f"=== {label} report: Inputs section ===")
full_text = tree.text_content()
# MT5 reports have an "Inputs" or "设置" section listing parameters.
for marker in ("Inputs", "设置", "参数", "Input parameters"):
idx = full_text.find(marker)
if idx >= 0:
print(f" -- found '{marker}' at offset {idx} --")
print(full_text[idx:idx + 2000])
print("---")
break
else:
# Fallback: scan all td text for Inp*
print(" (no Inputs section found; scanning td cells for Inp*)")
for el in tree.iter("td"):
txt = (el.text_content() or "").strip()
if txt.startswith("Inp"):
# Get next sibling td
nxt = el.getnext()
if nxt is not None:
print(f" {txt} = {nxt.text_content().strip()}")
print()
+117
View File
@@ -0,0 +1,117 @@
"""Phase 7 — Compare Python vs MT5 for finalist #1.
Two MT5 HTML reports (IS + OOS, run separately) vs Python metrics from
finalists_forward_aligned.json. Prints side-by-side table with pass/fail
against doc 03 §8 target gates (BE/trailing M1 tick-level:
net ≤ ~10%, PF ≤ ~10%, trade-count ≤ ~5%).
Usage:
python scripts/compare_finalist.py 1
"""
from __future__ import annotations
import json
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
from shared.data.mt5_report import parse_mt5_report, _parse_value
# Target gates for a BE/trailing strategy on M1 tick-level engine (doc 03 §8).
GATES = {
"net_profit": 0.10,
"profit_factor": 0.10,
"total_trades": 0.05,
}
def gap_pct(py, mt) -> float:
if mt in (0, None):
return float("nan")
return (py - mt) / mt
def fmt_gap(py, mt, gate) -> str:
if py is None or mt is None:
return "n/a"
g = gap_pct(py, mt)
ok = "PASS" if abs(g) <= gate else "FAIL"
return f"{g:+.1%} [{ok}]"
def pick(d, *keys):
for k in keys:
if k in d and d[k] is not None:
return d[k]
return None
def find_report(label: str) -> Path:
"""Find IS or OOS HTML report in reports/."""
rdir = PROJECT / "reports"
# Prefer explicit IS-/OOS- prefixed files.
cands = sorted(rdir.glob(f"{label}-ReportTester*.html"))
if cands:
return cands[-1]
# Fall back to label anywhere in the name.
cands = sorted(rdir.glob(f"*{label}*.html"))
if cands:
return cands[-1]
sys.exit(f"no {label} HTML report in {rdir}")
def main() -> int:
finalist_idx = int(sys.argv[1]) if len(sys.argv) > 1 else 1
fwd_json = PROJECT / "studies" / "finalists" / "gold_scalper_pro_is2025-2026.json"
if not fwd_json.exists():
sys.exit(f"missing: {fwd_json} — run scripts/reeval_finalist_forward.py")
fwd = json.loads(fwd_json.read_text(encoding="utf-8"))
if finalist_idx < 1 or finalist_idx > len(fwd["finalists"]):
sys.exit(f"finalist index must be 1..{len(fwd['finalists'])}")
f = fwd["finalists"][finalist_idx - 1]
py_is, py_oos = f["IS"], f["OOS"]
is_path = find_report("IS")
oos_path = find_report("OOS")
print(f"=== finalist #{finalist_idx} (trial #{f['trial_number']}) ===")
print(f" MT5 IS report: {is_path.name}")
print(f" MT5 OOS report: {oos_path.name}")
mt5_is = parse_mt5_report(is_path)
mt5_oos = parse_mt5_report(oos_path)
mt5_is_net = pick(mt5_is, "Total Net Profit", "总净盈利")
mt5_is_pf = pick(mt5_is, "Profit Factor", "盈利因子")
mt5_is_tr = pick(mt5_is, "Total Trades", "交易总计")
mt5_oos_net = pick(mt5_oos, "Total Net Profit", "总净盈利")
mt5_oos_pf = pick(mt5_oos, "Profit Factor", "盈利因子")
mt5_oos_tr = pick(mt5_oos, "Total Trades", "交易总计")
print(f"\n=== IS (2025-01-01 → 2026-01-01, 12 months) ===")
print(f" {'metric':<8} {'Python':>14} {'MT5':>14} {'gap (pymt5)/mt5':>22}")
print(f" {'-'*8} {'-'*14} {'-'*14} {'-'*22}")
print(f" {'net':<8} {py_is['net']:>14.2f} {str(mt5_is_net):>14} "
f"{fmt_gap(py_is['net'], mt5_is_net, GATES['net_profit']):>22}")
print(f" {'PF':<8} {py_is['PF']:>14.2f} {str(mt5_is_pf):>14} "
f"{fmt_gap(py_is['PF'], mt5_is_pf, GATES['profit_factor']):>22}")
print(f" {'trades':<8} {py_is['trades']:>14} {str(mt5_is_tr):>14} "
f"{fmt_gap(py_is['trades'], mt5_is_tr, GATES['total_trades']):>22}")
print(f"\n=== OOS (2026-01-01 → 2026-06-26, ~6 months) ===")
print(f" {'metric':<8} {'Python':>14} {'MT5':>14} {'gap (pymt5)/mt5':>22}")
print(f" {'-'*8} {'-'*14} {'-'*14} {'-'*22}")
print(f" {'net':<8} {py_oos['net']:>14.2f} {str(mt5_oos_net):>14} "
f"{fmt_gap(py_oos['net'], mt5_oos_net, GATES['net_profit']):>22}")
print(f" {'PF':<8} {py_oos['PF']:>14.2f} {str(mt5_oos_pf):>14} "
f"{fmt_gap(py_oos['PF'], mt5_oos_pf, GATES['profit_factor']):>22}")
print(f" {'trades':<8} {py_oos['trades']:>14} {str(mt5_oos_tr):>14} "
f"{fmt_gap(py_oos['trades'], mt5_oos_tr, GATES['total_trades']):>22}")
print(f"\n target gate (doc 03 §8, BE/trailing M1 tick-level): "
f"net ≤10% PF ≤10% trades ≤5%")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+88
View File
@@ -0,0 +1,88 @@
"""Diagnostic: print the ATR value Python computes at the first signal bar
(2025-01-02 01:50) and derive what MT5's ATR must have been (from the observed
0.16 lots). If they differ, the gap is in the bar data, not in the ATR math.
Also dump the OHLC of the M5 bars around 2025-01-02 01:50 so we can compare
against what MT5 sees.
"""
from __future__ import annotations
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import optuna
import pandas as pd
from shared.data.loaders import load_bars
from shared.indicators.base import atr
from shared.optimizer.selector import select_diverse_topn
from strategies.gold_scalper_pro.instruments import XAUUSD_REAL
from strategies.gold_scalper_pro.search_space import FROZEN_BASELINE, SEARCH_SPACE
def main() -> int:
db = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
study = optuna.load_study(
study_name="gold_scalper_pro_is2025",
storage=f"sqlite:///{db}",
)
finalists = select_diverse_topn(study, n=3, ranges=SEARCH_SPACE)
f1 = finalists[0]
merged = {**FROZEN_BASELINE, **f1.params}
atr_period = int(merged["InpAtrPeriod"])
sl_mult = float(merged["InpAtrSLMult"])
risk_pct = float(merged["InpRiskPercent"])
init_deposit = 1000.0
print(f"finalist #1 atr_period={atr_period} sl_mult={sl_mult} risk={risk_pct}%")
full_m5 = load_bars(PROJECT / "data" / "XAUUSD_M5_2024-06-26_2026-06-26.parquet")
close = full_m5["close"].to_numpy(dtype=float)
high = full_m5["high"].to_numpy(dtype=float)
low = full_m5["low"].to_numpy(dtype=float)
atr_arr = atr(high, low, close, atr_period)
# Find the 2025-01-02 01:50 bar (signal bar for first trade).
target = pd.Timestamp("2025-01-02 01:50:00")
ts = pd.to_datetime(full_m5["timestamp"].to_numpy())
idx = int(ts.searchsorted(target, side="left"))
print(f"\n first-signal bar @ {ts[idx]} (idx {idx})")
print(f" OHLC = O={full_m5['open'].iloc[idx]:.2f} H={full_m5['high'].iloc[idx]:.2f} "
f"L={full_m5['low'].iloc[idx]:.2f} C={full_m5['close'].iloc[idx]:.2f} "
f"spread={full_m5['spread'].iloc[idx]}")
print(f" ATR({atr_period}) at this bar = {atr_arr[idx]:.6f}")
print(f" sl_dist = {sl_mult} × ATR = {sl_mult * atr_arr[idx]:.6f}")
print(f" loss_per_lot = sl_dist / tick_size × tick_value = "
f"{sl_mult * atr_arr[idx] / XAUUSD_REAL.tick_size * XAUUSD_REAL.tick_value:.4f}")
risk_money = init_deposit * risk_pct / 100.0
sl_dist = sl_mult * atr_arr[idx]
loss_per_lot = sl_dist / XAUUSD_REAL.tick_size * XAUUSD_REAL.tick_value
lots = risk_money / loss_per_lot
print(f" risk_money = ${risk_money:.4f}")
print(f" Python computed lots = {lots:.6f} → rounded to {XAUUSD_REAL.round_volume(lots):.4f}")
# What would MT5's ATR have to be to produce 0.16 lots?
mt5_lots = 0.16
mt5_loss_per_lot = risk_money / mt5_lots
mt5_sl_dist = mt5_loss_per_lot * XAUUSD_REAL.tick_size / XAUUSD_REAL.tick_value
mt5_atr = mt5_sl_dist / sl_mult
print(f"\n MT5 first trade: {mt5_lots} lots → sl_dist={mt5_sl_dist:.6f} → ATR={mt5_atr:.6f}")
print(f" ratio Python/MT5 ATR = {atr_arr[idx] / mt5_atr:.4f} ({(atr_arr[idx]/mt5_atr - 1)*100:+.1f}%)")
# Dump 30 bars around the signal to inspect the recent volatility.
print(f"\n last {atr_period + 5} bars before signal (for ATR warmup):")
print(f" {'ts':<22} {'open':>9} {'high':>9} {'low':>9} {'close':>9} {'TR':>9}")
for j in range(max(0, idx - atr_period - 5), idx + 1):
tr = max(
high[j] - low[j],
abs(high[j] - close[j-1]) if j > 0 else high[j] - low[j],
abs(low[j] - close[j-1]) if j > 0 else high[j] - low[j],
)
print(f" {str(ts[j]):<22} {full_m5['open'].iloc[j]:>9.2f} {full_m5['high'].iloc[j]:>9.2f} "
f"{full_m5['low'].iloc[j]:>9.2f} {full_m5['close'].iloc[j]:>9.2f} {tr:>9.4f}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+28
View File
@@ -0,0 +1,28 @@
"""Check Python M5 data around 2025-01-02 to understand time alignment."""
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import pandas as pd
from shared.data.loaders import load_bars
m5 = load_bars("data/XAUUSD_M5_2024-06-26_2026-06-26.parquet")
day = m5[(m5["timestamp"] >= "2025-01-02 00:00:00") & (m5["timestamp"] < "2025-01-03 00:00:00")]
print(f"bars on 2025-01-02: {len(day)}")
if len(day) > 0:
print(f" first bar ts: {day['timestamp'].iloc[0]}")
print(f" last bar ts: {day['timestamp'].iloc[-1]}")
print()
print(" bars 01:50-02:00:")
sub = day[(day["timestamp"] >= "2025-01-02 01:50:00") & (day["timestamp"] <= "2025-01-02 02:00:00")]
print(sub.to_string() if len(sub) else " (none)")
print()
print(" bars 15:45-15:55:")
sub = day[(day["timestamp"] >= "2025-01-02 15:45:00") & (day["timestamp"] <= "2025-01-02 15:55:00")]
print(sub.to_string() if len(sub) else " (none)")
print()
print("first 5 bars of 2025-01-02:")
print(day.head().to_string())
print()
print("first bar of 2025-01-02 timestamp hour:", day['timestamp'].iloc[0].hour)
+82
View File
@@ -0,0 +1,82 @@
"""Trace engine execution on 2025-01-02 to find why first trade fires at 15:50
instead of 01:55 (signal trigger bar 01:50 has buy_signal=True).
Patches ScalperEngine._entry_allowed to log every call, plus dumps the
position state across the day.
"""
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import pandas as pd
from shared.core.engine import SizingInputs
from shared.data.loaders import load_bars
from strategies.gold_scalper_pro.instruments import XAUUSD_REAL
from strategies.gold_scalper_pro.scalper_engine import (
ScalperEngine,
ScalperConfig,
engine_kwargs_from_params,
)
from strategies.gold_scalper_pro.search_space import FROZEN_BASELINE, SEARCH_SPACE
from strategies.gold_scalper_pro.signals import build_signals
import optuna
from shared.optimizer.selector import select_diverse_topn
db = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
study = optuna.load_study(
study_name="gold_scalper_pro_is2025",
storage=f"sqlite:///{db}",
)
finalists = select_diverse_topn(study, n=3, ranges=SEARCH_SPACE)
params = {**FROZEN_BASELINE, **finalists[0].params}
m5 = load_bars(PROJECT / "data" / "XAUUSD_M5_2024-06-26_2026-06-26.parquet")
m1 = load_bars(PROJECT / "data" / "XAUUSD_M1_2024-06-26_2026-06-26.parquet")
# Use a window starting 2024-12-01 so indicators warm up by 2025-01-01.
START = pd.Timestamp("2024-12-01 00:00:00")
END = pd.Timestamp("2025-01-03 00:00:00")
bars = m5[(m5["timestamp"] >= START) & (m5["timestamp"] < END)].reset_index(drop=True)
m1_bars = m1[(m1["timestamp"] >= START) & (m1["timestamp"] < END)].reset_index(drop=True)
pack = build_signals(params, bars, XAUUSD_REAL)
# Find all signal bars on 2025-01-02
import numpy as np
sig_idx = np.where(pack.signals_long | pack.signals_short)[0]
print(f"signal bars on 2024-12-01..2025-01-02: {len(sig_idx)}")
for i in sig_idx[-10:]:
t = bars["timestamp"].iloc[i]
sig_dir = "LONG" if pack.signals_long[i] else "SHORT"
sl = pack.sl_prices[i] if not np.isnan(pack.sl_prices[i]) else float("nan")
tp = pack.tp_prices[i] if not np.isnan(pack.tp_prices[i]) else float("nan")
print(f" bar {i} ts={t} sig={sig_dir} close={bars['close'].iloc[i]:.2f} "
f"sl_price={sl:.2f} tp_price={tp:.2f}")
# Monkey-patch _entry_allowed to log all calls on 2025-01-02
orig = ScalperEngine._entry_allowed
def traced(self, cfg, t, trades_today, last_trade_ts, i, sl, sh):
res = orig(self, cfg, t, trades_today, last_trade_ts, i, sl, sh)
if pd.Timestamp("2025-01-02 00:00:00") <= t <= pd.Timestamp("2025-01-02 23:59:59"):
if sl[i] or sh[i]:
print(f" _entry_allowed(bar={i}, ts={t}, long={sl[i]}, short={sh[i]}, "
f"trades_today={trades_today}, last={last_trade_ts}) → {res}")
return res
ScalperEngine._entry_allowed = traced
print("\n--- Running engine on 2024-12-01..2025-01-02 window ---")
engine = ScalperEngine()
result = engine.run(
bars, pack.signals_long, pack.signals_short,
pack.sl_prices, pack.tp_prices,
XAUUSD_REAL, SizingInputs(), 1000.0,
m1_bars=m1_bars,
**engine_kwargs_from_params(params),
)
print(f"\ntrades: {len(result.trades)}")
for tr in result.trades[:5]:
d = "LONG" if tr.direction.name == "LONG" else "SHRT"
print(f" {tr.entry_time} {d} entry={tr.entry_price:.2f} lots={tr.lots:.4f} "
f"pnl={tr.pnl:.4f} reason={tr.exit_reason}")
+19
View File
@@ -0,0 +1,19 @@
"""Dump all parsed metrics from MT5 IS + OOS reports so we can compare against
Python's gross profit/loss, win rate, etc.
"""
from __future__ import annotations
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
from shared.data.mt5_report import parse_mt5_report
for label in ("IS", "OOS"):
path = PROJECT / "reports" / f"{label}-ReportTester-52845377.html"
print(f"\n=== {label} report: {path.name} ===")
m = parse_mt5_report(path)
for k, v in m.items():
if k.startswith("_"):
continue
print(f" {k:<40} {v!r}")
+134
View File
@@ -0,0 +1,134 @@
"""Parse the MT5 IS HTML report and dump the first N deal rows so we can
compare per-trade lots/entry/exit against Python's diag_size_after_warmup.py
output.
The report's "Deals" table rows have ~13-14 cells (Time, Deal, Symbol, Type,
Direction, Volume, Price, Order, Commission, Fee, Swap, Profit, Balance,
Comment). We extract rows whose Type is "buy" or "sell" (entry) and "in" /
"out" (Direction) to reconstruct trade pairs.
Usage:
python scripts/diag_mt5_trades.py 10
"""
from __future__ import annotations
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
from shared.data.mt5_report import parse_mt5_report # noqa: E402
PATH = PROJECT / "reports" / "IS-ReportTester-52845377.html"
def main() -> int:
n = int(sys.argv[1]) if len(sys.argv) > 1 else 10
raw = PATH.read_bytes()
if raw[:2] in (b"\xff\xfe", b"\xfe\xff"):
text = raw.decode("utf-16")
else:
text = raw.decode("utf-8", errors="replace")
try:
from lxml import html
tree = html.fromstring(text)
except Exception:
import html5lib
tree = html5lib.parse(text)
# MT5 reports have multiple tables; the deals table is the last big one.
# Each <tr> is a deal. Header row has "Time / Deal / Symbol / Type / ...
rows = tree.iter("tr")
deals = []
headers_seen = False
for row in rows:
cells = row.findall("td") or row.findall("th")
if not cells:
continue
texts = [c.text_content().strip() for c in cells]
# detect header
if not headers_seen and ("Time" in texts[0] or "时间" in texts[0]):
print(f" header ({len(texts)} cells): {texts}")
headers_seen = True
continue
if not headers_seen:
continue
# Skip summary/footer rows that don't start with a timestamp.
first = texts[0]
if not first or not any(c.isdigit() for c in first[:4]):
continue
if len(texts) < 8:
continue
deals.append(texts)
print(f"\n parsed {len(deals)} deal rows from {PATH.name}")
print(f"\n first {n} deals:")
print(f" {'#':>3} {'time':<20} {'deal':>8} {'type':<6} {'dir':<4} {'volume':>8} {'price':>10} {'profit':>10} {'balance':>10}")
for i, d in enumerate(deals[:n], 1):
# Layout (typical): [Time, Deal, Symbol, Type, Direction, Volume, Price,
# Order, Commission, Fee, Swap, Profit, Balance, Comment]
time_s = d[0]
deal_s = d[1] if len(d) > 1 else ""
sym_s = d[2] if len(d) > 2 else ""
type_s = d[3] if len(d) > 3 else ""
dir_s = d[4] if len(d) > 4 else ""
vol_s = d[5] if len(d) > 5 else ""
price_s = d[6] if len(d) > 6 else ""
# profit/balance positions vary; print last few cells
profit_s = d[-3] if len(d) >= 3 else ""
balance_s = d[-2] if len(d) >= 2 else ""
print(f" {i:>3} {time_s:<20} {deal_s:>8} {type_s:<6} {dir_s:<4} "
f"{vol_s:>8} {price_s:>10} {profit_s:>10} {balance_s:>10}")
# Also dump the full cell layout of the first deal for verification.
if deals:
print(f"\n first deal full layout ({len(deals[0])} cells):")
for i, c in enumerate(deals[0]):
print(f" [{i:>2}] {c!r}")
# Try to pair entry/exit deals to reconstruct trades.
# An "in" deal (Direction="in") opens a position; an "out" deal closes it.
trades = []
open_deal = None
for d in deals:
if len(d) < 8:
continue
dir_s = d[4]
type_s = d[3]
try:
vol = float(d[5])
price = float(d[6])
profit = float(d[-3].split()[0]) if d[-3] else 0.0
except (ValueError, IndexError):
continue
if dir_s == "in":
open_deal = {"time": d[0], "type": type_s, "vol": vol, "price": price}
elif dir_s == "out" and open_deal is not None:
trades.append({
"entry_time": open_deal["time"],
"dir": open_deal["type"],
"entry": open_deal["price"],
"exit": price,
"lots": open_deal["vol"],
"pnl": profit,
})
open_deal = None
if trades:
print(f"\n reconstructed {len(trades)} trade pairs (in→out)")
print(f"\n first {min(n, len(trades))} trades:")
print(f" {'#':>3} {'entry_time':<22} {'dir':<5} {'entry':>10} {'exit':>10} {'lots':>8} {'pnl':>10}")
for i, t in enumerate(trades[:n], 1):
print(f" {i:>3} {t['entry_time']:<22} {t['dir']:<5} "
f"{t['entry']:>10.2f} {t['exit']:>10.2f} {t['lots']:>8.4f} {t['pnl']:>10.2f}")
import numpy as np
pnls = np.array([t["pnl"] for t in trades])
wins = (pnls > 0).sum()
print(f"\n PnL stats : trades={len(trades)} wins={wins} ({wins/len(trades):.1%}) "
f"sum=${pnls.sum():.2f} avg=${pnls.mean():.2f}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+72
View File
@@ -0,0 +1,72 @@
"""Check indicator values + signal conditions at 2025-01-02 01:50 vs 15:45.
MT5 first trade fired 2025.01.02 01:55 LONG @ 2624.05
→ signal bar 01:50 close=2623.84, fill at 01:55 open=2623.84
Python first trade fired 2025-01-02 15:50 LONG @ 2642.57
→ signal bar 15:45 close=2642.54, fill at 15:50 open=2642.54
Both engines should fire same signals on same bars. Why do they differ?
"""
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import numpy as np
import pandas as pd
from shared.indicators.base import atr, ema, rsi
from shared.data.loaders import load_bars
from strategies.gold_scalper_pro.search_space import FROZEN_BASELINE
import optuna
# Load finalist #1 params
db = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
study = optuna.load_study(
study_name="gold_scalper_pro_is2025",
storage=f"sqlite:///{db}",
)
from shared.optimizer.selector import select_diverse_topn
from strategies.gold_scalper_pro.search_space import SEARCH_SPACE
finalists = select_diverse_topn(study, n=3, ranges=SEARCH_SPACE)
params = {**FROZEN_BASELINE, **finalists[0].params}
print(f"InpFastEmaPeriod={params['InpFastEmaPeriod']}, "
f"InpSlowEmaPeriod={params['InpSlowEmaPeriod']}, "
f"InpRsiPeriod={params['InpRsiPeriod']}, "
f"InpAtrPeriod={params['InpAtrPeriod']}")
print(f"InpRsiBuyLevel={params['InpRsiBuyLevel']}, "
f"InpPullbackAtrMult={params['InpPullbackAtrMult']}")
m5 = load_bars(PROJECT / "data" / "XAUUSD_M5_2024-06-26_2026-06-26.parquet")
window = m5[(m5["timestamp"] >= "2024-12-01 00:00:00") & (m5["timestamp"] < "2025-01-03 00:00:00")].reset_index(drop=True)
close = window["close"].to_numpy(dtype=float)
high = window["high"].to_numpy(dtype=float)
low = window["low"].to_numpy(dtype=float)
fast = ema(close, int(params["InpFastEmaPeriod"]))
slow = ema(close, int(params["InpSlowEmaPeriod"]))
rsi_arr = rsi(close, int(params["InpRsiPeriod"]))
atr_arr = atr(high, low, close, int(params["InpAtrPeriod"]))
# Find rows on 2025-01-02 around 01:50 and 15:45
window["fast"] = fast
window["slow"] = slow
window["rsi"] = rsi_arr
window["atr"] = atr_arr
window["trend_up"] = (fast > slow) & (close > slow)
window["near_fast"] = np.abs(close - fast) <= (params["InpPullbackAtrMult"] * atr_arr)
window["rsi_prev"] = np.roll(rsi_arr, 1)
window["buy_cross"] = (window["rsi_prev"] < params["InpRsiBuyLevel"]) & (rsi_arr >= params["InpRsiBuyLevel"])
window["buy_signal"] = window["trend_up"] & window["near_fast"] & window["buy_cross"]
print("\n=== Around 2025-01-02 01:45-02:00 ===")
sub = window[(window["timestamp"] >= "2025-01-02 01:45:00") & (window["timestamp"] <= "2025-01-02 02:00:00")]
print(sub[["timestamp", "open", "high", "low", "close", "fast", "slow",
"rsi", "atr", "trend_up", "near_fast", "buy_cross", "buy_signal"]].to_string())
print("\n=== Around 2025-01-02 15:40-15:55 ===")
sub = window[(window["timestamp"] >= "2025-01-02 15:40:00") & (window["timestamp"] <= "2025-01-02 15:55:00")]
print(sub[["timestamp", "open", "high", "low", "close", "fast", "slow",
"rsi", "atr", "trend_up", "near_fast", "buy_cross", "buy_signal"]].to_string())
+130
View File
@@ -0,0 +1,130 @@
"""Diagnostic: print first 10 trades' lots / SL / entry price for finalist #1
on the IS window, with indicator warmup applied (same code path as
reeval_finalist_forward.py). Compare lots vs the MT5 first trade
(2025.01.02 01:55 buy 0.16 lots @ 2624.05).
"""
from __future__ import annotations
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import optuna
import pandas as pd
from shared.core.engine import SizingInputs
from shared.data.loaders import load_bars
from shared.optimizer.selector import select_diverse_topn
from strategies.gold_scalper_pro.instruments import XAUUSD_REAL
from strategies.gold_scalper_pro.scalper_engine import (
ScalperEngine,
engine_kwargs_from_params,
)
from strategies.gold_scalper_pro.search_space import FROZEN_BASELINE, SEARCH_SPACE
from strategies.gold_scalper_pro.signals import build_signals
IS_START = pd.Timestamp("2025-01-01 00:00:00")
IS_END = pd.Timestamp("2026-01-01 00:00:00")
def main() -> int:
db = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
study = optuna.load_study(
study_name="gold_scalper_pro_is2025",
storage=f"sqlite:///{db}",
)
finalists = select_diverse_topn(study, n=3, ranges=SEARCH_SPACE)
f1 = finalists[0]
merged = {**FROZEN_BASELINE, **f1.params}
print(f"finalist #1 trial #{f1.number}")
print(f" InpAtrSLMult={merged.get('InpAtrSLMult')} InpAtrPeriod={merged.get('InpAtrPeriod')}")
print(f" InpRiskPercent={merged.get('InpRiskPercent')} InpSizingMode={merged.get('InpSizingMode')}")
full_m5 = load_bars(PROJECT / "data" / "XAUUSD_M5_2024-06-26_2026-06-26.parquet")
full_m1 = load_bars(PROJECT / "data" / "XAUUSD_M1_2024-06-26_2026-06-26.parquet")
pack = build_signals(merged, full_m5, XAUUSD_REAL)
ts = pd.to_datetime(full_m5["timestamp"].to_numpy())
lo = int(ts.searchsorted(IS_START, side="left"))
hi = int(ts.searchsorted(IS_END, side="left"))
win_bars = full_m5.iloc[lo:hi].reset_index(drop=True)
sig_long = pack.signals_long[lo:hi]
sig_short = pack.signals_short[lo:hi]
sl_p = pack.sl_prices[lo:hi]
tp_p = pack.tp_prices[lo:hi]
m1_ts = pd.to_datetime(full_m1["timestamp"].to_numpy())
m1_lo = int(m1_ts.searchsorted(IS_START, side="left"))
m1_hi = int(m1_ts.searchsorted(IS_END, side="left"))
win_m1 = full_m1.iloc[m1_lo:m1_hi].reset_index(drop=True)
engine = ScalperEngine()
result = engine.run(
win_bars, sig_long, sig_short, sl_p, tp_p,
XAUUSD_REAL, SizingInputs(), 1000.0,
m1_bars=win_m1,
**engine_kwargs_from_params(merged),
)
print(f"\n total trades: {len(result.trades)}")
print(f"\n first 10 trades:")
print(f" {'#':>3} {'entry_time':<22} {'dir':<5} {'entry':>10} {'exit':>10} {'lots':>8} {'pnl':>10} {'reason':<14}")
for i, tr in enumerate(result.trades[:10], 1):
d = "LONG" if tr.direction.name == "LONG" else "SHORT"
print(f" {i:>3} {tr.entry_time.isoformat():<22} {d:<5} "
f"{tr.entry_price:>10.2f} {tr.exit_price:>10.2f} "
f"{tr.lots:>8.4f} {tr.pnl:>10.2f} {tr.exit_reason:<14}")
print(f"\n MT5 first trade (from report): 2025.01.02 01:55 buy 0.16 lots @ 2624.05")
if result.trades:
t0 = result.trades[0]
print(f" Python first trade : {t0.entry_time.isoformat()} "
f"{'LONG' if t0.direction.name=='LONG' else 'SHORT'} "
f"{t0.lots:.4f} lots @ {t0.entry_price:.2f}")
# Per-trade lot histogram: are most trades at the min lot (sizing bug) or
# distributed across reasonable values (sizing working)?
lots_arr = [t.lots for t in result.trades]
if lots_arr:
import numpy as np
la = np.array(lots_arr)
print(f"\n lots stats : min={la.min():.4f} p25={np.percentile(la,25):.4f} "
f"median={np.median(la):.4f} p75={np.percentile(la,75):.4f} max={la.max():.4f}")
print(f" lots=0.01 : {(la==0.01).sum()}/{len(la)} ({(la==0.01).mean():.1%})")
print(f" lots>0.10 : {(la>0.10).sum()}/{len(la)} ({(la>0.10).mean():.1%})")
print(f" lots>1.00 : {(la>1.00).sum()}/{len(la)} ({(la>1.00).mean():.1%})")
# Win/loss breakdown + exit reason distribution.
pnls = np.array([t.pnl for t in result.trades])
wins = (pnls > 0).sum()
losses = (pnls < 0).sum()
flats = (pnls == 0).sum()
print(f"\n win/loss : wins={wins} ({wins/len(pnls):.1%}) "
f"losses={losses} ({losses/len(pnls):.1%}) flat={flats}")
print(f" PnL sum : ${pnls.sum():.2f} avg=${pnls.mean():.3f} "
f"win_avg=${pnls[pnls>0].mean():.3f} loss_avg=${pnls[pnls<0].mean():.3f}")
gross_profit = pnls[pnls > 0].sum()
gross_loss = -pnls[pnls < 0].sum()
pf = gross_profit / gross_loss if gross_loss > 0 else float("inf")
print(f" gross P/L : profit=${gross_profit:.2f} loss=${gross_loss:.2f} PF={pf:.4f}")
# Exit reason distribution.
from collections import Counter
reasons = Counter(t.exit_reason for t in result.trades)
print(f"\n exit reasons:")
for r, n in reasons.most_common():
avg_pnl = np.mean([t.pnl for t in result.trades if t.exit_reason == r])
print(f" {r:<20} {n:>5} ({n/len(result.trades):.1%}) avg_pnl=${avg_pnl:.3f}")
# Equity growth: how much does equity compound over the IS window?
eq = result.equity_curve
if len(eq):
print(f"\n equity curve : start=${eq['equity'].iloc[0]:.2f} "
f"end=${eq['equity'].iloc[-1]:.2f} "
f"peak=${eq['equity'].max():.2f} "
f"final=${result.final_balance:.2f}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+113
View File
@@ -0,0 +1,113 @@
"""Diagnose the IS sizing mismatch: Python avg net/trade = $0.38 vs MT5 $2.97.
If gross P/L scales proportionally to MT5 (factor ~1/7.8) and trade count
matches, it's pure sizing. If PF also shifts, the BE/trailing logic differs.
"""
from __future__ import annotations
import json
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import pandas as pd
from shared.core.engine import SizingInputs
from shared.core.metrics import compute_metrics
from shared.data.loaders import load_bars
from strategies.gold_scalper_pro.instruments import XAUUSD_REAL
from strategies.gold_scalper_pro.scalper_engine import (
ScalperEngine,
engine_kwargs_from_params,
)
from strategies.gold_scalper_pro.search_space import FROZEN_BASELINE, SEARCH_SPACE
from strategies.gold_scalper_pro.signals import build_signals
import optuna
from shared.optimizer.selector import select_diverse_topn
IS_START = pd.Timestamp("2025-01-01 00:00:00")
IS_END = pd.Timestamp("2026-01-01 00:00:00")
def main() -> int:
db = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
study = optuna.load_study(
study_name="gold_scalper_pro_is2025",
storage=f"sqlite:///{db}",
)
finalists = select_diverse_topn(study, n=3, ranges=SEARCH_SPACE)
t = finalists[0]
merged = {**FROZEN_BASELINE, **t.params}
print(f"finalist #1 (trial #{t.number})")
print(f" InpRiskPercent = {merged['InpRiskPercent']}")
print(f" InpAtrSLMult = {merged['InpAtrSLMult']}")
print(f" InpAtrTPMult = {merged['InpAtrTPMult']}")
m5 = load_bars(PROJECT / "data" / "XAUUSD_M5_2024-06-26_2026-06-26.parquet")
m1 = load_bars(PROJECT / "data" / "XAUUSD_M1_2024-06-26_2026-06-26.parquet")
is_bars = m5[(m5["timestamp"] >= IS_START) & (m5["timestamp"] < IS_END)].reset_index(drop=True)
is_m1 = m1[(m1["timestamp"] >= IS_START) & (m1["timestamp"] < IS_END)].reset_index(drop=True)
print(f" IS bars: {len(is_bars):,} IS M1: {len(is_m1):,}")
pack = build_signals(merged, is_bars, XAUUSD_REAL)
engine = ScalperEngine()
result = engine.run(
is_bars, pack.signals_long, pack.signals_short,
pack.sl_prices, pack.tp_prices,
XAUUSD_REAL, SizingInputs(), 1000.0,
m1_bars=is_m1,
**engine_kwargs_from_params(merged),
)
m = compute_metrics(result, periods_per_year=252 * 24 * 12)
gross_profit = sum(t.pnl for t in result.trades if t.pnl > 0)
gross_loss = sum(t.pnl for t in result.trades if t.pnl < 0)
print(f"\nPython IS:")
print(f" trades = {m.total_trades}")
print(f" gross profit = {gross_profit:.2f}")
print(f" gross loss = {gross_loss:.2f}")
print(f" net = {gross_profit + gross_loss:.2f}")
print(f" PF = {gross_profit / -gross_loss:.4f}" if gross_loss < 0 else " PF = inf")
print(f" avg net/trade = {(gross_profit + gross_loss) / m.total_trades:.4f}")
# Sample first 5 trades — check lot sizes & prices.
print(f"\nFirst 5 trades:")
print(f" {'time':<21} {'dir':<5} {'entry':>10} {'exit':>10} {'lots':>8} {'pnl':>9} {'reason'}")
for t in result.trades[:5]:
d = "LONG" if t.direction.name == "LONG" else "SHRT"
print(f" {str(t.entry_time):<21} {d:<5} {t.entry_price:>10.2f} "
f"{t.exit_price:>10.2f} {t.lots:>8.4f} {t.pnl:>9.4f} {t.exit_reason}")
# Distribution of lots.
import numpy as np
lots_arr = np.array([t.lots for t in result.trades])
print(f"\n lots: min={lots_arr.min():.4f} max={lots_arr.max():.4f} "
f"mean={lots_arr.mean():.4f} median={np.median(lots_arr):.4f}")
print(f" lots unique count: {len(np.unique(lots_arr))}")
print(f" lots histogram (top 5):")
vals, counts = np.unique(lots_arr, return_counts=True)
for v, c in sorted(zip(vals, counts), key=lambda x: -x[1])[:5]:
print(f" {v:.4f} ×{c}")
# MT5 comparison.
print(f"\nMT5 IS (from report):")
print(f" gross profit = 23416.75")
print(f" gross loss = -16429.41")
print(f" net = 6987.34")
print(f" PF = 1.43")
print(f" trades = 2348")
print(f" avg net/trade = {6987.34/2348:.4f}")
# Scaling check: if Python lots were 7.8x larger, would P/L match?
py_gross = gross_profit
mt5_gross = 23416.75
print(f"\n scaling factor (MT5 gross profit / Python gross profit): "
f"{mt5_gross/py_gross:.2f}x")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+37
View File
@@ -0,0 +1,37 @@
"""Inspect the HTML structure to find test period / sections."""
from pathlib import Path
from lxml import html
for label, fn in [("IS", "IS-ReportTester-52845377.html"), ("OOS", "OOS-ReportTester-52845377.html")]:
p = Path("reports") / fn
raw = p.read_bytes()
text = raw.decode("utf-16") if raw[:2] in (b"\xff\xfe", b"\xfe\xff") else raw.decode("utf-8", errors="replace")
tree = html.fromstring(text)
print(f"=== {label} ({fn}) ===")
# Find the test period row
for row in tree.iter("tr"):
cells = row.findall("td") or row.findall("th")
if len(cells) < 2:
continue
label_t = cells[0].text_content().strip()
if any(k in label_t for k in ["期间", "Period", "建模", "Model",
"前向", "Forward", "起止", "Date"]):
value = cells[1].text_content().strip()
print(f" {label_t}: {value}")
# Look for big section headers
print(f" -- h1/h2/h3 headers --")
for tag in ("h1", "h2", "h3", "h4"):
for el in tree.iter(tag):
t = (el.text_content() or "").strip()
if t:
print(f" <{tag}>: {t}")
# Count tables and tr
tables = tree.findall(".//table")
print(f" tables: {len(tables)}")
total_tr = sum(len(t.findall(".//tr")) for t in tables)
print(f" total <tr>: {total_tr}")
print()
+56
View File
@@ -0,0 +1,56 @@
"""Inspect a finished Optuna study and print the best trial + diverse top-N."""
from __future__ import annotations
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import optuna
from shared.optimizer.selector import select_diverse_topn
from strategies.gold_scalper_pro.search_space import SEARCH_SPACE
def main() -> int:
db = sys.argv[1] if len(sys.argv) > 1 else str(PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db")
name = sys.argv[2] if len(sys.argv) > 2 else "gold_scalper_pro_is2025"
study = optuna.load_study(study_name=name, storage=f"sqlite:///{db}")
completed = [t for t in study.trials if t.state.name == "COMPLETE"]
passing = [t for t in completed if not t.user_attrs.get("violations")]
print(f"=== study: {name} ===")
print(f" total trials : {len(study.trials)}")
print(f" completed : {len(completed)}")
print(f" constraint-pass : {len(passing)}")
if not passing:
# Show the best by value anyway.
best = max(completed, key=lambda t: t.value)
print(f"\n no constraint-passing trials; best-by-value:")
_print_trial(best, "best-by-value")
return 1
print(f"\n === best (by score) ===")
_print_trial(study.best_trial, "best")
print(f"\n === diverse top-3 finalists ===")
finalists = select_diverse_topn(study, n=3, ranges=SEARCH_SPACE)
for i, t in enumerate(finalists, 1):
_print_trial(t, f"finalist #{i}")
return 0
def _print_trial(t, label: str) -> None:
a = t.user_attrs
print(f" [{label}] trial #{t.number} score={t.value:.2f}")
print(f" net={a['net_profit']:.2f} PF={a['profit_factor']:.2f} "
f"trades={a['total_trades']} DD%={a['max_equity_dd_pct']:.2%} "
f"sharpe={a['sharpe']:.2f}")
if a.get("violations"):
print(f" violations: {a['violations']}")
print(f" params:")
for k, v in t.params.items():
print(f" {k:24s}={v}")
if __name__ == "__main__":
raise SystemExit(main())
+233
View File
@@ -0,0 +1,233 @@
"""Phase 6 — Optuna optimization for GoldScalperPro (doc 06).
Two modes via CLI flags:
--smoke 30 trials, IS = 2025 H1 only (~6 months). Validates the
objective + storage + scoring end-to-end in <2 min before
committing to the full study. Run this first, always.
(default) 500 trials, IS = 2025 full year (with a 2-week purge gap
before year-end so OOS walk-forward is leak-free). TPE
sampler, SQLite-persisted so the study resumes/inspects
mid-run. Runs in the foreground with progress bar; for a
long run launch with `start /b python scripts\\optimize.py`
(Windows) and poll the .db file separately.
Why M1 bars are mandatory here (doc 03 §7 / §8, CLAUDE.md standing rule):
GoldScalperPro uses break-even + trailing stops, so the bar-level engine
produces a 40% to 50% hidden gap vs MT5. The objective passes ``m1_bars``
to ``engine.run`` so the engine switches to tick-level exit simulation.
Window design (doc 06 §4 walk-forward):
IS = 2025-01-01 00:00 → 2025-12-15 00:00 (exclusive end, ~11.5 months)
purge = 2025-12-15 .. 2025-12-31 (2-week gap, no trades counted either side)
OOS = 2026-01-01 00:00 → 2026-07-01 00:00 (~6 months, fixed finalist params)
Constraints (user-confirmed "strict" preset):
min_trades=40, min_profit_factor=1.5, max_equity_dd_pct=0.25
"""
from __future__ import annotations
import argparse
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import optuna
import pandas as pd
from shared.core.engine import SizingInputs
from shared.optimizer.objective import (
Constraints,
ObjectiveConfig,
build_objective,
)
from shared.optimizer.selector import select_diverse_topn
from strategies.gold_scalper_pro.instruments import XAUUSD_REAL
from strategies.gold_scalper_pro.scalper_engine import ScalperEngine
from strategies.gold_scalper_pro.search_space import (
FROZEN_BASELINE,
INT_PARAMS,
SEARCH_SPACE,
)
from strategies.gold_scalper_pro.signals import build_signals
from strategies.gold_scalper_pro.scalper_engine import engine_kwargs_from_params
# ── Windows ────────────────────────────────────────────────────────────────
IS_START = pd.Timestamp("2025-01-01 00:00:00")
IS_END = pd.Timestamp("2025-12-15 00:00:00") # exclusive end (purge after)
OOS_START = pd.Timestamp("2026-01-01 00:00:00")
OOS_END = pd.Timestamp("2026-07-01 00:00:00") # exclusive end
INITIAL_DEPOSIT = 1000.0
SEED = 42
def slice_window(df: pd.DataFrame, start: pd.Timestamp, end: pd.Timestamp) -> pd.DataFrame:
"""Slice bars to [start, end) — exclusive end matches MT5 tester semantics."""
return df[(df["timestamp"] >= start) & (df["timestamp"] < end)].reset_index(drop=True)
def make_objective_config(
bars_is: pd.DataFrame,
m1_is: pd.DataFrame,
full_m5: pd.DataFrame,
) -> ObjectiveConfig:
"""Assemble the ObjectiveConfig for the IS window.
``bars_is`` / ``m1_is`` are trimmed to the IS evaluation window — the
engine runs on these (initial_deposit reset, no open position at IS_START,
matching MT5 Strategy Tester).
``full_m5`` is the FULL M5 history (data starts 2024-06-26 → ~6 months of
pre-IS warmup, well beyond EMA(160)'s ~14h requirement). It is passed as
``signals_full_bars`` so the objective builds signals on it, then slices
the signal arrays to ``bars_is``' time range — mirroring MT5 tester's
pre-test chart-history indicator warmup. Without this, EMA/RSI/ATR would
only start warming up at IS_START and the first Python trade would land
~14h late vs MT5 (the original warmup bug — see reeval_finalist_forward.py
docstring).
"""
constraints = Constraints(
min_trades=40,
min_profit_factor=1.5,
max_equity_dd_pct=0.25,
)
return ObjectiveConfig(
engine=ScalperEngine(),
bars=bars_is,
instrument=XAUUSD_REAL,
sizing=SizingInputs(),
initial_deposit=INITIAL_DEPOSIT,
search_space=SEARCH_SPACE,
int_params=INT_PARAMS,
frozen_baseline=FROZEN_BASELINE,
constraints=constraints,
dd_weight=1.0,
build_signals=build_signals,
build_engine_kwargs=engine_kwargs_from_params,
m1_bars=m1_is, # mandatory for trailing/BE EA
signals_full_bars=full_m5, # indicator warmup (doc 03 §8)
)
def run_smoke() -> int:
"""30 trials, IS H1 2025 only. Validates the script end-to-end."""
print("=== Phase 6 SMOKE TEST ===")
m5 = load_m5()
m1 = load_m1()
# Shorter IS window for the smoke run.
bars_is = slice_window(m5, pd.Timestamp("2025-01-01"), pd.Timestamp("2025-07-01"))
m1_is = slice_window(m1, pd.Timestamp("2025-01-01"), pd.Timestamp("2025-07-01"))
print(f" IS bars : {len(bars_is):,} M1 bars: {len(m1_is):,}")
print(f" warmup : {len(m5):,} full M5 bars (signals_full_bars)")
cfg = make_objective_config(bars_is, m1_is, full_m5=m5)
objective = build_objective(cfg)
study = optuna.create_study(
direction="maximize",
sampler=optuna.samplers.TPESampler(seed=SEED),
)
print(" running 30 trials ...")
study.optimize(objective, n_trials=30, show_progress_bar=False)
print(f" done. best value = {study.best_value:.2f}")
print(f" best params: {study.best_params}")
print(f" best attrs : net={study.best_trial.user_attrs['net_profit']:.2f}, "
f"PF={study.best_trial.user_attrs['profit_factor']:.2f}, "
f"trades={study.best_trial.user_attrs['total_trades']}, "
f"DD%={study.best_trial.user_attrs['max_equity_dd_pct']:.2%}")
return 0
def run_full(study_db: Path, n_trials: int) -> int:
"""Full study, IS = 2025 (with 2-week purge). SQLite-persisted."""
print(f"=== Phase 6 FULL STUDY ({n_trials} trials) ===")
m5 = load_m5()
m1 = load_m1()
bars_is = slice_window(m5, IS_START, IS_END)
m1_is = slice_window(m1, IS_START, IS_END)
print(f" IS window: {IS_START.date()}{IS_END.date()} (exclusive)")
print(f" IS bars : {len(bars_is):,} M1 bars: {len(m1_is):,}")
print(f" warmup : {len(m5):,} full M5 bars (signals_full_bars)")
cfg = make_objective_config(bars_is, m1_is, full_m5=m5)
objective = build_objective(cfg)
study_db.parent.mkdir(parents=True, exist_ok=True)
storage = f"sqlite:///{study_db}"
study = optuna.create_study(
direction="maximize",
sampler=optuna.samplers.TPESampler(seed=SEED),
storage=storage,
study_name="gold_scalper_pro_is2025",
load_if_exists=True,
)
n_existing = len([t for t in study.trials if t.state.name == "COMPLETE"])
if n_existing > 0:
print(f" resumed existing study: {n_existing} complete trials so far")
print(f" running {n_trials} trials (foreground; Ctrl+C to stop — study is saved) ...")
study.optimize(objective, n_trials=n_trials, show_progress_bar=True)
print(f"\n === best trial ===")
print(f" value = {study.best_value:.2f}")
print(f" params:")
for k, v in study.best_params.items():
print(f" {k:24s} = {v}")
a = study.best_trial.user_attrs
print(f" metrics: net={a['net_profit']:.2f}, PF={a['profit_factor']:.2f}, "
f"trades={a['total_trades']}, DD%={a['max_equity_dd_pct']:.2%}")
if a.get("violations"):
print(f" violations: {a['violations']}")
# Diverse top-3 finalists (doc 06 §3).
print(f"\n === diverse top-3 finalists ===")
finalists = select_diverse_topn(study, n=3, ranges=SEARCH_SPACE)
if not finalists:
print(" no constraint-passing trials found.")
return 1
for i, t in enumerate(finalists, 1):
d = t.user_attrs
print(f" finalist #{i}: trial #{t.number} value={t.value:.2f}")
print(f" net={d['net_profit']:.2f}, PF={d['profit_factor']:.2f}, "
f"trades={d['total_trades']}, DD%={d['max_equity_dd_pct']:.2%}")
print(f" params: {t.params}")
print(f"\n study DB: {study_db}")
return 0
def load_m5() -> pd.DataFrame:
from shared.data.loaders import load_bars
p = PROJECT / "data" / "XAUUSD_M5_2024-06-26_2026-06-26.parquet"
if not p.exists():
sys.exit(f"missing M5 data: {p}")
return load_bars(p)
def load_m1() -> pd.DataFrame:
from shared.data.loaders import load_bars
p = PROJECT / "data" / "XAUUSD_M1_2024-06-26_2026-06-26.parquet"
if not p.exists():
sys.exit(f"missing M1 data: {p} — run scripts/download_xauusd_m1.py first")
return load_bars(p)
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument("--smoke", action="store_true",
help="30 trials on IS H1 2025; validate the script end-to-end")
ap.add_argument("--trials", type=int, default=500,
help="trial budget for the full study (default 500)")
ap.add_argument("--db", type=Path,
default=PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db",
help="SQLite path for the full study (resumable)")
args = ap.parse_args()
if args.smoke:
return run_smoke()
return run_full(args.db, args.trials)
if __name__ == "__main__":
raise SystemExit(main())
+119
View File
@@ -0,0 +1,119 @@
"""Phase 7 — Prepare finalist #1 for MT5 verification (doc 07, doc 08 step 6).
Reads the Optuna finalist from the study DB, generates a .set file in MT5's
tester profile directory, and prints the exact Strategy Tester settings for
the FORWARD test mode (one run produces both IS + OOS segments).
MT5 forward mode: set the whole window + a forward start date. MT5 splits:
history (IS) = FromDate → Forward start
forward (OOS) = Forward start → ToDate
After the user runs the tester and exports the forward HTML report, run
scripts/compare_finalist.py to print the Python-vs-MT5 table for both segments.
Usage:
python scripts/prepare_mt5_verify.py # finalist #1 (best by score)
python scripts/prepare_mt5_verify.py 2 # finalist #2
"""
from __future__ import annotations
import json
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import optuna
from shared.optimizer.selector import select_diverse_topn
from shared.mt5_pipeline.set_gen import write_set_file
from strategies.gold_scalper_pro.search_space import (
FROZEN_BASELINE,
SEARCH_SPACE,
)
from strategies.gold_scalper_pro.set_mappings import GOLD_SCALPER_MAPPINGS
# Windows where MT5's tester profiles live (terminal data path).
MT5_TESTER_DIR = Path(r"C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal"
r"\010E047102812FC0C18890992854220E\MQL5\Profiles\Tester")
# Forward-mode window: one run produces IS (12 mo) + OOS (~6 mo).
# Data ends 2026-06-25 23:55; ToDate is exclusive day boundary so 2026.06.26
# picks up the last bar at 2026-06-25 23:55.
FROM_DATE = "2025.01.01" # whole-window start
TO_DATE = "2026.06.26" # whole-window end (exclusive day boundary)
FORWARD_DATE = "2026.01.01" # forward start: IS|OOS split point
INITIAL_DEPOSIT = 1000.0
def main() -> int:
finalist_idx = int(sys.argv[1]) if len(sys.argv) > 1 else 1
if finalist_idx < 1 or finalist_idx > 3:
sys.exit("finalist index must be 1, 2, or 3")
db = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
study = optuna.load_study(
study_name="gold_scalper_pro_is2025",
storage=f"sqlite:///{db}",
)
finalists = select_diverse_topn(study, n=3, ranges=SEARCH_SPACE)
if len(finalists) < finalist_idx:
sys.exit(f"only {len(finalists)} finalists available")
t = finalists[finalist_idx - 1]
merged = {**FROZEN_BASELINE, **t.params}
# Pull the MT5-forward-aligned Python metrics (saved by reeval_finalist_forward.py).
fwd_json = PROJECT / "studies" / "finalists" / "gold_scalper_pro_is2025-2026.json"
if fwd_json.exists():
fwd = json.loads(fwd_json.read_text(encoding="utf-8"))
py_is = fwd["finalists"][finalist_idx - 1]["IS"]
py_oos = fwd["finalists"][finalist_idx - 1]["OOS"]
else:
py_is = py_oos = None
print(f"=== finalist #{finalist_idx} (trial #{t.number}) ===")
if py_is:
print(f" Python IS (12 mo) : net={py_is['net']:.2f} PF={py_is['PF']:.2f} "
f"trades={py_is['trades']} DD%={py_is['DD%']:.2%}")
print(f" Python OOS (6 mo) : net={py_oos['net']:.2f} PF={py_oos['PF']:.2f} "
f"trades={py_oos['trades']} DD%={py_oos['DD%']:.2%}")
else:
print(f" (run scripts/reeval_finalist_forward.py first to get Python metrics)")
# Write the .set to MT5's tester profile dir.
set_name = f"GoldScalperPro_finalist{finalist_idx}_trial{t.number}.set"
set_path = MT5_TESTER_DIR / set_name
write_set_file(merged, GOLD_SCALPER_MAPPINGS, set_path)
print(f"\n .set written to: {set_path}")
print(f"\n === MT5 Strategy Tester setup (FORWARD mode, ONE run) ===")
print(f" 1. Open MT5 → Ctrl+R (Strategy Tester)")
print(f" 2. Expert: GoldScalperPro")
print(f" 3. Symbol: XAUUSD")
print(f" 4. Period: M5 (chart timeframe, must match InpTimeframe)")
print(f" 5. Model: Every tick (based on real ticks) [doc 07 §2b: path-sensitive → real ticks]")
print(f" 6. Deposit: {INITIAL_DEPOSIT:.0f} USD")
print(f" 7. Leverage: 1:100")
print(f" 8. Date range:")
print(f" From: {FROM_DATE}")
print(f" To: {TO_DATE}")
print(f" 9. Forward: Custom date → {FORWARD_DATE}")
print(f" (this splits IS={FROM_DATE}..{FORWARD_DATE} | OOS={FORWARD_DATE}..{TO_DATE})")
print(f" 10. Click 'Inputs' tab → 'Load' → select: {set_name}")
print(f" (verify InpRiskPercent={merged['InpRiskPercent']}, "
f"InpAtrPeriod={merged['InpAtrPeriod']}, "
f"InpFastEmaPeriod={merged['InpFastEmaPeriod']}, "
f"InpSlowEmaPeriod={merged['InpSlowEmaPeriod']})")
print(f" 11. Click Start. The forward HTML report has TWO sections:")
print(f" - 'Backtest' (top) = IS ({FROM_DATE}..{FORWARD_DATE})")
print(f" - 'Forward' (bottom) = OOS ({FORWARD_DATE}..{TO_DATE}, ~6 mo of data)")
print(f" 12. Right-click the report → 'Save as Report' → save to:")
print(f" reports/ReportTester_forward_finalist{finalist_idx}.html")
print(f"\n When the HTML is saved, run:")
print(f" python scripts/compare_finalist.py {finalist_idx}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+154
View File
@@ -0,0 +1,154 @@
"""Re-evaluate finalist #1 on the MT5-forward-aligned window.
MT5 forward mode (FromDate=2025.01.01, ToDate=2026.06.26, Forward=2026.01.01)
produces two segments:
IS = 2025-01-01 → 2026-01-01 (12 months)
OOS = 2026-01-01 → 2026-06-26 (~6 months, data ends 2026-06-25 23:55)
INDICATOR WARMUP (matches MT5 tester behaviour): MT5's Strategy Tester uses
pre-test chart history to warm up indicators — EMA(160) on M5 needs ~14 hours
of bars before it produces a value, but MT5's first 2025-01-02 trade fires at
01:55 because the indicator was already stable on 2024 data. The previous
version of this script sliced bars to [IS_START, IS_END) BEFORE computing
signals, so indicators didn't stabilise until ~14 hours into 2025-01-01 and
the first Python trade landed at 15:50 — 14 hours late vs MT5.
Fix: compute signals on the FULL bars (data starts 2024-06-26 → ~6 months of
warmup, well beyond EMA(160)'s 14-hour requirement), then trim the bars +
signal arrays + M1 to the evaluation window before running the engine. The
engine therefore starts fresh at IS_START (initial_deposit, no open position)
exactly like MT5's tester, but sees indicators that are already stable.
Outputs the metrics dict that compare_finalist.py will pick up.
"""
from __future__ import annotations
import json
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import optuna
import pandas as pd
from shared.core.engine import SizingInputs
from shared.core.metrics import compute_metrics
from shared.data.loaders import load_bars
from shared.optimizer.selector import select_diverse_topn
from strategies.gold_scalper_pro.instruments import XAUUSD_REAL
from strategies.gold_scalper_pro.scalper_engine import (
ScalperEngine,
engine_kwargs_from_params,
)
from strategies.gold_scalper_pro.search_space import FROZEN_BASELINE, SEARCH_SPACE
from strategies.gold_scalper_pro.signals import build_signals
# MT5-forward-aligned windows (ToDate is exclusive in MT5 tester's day boundary).
IS_START = pd.Timestamp("2025-01-01 00:00:00")
IS_END = pd.Timestamp("2026-01-01 00:00:00") # forward start
OOS_START = pd.Timestamp("2026-01-01 00:00:00")
OOS_END = pd.Timestamp("2026-06-26 00:00:00") # data ends 2026-06-25 23:55
INITIAL_DEPOSIT = 1000.0
def run_with_warmup(params, full_bars, full_m1, win_start, win_end):
"""Compute signals on FULL bars (with pre-window warmup) and run the
engine on the trimmed [win_start, win_end) slice only.
Mirrors MT5 Strategy Tester: indicator buffers are pre-warmed on history
before the test start, but the engine/equity starts fresh at win_start.
"""
pack = build_signals(params, full_bars, XAUUSD_REAL)
ts = pd.to_datetime(full_bars["timestamp"].to_numpy())
lo = int(ts.searchsorted(win_start, side="left"))
hi = int(ts.searchsorted(win_end, side="left"))
win_bars = full_bars.iloc[lo:hi].reset_index(drop=True)
sig_long = pack.signals_long[lo:hi]
sig_short = pack.signals_short[lo:hi]
sl_p = pack.sl_prices[lo:hi]
tp_p = pack.tp_prices[lo:hi]
if full_m1 is not None and len(full_m1) > 0:
m1_ts = pd.to_datetime(full_m1["timestamp"].to_numpy())
m1_lo = int(m1_ts.searchsorted(win_start, side="left"))
m1_hi = int(m1_ts.searchsorted(win_end, side="left"))
win_m1 = full_m1.iloc[m1_lo:m1_hi].reset_index(drop=True)
else:
win_m1 = None
engine = ScalperEngine()
result = engine.run(
win_bars, sig_long, sig_short, sl_p, tp_p,
XAUUSD_REAL, SizingInputs(), INITIAL_DEPOSIT,
m1_bars=win_m1,
**engine_kwargs_from_params(params),
)
m = compute_metrics(result, periods_per_year=252 * 24 * 12)
return {
"net": round(m.net_profit, 2),
"PF": round(m.profit_factor, 4),
"trades": m.total_trades,
"DD%": round(m.max_equity_dd_pct, 6),
"sharpe": round(m.sharpe, 4),
"win_rate": round(m.win_rate, 4),
"first_trade_ts": (
result.trades[0].entry_time.isoformat() if result.trades else None
),
}
def main() -> int:
db = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
study = optuna.load_study(
study_name="gold_scalper_pro_is2025",
storage=f"sqlite:///{db}",
)
finalists = select_diverse_topn(study, n=3, ranges=SEARCH_SPACE)
if not finalists:
sys.exit("no finalists")
print("loading bars (full history, used as indicator warmup) ...")
full_m5 = load_bars(PROJECT / "data" / "XAUUSD_M5_2024-06-26_2026-06-26.parquet")
full_m1 = load_bars(PROJECT / "data" / "XAUUSD_M1_2024-06-26_2026-06-26.parquet")
print(f" full M5: {len(full_m5):,} bars full M1: {len(full_m1):,} bars")
print(f" IS : {IS_START.date()}{IS_END.date()} (12 months, MT5 forward-aligned)")
print(f" OOS : {OOS_START.date()}{OOS_END.date()} (~6 months, data ends 2026-06-25)")
print(f" warmup window: {full_m5['timestamp'].min()}{IS_START} "
f"(~6 months, EMA(160) needs ~14h so this is plenty)")
out = {"windows": {"IS": [str(IS_START), str(IS_END)],
"OOS": [str(OOS_START), str(OOS_END)]},
"finalists": []}
for i, t in enumerate(finalists, 1):
merged = {**FROZEN_BASELINE, **t.params}
print(f"\n--- finalist #{i} (trial #{t.number}) ---")
is_m = run_with_warmup(merged, full_m5, full_m1, IS_START, IS_END)
oos_m = run_with_warmup(merged, full_m5, full_m1, OOS_START, OOS_END)
print(f" IS : net={is_m['net']:.2f} PF={is_m['PF']:.2f} "
f"trades={is_m['trades']} DD%={is_m['DD%']:.2%} "
f"first={is_m['first_trade_ts']}")
print(f" OOS : net={oos_m['net']:.2f} PF={oos_m['PF']:.2f} "
f"trades={oos_m['trades']} DD%={oos_m['DD%']:.2%} "
f"first={oos_m['first_trade_ts']}")
out["finalists"].append({
"index": i,
"trial_number": t.number,
"score": round(t.value, 2),
"params": t.params,
"merged_params": merged,
"IS": is_m,
"OOS": oos_m,
})
out_path = PROJECT / "studies" / "finalists" / "gold_scalper_pro_is2025-2026.json"
out_path.write_text(json.dumps(out, indent=2, default=str), encoding="utf-8")
print(f"\n saved: {out_path}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+132
View File
@@ -0,0 +1,132 @@
"""Walk-forward OOS evaluation of the Optuna finalists (doc 06 §4).
The 3 diverse finalists were selected on the IS window (2025-01-01 → 2025-12-15,
2-week purge after). This script runs each finalist's FIXED params on the OOS
window (2026-01-01 → 2026-07-01) and compares:
OOS metric / IS metric
A robust finalist keeps most of its edge out-of-sample. A fragile one keeps
its edge only in IS — typically trade-count collapses or PF falls below 1.
Also runs the IS numbers with the same fixed params so the ratio is computed
on identical configurations (the study's stored metrics are valid but we
recompute here for the same OOS script path / instrument).
OOS uses the same M1 tick-level exit simulation (mandatory for trailing/BE).
"""
from __future__ import annotations
import sys
from pathlib import Path
PROJECT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(PROJECT))
import optuna
import pandas as pd
from shared.core.engine import SizingInputs
from shared.core.metrics import compute_metrics
from shared.data.loaders import load_bars
from shared.optimizer.selector import select_diverse_topn
from strategies.gold_scalper_pro.instruments import XAUUSD_REAL
from strategies.gold_scalper_pro.scalper_engine import (
ScalperEngine,
engine_kwargs_from_params,
)
from strategies.gold_scalper_pro.search_space import (
FROZEN_BASELINE,
SEARCH_SPACE,
)
from strategies.gold_scalper_pro.signals import build_signals
IS_START = pd.Timestamp("2025-01-01 00:00:00")
IS_END = pd.Timestamp("2025-12-15 00:00:00")
OOS_START = pd.Timestamp("2026-01-01 00:00:00")
OOS_END = pd.Timestamp("2026-07-01 00:00:00")
INITIAL_DEPOSIT = 1000.0
def slice_window(df: pd.DataFrame, start: pd.Timestamp, end: pd.Timestamp) -> pd.DataFrame:
return df[(df["timestamp"] >= start) & (df["timestamp"] < end)].reset_index(drop=True)
def run_with_params(params: dict, bars: pd.DataFrame, m1: pd.DataFrame) -> dict:
"""Run the engine with FIXED params on a window, return metrics dict."""
pack = build_signals(params, bars, XAUUSD_REAL)
engine = ScalperEngine()
result = engine.run(
bars, pack.signals_long, pack.signals_short,
pack.sl_prices, pack.tp_prices,
XAUUSD_REAL, SizingInputs(), INITIAL_DEPOSIT,
m1_bars=m1,
**engine_kwargs_from_params(params),
)
m = compute_metrics(result, periods_per_year=252 * 24 * 12)
return {
"net": m.net_profit,
"PF": m.profit_factor,
"trades": m.total_trades,
"DD%": m.max_equity_dd_pct,
"sharpe": m.sharpe,
"win_rate": m.win_rate,
}
def main() -> int:
db = PROJECT / "studies" / "optuna" / "gold_scalper_pro_is2025.db"
study = optuna.load_study(
study_name="gold_scalper_pro_is2025",
storage=f"sqlite:///{db}",
)
finalists = select_diverse_topn(study, n=3, ranges=SEARCH_SPACE)
if not finalists:
print("no constraint-passing finalists to walk-forward.")
return 1
print("loading bars ...")
m5 = load_bars(PROJECT / "data" / "XAUUSD_M5_2024-06-26_2026-06-26.parquet")
m1 = load_bars(PROJECT / "data" / "XAUUSD_M1_2024-06-26_2026-06-26.parquet")
is_bars = slice_window(m5, IS_START, IS_END)
is_m1 = slice_window(m1, IS_START, IS_END)
oos_bars = slice_window(m5, OOS_START, OOS_END)
oos_m1 = slice_window(m1, OOS_START, OOS_END)
print(f" IS bars : {len(is_bars):,} IS M1 : {len(is_m1):,}")
print(f" OOS bars: {len(oos_bars):,} OOS M1: {len(oos_m1):,}")
print(f" IS window : {IS_START.date()}{IS_END.date()} (11.5 months)")
print(f" OOS window: {OOS_START.date()}{OOS_END.date()} (6 months)")
print(f"\n{'='*100}")
print(f"{'metric':12s} {'IS':>14s} {'OOS':>14s} {'OOS/IS':>10s} notes")
print(f"{'-'*100}")
for i, t in enumerate(finalists, 1):
merged = {**FROZEN_BASELINE, **t.params}
print(f"\n--- finalist #{i} trial #{t.number} score={t.value:.2f} ---")
is_m = run_with_params(merged, is_bars, is_m1)
oos_m = run_with_params(merged, oos_bars, oos_m1)
_print_row("net", is_m["net"], oos_m["net"], ratio=oos_m["net"]/is_m["net"] if is_m["net"] != 0 else None)
_print_row("PF", is_m["PF"], oos_m["PF"], ratio=oos_m["PF"]/is_m["PF"] if is_m["PF"] != 0 else None)
_print_row("trades", is_m["trades"], oos_m["trades"], ratio=oos_m["trades"]/is_m["trades"] if is_m["trades"] else None)
_print_row("DD%", is_m["DD%"], oos_m["DD%"], ratio=oos_m["DD%"]/is_m["DD%"] if is_m["DD%"] else None)
_print_row("sharpe", is_m["sharpe"], oos_m["sharpe"], ratio=oos_m["sharpe"]/is_m["sharpe"] if is_m["sharpe"] else None)
_print_row("win_rate", is_m["win_rate"], oos_m["win_rate"], ratio=oos_m["win_rate"]/is_m["win_rate"] if is_m["win_rate"] else None)
print(f"\n{'='*100}")
print("interpretation (doc 06 §4 walk-forward):")
print(" OOS/IS ≥ ~0.6 on net and PF → edge holds out-of-sample (robust)")
print(" OOS/IS < ~0.5 on PF, or OOS PF < 1.0 → fragile; IS-only edge")
print(" trade-count ratio drops sharply → signal degraded in the new regime")
return 0
def _print_row(label: str, is_v: float, oos_v: float, *, ratio: float | None) -> None:
if ratio is None:
r = " n/a"
else:
r = f" {ratio:6.2f}"
print(f"{label:12s} {is_v:14.2f} {oos_v:14.2f} {r:>10s}")
if __name__ == "__main__":
raise SystemExit(main())
+4 -1
View File
@@ -17,6 +17,9 @@ from pathlib import Path
from typing import Any, Mapping
SET_FILE_ENCODING = "utf-16-le"
# MT5's Strategy Tester silently ignores .set files without a UTF-16-LE BOM.
# Python's "utf-16-le" codec does NOT emit a BOM, so prepend one explicitly.
UTF16_LE_BOM = b"\xff\xfe"
@dataclass
@@ -68,4 +71,4 @@ def write_set_file(
if extra_lines:
lines.extend(extra_lines)
text = "\n".join(lines) + "\n"
out.write_bytes(text.encode(SET_FILE_ENCODING))
out.write_bytes(UTF16_LE_BOM + text.encode(SET_FILE_ENCODING))
+48 -5
View File
@@ -77,6 +77,20 @@ class ObjectiveConfig:
# strategy pipe tunable point values into its engine without the optimizer
# knowing about strategy-specific config objects. None → no extra kwargs.
build_engine_kwargs: Optional[Callable[[dict], dict]] = None
# M1 bars for tick-level exit simulation. MANDATORY if the EA moves its
# SL intra-trade (break-even / trailing / basket trailing) — bar-level
# exit simulation produces a 40% to 50% net gap on those EAs (doc 03 §7
# measured failure mode). Leave None only for clean-directional setups
# that don't move the SL. The bars must cover the same window as ``bars``.
m1_bars: Optional[pd.DataFrame] = None
# Indicator-warmup bars (doc 03 §8 / reeval_finalist_forward.py pattern).
# When set, the objective builds signals on this FULL history (so EMA/RSI/
# ATR are already stable before the eval window starts — matching MT5
# Strategy Tester's pre-test chart-history warmup), then slices the signal
# arrays to ``bars``' time range before running the engine. Must be a
# contiguous superset of ``bars`` (same OHLC source, same timestamps).
# Leave None to build signals directly on ``bars`` (legacy behaviour).
signals_full_bars: Optional[pd.DataFrame] = None
@dataclass
@@ -141,14 +155,43 @@ def build_objective(cfg: ObjectiveConfig):
def objective(trial) -> float:
sampled = suggest_params(trial, cfg.search_space, cfg.int_params)
merged = {**cfg.frozen_baseline, **sampled}
pack = cfg.build_signals(merged, cfg.bars, cfg.instrument)
if cfg.signals_full_bars is not None:
# Warmup mode (doc 03 §8 / reeval_finalist_forward.py pattern):
# build signals on the FULL bars so indicators are already stable
# at the eval window start — mirrors MT5 Strategy Tester's pre-test
# chart-history warmup. Then slice the signal arrays to cfg.bars'
# time range. cfg.bars must be a contiguous sub-range of
# signals_full_bars (same OHLC source, same timestamps).
pack = cfg.build_signals(merged, cfg.signals_full_bars, cfg.instrument)
eval_start = pd.Timestamp(cfg.bars["timestamp"].iloc[0])
full_ts = pd.to_datetime(cfg.signals_full_bars["timestamp"].to_numpy())
lo = int(full_ts.searchsorted(eval_start, side="left"))
hi = lo + len(cfg.bars)
sig_long = pack.signals_long[lo:hi]
sig_short = pack.signals_short[lo:hi]
sl_p = pack.sl_prices[lo:hi]
tp_p = pack.tp_prices[lo:hi]
else:
# Legacy mode: build signals directly on the (already-trimmed)
# cfg.bars. Indicators warm up at the eval window start — fine for
# short-period indicators but produces ~14h of EMA-stabilization
# noise at the start of long-period EMA strategies.
pack = cfg.build_signals(merged, cfg.bars, cfg.instrument)
sig_long = pack.signals_long
sig_short = pack.signals_short
sl_p = pack.sl_prices
tp_p = pack.tp_prices
extra = cfg.build_engine_kwargs(merged) if cfg.build_engine_kwargs else {}
# If M1 bars are wired up, pass them so the engine switches to tick-
# level exit simulation (mandatory for trailing/BE EAs — doc 03 §7).
if cfg.m1_bars is not None:
extra = {**extra, "m1_bars": cfg.m1_bars}
result = cfg.engine.run(
cfg.bars,
pack.signals_long,
pack.signals_short,
pack.sl_prices,
pack.tp_prices,
sig_long,
sig_short,
sl_p,
tp_p,
cfg.instrument,
cfg.sizing,
cfg.initial_deposit,
+12 -1
View File
@@ -198,7 +198,18 @@ class ScalperEngine:
sl = sl_prices[i] if not np.isnan(sl_prices[i]) else 0.0
tp = tp_prices[i] if not np.isnan(tp_prices[i]) else 0.0
lots = self._calc_lots(cfg, instrument, sl, equity)
# _calc_lots expects the SL *distance* (price units), not the
# SL price level. signals.py sets sl_prices[i] = close[i] ±
# sl_dist[i] (where sl_dist[i] = InpAtrSLMult × ATR[i]), so
# |close[i] - sl_prices[i]| recovers exactly sl_dist[i] — the
# same distance MT5 uses for sizing (it does NOT include the
# gap between signal-bar close and next-bar fill). Using
# fill_price here instead made sl_distance vary with the
# open-gap, sometimes bigger, sometimes smaller than MT5's
# value, which made lots inconsistent and the equity curve
# diverge exponentially from MT5 under risk% compounding.
sl_distance = abs(closes[i] - sl) if sl > 0 else 0.0
lots = self._calc_lots(cfg, instrument, sl_distance, equity)
if lots > 0:
open_pos = Position(
direction=direction,
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,501 @@
trial_number,state,InpFastEmaPeriod,InpSlowEmaPeriod,InpRsiPeriod,InpRsiBuyLevel,InpRsiSellLevel,InpPullbackAtrMult,InpAtrPeriod,InpMaxSpreadAtrPct,InpRiskPercent,InpAtrSLMult,InpAtrTPMult,InpBreakEvenPoints,InpBreakEvenLock,InpTrailStartPoints,InpTrailStepPoints,InpMaxTradesPerDay,InpDailyLossLimit,InpMinSecondsBetween,score,net_profit,profit_factor,total_trades,max_equity_dd,max_equity_dd_pct,win_rate,sharpe,is_finalist,finalist_rank,error_message
0,COMPLETE,18,195,23,42.0,53.0,1.4,8,45.0,2.0,2.4000000000000004,1.0,300.0,45,160.0,90.0,4,3.5,105,-999913.25192,162.55808000000607,1.193997279041466,712,75.80999999999858,0.06512729486731807,0.8202247191011236,0.10604606920464812,False,,
1,COMPLETE,19,95,20,32.0,56.0,2.1,17,42.5,0.75,2.0,2.8,60.0,35,150.0,70.0,12,8.0,150,131.69807999999412,149.85807999999625,1.935233764006505,308,18.160000000002128,0.015649936700489194,0.8928571428571429,0.19978627764213283,False,,
2,COMPLETE,16,65,22,39.0,52.0,2.5,7,47.5,1.0,2.3,1.9,180.0,30,150.0,240.0,10,8.0,165,-999903.8878799999,155.44212000001232,1.2830440292800405,515,59.3299999999972,0.05094881235595912,0.7242718446601941,0.10964086994385229,False,,
3,COMPLETE,24,190,8,34.0,50.0,2.0,15,20.0,2.5,1.7000000000000002,1.8,190.0,15,340.0,70.0,12,7.0,60,-999496.29226,634.7136999999906,1.216688257186548,2197,131.00595999999587,0.07920296662677688,0.7073281747837961,0.2063588394781333,False,,
4,COMPLETE,8,175,22,45.0,66.0,1.2,14,12.5,2.75,2.3,2.0,60.0,20,200.0,190.0,9,7.5,105,-999847.21438,186.40561999999684,1.470882528001121,689,33.61999999999989,0.02833769448934335,0.8911465892597968,0.16812890249915946,False,,
5,COMPLETE,11,160,23,41.0,66.0,2.5,18,27.5,0.25,1.2,1.0,210.0,20,250.0,230.0,5,4.5,150,-1000090.73,-30.630000000002383,0.9011776092918138,238,60.099999999999454,0.059941753770046645,0.592436974789916,-0.04019337119482629,False,,
6,COMPLETE,14,60,13,33.0,69.0,3.5,20,45.0,2.5,1.3,3.7,190.0,45,370.0,120.0,4,3.0,90,-2000004.88,4.559999999999491,1.3857868020304085,9,9.44000000000051,0.009309664694280581,0.6666666666666666,0.025470874656886095,False,,
7,COMPLETE,30,180,7,40.0,58.0,1.6,9,22.5,3.0,1.6,2.6,230.0,25,400.0,240.0,5,5.0,75,-1000003.92,118.25000000000045,1.0663211795915852,1229,122.17000000000053,0.10221207101383842,0.6200162733930025,0.05630799229441728,False,,
8,COMPLETE,15,55,20,40.0,51.0,1.8,26,20.0,0.5,2.0,4.0,110.0,40,330.0,100.0,10,4.0,120,-999911.17576,145.6742400000023,1.189474755418587,760,56.85000000000082,0.049106230329003554,0.8184210526315789,0.0933763414710417,False,,
9,COMPLETE,25,130,8,47.0,56.0,1.5,7,35.0,2.25,1.0,2.5,100.0,35,150.0,190.0,6,8.0,45,-999834.1,219.59999999998809,1.194786187565961,1476,53.70000000000255,0.04316477368637055,0.6734417344173442,0.14962123988569,False,,
10,COMPLETE,33,105,28,30.0,61.0,3.8000000000000003,28,35.0,1.5,3.0,3.2,290.0,10,260.0,140.0,7,2.0,30,-2000013.0,-3.960000000000491,0.46195652173907303,2,9.039999999999964,0.008994308910733443,0.5,-0.027966495848517944,False,,
11,COMPLETE,23,105,14,35.0,57.0,2.3,15,10.0,1.5,1.7000000000000002,1.7000000000000002,140.0,10,100.0,60.0,12,6.5,180,-999827.48596,206.95404000000138,1.3562399559334906,713,34.43999999999869,0.028253963159784356,0.820476858345021,0.17886521433115532,False,,
12,COMPLETE,22,135,14,35.0,50.0,3.0,21,35.0,1.0,1.8,2.9000000000000004,50.0,50,300.0,60.0,12,6.5,135,462.65808000000914,499.04808000000946,1.597765487593826,1502,36.39000000000033,0.024152471906938536,0.8848202396804261,0.2937385508934857,False,,
13,COMPLETE,20,135,17,30.0,61.0,3.0,22,40.0,0.75,2.0,3.1,50.0,50,260.0,60.0,12,5.5,135,54.38808000000054,86.11808000000056,1.9618907628727842,200,31.730000000000018,0.029214134801991327,0.905,0.14134431322073032,False,,
14,COMPLETE,27,90,12,37.0,54.0,3.0,24,32.5,1.25,2.8,2.9000000000000004,80.0,50,220.0,90.0,10,6.0,150,-999669.44294,424.35144000000844,1.459655401841997,1266,93.79437999999982,0.06585058811047312,0.8965244865718799,0.21895321953166047,False,,
15,COMPLETE,21,140,17,32.0,60.0,3.1,18,40.0,0.75,1.9,2.5,120.0,35,310.0,130.0,11,7.0,180,-1000100.61384,-32.431920000004624,0.9029379537598867,274,68.18192000000363,0.06798340844733743,0.7554744525547445,-0.03446503926034721,False,,
16,COMPLETE,27,85,27,36.0,55.0,4.0,12,50.0,1.75,2.5,3.3000000000000003,80.0,40,110.0,80.0,8,6.5,135,17.1599999999994,27.379999999999654,1.6719018404907815,75,10.220000000000255,0.009898688569048922,0.8933333333333333,0.08571882033649099,False,,
17,COMPLETE,19,115,17,37.0,59.0,1.0,21,40.0,0.25,1.5,3.6,50.0,30,290.0,110.0,11,6.0,150,63.71808000000502,87.76808000000293,1.792774636437569,249,24.049999999997908,0.02210949231016031,0.8594377510040161,0.15381776868049163,False,,
18,COMPLETE,12,155,11,32.0,63.0,2.2,18,30.0,1.0,2.1,2.2,150.0,45,210.0,150.0,11,7.5,120,-1000048.76452,41.645819999987715,1.0465901378076448,708,90.41034000000082,0.08410766328356396,0.769774011299435,0.02886967413035379,False,,
19,COMPLETE,17,80,20,49.0,50.0,2.7,24,25.0,1.25,1.4,2.8,80.0,35,180.0,160.0,9,5.5,165,-999695.30192,387.3380799999758,1.2767934358397688,1951,82.63999999999987,0.05872120451117638,0.7975397232188621,0.21722570029396357,False,,
20,COMPLETE,22,120,15,43.0,53.0,3.5,13,37.5,0.75,2.6,1.4,140.0,50,370.0,80.0,12,8.0,120,-999712.12554,388.9047999999918,1.21948949169073,1586,101.03033999999934,0.07274101147897244,0.830390920554855,0.1511747425418676,False,,
21,COMPLETE,19,110,17,38.0,59.0,1.0,21,42.5,0.25,1.5,3.6,50.0,30,300.0,110.0,11,6.0,150,78.96808000000229,98.2580800000018,1.9379350897289194,255,19.28999999999951,0.017564177629359645,0.8705882352941177,0.16647404323926174,False,,
22,COMPLETE,20,95,19,37.0,64.0,1.8,20,42.5,0.5,1.7000000000000002,3.5,70.0,25,290.0,110.0,11,7.0,135,-1000002.35,14.349999999999909,1.4355083459787432,42,16.700000000000273,0.016417616987809944,0.7857142857142857,0.05326440653660322,False,,
23,COMPLETE,26,145,15,38.0,56.0,1.1,23,50.0,0.5,1.8,4.0,100.0,30,230.0,60.0,9,6.0,165,-999755.77226,281.3177400000076,1.3987808932576764,901,37.090000000000146,0.028946762260545867,0.832408435072142,0.20362833071930228,False,,
24,COMPLETE,29,120,25,34.0,58.0,3.3000000000000003,17,45.0,0.25,2.2,2.9000000000000004,50.0,40,280.0,80.0,11,5.0,150,-1000016.54,17.309999999998126,1.3903043968432425,73,33.85000000000082,0.03295462289591873,0.9178082191780822,0.033937152964300395,False,,
25,COMPLETE,22,75,10,32.0,63.0,2.0,20,35.0,1.0,1.1,2.3,90.0,25,330.0,100.0,12,6.5,135,-999889.74418,130.79178000000397,1.3959663509171527,477,20.535959999999704,0.018045313684593663,0.7442348008385744,0.14629607567669914,False,,
26,COMPLETE,18,105,18,35.0,54.0,2.7,11,30.0,1.25,1.4,3.3000000000000003,70.0,35,120.0,70.0,10,7.5,105,239.84404000000126,282.48404000000113,1.7181858490326263,702,42.63999999999987,0.03324797710543036,0.8461538461538461,0.2709683951296399,False,,
27,COMPLETE,13,95,20,35.0,54.0,2.7,11,30.0,1.25,1.9,3.1,120.0,40,120.0,70.0,8,7.5,90,194.0200000000027,236.56000000000358,1.6215449290593902,454,42.54000000000087,0.03440188911172992,0.8325991189427313,0.20883002383811294,False,,
28,COMPLETE,13,125,18,35.0,52.0,2.7,11,30.0,1.5,1.3,3.3000000000000003,120.0,45,120.0,70.0,8,7.0,90,-999874.81596,171.90403999999165,1.188595504032724,919,46.72000000000344,0.03948867440814037,0.7138193688792165,0.12875563327193457,False,,
29,COMPLETE,10,70,15,43.0,54.0,2.8,9,27.5,2.0,1.5,3.1,160.0,40,180.0,90.0,8,7.5,90,-999648.89068,401.749320000004,1.3717043324301978,1049,50.639999999998054,0.036126288258158674,0.7292659675881792,0.2521148014240056,False,,
30,COMPLETE,8,150,24,35.0,52.0,2.5,10,17.5,1.75,1.8,3.8000000000000003,120.0,45,180.0,90.0,7,7.5,105,-999851.03788,186.55212000000517,1.299802523101655,615,37.590000000000146,0.03168002430436851,0.7967479674796748,0.1320483624524398,False,,
31,COMPLETE,17,95,21,31.0,53.0,3.2,16,32.5,1.25,2.0,2.7,70.0,35,140.0,70.0,10,8.0,75,257.29807999999855,283.70807999999977,1.841888720733554,594,26.41000000000122,0.020573213187223393,0.8905723905723906,0.2591532259340743,False,,
32,COMPLETE,17,100,22,31.0,54.0,3.2,12,32.5,1.25,1.9,2.7,70.0,40,130.0,60.0,10,7.5,75,180.56999999999744,208.0199999999968,1.8583807873235747,440,27.449999999999363,0.022707344109325622,0.8909090909090909,0.24189114253472999,False,,
33,COMPLETE,15,90,21,34.0,51.0,3.4000000000000004,15,27.5,1.25,2.2,3.0,100.0,35,130.0,80.0,9,8.0,75,-999810.48192,239.65808000000143,1.3273677775186086,800,50.13999999999987,0.040420225887634095,0.8425,0.1626828628166489,False,,
34,COMPLETE,17,50,19,33.0,53.0,2.9000000000000004,16,32.5,1.75,2.1,3.3000000000000003,70.0,35,150.0,70.0,7,7.0,60,-999926.02192,114.18808000000072,1.4843198031980358,352,40.20999999999913,0.03602149027238717,0.8806818181818182,0.13973902240738295,False,,
35,COMPLETE,18,110,25,36.0,50.0,2.6,13,30.0,1.0,1.9,2.3,90.0,45,100.0,70.0,10,8.0,105,-999837.18788,219.85212000000172,1.3071203743801112,886,57.03999999999951,0.04622320889360418,0.8318284424379232,0.16327811855640154,False,,
36,COMPLETE,15,170,21,33.0,55.0,3.7,10,25.0,1.5,2.4000000000000004,3.4000000000000004,130.0,30,170.0,100.0,8,6.5,60,-1000040.78384,48.93211999999981,1.0788774883375019,513,89.71595999999636,0.08119766849745232,0.8265107212475633,0.03890256860515704,False,,
37,COMPLETE,10,80,23,31.0,52.0,2.4000000000000004,8,37.5,1.0,1.6,2.7,60.0,40,130.0,70.0,9,7.5,105,207.46000000000458,231.61000000000558,1.7736580151652026,551,24.150000000001,0.01960847995713001,0.8711433756805808,0.23697554590418157,False,,
38,COMPLETE,8,75,24,31.0,52.0,2.3,7,37.5,1.0,1.6,2.6,60.0,50,160.0,60.0,10,7.0,105,191.83000000000675,213.8700000000058,1.9043511353545892,449,22.039999999999054,0.01815680427063767,0.8730512249443207,0.2442199232512432,False,,
39,COMPLETE,24,65,23,30.0,51.0,2.4000000000000004,9,37.5,0.75,1.2,2.1,70.0,45,140.0,80.0,3,7.5,120,159.38404000000259,190.88404000000213,1.6326529232401024,529,31.499999999999545,0.026450938077900086,0.8241965973534972,0.22899064656785126,True,1.0,
40,COMPLETE,21,165,13,31.0,53.0,3.2,8,35.0,1.0,1.4,2.4000000000000004,90.0,20,200.0,90.0,9,8.0,75,-999745.35788,294.17211999998597,1.3281610898461553,1176,39.52999999999929,0.030544623384407103,0.7950680272108843,0.2024938565918597,False,,
41,COMPLETE,10,85,19,33.0,55.0,2.9000000000000004,11,32.5,1.25,1.8,2.8,60.0,40,120.0,70.0,9,7.5,90,204.93000000000893,228.00000000000728,2.640759930915429,363,23.069999999998345,0.018786644951138607,0.9090909090909091,0.2963334568788378,False,,
42,COMPLETE,10,85,22,33.0,55.0,2.9000000000000004,14,32.5,1.25,1.6,2.8,60.0,40,140.0,70.0,10,8.0,90,95.72403999999865,113.25403999999885,2.076456990780337,224,17.5300000000002,0.015746630481574733,0.875,0.2011377188880557,False,,
43,COMPLETE,10,65,19,34.0,50.0,2.9000000000000004,11,37.5,1.5,1.8,2.7,60.0,35,100.0,60.0,9,7.0,105,-999751.76192,296.6480800000021,1.4460202676289309,1012,48.40999999999849,0.03672326018680811,0.866600790513834,0.21284954866448813,False,,
44,COMPLETE,12,185,16,32.0,57.0,3.1,13,22.5,1.0,1.7000000000000002,2.9000000000000004,80.0,35,120.0,210.0,10,7.5,45,171.25211999999996,218.06212000000036,1.5118637339314727,690,46.8100000000004,0.03828593767078823,0.8594202898550725,0.18351573044731218,False,,
45,COMPLETE,14,100,18,31.0,51.0,2.5,8,35.0,0.75,2.0,2.6,280.0,30,160.0,80.0,9,6.5,75,-999773.21384,287.1561600000053,1.2728630685711575,865,60.37000000000353,0.046766685969321195,0.7676300578034682,0.1676352812608313,False,,
46,COMPLETE,9,85,24,30.0,69.0,3.7,26,25.0,1.5,1.4,3.0,100.0,40,240.0,100.0,10,2.5,90,-2000000.0,0.0,0.0,0,0.0,0.0,0.0,0.0,False,,
47,COMPLETE,16,130,21,36.0,56.0,2.1,7,27.5,1.25,1.6,2.5,50.0,45,360.0,70.0,7,8.0,120,119.69403999999207,146.52403999999245,1.6865846961247952,437,26.830000000000382,0.02329692691391989,0.8810068649885584,0.18357242141039948,False,,
48,COMPLETE,11,75,27,33.0,52.0,3.4000000000000004,16,32.5,2.0,2.1,1.9,250.0,25,140.0,90.0,11,7.0,105,139.58808000000263,170.37808000000078,1.5284843822699203,335,30.789999999998145,0.02623309877869985,0.8208955223880597,0.17043231311057908,False,,
49,COMPLETE,24,200,9,34.0,53.0,3.1,10,40.0,0.5,1.3,3.2,70.0,40,200.0,60.0,8,7.5,60,-999553.4238400001,504.50807999998403,1.4636699077516455,1767,57.93191999999999,0.03794440046454543,0.8064516129032258,0.32846684550465083,False,,
50,COMPLETE,33,60,13,40.0,57.0,2.6,19,35.0,1.75,1.0,2.7,90.0,50,110.0,120.0,6,5.5,45,-999798.47192,220.2480800000025,1.4685073126918098,713,18.7199999999998,0.015341142761724125,0.7475455820476858,0.22646407096002782,False,,
51,COMPLETE,13,95,20,35.0,54.0,2.8,11,30.0,1.25,1.8,3.1,110.0,40,120.0,70.0,8,7.5,90,223.71000000000458,252.51000000000522,1.7409548402242023,459,28.800000000000637,0.022993828392588095,0.840958605664488,0.2318463473839453,False,,
52,COMPLETE,13,105,21,38.0,55.0,2.8,12,30.0,1.25,1.8,3.0,110.0,35,130.0,80.0,9,7.5,90,-999938.63192,95.15808000000234,1.246398434618536,411,33.78999999999951,0.030159192696872898,0.8126520681265207,0.09424210849956756,False,,
53,COMPLETE,11,80,23,36.0,54.0,3.0,14,32.5,1.0,1.7000000000000002,2.8,60.0,35,400.0,60.0,8,4.0,105,115.90403999999802,135.3040399999972,2.113063836788395,270,19.39999999999918,0.017086880020613485,0.8851851851851852,0.19686981736090514,False,,
54,COMPLETE,12,90,18,32.0,53.0,2.4000000000000004,9,27.5,1.5,1.6,3.2,80.0,45,110.0,70.0,12,6.5,120,-999813.07192,233.17808000000005,1.4862983204279783,712,46.249999999999545,0.037504721134841726,0.8356741573033708,0.20975825448764251,False,,
55,COMPLETE,9,100,16,35.0,51.0,2.8,11,37.5,0.75,2.0,2.9000000000000004,170.0,40,170.0,90.0,6,8.0,75,-999766.9898,294.88020000000483,1.2662623252790168,858,61.870000000000346,0.04735806015506991,0.7610722610722611,0.1575948694387805,False,,
56,COMPLETE,18,115,20,33.0,56.0,3.2,8,22.5,3.0,1.8,3.4000000000000004,50.0,35,100.0,80.0,10,7.0,90,185.3821200000015,200.74808000000158,2.0847380036826033,427,15.365960000000086,0.012784425504061834,0.8969555035128806,0.2566758182883463,False,,
57,COMPLETE,14,90,19,37.0,52.0,2.6,16,30.0,1.0,2.2,2.4000000000000004,80.0,30,150.0,70.0,9,8.0,60,-999821.37596,229.63403999999713,1.40160136843219,771,51.00999999999931,0.04148388735236984,0.8690012970168612,0.17055014912299238,False,,
58,COMPLETE,16,110,16,39.0,55.0,2.3,10,40.0,1.25,1.5,3.1,110.0,40,120.0,60.0,11,7.0,105,-999790.6363,235.0237000000065,1.2824789215653,948,25.66000000000031,0.02077692922006288,0.7784810126582279,0.17471845819569096,False,,
59,COMPLETE,20,95,14,34.0,70.0,3.4000000000000004,28,45.0,2.75,1.9,1.1,60.0,45,270.0,170.0,7,6.0,135,18.31999999999516,30.19999999999527,1.829442460862274,87,11.88000000000011,0.01153174140943522,0.8850574712643678,0.09183995204427259,False,,
60,COMPLETE,22,135,22,30.0,54.0,1.8,26,35.0,1.5,1.7000000000000002,2.6,190.0,50,140.0,100.0,10,7.5,75,-999891.59192,162.75808000000043,1.3010637613066705,510,54.349999999999,0.0460625198657849,0.7784313725490196,0.1328100475563679,False,,
61,COMPLETE,13,80,20,35.0,54.0,3.0,11,30.0,1.25,2.0,3.2,140.0,40,120.0,70.0,8,7.5,90,186.02000000000362,222.39000000000487,1.7065383149066125,387,36.370000000001255,0.029753188425953345,0.8397932816537468,0.20631548239062422,False,,
62,COMPLETE,12,95,20,35.0,53.0,2.7,12,32.5,1.25,1.9,3.0,130.0,40,130.0,70.0,8,7.5,90,253.54808000000855,276.65808000000777,1.5177081906472978,566,23.109999999999218,0.01807900828589588,0.803886925795053,0.21658202617248543,False,,
63,COMPLETE,9,100,18,32.0,50.0,2.7,12,32.5,1.0,1.8,2.9000000000000004,130.0,35,110.0,80.0,9,7.5,105,-999802.14788,269.41212000000303,1.2971479054993094,986,71.55999999999904,0.05549600790134021,0.8032454361054767,0.1644813747634095,False,,
64,COMPLETE,11,85,21,36.0,53.0,2.9000000000000004,14,32.5,1.25,1.7000000000000002,3.5,70.0,40,130.0,60.0,8,7.0,75,218.99404000000953,240.71404000000842,1.8246173135555799,514,21.71999999999889,0.017506048371950994,0.8715953307392996,0.24313796469953594,False,,
65,COMPLETE,12,105,23,37.0,52.0,2.4000000000000004,15,37.5,0.75,1.7000000000000002,3.8000000000000003,90.0,45,170.0,60.0,7,6.5,75,-999807.05596,219.78404000000086,1.4539210640451095,625,26.839999999997872,0.022003895050141706,0.8288,0.18478698223364118,False,,
66,COMPLETE,15,70,21,36.0,53.0,2.8,13,30.0,1.5,1.4,3.5,100.0,35,130.0,60.0,8,7.0,75,-999924.8359599999,102.6740400000062,1.2719842119205476,441,27.509999999999764,0.024948442605939654,0.7913832199546486,0.11463103800296467,False,,
67,COMPLETE,11,120,25,39.0,51.0,3.3000000000000003,14,35.0,1.25,2.0,3.6,150.0,30,380.0,80.0,8,8.0,60,-999778.4138399999,270.81616000001105,1.3472269148909033,704,49.23000000000002,0.0382361163053957,0.7855113636363636,0.16117826255664155,False,,
68,COMPLETE,16,95,20,41.0,52.0,2.5,17,27.5,1.0,2.3,3.3000000000000003,70.0,40,190.0,90.0,7,7.0,120,286.37000000001217,326.6300000000092,1.6494541983974127,829,40.259999999997035,0.03034757242034083,0.8986731001206273,0.2458899314281657,False,,
69,COMPLETE,18,115,20,44.0,53.0,2.6,17,25.0,1.75,2.6,3.4000000000000004,110.0,40,190.0,110.0,5,6.5,135,399.920900000001,436.46528000000217,1.5246930704086186,979,36.54438000000118,0.025440489588443884,0.8610827374872319,0.24873054703622094,False,,
70,COMPLETE,19,115,20,46.0,53.0,2.6,18,25.0,2.0,2.7,3.3000000000000003,130.0,35,190.0,130.0,5,6.0,135,-999658.74102,394.16335999999717,1.3529466839072015,1074,52.90437999999858,0.037936432923583986,0.8361266294227188,0.19551028947390992,False,,
71,COMPLETE,18,95,20,41.0,51.0,2.7,17,20.0,1.75,2.4000000000000004,3.4000000000000004,110.0,40,220.0,110.0,3,6.5,120,-999910.01576,158.07211999999834,1.262608808333192,600,68.08787999999686,0.058752054056124214,0.835,0.11775813566669881,False,,
72,COMPLETE,17,125,21,45.0,53.0,3.0,19,27.5,2.25,3.0,3.7,70.0,40,320.0,90.0,4,7.0,135,235.77966000000742,310.03966000000537,1.5075757781639363,877,74.25999999999794,0.05668530676391709,0.9019384264538198,0.2040183666501753,False,,
73,COMPLETE,17,125,17,44.0,56.0,3.1,19,27.5,2.25,3.0,3.8000000000000003,80.0,45,310.0,100.0,4,6.5,135,284.4796600000018,355.96966000000066,1.5627494983119077,892,71.48999999999887,0.05272241858272761,0.899103139013453,0.23751240058293188,False,,
74,COMPLETE,16,125,18,43.0,57.0,3.0,19,22.5,2.25,3.0,3.8000000000000003,80.0,45,330.0,120.0,4,6.5,135,-999835.8463,237.7836999999899,1.3836208853395855,786,73.6299999999992,0.059070640640071205,0.8867684478371501,0.17109220746410006,False,,
75,COMPLETE,17,140,17,44.0,50.0,3.1,21,25.0,2.25,2.9000000000000004,3.9000000000000004,50.0,50,300.0,100.0,4,6.0,150,241.72000000000526,295.9200000000046,1.5786921151439388,955,54.19999999999936,0.041823569356132455,0.9172774869109948,0.21822093561717917,False,,
76,COMPLETE,19,145,17,44.0,50.0,3.3000000000000003,22,25.0,2.5,2.9000000000000004,3.9000000000000004,50.0,50,310.0,110.0,5,5.5,150,313.370000000004,361.5600000000045,1.57450662598914,1169,48.19000000000051,0.035393225417903254,0.9178785286569717,0.24024102907945222,False,,
77,COMPLETE,21,145,17,44.0,50.0,3.6,22,20.0,2.5,2.9000000000000004,4.0,50.0,50,300.0,120.0,5,5.5,165,309.9500000000053,359.3900000000049,1.5753830390163552,1170,49.4399999999996,0.03636925385650874,0.9188034188034188,0.24027077851778816,False,,
78,COMPLETE,21,155,11,47.0,50.0,3.6,22,15.0,2.5,2.9000000000000004,4.0,50.0,50,310.0,130.0,6,5.0,165,406.21562000000586,454.07562000000644,1.5831275860740575,1473,47.86000000000058,0.032782042936640596,0.9192124915139172,0.28008341135400644,False,,
79,COMPLETE,23,155,12,48.0,50.0,3.6,23,15.0,2.5,2.8,4.0,50.0,50,340.0,140.0,5,5.0,165,392.5900000000047,436.250000000005,1.6807896379525684,1229,43.66000000000031,0.030398607484769476,0.9186330349877949,0.30136312066623544,False,,
80,COMPLETE,23,150,11,48.0,50.0,3.9000000000000004,23,15.0,2.5,2.9000000000000004,3.9000000000000004,50.0,50,340.0,140.0,5,5.0,180,311.77000000000635,359.130000000006,1.5232004195743176,1229,47.35999999999967,0.034845820488105965,0.9161920260374288,0.23748811898661112,False,,
81,COMPLETE,23,150,11,49.0,50.0,4.0,23,15.0,2.5,2.9000000000000004,3.9000000000000004,50.0,50,340.0,140.0,5,5.0,180,-999714.27,333.1400000000044,1.4757511710270832,1229,47.409999999999854,0.035562656585204626,0.9153783563873068,0.21909097089959298,False,,
82,COMPLETE,21,160,12,48.0,50.0,3.9000000000000004,22,12.5,2.75,2.8,4.0,50.0,50,350.0,130.0,5,4.5,165,394.4600000000032,437.970000000003,1.6887620305718136,1229,43.50999999999976,0.0302579330584085,0.919446704637917,0.30174986986942326,False,,
83,COMPLETE,21,160,12,48.0,50.0,3.9000000000000004,22,10.0,2.5,2.8,4.0,50.0,50,350.0,140.0,6,4.5,165,452.8156200000067,498.76562000000695,1.6583147933055404,1470,45.95000000000027,0.03054504552647638,0.9217687074829932,0.31447331483401364,False,,
84,COMPLETE,21,160,12,48.0,50.0,3.9000000000000004,22,10.0,2.75,2.8,4.0,50.0,50,350.0,150.0,6,4.5,165,446.3756200000071,492.42562000000726,1.6499467029196055,1470,46.05000000000018,0.030741077867771048,0.9217687074829932,0.3102057189171196,False,,
85,COMPLETE,23,160,12,48.0,50.0,3.9000000000000004,24,10.0,2.75,2.7,3.9000000000000004,50.0,50,350.0,150.0,6,4.5,165,457.3756200000048,500.9356200000043,1.6661023615765185,1472,43.55999999999949,0.028919778168570574,0.9198369565217391,0.32211088304831326,False,,
86,COMPLETE,25,160,12,50.0,51.0,3.9000000000000004,25,10.0,2.75,2.7,4.0,60.0,50,350.0,160.0,6,4.5,165,-999621.58,421.3600000000015,1.473172375070187,1472,42.9399999999996,0.030210502617211372,0.9055706521739131,0.24745216865677602,False,,
87,COMPLETE,20,170,10,47.0,51.0,3.8000000000000003,22,10.0,2.75,2.8,3.7,50.0,50,370.0,150.0,6,4.5,165,476.2100000000073,519.2200000000071,1.7029881260239241,1472,43.00999999999976,0.028310580429430604,0.9225543478260869,0.3275498928242469,False,,
88,COMPLETE,22,175,10,47.0,51.0,3.8000000000000003,24,10.0,2.75,2.7,3.7,60.0,50,380.0,150.0,6,4.5,165,400.9100000000035,454.2700000000027,1.5170561252945154,1472,53.35999999999922,0.03669194853775373,0.904891304347826,0.2657125827872516,False,,
89,COMPLETE,21,175,10,47.0,51.0,3.8000000000000003,24,10.0,2.75,2.6,3.7,210.0,50,380.0,150.0,6,4.0,165,-999938.21438,199.37562000000256,1.0851918108540626,1458,137.59000000000196,0.11181582413252332,0.7503429355281207,0.07194065303031767,False,,
90,COMPLETE,20,165,7,47.0,51.0,3.9000000000000004,21,12.5,3.0,2.8,3.6,60.0,50,360.0,170.0,6,4.5,180,-999708.52,369.45000000000437,1.3962312716508898,1474,77.96999999999935,0.05693526598269312,0.8975576662143826,0.19606727638183957,False,,
91,COMPLETE,23,160,12,48.0,50.0,3.7,25,12.5,2.75,2.8,4.0,50.0,50,390.0,150.0,6,4.0,165,485.5256200000035,530.8456200000032,1.7128123590074167,1473,45.31999999999971,0.029496074919821775,0.921928038017651,0.33646610512263553,False,,
92,COMPLETE,22,175,10,48.0,51.0,3.8000000000000003,25,12.5,2.75,2.7,3.7,60.0,50,390.0,150.0,6,4.0,165,-999648.42,393.5400000000004,1.4275424511390917,1471,41.95999999999958,0.030110366404982682,0.9000679809653297,0.22984974554700185,False,,
93,COMPLETE,24,165,9,49.0,50.0,3.7,27,10.0,2.75,2.6,3.9000000000000004,50.0,50,360.0,130.0,6,3.5,165,-999657.9,382.86000000000195,1.4731573483612665,1473,40.75999999999976,0.029475145712508647,0.9103869653767821,0.23605047426081177,False,,
94,COMPLETE,20,160,14,47.0,52.0,4.0,24,12.5,3.0,2.8,4.0,60.0,50,370.0,150.0,6,4.5,150,-999691.71,391.25000000000045,1.4196835612764824,1462,82.96000000000186,0.059509633731691464,0.9028727770177839,0.22378349637972386,False,,
95,COMPLETE,22,180,12,46.0,50.0,3.6,22,12.5,2.75,2.5,3.7,70.0,45,350.0,160.0,6,4.0,180,-999758.06,294.0399999999895,1.2826601042047083,1469,52.09999999999991,0.040057510591021465,0.8781484002722941,0.16839519114843854,False,,
96,COMPLETE,26,170,9,50.0,51.0,3.9000000000000004,20,10.0,3.0,2.5,3.8000000000000003,50.0,50,390.0,130.0,5,4.5,165,-999721.67,314.74000000000115,1.455550730930673,1230,36.41000000000031,0.027693688485936594,0.9040650406504065,0.2166682823675746,False,,
97,COMPLETE,20,155,13,46.0,52.0,3.8000000000000003,24,10.0,2.75,2.7,3.9000000000000004,60.0,45,370.0,170.0,6,4.5,150,-999756.77,356.8099999999895,1.3663384634339053,1462,113.57999999999856,0.08313448785700651,0.8974008207934336,0.19814163509752847,False,,
98,COMPLETE,21,190,11,48.0,51.0,3.7,25,12.5,2.75,2.8,4.0,50.0,50,350.0,140.0,7,3.5,165,554.1156200000019,605.3756200000021,1.6933316764780018,1714,51.26000000000022,0.03182851358196449,0.9235705950991832,0.3538456371967244,False,,
99,COMPLETE,22,195,11,49.0,51.0,3.5,25,17.5,3.0,2.6,3.8000000000000003,70.0,50,330.0,160.0,7,3.5,165,-999682.78,359.41000000000577,1.2975913490598119,1708,42.18999999999869,0.031023655629332778,0.8858313817330211,0.18430413351857214,False,,
100,COMPLETE,21,180,10,47.0,52.0,3.7,24,15.0,2.5,2.8,3.6,60.0,45,380.0,150.0,6,4.0,180,-999651.76,405.83000000000857,1.4478371220481228,1473,57.58999999999969,0.0409651238058651,0.902919212491514,0.2364844650182565,False,,
101,COMPLETE,21,170,11,48.0,50.0,4.0,21,12.5,2.75,2.8,4.0,50.0,50,350.0,140.0,5,3.0,165,330.4600000000023,376.85000000000355,1.559506488107617,1229,46.39000000000124,0.033692849620511396,0.9161920260374288,0.2537555124008654,False,,
102,COMPLETE,23,160,12,48.0,50.0,3.8000000000000003,22,12.5,2.75,2.7,3.9000000000000004,50.0,50,390.0,130.0,6,4.5,165,508.83562000000074,552.7156200000009,1.7628082751387033,1473,43.88000000000011,0.028164573174943728,0.9205702647657841,0.3562924596935152,False,,
103,COMPLETE,23,185,13,46.0,51.0,3.8000000000000003,23,10.0,2.75,2.7,3.9000000000000004,60.0,50,400.0,150.0,6,3.5,150,469.63999999999487,525.3699999999953,1.6346274642442917,1462,55.73000000000047,0.036409368568909056,0.9090287277701778,0.3018283584542877,False,,
104,COMPLETE,24,185,13,46.0,51.0,3.8000000000000003,23,10.0,2.75,2.7,3.9000000000000004,60.0,50,390.0,180.0,6,3.5,150,488.3900000000008,542.3500000000013,1.6551386741399308,1462,53.96000000000049,0.03486621479294176,0.9090287277701778,0.30717649767065885,False,,
105,COMPLETE,25,190,14,46.0,51.0,3.5,23,10.0,3.0,2.7,3.9000000000000004,60.0,50,400.0,210.0,6,3.0,150,384.47999999999774,449.26999999999816,1.5264718290053407,1448,64.79000000000042,0.044140590403390426,0.9060773480662984,0.2564362914061711,False,,
106,COMPLETE,24,185,13,45.0,50.0,3.7,22,12.5,2.75,2.9000000000000004,3.9000000000000004,80.0,50,390.0,200.0,7,3.5,150,-999663.16,406.5200000000009,1.319654020051111,1660,69.68000000000211,0.0488615565855828,0.8903614457831325,0.19075859641649634,False,,
107,COMPLETE,23,185,13,49.0,51.0,3.6,21,10.0,2.5,2.7,3.8000000000000003,50.0,50,390.0,140.0,6,3.5,150,533.640000000004,580.4200000000042,1.8531573377234285,1470,46.7800000000002,0.029599726654939873,0.9285714285714286,0.36711531607069997,False,,
108,COMPLETE,23,190,15,50.0,51.0,3.8000000000000003,21,10.0,3.0,2.6,3.8000000000000003,60.0,50,400.0,140.0,7,3.5,150,-999594.45,457.7700000000059,1.4550442847344471,1698,52.220000000000255,0.035282353418104685,0.9063604240282686,0.2555639303393717,False,,
109,COMPLETE,26,200,13,49.0,52.0,3.9000000000000004,23,10.0,2.5,2.7,3.7,70.0,45,390.0,190.0,6,3.5,150,-999747.8,336.0000000000018,1.328571009475755,1468,83.79999999999609,0.06181490934304757,0.8957765667574932,0.18453901346683735,False,,
110,COMPLETE,28,185,14,48.0,67.0,3.7,25,12.5,2.75,2.5,3.9000000000000004,50.0,50,360.0,180.0,7,3.0,150,375.78000000000156,430.5000000000018,1.60607340456984,1349,54.720000000000255,0.03825235931492498,0.916234247590808,0.2839925502747245,False,,
111,COMPLETE,25,195,12,48.0,50.0,3.6,22,15.0,2.5,2.8,4.0,50.0,50,390.0,140.0,6,4.0,165,426.9456200000059,472.91562000000613,1.6044268040183125,1471,45.970000000000255,0.0310926257098125,0.9177430319510537,0.2999751164618944,False,,
112,COMPLETE,24,195,12,49.0,51.0,3.6,20,12.5,2.75,2.8,1.7000000000000002,60.0,50,370.0,160.0,6,4.0,180,-999656.84,397.330000000004,1.4536507392818434,1472,54.16999999999916,0.03876679095131358,0.907608695652174,0.24360834318184224,False,,
113,COMPLETE,23,190,13,48.0,50.0,4.0,21,10.0,2.5,2.8,3.8000000000000003,50.0,50,390.0,230.0,6,3.5,165,491.63000000000056,534.9700000000012,1.7300354803493467,1471,43.3400000000006,0.0281397508067295,0.9265805574439157,0.3371144865927234,False,,
114,COMPLETE,23,190,13,46.0,51.0,4.0,21,10.0,2.75,2.7,3.8000000000000003,70.0,50,400.0,230.0,7,3.5,150,-999600.14,456.41999999999825,1.3905899669673247,1680,56.560000000000855,0.03841190932181582,0.8952380952380953,0.22338355704126953,False,,
115,COMPLETE,23,185,14,50.0,52.0,3.8000000000000003,20,10.0,2.75,2.6,3.8000000000000003,60.0,50,370.0,160.0,6,3.5,165,371.21000000000595,452.21000000000413,1.5492384677047222,1468,80.99999999999818,0.055666277231803986,0.9066757493188011,0.2720892726887757,False,,
116,COMPLETE,24,165,12,49.0,50.0,3.9000000000000004,23,12.5,2.5,2.8,3.9000000000000004,50.0,45,380.0,230.0,6,2.5,180,398.65000000001237,446.4100000000085,1.5842833396594498,1473,47.759999999996126,0.03301968321568286,0.9212491513917176,0.27602798411184976,False,,
117,COMPLETE,22,170,13,48.0,52.0,3.7,27,10.0,3.0,2.7,3.6,80.0,50,400.0,240.0,6,3.0,165,-999839.76,233.70000000000118,1.1946964584739208,1468,73.46000000000004,0.05786666876728083,0.8801089918256131,0.12729737908786556,False,,
118,COMPLETE,23,190,15,47.0,51.0,4.0,20,10.0,2.75,2.9000000000000004,3.7,60.0,50,390.0,150.0,7,4.0,150,488.51000000000204,545.340000000002,1.5457930081968063,1665,56.82999999999993,0.03656825903428386,0.9153153153153153,0.27789916567766604,False,,
119,COMPLETE,31,180,15,47.0,51.0,4.0,20,17.5,2.5,3.0,3.5,70.0,45,390.0,170.0,7,4.0,150,-999679.43,408.5599999999931,1.3358846403643578,1665,87.98999999999796,0.06205131098291871,0.9009009009009009,0.19345893436681233,False,,
120,COMPLETE,25,195,13,45.0,52.0,3.5,21,12.5,2.25,2.9000000000000004,3.6,70.0,50,380.0,220.0,7,3.5,150,-999600.59,485.2399999999989,1.4264309128138413,1656,85.82999999999856,0.057041270685185504,0.9009661835748792,0.22833414736551516,False,,
121,COMPLETE,23,185,11,48.0,50.0,3.8000000000000003,23,10.0,2.75,2.9000000000000004,3.7,50.0,50,370.0,150.0,6,4.0,165,394.77000000000544,439.4500000000053,1.5546440155999628,1471,44.679999999999836,0.031039633193233298,0.9218218898708361,0.2679516666628968,False,,
122,COMPLETE,24,180,15,46.0,51.0,3.9000000000000004,21,10.0,2.75,2.8,3.8000000000000003,60.0,50,390.0,140.0,6,4.5,165,-999690.24,376.25000000000364,1.4130076838638896,1433,66.48999999999933,0.04762552825728754,0.9057920446615492,0.2091942427689989,False,,
123,COMPLETE,22,200,12,47.0,50.0,4.0,22,10.0,2.75,2.7,4.0,50.0,50,400.0,150.0,6,3.5,165,489.3300000000004,531.0100000000002,1.7491253315275672,1466,41.679999999999836,0.027130471007889068,0.9229195088676672,0.3321184594089717,False,,
124,COMPLETE,22,200,14,47.0,50.0,4.0,24,12.5,3.0,2.7,3.9000000000000004,50.0,50,400.0,140.0,5,3.5,150,406.23999999999796,442.4999999999977,1.7275208391562364,1225,36.25999999999976,0.025036249395843275,0.92,0.3044823278950454,False,,
125,COMPLETE,26,190,13,47.0,51.0,3.8000000000000003,26,47.5,2.5,2.5,4.0,60.0,50,380.0,150.0,7,3.0,165,-999638.09,413.9000000000033,1.3752867466383807,1703,51.98999999999978,0.03643052343914208,0.8919553728714034,0.23110398461138934,False,,
126,COMPLETE,23,190,11,49.0,50.0,3.7,23,12.5,2.75,2.7,3.8000000000000003,70.0,50,400.0,160.0,6,3.5,150,-999724.47,334.39000000000306,1.3318414576055924,1471,58.86000000000104,0.04411004279108874,0.8891910265125765,0.18432712974529022,False,,
127,COMPLETE,22,195,14,46.0,51.0,4.0,25,10.0,2.75,2.6,3.9000000000000004,50.0,45,390.0,180.0,5,4.0,135,339.5899999999956,397.4999999999968,1.6325588796944597,1220,57.91000000000122,0.04121590844388868,0.9163934426229509,0.2621287432051863,False,,
128,COMPLETE,24,175,12,48.0,50.0,3.9000000000000004,21,10.0,2.5,2.9000000000000004,3.7,60.0,10,370.0,130.0,6,3.5,180,-999759.44438,323.8656199999814,1.3544201840685293,1468,83.30999999999767,0.06253914702128384,0.9073569482288828,0.18143782498401217,False,,
129,COMPLETE,22,185,13,45.0,51.0,1.4,22,12.5,3.0,2.7,4.0,50.0,50,360.0,150.0,7,4.0,150,499.74000000000024,541.5700000000006,1.6266140602582502,1668,41.83000000000038,0.026901705553983715,0.9190647482014388,0.3052173463606272,False,,
130,COMPLETE,25,185,14,45.0,52.0,1.1,20,15.0,3.0,2.7,3.9000000000000004,60.0,50,380.0,150.0,7,2.5,150,-999633.77,448.71000000000004,1.4348344332354563,1642,82.48000000000093,0.0569200510679417,0.9037758830694276,0.2240543285416689,False,,
131,COMPLETE,22,200,13,47.0,51.0,3.8000000000000003,22,12.5,3.0,2.8,4.0,50.0,50,360.0,140.0,7,4.0,150,485.3500000000008,532.7800000000016,1.5845731841123563,1699,47.430000000000746,0.030773522961733052,0.9199529134785168,0.3075737713149808,False,,
132,COMPLETE,22,200,15,47.0,51.0,3.8000000000000003,23,12.5,3.0,2.8,4.0,50.0,50,360.0,150.0,7,4.0,150,564.6900000000023,604.3300000000027,1.702921813571549,1672,39.64000000000033,0.024645304087241054,0.9234449760765551,0.33226684963832975,False,,
133,COMPLETE,22,195,16,47.0,51.0,3.8000000000000003,22,12.5,3.0,2.9000000000000004,4.0,60.0,50,360.0,160.0,7,4.0,150,-999587.39,482.7700000000027,1.4629643836667399,1653,70.16000000000122,0.04674777788142554,0.9086509376890503,0.247422649407387,False,,
134,COMPLETE,23,200,15,46.0,51.0,3.7,21,15.0,3.0,2.8,3.8000000000000003,50.0,50,390.0,140.0,7,3.5,135,480.030000000002,530.8000000000011,1.609785518168347,1653,50.76999999999907,0.032878078474798456,0.9225650332728372,0.2941279367090679,False,,
135,COMPLETE,23,200,15,45.0,52.0,1.6,23,15.0,3.0,2.8,3.8000000000000003,50.0,50,390.0,120.0,7,3.5,135,463.7200000000021,524.400000000001,1.6060956299626679,1633,60.67999999999893,0.03979694898802345,0.9210042865890998,0.29286114869581137,False,,
136,COMPLETE,20,200,13,46.0,51.0,3.7,21,12.5,3.0,2.8,3.7,70.0,50,370.0,140.0,7,4.0,150,-999579.69,479.40999999999804,1.4060938214715284,1683,59.09999999999991,0.03937584947898621,0.8954248366013072,0.23282769309980542,False,,
137,COMPLETE,22,190,13,46.0,52.0,3.6,22,15.0,3.0,2.7,4.0,50.0,45,380.0,130.0,7,3.0,150,498.72999999999,552.9499999999903,1.6246117003851825,1690,54.220000000000255,0.03480951708375635,0.9207100591715977,0.30269316103371957,False,,
138,COMPLETE,22,195,16,47.0,52.0,3.4000000000000004,22,17.5,3.0,2.6,4.0,50.0,45,360.0,130.0,7,3.0,135,529.0199999999872,605.6699999999873,1.682091535654747,1657,76.65000000000009,0.04754549852990477,0.9155099577549789,0.3313015037064247,False,,
139,COMPLETE,22,190,16,45.0,52.0,1.3,20,17.5,3.0,2.6,4.0,50.0,45,360.0,130.0,7,3.0,135,470.95999999998,526.2899999999809,1.6294506703663136,1597,55.33000000000084,0.03623966779758806,0.915466499686913,0.2874528425017057,False,,
140,COMPLETE,24,200,15,46.0,52.0,3.5,22,15.0,3.0,2.6,4.0,60.0,45,380.0,120.0,7,3.0,135,475.2799999999834,550.9199999999846,1.5582498201384005,1646,75.64000000000124,0.0485625136429602,0.9034021871202916,0.28030357222111,False,,
141,COMPLETE,20,195,14,47.0,52.0,3.6,22,17.5,3.0,2.7,3.9000000000000004,50.0,45,360.0,130.0,7,4.0,150,546.0199999999859,594.2299999999864,1.6918419857726497,1692,48.21000000000049,0.030240304096649104,0.9231678486997635,0.33672651473660714,False,,
142,COMPLETE,22,195,16,47.0,53.0,3.6,21,17.5,3.0,2.7,3.8000000000000003,50.0,45,360.0,130.0,7,4.0,150,610.1099999999901,652.5099999999911,1.826056132977162,1640,42.400000000001,0.025554022046371642,0.9225609756097561,0.36461006239593885,False,,
143,COMPLETE,19,195,16,47.0,53.0,3.6,22,17.5,3.0,2.7,3.9000000000000004,50.0,45,360.0,130.0,7,4.0,150,631.0999999999949,668.9099999999949,1.8625643141755486,1634,37.809999999999945,0.022563839373631187,0.9241126070991432,0.37325057484732593,False,,
144,COMPLETE,21,195,16,47.0,53.0,3.4000000000000004,22,17.5,3.0,2.7,3.9000000000000004,60.0,45,340.0,130.0,7,4.0,150,560.2999999999929,602.1899999999932,1.6360266159695749,1631,41.89000000000033,0.02604257329719275,0.9086450030656039,0.3121720004124801,False,,
145,COMPLETE,19,195,16,47.0,53.0,3.5,21,17.5,3.0,2.5,3.9000000000000004,60.0,45,330.0,130.0,7,4.0,150,551.9199999999955,589.1899999999964,1.619189743050809,1633,37.27000000000089,0.023284872642305728,0.900796080832823,0.3114948087195637,False,,
146,COMPLETE,19,195,16,47.0,53.0,3.4000000000000004,21,17.5,3.0,2.6,3.8000000000000003,60.0,45,330.0,130.0,7,4.0,150,562.6699999999933,601.1999999999935,1.6389898603405328,1632,38.5300000000002,0.023973966499913096,0.9056372549019608,0.3154679220450983,False,,
147,COMPLETE,19,195,16,47.0,53.0,3.4000000000000004,21,17.5,3.0,2.5,3.8000000000000003,70.0,45,330.0,130.0,8,4.0,150,-999488.15,556.2799999999911,1.4479265641355914,1803,44.4300000000012,0.02834901898229475,0.8879645036051026,0.26194932274115434,False,,
148,COMPLETE,19,195,16,47.0,54.0,3.3000000000000003,22,17.5,3.0,2.4000000000000004,3.9000000000000004,50.0,45,340.0,120.0,7,4.0,150,532.0299999999947,576.8899999999958,1.6870355373475572,1623,44.86000000000104,0.028248125082648214,0.9081947011706716,0.3412028374795733,False,,
149,COMPLETE,19,195,16,49.0,54.0,3.3000000000000003,21,17.5,3.0,2.4000000000000004,3.9000000000000004,70.0,45,340.0,120.0,7,4.0,150,-999629.75596,443.96404000000933,1.3860791874288096,1654,73.7199999999998,0.05105390297669693,0.8821039903264812,0.24430837777922948,False,,
150,COMPLETE,20,190,16,47.0,54.0,3.4000000000000004,22,20.0,3.0,2.3,3.8000000000000003,50.0,45,320.0,130.0,7,4.0,150,490.94403999999395,541.6940399999958,1.6263039741337868,1625,50.75000000000182,0.032801103595878636,0.9015384615384615,0.3166375955532262,False,,
151,COMPLETE,20,190,16,47.0,54.0,3.4000000000000004,22,20.0,3.0,2.3,3.8000000000000003,50.0,45,340.0,130.0,7,4.0,150,513.3040399999959,567.1240399999974,1.6557060145590854,1625,53.82000000000153,0.03422283801004435,0.9015384615384615,0.3288783725238105,False,,
152,COMPLETE,19,195,17,47.0,53.0,3.5,21,20.0,3.0,2.3,3.9000000000000004,60.0,45,320.0,120.0,7,4.0,150,-999615.42596,441.99403999998225,1.4387577801638027,1617,57.42000000000144,0.03968199010695374,0.8843537414965986,0.24973244008486672,False,,
153,COMPLETE,18,190,17,48.0,55.0,3.4000000000000004,22,17.5,3.0,2.5,3.8000000000000003,50.0,45,340.0,130.0,7,4.0,150,654.6299999999928,689.2599999999929,1.912600791769823,1608,34.63000000000011,0.020500100635781497,0.9210199004975125,0.4042806724199889,False,,
154,COMPLETE,18,190,17,48.0,55.0,3.4000000000000004,22,17.5,3.0,2.6,3.9000000000000004,60.0,45,340.0,130.0,8,4.0,135,610.1199999999985,651.5099999999961,1.6230371999617448,1761,41.3899999999976,0.02506191303715854,0.9085746734809768,0.3375895691195681,False,,
155,COMPLETE,18,195,17,48.0,55.0,3.4000000000000004,22,17.5,3.0,2.4000000000000004,3.9000000000000004,60.0,45,340.0,130.0,8,4.0,135,588.3399999999983,629.0700000000002,1.5898895369554222,1771,40.73000000000184,0.024954508415178458,0.8983625070581592,0.3325759343781531,False,,
156,COMPLETE,18,195,17,48.0,54.0,3.3000000000000003,23,17.5,3.0,2.4000000000000004,3.9000000000000004,60.0,45,340.0,130.0,8,4.0,135,612.4199999999964,677.4699999999984,1.6457876575219694,1791,65.050000000002,0.03870641437581936,0.9000558347292016,0.3468285222893029,False,,
157,COMPLETE,19,195,18,49.0,55.0,3.3000000000000003,23,17.5,3.0,2.4000000000000004,3.8000000000000003,80.0,45,340.0,120.0,8,4.0,135,-999702.18034,413.58965999999054,1.2984796685014557,1743,115.77000000000317,0.0816909952757554,0.8691910499139415,0.20844057729713475,False,,
158,COMPLETE,18,195,16,48.0,54.0,3.4000000000000004,23,17.5,3.0,2.4000000000000004,3.6,60.0,45,330.0,130.0,8,4.0,135,536.174039999988,606.2340399999862,1.5437340120053746,1829,70.05999999999813,0.04353272364653971,0.8983050847457628,0.3126491547734482,False,,
159,COMPLETE,18,195,17,48.0,55.0,3.2,23,17.5,3.0,2.5,3.6,300.0,45,330.0,120.0,8,4.0,135,-999599.18834,504.5379599999977,1.1702521363550795,1473,103.72630000000572,0.06864300180777552,0.7012898845892735,0.15605517300694183,False,,
160,COMPLETE,18,195,17,49.0,55.0,3.4000000000000004,23,17.5,3.0,2.4000000000000004,3.9000000000000004,70.0,45,330.0,130.0,8,4.0,135,-999516.58596,523.3740399999933,1.4091576750185622,1793,39.96000000000049,0.02623124652957895,0.8817624093697713,0.2697614455119891,False,,
161,COMPLETE,18,195,16,48.0,54.0,3.4000000000000004,22,20.0,3.0,2.4000000000000004,3.7,60.0,45,340.0,130.0,8,4.0,135,546.9640399999944,614.334039999992,1.5498646332093176,1831,67.36999999999762,0.04165239405991353,0.8973238667394866,0.3143425977792501,False,,
162,COMPLETE,18,200,16,48.0,54.0,3.3000000000000003,22,20.0,3.0,2.5,3.7,60.0,45,320.0,130.0,8,4.0,135,597.9340399999928,653.0040399999903,1.6097792523117858,1822,55.069999999997435,0.03324691991767716,0.9045005488474204,0.3326351921852728,False,,
163,COMPLETE,18,200,17,48.0,54.0,3.3000000000000003,21,20.0,3.0,2.5,3.5,60.0,45,320.0,120.0,8,4.0,120,668.929999999998,725.4400000000005,1.7354718358408692,1789,56.51000000000249,0.03268741323461503,0.907769703745109,0.3782700451150446,False,,
164,COMPLETE,18,200,17,48.0,56.0,3.5,20,22.5,3.0,2.5,3.5,60.0,45,320.0,130.0,8,4.0,120,615.7199999999839,649.1899999999864,1.6680009054988347,1739,33.47000000000253,0.02025379266942372,0.9108683151236343,0.3576048221863868,False,,
165,COMPLETE,18,200,17,48.0,56.0,3.2,20,22.5,3.0,2.5,3.5,80.0,45,320.0,130.0,8,4.0,120,-999582.52034,476.97965999998496,1.3581212348084126,1712,59.50000000000637,0.04023533519070927,0.8802570093457944,0.2381928925195306,False,,
166,COMPLETE,17,200,17,48.0,55.0,3.5,24,20.0,3.0,2.4000000000000004,3.5,60.0,45,320.0,120.0,8,4.5,120,602.5000000000014,637.760000000002,1.610413476263403,1774,35.26000000000067,0.021488076737908,0.9013528748590756,0.34770443644317506,False,,
167,COMPLETE,17,200,18,48.0,56.0,3.5,24,20.0,3.0,2.5,3.5,70.0,45,320.0,110.0,8,4.5,120,556.589659999976,614.8696599999762,1.5844188767657985,1673,58.2800000000002,0.03601288519775692,0.8977884040645547,0.3183238802085501,False,,
168,COMPLETE,17,200,18,48.0,55.0,3.5,24,20.0,3.0,2.5,3.5,80.0,45,310.0,110.0,8,4.5,120,567.1596599999821,637.1996599999834,1.5193513666373228,1697,70.04000000000133,0.04273546880266357,0.882734236888627,0.29453719953710544,False,,
169,COMPLETE,17,200,18,49.0,56.0,3.5,24,22.5,3.0,2.5,3.4000000000000004,90.0,45,300.0,110.0,8,4.5,120,-999729.42068,359.8693199999811,1.245577742948261,1699,89.29000000000815,0.06517949669837209,0.8616833431430253,0.1736220140150533,False,,
170,COMPLETE,17,200,18,48.0,57.0,3.3000000000000003,24,22.5,3.0,2.5,3.4000000000000004,70.0,45,310.0,110.0,8,4.5,120,586.3077399999759,626.5077399999775,1.6236201665977725,1636,40.20000000000164,0.024674418288621252,0.8985330073349633,0.3337409673170451,False,,
171,COMPLETE,17,200,18,48.0,57.0,3.3000000000000003,24,22.5,3.0,2.5,3.4000000000000004,70.0,45,310.0,110.0,8,4.5,120,586.3077399999759,626.5077399999775,1.6236201665977725,1636,40.20000000000164,0.024674418288621252,0.8985330073349633,0.3337409673170451,False,,
172,COMPLETE,17,200,18,48.0,57.0,3.3000000000000003,24,22.5,3.0,2.5,3.5,80.0,45,310.0,110.0,8,5.0,120,-999508.07226,542.2977399999767,1.45443297062284,1629,50.37000000000171,0.032638113227026894,0.8809085328422345,0.27081247227643623,False,,
173,COMPLETE,17,200,19,48.0,55.0,3.3000000000000003,24,20.0,3.0,2.5,3.4000000000000004,70.0,45,320.0,110.0,8,4.5,120,511.20561999998245,573.6756199999818,1.526972967480283,1665,62.469999999999345,0.039391984498563605,0.8954954954954955,0.3024945696525056,False,,
174,COMPLETE,16,200,18,49.0,58.0,3.2,25,20.0,3.0,2.5,3.5,90.0,45,310.0,110.0,8,4.5,120,-999760.2326,309.7173999999899,1.219040266858512,1594,69.95000000000391,0.05314552361219087,0.8557089084065245,0.15185288361486574,False,,
175,COMPLETE,16,200,19,48.0,57.0,3.3000000000000003,25,20.0,3.0,2.6,3.4000000000000004,70.0,45,300.0,120.0,9,4.5,120,531.5417799999748,569.4217799999758,1.5441252138074923,1635,37.88000000000102,0.024076141930205127,0.8972477064220183,0.29530041384424777,False,,
176,COMPLETE,17,190,17,48.0,58.0,3.5,24,22.5,3.0,2.4000000000000004,3.3000000000000003,70.0,45,320.0,120.0,8,5.0,120,-999579.7778800001,465.28807999998287,1.4158382726080543,1634,45.06596000000172,0.030755699589122602,0.8861689106487148,0.24943555047288493,False,,
177,COMPLETE,17,200,18,48.0,56.0,3.4000000000000004,24,20.0,3.0,2.5,3.5,70.0,45,290.0,100.0,8,4.5,120,567.2296599999781,625.3096599999776,1.5943418465760766,1673,58.07999999999947,0.0356592553333213,0.8977884040645547,0.32592462700566865,False,,
178,COMPLETE,15,200,18,49.0,56.0,3.4000000000000004,24,20.0,3.0,2.5,3.5,80.0,45,280.0,110.0,8,4.5,120,-999691.1463,383.2536999999778,1.2826908468604135,1702,74.40000000000464,0.05333739768127539,0.8742655699177438,0.19750491705963485,False,,
179,COMPLETE,16,200,17,48.0,56.0,3.2,23,22.5,3.0,2.3,3.3000000000000003,70.0,45,290.0,100.0,8,4.5,120,-999564.7000000001,481.7099999999773,1.4088039105860597,1723,46.409999999998945,0.03113720228111343,0.8827626233313988,0.2658124691995387,False,,
180,COMPLETE,18,200,17,50.0,55.0,3.5,24,22.5,3.0,2.4000000000000004,3.4000000000000004,90.0,45,310.0,100.0,8,4.5,120,-999464.14472,575.1952800000022,1.4115626115939877,1803,39.33999999999742,0.024974681234441843,0.8713255684969495,0.28002449079478775,False,,
181,COMPLETE,18,190,18,48.0,57.0,3.4000000000000004,26,20.0,3.0,2.6,3.5,70.0,45,320.0,120.0,8,4.5,120,516.5177399999724,559.7177399999745,1.5415381211500052,1625,43.20000000000209,0.02769731913160313,0.8996923076923077,0.29021087303605814,False,,
182,COMPLETE,17,200,18,48.0,56.0,3.3000000000000003,25,20.0,3.0,2.4000000000000004,3.6,80.0,45,330.0,110.0,8,4.5,105,-999511.0263,554.4136999999754,1.4599667189448091,1668,65.44000000000051,0.042009208516084036,0.8782973621103117,0.27495675629189104,False,,
183,COMPLETE,17,195,17,49.0,55.0,3.4000000000000004,24,22.5,3.0,2.5,3.4000000000000004,270.0,45,280.0,100.0,9,4.5,120,-999675.52396,437.4623399999989,1.1441980387193889,1601,112.98630000000139,0.0783303984989698,0.7158026233603998,0.13719764595031553,False,,
184,COMPLETE,18,190,18,48.0,55.0,3.6,23,20.0,3.0,2.6,3.5,60.0,45,350.0,120.0,8,4.5,120,665.9199999999846,714.3799999999851,1.7724363133082313,1715,48.46000000000049,0.028266778660507537,0.9119533527696793,0.3773971234327652,False,,
185,COMPLETE,18,195,18,49.0,56.0,3.2,23,20.0,3.0,2.6,3.5,60.0,45,300.0,120.0,8,5.0,120,531.2340399999862,563.6940399999867,1.5596366741126708,1731,32.46000000000049,0.020758536625234414,0.9093009820912767,0.3136666388108305,False,,
186,COMPLETE,16,200,19,48.0,55.0,3.5,23,20.0,3.0,2.5,3.6,80.0,45,310.0,120.0,8,4.5,105,-999558.20034,525.68965999998,1.4294694445637504,1650,83.89000000000306,0.05460132293102351,0.8812121212121212,0.2552491289131132,False,,
187,COMPLETE,17,190,17,47.0,57.0,3.3000000000000003,24,20.0,3.0,2.6,3.3000000000000003,70.0,40,320.0,110.0,8,4.5,120,-999556.31034,480.04965999998603,1.4481150208690647,1622,36.36000000000104,0.024455704860160604,0.8964241676942046,0.2461862969162894,False,,
188,COMPLETE,18,195,19,48.0,55.0,3.5,23,22.5,3.0,2.5,3.6,60.0,40,350.0,110.0,8,4.5,120,616.4556199999834,651.2356199999836,1.7062493510767003,1681,34.7800000000002,0.020906397274613995,0.91017251635931,0.3573803118170366,False,,
189,COMPLETE,19,195,17,47.0,55.0,3.1,23,22.5,3.0,2.6,3.6,60.0,45,350.0,120.0,8,4.0,120,621.3096599999922,662.0896599999905,1.6802353599731985,1718,40.77999999999838,0.024452697599652084,0.9086146682188592,0.3441073196454752,False,,
190,COMPLETE,19,190,19,49.0,55.0,3.1,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.0,120,659.0840399999915,694.0440399999893,1.6710861817232385,1844,34.95999999999776,0.0206370077604346,0.9126898047722343,0.3557614993366742,False,,
191,COMPLETE,19,190,19,49.0,55.0,3.6,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.0,120,659.0840399999915,694.0440399999893,1.6710861817232385,1844,34.95999999999776,0.0206370077604346,0.9126898047722343,0.3557614993366742,False,,
192,COMPLETE,18,190,19,49.0,55.0,3.6,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.0,120,646.774039999987,688.4640399999889,1.6637781312970528,1840,41.690000000001874,0.02469107959207834,0.9130434782608695,0.35555036543480306,False,,
193,COMPLETE,18,190,19,50.0,55.0,3.1,23,25.0,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.0,120,554.464039999993,588.3240399999927,1.5341844463612788,1877,33.85999999999967,0.021318068068780113,0.9099627064464572,0.31145525382034306,False,,
194,COMPLETE,18,190,19,49.0,55.0,3.1,23,22.5,3.0,2.5,3.6,60.0,40,350.0,120.0,9,5.0,120,647.6940399999876,686.5840399999888,1.6607678404727204,1847,38.89000000000124,0.02305844184319537,0.9095831077422848,0.3589403036206419,False,,
195,COMPLETE,19,180,19,49.0,55.0,3.1,23,25.0,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,663.8340399999865,705.5240399999884,1.6928041557013132,1833,41.690000000001874,0.024444099890847715,0.9138025095471904,0.36586483732520925,False,,
196,COMPLETE,19,180,19,50.0,55.0,3.1,23,25.0,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,580.004039999993,613.8640399999927,1.5684610554974157,1877,33.85999999999967,0.020980701695292637,0.9115610015982951,0.3262867254720367,False,,
197,COMPLETE,18,185,19,49.0,54.0,3.0,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.0,105,701.2840399999986,745.3840399999985,1.7110679030011633,1886,44.09999999999991,0.025266645614566263,0.9135737009544008,0.37447566652567105,False,,
198,COMPLETE,19,185,19,49.0,54.0,3.0,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.0,105,711.4940399999987,753.6840399999987,1.7189857859691293,1888,42.190000000000055,0.02405792550863386,0.9136652542372882,0.377722922566942,False,,
199,COMPLETE,19,180,19,49.0,54.0,3.0,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.0,105,702.3440399999977,746.4440399999976,1.7095610562938441,1883,44.09999999999991,0.025251310084919737,0.9129049389272438,0.3743671655377701,False,,
200,COMPLETE,19,180,19,50.0,54.0,3.0,23,25.0,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.0,105,564.0340400000018,609.2940400000016,1.5309150510181875,1927,45.25999999999976,0.028124133237950547,0.909704203425013,0.3145530668782391,False,,
201,COMPLETE,19,185,19,49.0,54.0,3.0,23,22.5,3.0,2.6,3.7,60.0,40,350.0,120.0,9,5.5,105,714.7440399999987,756.9340399999987,1.72208616183008,1888,42.190000000000055,0.024013422837433376,0.9136652542372882,0.3793541593075854,False,,
202,COMPLETE,19,185,20,49.0,54.0,2.9000000000000004,23,22.5,3.0,2.6,3.7,60.0,40,350.0,120.0,9,5.5,105,643.8240399999945,701.6340399999931,1.6683565665513993,1828,57.80999999999858,0.03397322728687234,0.9108315098468271,0.3531017577644858,False,,
203,COMPLETE,19,185,20,49.0,54.0,2.9000000000000004,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,641.094039999994,698.9040399999926,1.665756046447378,1828,57.80999999999858,0.034027819487673264,0.9108315098468271,0.3516656279942476,False,,
204,COMPLETE,19,185,20,49.0,54.0,2.9000000000000004,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,641.094039999994,698.9040399999926,1.665756046447378,1828,57.80999999999858,0.034027819487673264,0.9108315098468271,0.3516656279942476,False,,
205,COMPLETE,19,185,20,49.0,54.0,2.9000000000000004,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,641.094039999994,698.9040399999926,1.665756046447378,1828,57.80999999999858,0.034027819487673264,0.9108315098468271,0.3516656279942476,False,,
206,COMPLETE,19,185,20,49.0,54.0,2.9000000000000004,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,641.094039999994,698.9040399999926,1.665756046447378,1828,57.80999999999858,0.034027819487673264,0.9108315098468271,0.3516656279942476,False,,
207,COMPLETE,19,180,20,49.0,54.0,2.9000000000000004,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,632.7099999999928,691.3199999999915,1.656206395762728,1824,58.60999999999876,0.03465340680651743,0.9100877192982456,0.34788003651504595,False,,
208,COMPLETE,19,180,20,49.0,54.0,2.9000000000000004,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,632.7099999999928,691.3199999999915,1.656206395762728,1824,58.60999999999876,0.03465340680651743,0.9100877192982456,0.34788003651504595,False,,
209,COMPLETE,19,180,20,50.0,54.0,2.9000000000000004,23,25.0,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,555.5840400000034,610.2640400000037,1.5492925652565297,1875,54.68000000000029,0.03395716394436789,0.9077333333333333,0.31476143749935304,False,,
210,COMPLETE,20,175,20,49.0,54.0,2.9000000000000004,23,22.5,3.0,2.6,3.7,70.0,40,350.0,120.0,9,5.5,105,552.9540399999937,620.3340399999925,1.5086748284146851,1794,67.37999999999874,0.04158401807074241,0.8968784838350056,0.29903357693458293,False,,
211,COMPLETE,19,185,20,49.0,54.0,3.0,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,641.094039999994,698.9040399999926,1.665756046447378,1828,57.80999999999858,0.034027819487673264,0.9108315098468271,0.3516656279942476,False,,
212,COMPLETE,19,185,20,49.0,54.0,3.0,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,641.094039999994,698.9040399999926,1.665756046447378,1828,57.80999999999858,0.034027819487673264,0.9108315098468271,0.3516656279942476,False,,
213,COMPLETE,20,185,20,49.0,54.0,3.0,23,25.0,3.0,2.6,3.7,60.0,40,350.0,120.0,9,5.5,105,660.3340399999947,718.1440399999933,1.6944762881014948,1829,57.80999999999858,0.03364677154774451,0.9114270092946966,0.3608429310158045,False,,
214,COMPLETE,20,185,20,49.0,54.0,3.0,23,25.0,3.0,2.6,3.7,60.0,40,350.0,120.0,9,5.5,105,660.3340399999947,718.1440399999933,1.6944762881014948,1829,57.80999999999858,0.03364677154774451,0.9114270092946966,0.3608429310158045,False,,
215,COMPLETE,20,185,21,50.0,54.0,3.0,23,25.0,3.0,2.6,3.7,70.0,40,350.0,120.0,9,5.5,105,-999501.53034,561.7396599999988,1.4559669982747527,1795,63.26999999999862,0.04051251410238161,0.8935933147632312,0.27859045799251597,False,,
216,COMPLETE,20,185,20,49.0,54.0,3.0,23,25.0,3.0,2.6,3.7,60.0,40,360.0,120.0,9,5.5,105,665.7140399999939,725.5040399999925,1.701593725823914,1829,59.7899999999986,0.034650744718047057,0.9114270092946966,0.364396348011819,False,,
217,COMPLETE,20,185,21,49.0,54.0,3.0,23,25.0,3.0,2.6,3.7,70.0,40,360.0,120.0,9,5.5,105,550.4340399999924,621.01403999999,1.5534933822939503,1725,70.57999999999765,0.04354064693973785,0.9008695652173913,0.3051519407921731,False,,
218,COMPLETE,20,185,20,50.0,54.0,2.8,23,25.0,3.0,2.6,3.7,60.0,40,340.0,120.0,9,5.5,105,562.6940400000049,617.3740400000052,1.5617853769507313,1872,54.68000000000029,0.033807887753657846,0.9086538461538461,0.3191925822730189,False,,
219,COMPLETE,19,185,20,49.0,54.0,2.8,23,25.0,3.0,2.6,3.6,60.0,40,360.0,120.0,9,6.0,105,646.4740399999932,706.2640399999918,1.6727669724421,1828,59.7899999999986,0.035041469900519547,0.9108315098468271,0.3552318587874484,False,,
220,COMPLETE,20,180,19,49.0,54.0,2.8,23,27.5,3.0,2.6,3.7,70.0,40,360.0,120.0,9,6.0,105,578.1996599999961,653.1696599999968,1.521695014397516,1864,74.97000000000071,0.04534924745715503,0.8986051502145923,0.3192511648478602,False,,
221,COMPLETE,19,185,20,49.0,54.0,3.0,23,25.0,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.5,105,641.094039999994,698.9040399999926,1.665756046447378,1828,57.80999999999858,0.034027819487673264,0.9108315098468271,0.35166038176464837,False,,
222,COMPLETE,19,185,20,49.0,54.0,3.1,23,22.5,3.0,2.6,3.6,60.0,40,340.0,120.0,9,6.0,105,626.1840399999946,685.1940399999935,1.6526962916392745,1828,59.009999999998854,0.03501673908127463,0.9108315098468271,0.3466039466530174,False,,
223,COMPLETE,19,185,19,50.0,54.0,3.0,23,25.0,3.0,2.6,3.7,60.0,40,360.0,120.0,9,5.5,105,589.6580800000019,634.6680800000012,1.5552505883485144,1923,45.00999999999931,0.02753464177265838,0.9100364014560582,0.3262085019611222,False,,
224,COMPLETE,19,175,20,49.0,55.0,2.8,23,22.5,3.0,2.6,3.6,60.0,40,350.0,120.0,9,5.0,90,496.0380799999833,547.2580799999845,1.5072135687473798,1763,51.220000000001164,0.033103721132289494,0.9052750992626205,0.28607990391991495,False,,
225,COMPLETE,20,180,21,49.0,54.0,2.9000000000000004,24,22.5,3.0,2.6,3.7,70.0,40,340.0,110.0,9,5.5,105,503.3040399999836,574.5440399999829,1.5003039385574428,1724,71.23999999999933,0.045244844342365996,0.8990719257540604,0.28402369536998273,False,,
226,COMPLETE,19,185,19,50.0,53.0,3.0,23,22.5,3.0,2.6,3.6,60.0,40,360.0,120.0,10,5.0,105,638.4199999999928,683.8699999999922,1.5726067771349088,2071,45.44999999999936,0.02699139482264045,0.9116368903911154,0.3329397296212084,False,,
227,COMPLETE,20,185,20,49.0,55.0,3.0,22,25.0,3.0,2.6,3.5,70.0,40,350.0,120.0,9,6.0,90,-999555.46192,504.2180799999836,1.4091915308018659,1744,59.6800000000012,0.0396750981745957,0.893348623853211,0.2549629150342197,False,,
228,COMPLETE,19,180,21,49.0,54.0,2.9000000000000004,23,27.5,3.0,2.7,3.7,60.0,40,370.0,110.0,9,5.5,105,632.0640399999847,689.9840399999816,1.7184190666583168,1739,57.91999999999689,0.034272513011423186,0.9166187464059804,0.3543809108262284,False,,
229,COMPLETE,20,185,19,50.0,55.0,3.1,24,22.5,3.0,2.6,3.6,50.0,40,350.0,120.0,9,5.0,105,646.809999999994,680.7599999999943,1.73225983413469,1893,33.95000000000027,0.02019919560198981,0.9249867934495509,0.387063173406479,False,,
230,COMPLETE,20,185,19,50.0,55.0,3.1,24,22.5,2.75,2.6,3.5,50.0,40,340.0,110.0,10,5.0,105,659.7399999999898,693.68999999999,1.7083746055735323,1995,33.95000000000027,0.020044990523649824,0.924812030075188,0.38576342116060386,False,,
231,COMPLETE,20,185,19,50.0,55.0,3.1,24,22.5,2.75,2.6,3.5,50.0,40,340.0,110.0,10,5.0,105,659.7399999999898,693.68999999999,1.7083746055735323,1995,33.95000000000027,0.020044990523649824,0.924812030075188,0.38576342116060386,False,,
232,COMPLETE,20,180,19,50.0,55.0,3.1,24,25.0,2.75,2.6,3.5,50.0,40,340.0,110.0,10,5.0,105,641.03999999999,674.9899999999902,1.6772520217526465,2003,33.95000000000027,0.020268777724046394,0.9236145781328008,0.3745935190735758,False,,
233,COMPLETE,20,185,19,50.0,55.0,3.1,24,22.5,2.75,2.7,3.5,50.0,40,340.0,110.0,10,5.0,105,674.989999999988,709.9899999999884,1.7352380755131112,1987,35.000000000000455,0.020467955952959194,0.9285354806240563,0.38972726272747066,False,,
234,COMPLETE,20,175,19,50.0,55.0,3.1,24,22.5,2.75,2.7,3.5,50.0,40,340.0,110.0,10,5.0,105,631.2699999999859,666.2699999999863,1.6644891690269958,1986,35.000000000000455,0.02100499918980762,0.9259818731117825,0.36434196355672027,False,,
235,COMPLETE,20,190,19,50.0,55.0,3.1,24,25.0,2.75,2.5,3.5,50.0,40,360.0,110.0,10,5.0,105,657.4999999999909,690.4099999999908,1.69036857788532,2010,32.909999999999854,0.019468649617548427,0.9203980099502488,0.3816364704771256,False,,
236,COMPLETE,21,190,19,50.0,55.0,3.1,24,25.0,2.75,2.5,3.5,50.0,40,360.0,110.0,10,5.0,90,662.0799999999908,694.9899999999907,1.6973050527752067,2012,32.909999999999854,0.019416043752470538,0.9209741550695825,0.38428039220805366,False,,
237,COMPLETE,21,190,19,50.0,55.0,3.1,24,25.0,2.75,2.5,3.5,50.0,40,360.0,110.0,10,5.0,90,662.0799999999908,694.9899999999907,1.6973050527752067,2012,32.909999999999854,0.019416043752470538,0.9209741550695825,0.38428039220805366,False,,
238,COMPLETE,21,190,19,50.0,55.0,3.1,25,27.5,2.75,2.5,3.5,50.0,35,360.0,110.0,10,5.0,90,662.1999999999862,695.2299999999864,1.6971681273941461,2010,33.0300000000002,0.0194840818060089,0.9208955223880597,0.38389773013154105,False,,
239,COMPLETE,21,190,19,50.0,55.0,3.1,25,27.5,2.75,2.5,3.4000000000000004,50.0,35,360.0,110.0,10,5.0,90,660.6599999999853,693.6899999999855,1.69562383425923,2010,33.0300000000002,0.019501797849665808,0.9208955223880597,0.38321546496388,False,,
240,COMPLETE,21,190,19,50.0,55.0,3.1,25,27.5,2.75,2.5,3.4000000000000004,50.0,35,370.0,100.0,10,5.0,90,671.0999999999863,704.1299999999865,1.7060929383686554,2010,33.0300000000002,0.01938232411846541,0.9208955223880597,0.3880456419827778,False,,
241,COMPLETE,21,190,19,50.0,55.0,3.1,25,27.5,2.75,2.5,3.4000000000000004,50.0,35,370.0,100.0,10,5.0,90,671.0999999999863,704.1299999999865,1.7060929383686554,2010,33.0300000000002,0.01938232411846541,0.9208955223880597,0.3880456419827778,False,,
242,COMPLETE,21,190,19,50.0,55.0,3.1,25,27.5,2.75,2.5,3.5,50.0,35,370.0,100.0,10,5.0,90,673.3499999999872,706.3799999999874,1.708349210806032,2010,33.0300000000002,0.019356766956950062,0.9208955223880597,0.38903702815830793,False,,
243,COMPLETE,21,190,19,50.0,55.0,3.1,25,27.5,2.75,2.5,3.4000000000000004,50.0,35,370.0,100.0,10,5.0,90,671.0999999999863,704.1299999999865,1.7060929383686554,2010,33.0300000000002,0.01938232411846541,0.9208955223880597,0.3880456419827778,False,,
244,COMPLETE,21,190,19,50.0,56.0,3.1,26,27.5,2.75,2.5,3.4000000000000004,50.0,35,370.0,100.0,10,5.0,90,637.621779999978,670.7217799999784,1.7107856540792632,1944,33.100000000000364,0.01981179655178781,0.9202674897119342,0.3721307440067888,False,,
245,COMPLETE,21,190,19,50.0,55.0,3.2,25,27.5,2.75,2.5,3.4000000000000004,50.0,35,370.0,100.0,10,5.0,90,671.0999999999863,704.1299999999865,1.7060929383686554,2010,33.0300000000002,0.01938232411846541,0.9208955223880597,0.3880456419827778,False,,
246,COMPLETE,21,190,19,50.0,55.0,3.2,25,27.5,2.75,2.5,3.3000000000000003,50.0,35,370.0,100.0,10,5.0,90,672.2899999999868,705.319999999987,1.7072862557910902,2010,33.0300000000002,0.01936879881781745,0.9208955223880597,0.38883109533179583,False,,
247,COMPLETE,21,190,19,50.0,56.0,3.2,25,27.5,2.75,2.5,3.2,50.0,35,370.0,90.0,10,5.0,90,635.2161599999797,668.2461599999799,1.708067898618276,1946,33.0300000000002,0.01979923634291512,0.920349434737924,0.37149547712664543,False,,
248,COMPLETE,21,190,19,50.0,55.0,3.2,25,27.5,2.75,2.5,3.3000000000000003,50.0,35,370.0,100.0,10,5.0,90,672.2899999999868,705.319999999987,1.7072862557910902,2010,33.0300000000002,0.01936879881781745,0.9208955223880597,0.38883109533179583,False,,
249,COMPLETE,21,190,19,50.0,55.0,3.2,26,27.5,2.75,2.5,3.3000000000000003,50.0,35,370.0,100.0,10,5.0,90,674.4556199999847,707.5556199999851,1.7093613845276685,2009,33.100000000000364,0.0193844344584223,0.9208561473369836,0.3897382677481275,False,,
250,COMPLETE,21,190,19,50.0,55.0,3.2,25,27.5,2.75,2.5,3.3000000000000003,50.0,35,370.0,100.0,10,5.0,90,672.2899999999868,705.319999999987,1.7072862557910902,2010,33.0300000000002,0.01936879881781745,0.9208955223880597,0.38883109533179583,False,,
251,COMPLETE,21,190,19,50.0,56.0,3.2,26,27.5,2.75,2.5,3.3000000000000003,50.0,35,370.0,100.0,10,5.0,90,639.6717799999777,672.7717799999781,1.7129581056595031,1944,33.100000000000364,0.01978751697975249,0.9202674897119342,0.3736984094416922,False,,
252,COMPLETE,21,190,19,50.0,55.0,3.2,25,27.5,2.75,2.5,3.2,50.0,35,370.0,90.0,11,5.0,90,651.9099999999821,684.9399999999823,1.635138769113775,2089,33.0300000000002,0.0196030719194752,0.9181426519865965,0.36366788330757166,False,,
253,COMPLETE,21,180,19,50.0,55.0,3.2,26,27.5,2.75,2.4000000000000004,3.4000000000000004,50.0,35,370.0,100.0,10,5.0,90,692.2156199999881,724.2656199999883,1.7431990772770554,2011,32.05000000000018,0.01858762340804568,0.9179512680258578,0.40345851437618385,False,,
254,COMPLETE,21,180,19,50.0,56.0,3.2,26,27.5,2.75,2.4000000000000004,3.3000000000000003,50.0,35,370.0,100.0,10,5.0,90,619.8617799999832,655.1917799999827,1.6952194721447977,1949,35.32999999999947,0.02134495858842402,0.9158542842483325,0.3684182960763705,False,,
255,COMPLETE,21,180,18,50.0,55.0,3.2,27,30.0,2.75,2.5,3.4000000000000004,50.0,35,370.0,100.0,11,5.0,90,684.2640399999837,730.2740399999834,1.6762735935546467,2144,46.00999999999976,0.026591163559270763,0.917910447761194,0.3803812834153004,False,,
256,COMPLETE,21,180,18,50.0,55.0,3.2,27,30.0,2.75,2.5,3.4000000000000004,50.0,35,370.0,100.0,11,5.0,90,684.2640399999837,730.2740399999834,1.6762735935546467,2144,46.00999999999976,0.026591163559270763,0.917910447761194,0.3803812834153004,False,,
257,COMPLETE,21,175,18,50.0,55.0,3.2,28,30.0,2.75,2.4000000000000004,3.4000000000000004,50.0,35,380.0,100.0,11,5.0,90,674.2240399999814,715.5240399999811,1.6605467352270367,2135,41.29999999999973,0.024074276452576076,0.9147540983606557,0.37608842170407786,False,,
258,COMPLETE,21,175,18,50.0,55.0,3.2,27,30.0,2.75,2.4000000000000004,3.3000000000000003,50.0,35,380.0,100.0,11,5.0,90,671.3340399999838,712.5740399999836,1.6551742260552837,2136,41.23999999999978,0.02408071069441189,0.9138576779026217,0.37470621423767114,False,,
259,COMPLETE,21,170,18,50.0,55.0,3.2,27,30.0,2.75,2.4000000000000004,3.3000000000000003,50.0,35,380.0,100.0,11,5.0,90,686.5540399999836,728.1440399999833,1.678561547708898,2133,41.58999999999969,0.02406628095653421,0.9146741678387248,0.3818617658404983,False,,
260,COMPLETE,21,175,18,50.0,56.0,3.2,27,30.0,2.75,2.4000000000000004,3.2,50.0,35,380.0,100.0,11,5.0,90,612.5421199999785,653.042119999978,1.628166717968432,2089,40.499999999999545,0.024461512714925162,0.9143130684538057,0.3529837078389122,False,,
261,COMPLETE,21,175,18,50.0,55.0,3.2,28,30.0,2.75,2.4000000000000004,3.3000000000000003,50.0,35,380.0,90.0,11,5.0,90,681.9840399999734,723.674039999974,1.668070529804359,2135,41.69000000000051,0.024186707598149556,0.9147540983606557,0.38003521492716474,False,,
262,COMPLETE,21,180,18,50.0,55.0,3.2,28,30.0,2.75,2.3,3.3000000000000003,50.0,35,380.0,100.0,11,5.0,90,703.26403999998,747.7640399999809,1.707138909641102,2152,44.50000000000091,0.025461102861460288,0.912639405204461,0.39760903316896834,False,,
263,COMPLETE,21,170,18,50.0,55.0,3.2,28,30.0,2.75,2.2,3.3000000000000003,50.0,35,380.0,90.0,11,5.0,90,708.6240399999729,745.7140399999726,1.705353701216374,2143,37.08999999999969,0.02115108866461105,0.9080727951469902,0.40087716469392387,False,,
264,COMPLETE,21,170,18,50.0,56.0,3.2,28,30.0,2.75,2.3,3.3000000000000003,50.0,35,380.0,90.0,11,5.0,90,640.4321199999697,683.3721199999684,1.6704064590813388,2090,42.93999999999869,0.025508323138914463,0.9119617224880383,0.3711808463609977,False,,
265,COMPLETE,22,170,18,50.0,55.0,3.2,27,30.0,2.75,2.2,3.3000000000000003,50.0,35,380.0,90.0,11,5.0,90,718.594039999974,755.1440399999733,1.7195891405646744,2147,36.54999999999927,0.02073213019137915,0.9091755938518864,0.40616355055511794,False,,
266,COMPLETE,22,170,18,50.0,56.0,3.2,27,30.0,2.75,2.2,3.2,50.0,35,380.0,90.0,11,5.0,90,658.0821199999702,697.8521199999702,1.6969669719456022,2098,39.76999999999998,0.023405102625460826,0.9099142040038132,0.3860614205868306,False,,
267,COMPLETE,21,165,18,50.0,55.0,3.2,28,30.0,2.75,2.2,3.3000000000000003,50.0,35,380.0,100.0,11,5.0,90,725.5140399999773,763.4740399999769,1.7381767236794827,2133,37.95999999999958,0.021503987040868058,0.9095171120487576,0.41357765723997136,False,,
268,COMPLETE,21,170,18,50.0,55.0,3.2,28,30.0,2.75,2.3,3.3000000000000003,50.0,35,380.0,100.0,11,5.0,90,693.6940399999799,736.1340399999804,1.6937853803814964,2136,42.44000000000051,0.024445117152360533,0.9119850187265918,0.3904534239567018,False,,
269,COMPLETE,22,165,18,50.0,55.0,3.2,28,30.0,2.75,2.2,3.3000000000000003,50.0,35,380.0,100.0,11,5.0,75,723.0140399999782,760.274039999978,1.7318278899188346,2138,37.25999999999976,0.021145775983124865,0.9092609915809168,0.4111398606290364,False,,
270,COMPLETE,22,165,18,50.0,61.0,3.2,28,30.0,2.75,2.2,3.1,50.0,30,380.0,90.0,11,5.0,75,426.5599999999931,465.2399999999934,1.5463962323980818,1722,38.68000000000029,0.02639840572192983,0.9065040650406504,0.2873800707462657,False,,
271,COMPLETE,22,165,18,50.0,56.0,3.2,27,30.0,2.75,2.1,3.3000000000000003,50.0,35,380.0,100.0,11,5.0,75,620.7721199999799,659.0421199999798,1.6403876283851264,2095,38.26999999999998,0.023051826698547554,0.9040572792362769,0.36986698390667655,False,,
272,COMPLETE,21,170,18,50.0,55.0,3.2,28,30.0,2.75,2.2,3.3000000000000003,50.0,35,380.0,90.0,11,5.0,90,708.6240399999729,745.7140399999726,1.705353701216374,2143,37.08999999999969,0.02115108866461105,0.9080727951469902,0.40087716469392387,False,,
273,COMPLETE,22,170,18,50.0,56.0,3.2,28,32.5,2.75,2.1,3.3000000000000003,50.0,35,380.0,90.0,11,5.0,90,649.5421199999707,687.9021199999709,1.6766893770227096,2107,38.36000000000013,0.022651419246049173,0.9055529188419554,0.3838607337958217,False,,
274,COMPLETE,21,170,18,50.0,55.0,3.2,28,30.0,2.75,2.2,3.2,50.0,35,380.0,90.0,11,5.0,90,707.554039999975,744.6440399999747,1.7043416129093065,2143,37.08999999999969,0.021164002566293746,0.9080727951469902,0.4006987142870508,False,,
275,COMPLETE,21,170,18,50.0,55.0,3.2,28,30.0,2.75,2.2,3.2,50.0,35,380.0,90.0,11,5.0,75,707.554039999975,744.6440399999747,1.7043416129093065,2143,37.08999999999969,0.021164002566293746,0.9080727951469902,0.4006987142870508,False,,
276,COMPLETE,22,170,18,50.0,55.0,3.2,28,32.5,2.75,2.2,3.1,50.0,35,380.0,90.0,11,5.0,75,715.2240399999746,751.9640399999744,1.7160948490129193,2149,36.73999999999978,0.02087708723424431,0.9092601209865053,0.40482159071174206,False,,
277,COMPLETE,22,165,18,50.0,56.0,3.2,28,32.5,2.75,2.2,3.1,50.0,35,380.0,90.0,11,5.0,90,638.4621199999694,677.8321199999693,1.669001302802973,2090,39.36999999999989,0.02344649659553566,0.9090909090909091,0.37579792785468386,False,,
278,COMPLETE,22,170,18,50.0,55.0,3.3000000000000003,28,30.0,2.75,2.2,3.2,50.0,35,380.0,80.0,11,5.0,75,725.4440399999771,761.6840399999774,1.7253511984686831,2147,36.24000000000024,0.020484482428011142,0.9091755938518864,0.40920597286345023,False,,
279,COMPLETE,22,170,18,50.0,55.0,3.3000000000000003,28,30.0,2.5,2.2,3.2,50.0,35,380.0,80.0,11,5.0,75,725.4440399999771,761.6840399999774,1.7253511984686831,2147,36.24000000000024,0.020484482428011142,0.9091755938518864,0.40920597286345023,False,,
280,COMPLETE,22,170,18,50.0,56.0,3.3000000000000003,28,30.0,2.5,2.2,3.2,50.0,35,380.0,80.0,11,5.0,75,665.792119999973,705.1121199999732,1.7039295184090495,2098,39.320000000000164,0.023047766813246665,0.9099142040038132,0.3892852613929353,False,,
281,COMPLETE,22,170,18,50.0,55.0,3.3000000000000003,28,30.0,2.5,2.2,3.2,50.0,35,390.0,80.0,12,5.0,75,715.504039999973,756.9740399999732,1.6812711858304905,2208,41.470000000000255,0.023521550584175512,0.907608695652174,0.40012361111169664,False,,
282,COMPLETE,22,170,18,50.0,55.0,3.3000000000000003,28,30.0,2.5,2.2,3.1,50.0,35,390.0,80.0,12,5.0,75,713.5540399999722,755.0240399999725,1.6795161998703774,2208,41.470000000000255,0.02354759490759659,0.907608695652174,0.39891444528068365,False,,
283,COMPLETE,22,170,18,50.0,56.0,3.3000000000000003,27,32.5,2.5,2.2,3.0,50.0,30,390.0,80.0,12,5.0,75,648.8361599999919,688.5961599999907,1.653974737401934,2151,39.759999999998854,0.023516383537925314,0.9088795908879591,0.3710726381708653,False,,
284,COMPLETE,22,165,18,50.0,55.0,3.3000000000000003,28,30.0,2.5,2.1,3.1,50.0,35,390.0,80.0,12,5.0,75,732.3640399999781,770.7240399999782,1.6973679095901906,2207,38.36000000000013,0.021663454684898612,0.9039420027186226,0.4113083150210808,False,,
285,COMPLETE,22,165,18,50.0,55.0,3.3000000000000003,28,30.0,2.5,2.1,3.2,50.0,35,390.0,80.0,12,5.0,75,734.2940399999784,772.6540399999785,1.6991142156552113,2207,38.36000000000013,0.021639868318580988,0.9039420027186226,0.41250496102408196,False,,
286,COMPLETE,22,165,18,50.0,55.0,3.3000000000000003,28,30.0,2.5,2.1,3.0,50.0,35,390.0,80.0,12,5.0,75,728.5440399999788,766.904039999979,1.693911490331964,2207,38.36000000000013,0.02171029050338273,0.9039420027186226,0.40949783720094607,False,,
287,COMPLETE,22,165,18,50.0,56.0,3.3000000000000003,28,30.0,2.5,2.1,3.0,180.0,35,390.0,80.0,12,5.0,75,-999784.53046,322.5395399999747,1.1289913220958196,1781,107.07000000000426,0.07876561314759842,0.751263335204941,0.12431505242255064,False,,
288,COMPLETE,22,165,18,50.0,55.0,3.3000000000000003,28,30.0,2.5,2.2,3.1,50.0,35,390.0,80.0,12,5.0,75,733.7140399999726,770.8540399999733,1.700228948276779,2198,37.14000000000078,0.02097293123040301,0.9076433121019108,0.4077250294775756,False,,
289,COMPLETE,23,165,18,50.0,65.0,3.3000000000000003,28,30.0,2.5,2.2,3.1,50.0,35,400.0,80.0,12,5.0,75,405.93999999996913,443.24999999996953,1.5272015795232534,1638,37.3100000000004,0.025851377100295298,0.9047619047619048,0.27574131532189683,False,,
290,COMPLETE,22,170,18,50.0,55.0,3.3000000000000003,28,30.0,2.5,2.1,3.2,50.0,35,390.0,80.0,12,5.0,60,718.8040399999772,757.1640399999774,1.6790769782688466,2217,38.36000000000013,0.021777092002491585,0.9039242219215156,0.40383697794405915,False,,
291,COMPLETE,22,170,18,50.0,55.0,3.3000000000000003,28,32.5,2.5,2.1,3.2,50.0,30,390.0,80.0,12,5.0,60,716.6440400000024,757.4740400000023,1.6793550076682358,2216,40.82999999999993,0.02315972843252978,0.9038808664259927,0.39850496016831977,False,,
292,COMPLETE,22,165,18,50.0,55.0,3.3000000000000003,28,32.5,2.5,2.2,3.2,50.0,30,390.0,80.0,12,5.0,60,739.3940400000006,773.7340400000007,1.7028450847519232,2197,34.340000000000146,0.019336739257258925,0.9076012744651798,0.4039176369218729,False,,
293,COMPLETE,23,165,17,50.0,56.0,3.3000000000000003,28,32.5,2.25,2.1,3.1,50.0,30,390.0,80.0,12,5.0,60,660.7540400000048,700.5540400000059,1.6379924958563366,2214,39.80000000000109,0.023156443934491226,0.9060523938572719,0.3895760405740098,False,,
294,COMPLETE,22,160,18,50.0,55.0,3.3000000000000003,28,32.5,2.5,2.0,3.1,50.0,30,400.0,80.0,12,5.0,60,708.3840400000058,749.384040000004,1.668490058072639,2210,40.99999999999818,0.023436820653741693,0.8986425339366516,0.396269985623567,False,,
295,COMPLETE,22,155,18,50.0,56.0,3.3000000000000003,28,32.5,2.5,2.0,3.1,50.0,30,400.0,80.0,12,5.0,60,601.4561599999963,638.256159999996,1.5887559392055894,2145,36.79999999999973,0.022453589650496077,0.8979020979020979,0.34701537381264647,False,,
296,COMPLETE,23,160,17,49.0,55.0,3.3000000000000003,28,32.5,2.5,2.1,3.0,50.0,30,390.0,80.0,12,5.0,60,682.6236999999973,723.9836999999978,1.6132262254843954,2237,41.36000000000058,0.02399094608609155,0.8980777827447475,0.3674569174286764,False,,
297,COMPLETE,22,160,18,50.0,54.0,3.3000000000000003,28,35.0,2.5,2.2,3.2,50.0,30,400.0,70.0,12,5.0,60,735.6040400000088,776.5640400000075,1.6644796180306065,2275,40.95999999999867,0.023055740788268178,0.9081318681318681,0.4028182218439981,False,,
298,COMPLETE,22,165,18,50.0,62.0,3.3000000000000003,28,35.0,2.5,2.2,3.2,50.0,30,400.0,70.0,12,5.0,60,418.36403999999715,454.36403999999624,1.5343824712440868,1715,35.99999999999909,0.024753087266926085,0.9072886297376094,0.2782856098014545,False,,
299,COMPLETE,23,160,17,50.0,55.0,3.3000000000000003,28,32.5,2.5,2.1,3.2,50.0,30,400.0,70.0,12,5.0,75,737.9280800000155,782.5480800000145,1.6634405907437848,2288,44.61999999999898,0.02499120547045423,0.902972027972028,0.4167308549268992,False,,
300,COMPLETE,23,160,17,50.0,55.0,3.3000000000000003,28,35.0,2.5,2.1,3.2,50.0,30,400.0,70.0,12,5.0,75,738.2280800000152,782.8480800000142,1.6636949293362748,2289,44.61999999999898,0.024987006980367692,0.9030144167758847,0.4168057151539455,False,,
301,COMPLETE,23,160,17,50.0,56.0,3.3000000000000003,28,32.5,2.5,2.1,3.2,210.0,30,400.0,70.0,12,5.0,45,-1000003.25866,172.3711199999866,1.0602273208975037,1776,175.62977999998975,0.14072722903900098,0.7212837837837838,0.06533269025069673,False,,
302,COMPLETE,23,165,17,50.0,55.0,3.4000000000000004,28,35.0,2.5,2.2,3.1,50.0,30,400.0,70.0,12,5.0,75,728.9380800000102,763.4680800000091,1.6421310052482923,2286,34.529999999998836,0.019554786497521674,0.9068241469816273,0.4029293136506475,False,,
303,COMPLETE,23,155,17,50.0,55.0,3.4000000000000004,28,35.0,2.5,2.0,3.1,50.0,30,400.0,70.0,12,5.0,75,750.6080800000158,792.8580800000149,1.677720195915871,2294,42.24999999999909,0.02355127495509745,0.9001743679163035,0.4243644442140266,False,,
304,COMPLETE,23,155,17,50.0,56.0,3.4000000000000004,27,35.0,2.5,2.0,2.9000000000000004,50.0,30,400.0,70.0,12,5.0,75,683.5340400000086,721.1440400000092,1.6685616650442805,2211,37.61000000000058,0.021654966382579376,0.9032112166440525,0.4024110700286253,False,,
305,COMPLETE,23,155,17,50.0,55.0,3.4000000000000004,28,35.0,2.5,2.1,3.1,50.0,25,400.0,70.0,12,5.0,75,723.8180800000044,768.6380800000037,1.658548523351359,2286,44.819999999999254,0.02526325643443031,0.9041994750656168,0.4070488836130032,False,,
306,COMPLETE,23,150,17,50.0,55.0,3.4000000000000004,27,37.5,2.25,2.1,3.0,50.0,25,400.0,70.0,12,5.0,75,683.188080000008,727.8580800000071,1.6234971303260377,2253,44.66999999999916,0.025764840271140343,0.902352418996893,0.39048728604442623,False,,
307,COMPLETE,24,165,17,50.0,54.0,3.4000000000000004,28,35.0,2.5,2.1,3.1,50.0,20,390.0,70.0,12,5.0,75,706.1680799999843,757.258079999985,1.6066509220835299,2361,51.0900000000006,0.028955558222583305,0.9038542990258365,0.3846033176212734,False,,
308,COMPLETE,23,160,17,49.0,56.0,3.4000000000000004,28,35.0,2.5,2.2,3.1,60.0,15,390.0,70.0,12,5.0,75,-999520.71068,536.3693199999842,1.4233017219453081,2105,57.08000000000402,0.03696677339883705,0.8907363420427553,0.2582854109758908,False,,
309,COMPLETE,23,155,17,50.0,55.0,3.3000000000000003,27,35.0,2.5,2.1,3.2,50.0,30,400.0,80.0,12,5.0,75,733.3280800000106,777.8980800000098,1.6655755501557317,2286,44.569999999999254,0.025022483743076446,0.9037620297462817,0.415066567582767,False,,
310,COMPLETE,24,155,17,50.0,54.0,3.3000000000000003,27,35.0,2.5,2.1,3.1,60.0,30,400.0,80.0,12,5.0,75,680.2137000000157,732.6137000000135,1.530800880373974,2311,52.39999999999782,0.030243325445249224,0.8896581566421462,0.3575725310980902,False,,
311,COMPLETE,23,155,17,49.0,55.0,3.4000000000000004,27,35.0,2.25,2.1,2.9000000000000004,60.0,25,390.0,80.0,12,5.0,75,-999412.09226,638.6077400000016,1.476610507165501,2195,50.69999999999936,0.03094090108472166,0.8838268792710706,0.30859361180263534,False,,
312,COMPLETE,22,165,17,50.0,55.0,3.3000000000000003,28,32.5,2.5,2.2,3.2,50.0,30,400.0,70.0,12,5.0,75,744.8380800000126,779.3680800000114,1.6608566558978504,2281,34.529999999998836,0.019380279175698987,0.9070583077597545,0.4122663327992482,False,,
313,COMPLETE,23,160,17,50.0,56.0,3.3000000000000003,27,35.0,2.5,2.1,3.2,50.0,30,400.0,60.0,12,5.0,75,673.1040400000065,712.8240400000077,1.6442966484688637,2209,39.720000000001164,0.022957360736731623,0.9049343594386601,0.3935337619199954,False,,
314,COMPLETE,22,150,17,49.0,54.0,3.4000000000000004,28,37.5,2.5,2.1,3.0,60.0,30,400.0,70.0,12,5.0,60,642.3837000000134,702.2237000000099,1.5198251681613273,2230,59.83999999999651,0.03515401647856046,0.885201793721973,0.33110750422485097,False,,
315,COMPLETE,24,160,17,50.0,54.0,3.3000000000000003,28,32.5,2.5,2.0,3.1,50.0,30,390.0,80.0,12,5.0,75,763.2380800000154,813.0180800000152,1.6601476814147942,2366,49.779999999999745,0.027456979358969947,0.9010989010989011,0.42601301949699905,False,,
316,COMPLETE,24,160,17,50.0,68.0,3.3000000000000003,28,32.5,2.5,1.9,3.2,50.0,30,390.0,80.0,12,5.0,75,438.7140400000025,480.844039999999,1.58926243550937,1645,42.12999999999647,0.02822791841768191,0.894224924012158,0.3155558659100974,False,,
317,COMPLETE,24,165,17,50.0,55.0,3.3000000000000003,27,32.5,2.5,2.0,3.1,50.0,30,390.0,70.0,12,5.0,75,751.108080000013,793.2180800000123,1.674109646550931,2308,42.10999999999922,0.023432351740933537,0.8999133448873483,0.42603041908782036,False,,
318,COMPLETE,24,165,17,50.0,55.0,3.4000000000000004,27,35.0,2.25,2.0,3.1,50.0,25,390.0,70.0,12,5.0,75,728.858080000004,771.1680800000034,1.6553706413753888,2307,42.30999999999949,0.023801245301855484,0.8998699609882965,0.41246371955775135,False,,
319,COMPLETE,25,165,17,50.0,56.0,3.4000000000000004,27,35.0,2.25,2.0,3.0,50.0,25,390.0,60.0,12,5.0,75,680.4540400000046,719.2640400000041,1.6612219750317234,2226,38.80999999999949,0.0223456412503505,0.9025157232704403,0.39753924748527086,False,,
320,COMPLETE,24,165,17,50.0,55.0,3.4000000000000004,27,35.0,2.5,1.9,3.1,50.0,30,400.0,70.0,12,5.0,75,758.1380800000155,797.8980800000148,1.6799533686704438,2321,39.75999999999931,0.022088053469621546,0.8944420508401552,0.430308055942394,False,,
321,COMPLETE,24,165,17,50.0,55.0,3.4000000000000004,27,37.5,2.5,1.9,3.2,50.0,30,400.0,70.0,12,5.0,75,762.7380800000163,802.4980800000156,1.6838734000306954,2324,39.75999999999931,0.022031752232243716,0.8945783132530121,0.43298248059587474,False,,
322,COMPLETE,24,165,16,50.0,56.0,3.4000000000000004,27,40.0,2.5,1.9,3.1,50.0,25,400.0,70.0,12,5.0,60,845.3240400000091,877.6640400000074,1.7908735739903154,2319,32.33999999999833,0.017121492352049725,0.8978007761966365,0.46030336180428405,False,,
323,COMPLETE,24,165,16,50.0,56.0,3.4000000000000004,27,40.0,2.25,1.9,3.1,50.0,25,400.0,70.0,12,5.0,75,845.3240400000091,877.6640400000074,1.7908735739903154,2319,32.33999999999833,0.017121492352049725,0.8978007761966365,0.46030336180428405,False,,
324,COMPLETE,25,160,16,50.0,56.0,3.4000000000000004,27,37.5,2.25,1.9,3.1,50.0,25,400.0,70.0,12,5.0,75,858.4740400000092,890.8140400000075,1.8074306742683233,2321,32.33999999999833,0.017003118458149134,0.8987505385609651,0.4668672820258996,True,0.0,
325,COMPLETE,25,160,16,50.0,57.0,3.4000000000000004,27,40.0,2.25,1.9,3.0,50.0,25,400.0,70.0,12,5.0,75,806.9021200000104,839.2421200000088,1.7941608187303986,2256,32.33999999999833,0.017476998832033998,0.8993794326241135,0.44412789233084954,False,,
326,COMPLETE,25,160,16,50.0,57.0,3.4000000000000004,27,40.0,2.25,1.9,3.0,60.0,25,400.0,70.0,12,5.0,75,764.9033600000083,804.0433600000077,1.6694031457187515,2214,39.13999999999942,0.021525324296553752,0.8848238482384824,0.40196153907079535,False,,
327,COMPLETE,25,160,16,50.0,57.0,3.5,27,40.0,2.25,1.9,3.0,60.0,25,400.0,70.0,12,5.0,75,764.9033600000083,804.0433600000077,1.6694031457187515,2214,39.13999999999942,0.021525324296553752,0.8848238482384824,0.40196153907079535,False,,
328,COMPLETE,25,160,16,49.0,58.0,3.5,27,40.0,2.25,1.9,3.0,260.0,25,400.0,70.0,12,4.5,75,-999931.59496,208.2348199999887,1.0685125146531196,1688,139.82977999999866,0.11106109043116043,0.659952606635071,0.07534159695618309,False,,
329,COMPLETE,26,155,16,42.0,57.0,3.5,27,40.0,2.25,1.9,3.0,60.0,25,400.0,60.0,12,5.0,75,407.9721200000048,440.35212000000445,1.5878682833218127,1368,32.379999999999654,0.0224751526012883,0.8830409356725146,0.28179559991935377,False,,
330,COMPLETE,25,160,16,50.0,57.0,3.4000000000000004,27,42.5,2.0,1.9,2.9000000000000004,60.0,25,400.0,70.0,12,5.0,75,764.0833600000068,803.2233600000062,1.6687204579349852,2214,39.13999999999942,0.021535035841694007,0.8848238482384824,0.4018375305264162,False,,
331,COMPLETE,25,160,16,50.0,58.0,3.4000000000000004,26,42.5,2.0,1.8,2.9000000000000004,60.0,25,400.0,70.0,12,5.0,75,682.4277399999991,729.9177399999993,1.6225468697144185,2151,47.49000000000024,0.027048150731774787,0.8754067875406788,0.3793550515441227,False,,
332,COMPLETE,26,160,16,49.0,57.0,3.4000000000000004,27,40.0,2.25,1.9,2.8,60.0,25,400.0,60.0,12,5.0,75,-999443.25226,597.4077400000026,1.453626219298301,2182,40.66000000000031,0.02530640700093984,0.8767186067827681,0.3020207816804473,False,,
333,COMPLETE,24,160,16,50.0,57.0,3.5,27,40.0,2.25,1.9,2.9000000000000004,60.0,25,400.0,70.0,12,5.0,75,761.8333600000068,800.9733600000062,1.6668472292600203,2205,39.13999999999942,0.02156172844103662,0.8843537414965986,0.40068654730336656,False,,
334,COMPLETE,25,160,15,50.0,57.0,3.5,27,40.0,2.0,1.9,2.9000000000000004,230.0,25,400.0,70.0,12,5.0,75,-999925.70182,272.7035799999943,1.0868893742196608,1918,198.40539999999874,0.15269429053875694,0.6819603753910324,0.09451036055144169,False,,
335,COMPLETE,24,155,16,49.0,57.0,3.5,26,42.5,2.25,2.0,3.0,60.0,25,400.0,70.0,12,4.5,75,-999479.00226,564.0277400000003,1.4335172303940225,2149,43.02999999999929,0.027336121223823777,0.8818054909260121,0.2830612677257347,False,,
336,COMPLETE,24,165,16,50.0,58.0,3.4000000000000004,27,37.5,2.25,1.9,3.0,60.0,20,400.0,60.0,12,5.0,75,723.0573999999837,765.13773999998,1.672022125766283,2136,42.08033999999634,0.02374284485980459,0.8848314606741573,0.38530321461504247,False,,
337,COMPLETE,27,150,16,50.0,57.0,3.4000000000000004,27,37.5,2.25,1.8,3.1,60.0,25,400.0,70.0,12,5.0,75,679.3533600000086,721.9433600000074,1.5819285936619774,2202,42.58999999999878,0.024339460530115032,0.8742052679382379,0.36436582412569773,False,,
338,COMPLETE,25,160,15,49.0,57.0,3.4000000000000004,27,42.5,2.25,2.0,2.8,60.0,25,400.0,70.0,12,4.5,75,-999391.85472,646.1152800000054,1.4848244748794583,2261,37.969999999999345,0.022805006420236473,0.8827952233524989,0.32599818289477434,False,,
339,COMPLETE,24,165,16,50.0,57.0,3.5,26,40.0,2.25,1.9,3.1,60.0,25,390.0,70.0,12,5.5,75,772.503360000005,803.2433600000048,1.6721675208111375,2209,30.73999999999978,0.01691312512208906,0.8845631507469444,0.40326605609709415,False,,
340,COMPLETE,24,160,15,50.0,57.0,3.5,26,42.5,2.25,1.9,3.1,60.0,25,400.0,70.0,12,5.5,60,781.3752800000093,815.4152800000097,1.649278661261866,2291,34.04000000000042,0.01858144246231245,0.8825840244434745,0.3977598738852071,False,,
341,COMPLETE,24,155,15,49.0,58.0,3.5,26,42.5,2.25,1.9,3.1,60.0,25,400.0,70.0,12,5.5,30,611.8633600000029,662.9433600000015,1.527642722597819,2194,51.07999999999856,0.030535385011510516,0.8787602552415679,0.33502552881358394,False,,
342,COMPLETE,25,160,16,50.0,57.0,3.5,26,40.0,2.0,1.8,2.9000000000000004,70.0,30,400.0,70.0,12,5.5,60,649.5230200000182,707.1233600000127,1.5125401849832858,2203,57.6003399999945,0.03314434340798462,0.861552428506582,0.34881255019867957,False,,
343,COMPLETE,24,150,16,50.0,57.0,3.5,27,40.0,2.25,1.9,3.1,60.0,30,400.0,60.0,12,2.0,60,744.9833600000128,783.6233600000122,1.647882449913479,2185,38.63999999999942,0.021524383583766623,0.8832951945080092,0.3935855373590688,False,,
344,COMPLETE,26,150,16,49.0,57.0,3.5,26,40.0,2.25,1.9,3.0,70.0,25,390.0,60.0,12,5.5,45,-999577.32226,478.4177400000002,1.3273133983603778,2103,55.73999999999842,0.03716550693704679,0.8611507370423205,0.2344943498283603,False,,
345,COMPLETE,25,155,15,50.0,59.0,3.5,27,40.0,2.25,1.9,3.1,60.0,30,400.0,60.0,12,5.5,60,751.7117799999999,785.9317799999997,1.683977814428789,2153,34.2199999999998,0.01906989108394977,0.8834184858337204,0.39260028604981995,False,,
346,COMPLETE,25,155,15,50.0,58.0,3.6,27,40.0,2.0,1.9,3.1,70.0,30,400.0,60.0,12,2.5,60,741.057400000011,793.6777400000077,1.5967410543511014,2195,52.62033999999676,0.029205164980529705,0.8715261958997722,0.37470547367149515,False,,
347,COMPLETE,25,160,15,49.0,58.0,3.6,27,40.0,2.0,1.9,3.0,70.0,30,400.0,60.0,12,2.0,60,-999415.30698,655.413360000004,1.4673896468043994,2169,70.72033999999576,0.04239413338990708,0.8658367911479945,0.31872202000263566,False,,
348,COMPLETE,24,155,15,50.0,60.0,3.6,26,40.0,2.0,1.8,2.9000000000000004,70.0,25,400.0,60.0,12,2.5,60,-999489.6426,585.4777400000029,1.442008639721392,2059,75.12033999999903,0.04679031420463099,0.8542982030111704,0.29618179331999833,False,,
349,COMPLETE,25,160,15,49.0,59.0,3.5,27,45.0,2.25,1.9,3.1,70.0,30,390.0,60.0,12,2.0,60,-999461.86294,615.8473999999994,1.4504440416164812,2098,77.71033999999509,0.0476774712632647,0.8636796949475691,0.30599139698802846,False,,
350,COMPLETE,26,155,15,50.0,60.0,3.5,26,40.0,2.25,1.9,3.1,60.0,25,400.0,70.0,12,2.0,60,640.9114400000065,688.1917800000053,1.6133701968293062,2077,47.28033999999889,0.027891837412191468,0.8810784785748677,0.35272646470650326,False,,
351,COMPLETE,24,145,16,49.0,58.0,3.5,27,42.5,2.0,1.9,3.0,60.0,25,390.0,60.0,12,2.5,60,-999502.39226,549.6577400000009,1.4424943160829626,2050,52.05000000000018,0.03344411248494494,0.8736585365853659,0.283428587342046,False,,
352,COMPLETE,25,145,16,50.0,57.0,3.6,27,37.5,2.25,1.8,3.1,70.0,30,400.0,70.0,12,2.5,60,-999418.05698,646.0333600000189,1.462706758361354,2161,64.09033999999338,0.038208067020917724,0.8583988894030541,0.3181489983034084,False,,
353,COMPLETE,25,150,16,50.0,58.0,3.5,27,37.5,2.25,1.9,1.2,60.0,30,390.0,70.0,12,5.5,60,590.1437000000041,630.4337000000017,1.548498767605511,2114,40.28999999999769,0.02453201482734562,0.8826868495742668,0.34375968427921216,False,,
354,COMPLETE,24,160,15,50.0,59.0,3.4000000000000004,26,42.5,2.25,2.0,2.9000000000000004,70.0,30,400.0,60.0,12,5.5,60,684.7914400000125,734.7417800000082,1.5602573148234589,2116,49.95033999999578,0.02860628308362584,0.8747637051039697,0.35266467337252605,False,,
355,COMPLETE,24,155,16,49.0,59.0,3.6,27,40.0,2.25,2.0,3.0,60.0,25,390.0,70.0,12,2.0,60,-999556.87418,505.63177999999766,1.4193002209695997,1997,62.505959999996776,0.04131527956824589,0.8788182273410116,0.26598293636861703,False,,
356,COMPLETE,26,160,15,50.0,57.0,3.5,27,40.0,1.75,2.0,3.1,60.0,30,400.0,60.0,12,5.5,60,783.6452800000143,816.6452800000143,1.6425224836568826,2292,33.0,0.018005284256297143,0.8878708551483421,0.3981461123526927,False,,
357,COMPLETE,27,155,14,50.0,57.0,3.6,26,40.0,1.75,2.0,2.8,70.0,20,400.0,60.0,12,5.5,60,-999333.11664,712.9133600000013,1.484010754192893,2353,46.02999999999702,0.0268532198684919,0.8750531236719082,0.3239586186476466,False,,
358,COMPLETE,25,160,15,49.0,57.0,3.5,27,40.0,1.75,1.9,3.2,60.0,30,400.0,60.0,12,5.5,45,641.6652800000047,676.4852800000053,1.5082806084977889,2272,34.82000000000062,0.020607875754845108,0.8776408450704225,0.3443881338998008,False,,
359,COMPLETE,26,160,16,50.0,57.0,3.5,26,42.5,2.0,2.0,3.1,60.0,30,400.0,70.0,12,5.5,60,760.6433600000195,801.4233600000192,1.6678056529209224,2206,40.779999999999745,0.02245541097653049,0.8902991840435177,0.4012794130667133,False,,
360,COMPLETE,26,160,16,50.0,57.0,3.6,26,42.5,2.0,1.8,3.0,70.0,30,400.0,70.0,12,6.0,60,646.2730200000191,706.3933600000122,1.5120110632540333,2203,60.12033999999312,0.03460893756596362,0.861552428506582,0.34800980552778676,False,,
361,COMPLETE,27,150,15,49.0,57.0,3.5,26,45.0,2.0,1.9,3.0,60.0,30,400.0,60.0,12,5.5,60,-999413.05472,629.2552800000049,1.4719147637818175,2249,42.310000000000855,0.025746733152752492,0.8759448643841707,0.3206077150591516,False,,
362,COMPLETE,24,160,16,50.0,58.0,3.5,27,40.0,2.25,2.0,3.1,60.0,30,400.0,70.0,12,5.5,60,723.0374000000078,776.1677400000034,1.6721927386414204,2120,53.13033999999561,0.02975226639644607,0.8886792452830189,0.39589628398357013,False,,
363,COMPLETE,26,155,15,50.0,57.0,3.4000000000000004,27,42.5,2.25,1.9,3.1,60.0,30,400.0,70.0,12,5.5,60,782.9052800000186,814.0852800000175,1.6463052408848196,2295,31.179999999998927,0.017054231274015754,0.8823529411764706,0.39964761390221604,False,,
364,COMPLETE,26,150,15,50.0,58.0,3.4000000000000004,26,42.5,2.25,1.9,3.1,70.0,30,390.0,70.0,12,6.0,45,715.3974000000197,765.2177400000154,1.5726218966045868,2181,49.82033999999567,0.028082546611210728,0.8707015130674003,0.36021961243254674,False,,
365,COMPLETE,26,155,15,49.0,57.0,3.6,27,42.5,2.25,1.9,2.9000000000000004,80.0,25,400.0,60.0,12,5.5,60,-999602.55472,467.71528000000035,1.2779273649360523,2198,70.2700000000018,0.04727894499500241,0.8444040036396724,0.21674306860680234,False,,
366,COMPLETE,25,155,16,50.0,59.0,3.5,27,37.5,2.0,2.0,3.1,60.0,30,390.0,70.0,12,5.5,60,679.9114400000083,729.631780000004,1.6617468859843703,2049,49.72033999999576,0.028580134925592873,0.8887262079062958,0.38244202428844853,False,,
367,COMPLETE,27,160,16,50.0,57.0,3.4000000000000004,27,40.0,1.75,1.8,3.0,70.0,25,390.0,60.0,12,5.5,75,651.1830200000062,707.503360000005,1.5125147168898148,2202,56.32033999999885,0.032367576950230494,0.8614895549500454,0.34657509294691846,False,,
368,COMPLETE,25,165,15,50.0,57.0,3.4000000000000004,26,37.5,2.25,1.9,3.1,60.0,30,400.0,70.0,12,5.5,60,790.1952800000172,821.5552800000164,1.6565095845228572,2298,31.359999999999218,0.017086423872941646,0.8825065274151436,0.4017590878977682,False,,
369,COMPLETE,26,165,14,49.0,57.0,2.0,26,37.5,2.0,1.9,2.9000000000000004,70.0,30,400.0,70.0,12,5.5,60,-999349.24102,708.3293200000162,1.4701263061543508,2330,57.57033999999885,0.03345188684843111,0.8639484978540772,0.3315786029078608,False,,
370,COMPLETE,25,165,15,50.0,57.0,3.5,26,40.0,2.25,1.8,3.1,60.0,25,390.0,60.0,12,6.0,60,732.7352799999999,769.1552800000009,1.592862439993083,2311,36.42000000000098,0.02031974553474481,0.8736477715274773,0.38443666378748054,False,,
371,COMPLETE,25,150,15,49.0,58.0,3.5,27,37.5,2.25,1.9,3.0,60.0,30,400.0,70.0,12,5.5,45,598.4233600000115,648.9833600000082,1.5169432700034853,2177,50.55999999999676,0.030509599130899172,0.8778135048231511,0.3282111202114088,False,,
372,COMPLETE,26,160,14,50.0,57.0,3.4000000000000004,26,42.5,2.25,2.0,3.1,70.0,25,400.0,60.0,12,5.5,60,746.2033600000058,781.7033600000049,1.53286617455866,2357,35.49999999999909,0.019897281154792324,0.8756894357233772,0.35993078317699034,False,,
373,COMPLETE,28,155,14,50.0,57.0,3.4000000000000004,26,45.0,2.25,1.9,3.1,70.0,25,390.0,60.0,12,5.5,60,727.2833600000057,773.4833600000055,1.5235724211611632,2369,46.19999999999982,0.02604425981807694,0.86787674124103,0.3562724016136422,False,,
374,COMPLETE,26,165,14,49.0,58.0,3.6,26,42.5,2.0,2.0,3.0,70.0,25,400.0,60.0,12,6.0,60,695.2030200000044,757.3133600000023,1.5374734376555186,2258,62.110339999997905,0.03489926545960885,0.8737821080602303,0.34504759208992836,False,,
375,COMPLETE,25,160,15,50.0,57.0,3.4000000000000004,26,40.0,2.25,1.7000000000000002,3.1,70.0,25,390.0,60.0,12,5.5,60,702.755280000003,737.8452800000036,1.5165288178930874,2292,35.0900000000006,0.01989990184907942,0.8542757417102966,0.35762911064506114,False,,
376,COMPLETE,24,165,15,50.0,57.0,3.5,27,40.0,2.25,1.9,2.9000000000000004,80.0,25,400.0,70.0,12,5.5,60,-999416.80472,639.4052800000109,1.4061782388902488,2236,56.210000000000946,0.03381611426340511,0.8519677996422182,0.2914125605297735,False,,
377,COMPLETE,26,160,14,50.0,57.0,3.4000000000000004,26,42.5,2.25,1.8,3.0,60.0,25,390.0,60.0,12,5.5,60,729.0152799999983,771.7052799999983,1.5730050346579152,2415,42.690000000000055,0.02399008324474595,0.874120082815735,0.3821111834837834,False,,
378,COMPLETE,24,155,16,49.0,58.0,3.5,27,42.5,2.25,2.0,3.1,80.0,25,400.0,70.0,12,5.5,60,-999639.90226,419.70773999999653,1.2676689874379252,2004,59.61000000000058,0.041488960491276504,0.8488023952095808,0.19896364601435054,False,,
379,COMPLETE,27,155,16,50.0,57.0,3.7,26,40.0,2.0,1.9,3.1,70.0,30,400.0,60.0,12,5.5,75,701.9830200000168,755.4733600000139,1.556516193917924,2178,53.490339999997104,0.03017257270669298,0.8700642791551882,0.3653431359093628,False,,
380,COMPLETE,25,165,15,50.0,58.0,3.4000000000000004,27,42.5,2.25,2.0,3.0,60.0,30,390.0,70.0,12,6.0,45,764.2577400000172,803.4477400000154,1.671913687988698,2225,39.189999999998236,0.021655310733704754,0.8898876404494382,0.39187292653504285,False,,
381,COMPLETE,25,160,15,49.0,58.0,3.4000000000000004,27,45.0,2.25,2.0,2.9000000000000004,70.0,25,400.0,70.0,12,6.5,45,-999467.41698,599.6833600000008,1.4201450108704083,2159,67.10033999999723,0.04149569619456409,0.8698471514590088,0.28779470981728544,False,,
382,COMPLETE,25,165,14,50.0,57.0,3.6,26,42.5,2.25,1.9,2.8,160.0,30,390.0,60.0,12,6.0,30,-999653.748,422.7326800000054,1.1616439522785955,2134,76.48067999999193,0.05324533709915777,0.7549203373945642,0.15990826465328087,False,,
383,COMPLETE,34,150,15,49.0,58.0,3.5,27,42.5,2.25,2.0,3.0,60.0,30,400.0,70.0,12,6.0,45,614.9130200000199,671.0133600000121,1.5360110795358257,2189,56.10033999999223,0.033447145150233774,0.8835084513476473,0.33314140290563077,False,,
384,COMPLETE,25,155,16,50.0,59.0,3.4000000000000004,27,37.5,2.25,2.0,3.0,60.0,25,390.0,70.0,12,5.5,75,667.7614400000045,722.4517800000028,1.6518767480373286,2045,54.69033999999829,0.03152632015169236,0.8880195599022005,0.3764519825137012,False,,
385,COMPLETE,26,145,15,50.0,57.0,3.4000000000000004,27,40.0,2.0,1.8,3.1,60.0,25,400.0,70.0,12,6.0,45,661.6152800000114,700.2852800000105,1.5324356131687311,2278,38.66999999999916,0.02241563339890591,0.8713784021071115,0.3491032625609114,False,,
386,COMPLETE,24,140,28,50.0,58.0,3.5,26,40.0,1.75,1.9,3.0,70.0,30,390.0,60.0,12,5.5,75,428.25123999999687,467.4612399999951,1.6673209380932008,1211,39.20999999999822,0.026719615435974547,0.8728323699421965,0.3048915683738275,False,,
387,COMPLETE,26,160,16,49.0,57.0,3.4000000000000004,27,42.5,2.25,2.0,3.1,80.0,30,400.0,60.0,12,5.5,75,-999609.62226,456.9877400000049,1.2782607595392728,2096,66.60999999999785,0.0451208472580116,0.8506679389312977,0.21117515808527007,False,,
388,COMPLETE,24,165,16,50.0,58.0,3.5,27,40.0,2.25,1.9,1.7000000000000002,60.0,25,400.0,70.0,12,6.0,75,642.8393200000022,689.9437000000011,1.6030921888345895,2140,47.104379999998855,0.027703509673006537,0.8841121495327103,0.36312552100175494,False,,
389,COMPLETE,25,160,15,50.0,57.0,3.6,26,37.5,2.25,1.9,3.0,70.0,30,390.0,70.0,12,5.5,75,714.5149400000155,753.7452800000133,1.5319570759506755,2267,39.230339999997796,0.022114740765846793,0.8689898544331716,0.357095993527377,False,,
390,COMPLETE,24,155,16,49.0,57.0,3.4000000000000004,26,40.0,2.25,1.8,3.1,60.0,25,390.0,70.0,12,5.5,60,-999500.63226,543.7877399999974,1.4112313022228422,2177,44.42000000000098,0.02854704891058114,0.868626550298576,0.28080867229337697,False,,
391,COMPLETE,25,165,14,50.0,58.0,3.5,27,45.0,1.5,1.9,3.0,60.0,20,400.0,70.0,12,2.5,75,794.9877400000004,836.5777399999996,1.7019563185611895,2334,41.589999999999236,0.02264044854457477,0.8868894601542416,0.3964929510055184,True,2.0,
392,COMPLETE,26,165,14,50.0,57.0,3.4000000000000004,27,47.5,1.5,2.0,2.9000000000000004,60.0,20,390.0,70.0,12,6.5,75,733.6452800000047,764.7952800000048,1.5823334592931693,2391,31.15000000000009,0.01763218911614715,0.8879130071099958,0.36365527780287404,False,,
393,COMPLETE,24,165,16,49.0,56.0,3.5,27,47.5,1.75,2.0,3.0,60.0,20,400.0,70.0,12,6.0,75,-999455.2606800001,583.7736999999901,1.4299553060546863,2237,39.034380000001875,0.024525188022622733,0.8828788556101922,0.28794425149631103,False,,
394,COMPLETE,25,165,14,50.0,57.0,3.4000000000000004,26,45.0,2.25,1.9,2.7,60.0,25,390.0,70.0,12,5.5,75,771.1652800000038,807.7352800000031,1.6203809902246018,2395,36.569999999999254,0.02022637522869532,0.8818371607515657,0.3910188132434733,False,,
395,COMPLETE,25,50,15,50.0,60.0,3.4000000000000004,26,45.0,2.25,1.9,2.8,60.0,25,240.0,70.0,12,5.5,75,478.1968600000033,516.6168600000034,1.5916575164691003,1618,38.42000000000007,0.02504225538399692,0.8819530284301607,0.3207958221442681,False,,
396,COMPLETE,25,160,14,50.0,57.0,3.5,26,45.0,2.25,1.8,2.6,60.0,15,390.0,70.0,12,5.5,75,649.0552799999937,695.915279999992,1.51574541592505,2414,46.85999999999831,0.02752091072390304,0.8736536868268434,0.3373623911295948,False,,
397,COMPLETE,27,165,14,49.0,59.0,3.4000000000000004,26,45.0,1.5,1.9,2.7,60.0,20,390.0,70.0,12,5.5,75,684.4633599999902,727.4433599999866,1.600292559575435,2243,42.97999999999638,0.024789288738665982,0.8818546589389211,0.3535629145579141,False,,
398,COMPLETE,24,160,15,50.0,57.0,3.5,27,42.5,2.25,2.0,2.4000000000000004,60.0,25,400.0,60.0,12,5.5,75,756.3452800000077,790.6852800000088,1.6193056072458278,2282,34.340000000001055,0.018976828640144137,0.8869412795793163,0.3833975116919674,False,,
399,COMPLETE,26,160,14,49.0,58.0,3.5,26,42.5,2.25,2.0,2.4000000000000004,70.0,25,390.0,70.0,12,5.5,75,-999341.28856,713.6174000000027,1.4969567987937868,2258,54.905959999998686,0.031620436540410156,0.8728963684676705,0.3263402272718675,False,,
400,COMPLETE,24,165,26,50.0,56.0,3.4000000000000004,27,42.5,2.25,2.0,2.1,60.0,25,400.0,60.0,12,5.5,75,503.90527999999676,530.5452799999975,1.6886578784200543,1520,26.640000000000782,0.01730830763422205,0.8907894736842106,0.3279439397928013,False,,
401,COMPLETE,24,160,15,50.0,57.0,3.6,27,42.5,2.25,1.1,2.3,60.0,25,390.0,70.0,12,5.5,75,645.8196600000065,679.8696600000067,1.5400186618571303,2383,34.05000000000018,0.020086485030648762,0.8111624003357113,0.3924965662662643,False,,
402,COMPLETE,25,160,14,49.0,58.0,3.4000000000000004,26,45.0,2.25,2.0,2.5,70.0,25,400.0,80.0,12,5.5,75,661.3914400000048,719.387400000004,1.5009749753811863,2257,57.995959999999286,0.033281712479456674,0.872840053167922,0.3292761704202415,False,,
403,COMPLETE,26,165,15,50.0,56.0,3.4000000000000004,27,42.5,2.25,1.9,2.9000000000000004,60.0,25,400.0,60.0,12,6.0,75,770.9933600000035,807.893360000004,1.5927061867824444,2383,36.900000000000546,0.02031185176844365,0.8787242971044902,0.3866829989160712,False,,
404,COMPLETE,25,165,15,50.0,56.0,3.5,27,37.5,2.25,1.9,2.9000000000000004,60.0,25,390.0,70.0,12,6.0,75,771.8133600000068,806.1033600000068,1.5922663343817378,2376,34.289999999999964,0.01888857238396183,0.8787878787878788,0.3848146173586656,False,,
405,COMPLETE,25,165,15,49.0,56.0,3.5,27,37.5,1.5,1.9,2.8,60.0,25,390.0,70.0,12,6.0,75,-999397.88664,649.103360000005,1.4555211161260877,2346,46.99000000000069,0.028241501754086688,0.8746803069053708,0.3232998463608287,False,,
406,COMPLETE,25,165,15,50.0,56.0,3.5,27,37.5,2.25,1.8,2.8,60.0,25,390.0,80.0,12,6.0,75,689.8933600000099,727.4133600000085,1.5196965073864077,2387,37.51999999999862,0.021503732639918807,0.8701298701298701,0.35877613384350715,False,,
407,COMPLETE,25,165,15,50.0,56.0,3.6,27,37.5,2.25,1.9,2.3,60.0,25,390.0,70.0,12,6.0,75,745.2933600000055,780.1133600000047,1.5731707657556717,2377,34.819999999999254,0.0194584562963961,0.8788388725283971,0.37368306756208813,False,,
408,COMPLETE,27,170,15,50.0,57.0,3.5,27,45.0,2.25,1.8,2.7,60.0,25,400.0,60.0,12,6.0,75,754.8552800000039,791.2352800000049,1.6152260284119178,2324,36.38000000000102,0.02011127783410852,0.8747848537005164,0.3955814186288243,False,,
409,COMPLETE,27,170,15,49.0,57.0,3.6,27,45.0,2.25,1.7000000000000002,2.6,70.0,25,400.0,60.0,12,6.0,75,-999427.61944,617.2709000000036,1.4233470071329928,2263,44.89034000000038,0.0273231617765437,0.8506407423773752,0.3059694349456593,False,,
410,COMPLETE,28,170,15,50.0,57.0,3.5,26,45.0,2.25,1.8,2.7,60.0,25,400.0,60.0,12,6.0,75,759.5952799999986,796.0152799999996,1.6220187471601404,2325,36.42000000000098,0.02014452641247256,0.875268817204301,0.39851074449726276,False,,
411,COMPLETE,28,170,16,50.0,57.0,3.5,26,47.5,2.0,1.8,2.9000000000000004,60.0,25,400.0,60.0,12,6.0,75,760.2033600000021,797.2633600000025,1.6560139088910266,2248,37.0600000000004,0.020387131492971493,0.8772241992882562,0.4051435990316795,False,,
412,COMPLETE,28,170,16,49.0,57.0,3.5,26,47.5,2.0,1.8,2.2,60.0,25,400.0,60.0,12,6.5,75,-999445.8663,600.7336999999974,1.4662740838942288,2214,46.59999999999991,0.02897895151790315,0.8730803974706414,0.31252870588515413,False,,
413,COMPLETE,28,170,16,50.0,56.0,3.6,26,42.5,2.0,1.7000000000000002,2.9000000000000004,70.0,15,390.0,60.0,12,6.0,75,688.7645999999918,744.4849399999903,1.5362089686865859,2292,55.72033999999849,0.031663692900329915,0.8577661431064573,0.35833433954899546,False,,
414,COMPLETE,29,165,16,50.0,57.0,3.5,26,50.0,2.0,1.8,2.7,60.0,20,400.0,70.0,12,6.0,75,700.4833599999846,735.6733599999851,1.6053107745302875,2238,35.19000000000051,0.020037314615836056,0.8771224307417337,0.372797724079951,False,,
415,COMPLETE,29,165,16,49.0,58.0,3.6,26,42.5,1.75,1.9,2.9000000000000004,70.0,25,390.0,70.0,3,6.5,75,196.5300000000002,252.07000000000016,1.508256880733946,736,55.539999999999964,0.04427791286323588,0.8532608695652174,0.21171171437059152,False,,
416,COMPLETE,30,175,15,50.0,57.0,3.7,26,47.5,2.25,1.7000000000000002,2.5,60.0,25,400.0,80.0,12,6.0,75,755.6952800000045,790.0652800000053,1.6168294842242,2346,34.3700000000008,0.019083574440443545,0.8687127024722933,0.39719559454447984,False,,
417,COMPLETE,26,160,16,50.0,56.0,3.5,26,47.5,2.0,1.8,2.9000000000000004,70.0,25,390.0,60.0,12,6.0,75,713.5989800000029,765.1993200000024,1.5409149965606792,2268,51.600339999999505,0.028787614480502807,0.86331569664903,0.37310849432549614,False,,
418,COMPLETE,29,170,15,49.0,58.0,3.4000000000000004,26,42.5,1.75,1.9,2.8,60.0,25,400.0,60.0,12,6.0,75,680.9833600000005,732.7033599999994,1.5971771572561155,2230,51.71999999999889,0.02973946298395911,0.8825112107623319,0.3677868603684985,False,,
419,COMPLETE,26,165,14,50.0,57.0,3.4000000000000004,25,45.0,2.25,1.8,2.7,60.0,25,390.0,70.0,12,6.0,75,713.5252800000012,750.1552800000013,1.5563882114142538,2418,36.63000000000011,0.020838841242550678,0.8726220016542597,0.3721902488291766,False,,
420,COMPLETE,24,165,15,50.0,56.0,3.5,27,45.0,2.0,1.9,2.6,60.0,25,400.0,80.0,12,6.0,75,745.5733600000052,783.2733600000055,1.5754925047652284,2375,37.70000000000027,0.021025587325521747,0.8787368421052631,0.377269543380355,False,,
421,COMPLETE,26,160,16,49.0,57.0,3.4000000000000004,26,42.5,0.25,1.8,2.9000000000000004,70.0,20,400.0,70.0,12,6.5,75,-999589.73822,466.8077399999851,1.3172001713396022,2149,56.54595999999492,0.0380215611303874,0.8543508608655188,0.23011829483846621,False,,
422,COMPLETE,28,160,16,50.0,58.0,3.6,27,37.5,2.25,1.9,2.9000000000000004,60.0,25,400.0,80.0,12,6.0,75,748.697739999999,788.7077399999993,1.6912605107684056,2142,40.01000000000022,0.02224597325365704,0.88468720821662,0.40425189963154984,False,,
423,COMPLETE,24,170,14,50.0,56.0,3.4000000000000004,27,40.0,2.25,1.9,2.8,60.0,25,390.0,60.0,12,6.0,75,819.6914400000068,859.9274000000058,1.6516256644339247,2459,40.23595999999907,0.021633080947137475,0.8836925579503864,0.4012607976995771,False,,
424,COMPLETE,25,170,14,49.0,56.0,3.4000000000000004,25,40.0,2.0,1.9,2.8,290.0,25,390.0,70.0,12,6.0,75,-999453.1606,646.3953600000007,1.1816716997827084,1953,99.55595999999287,0.05965595072242048,0.6492575524833589,0.19266505479472168,False,,
425,COMPLETE,25,175,16,50.0,56.0,3.4000000000000004,27,37.5,2.25,1.9,2.7,60.0,25,390.0,70.0,12,6.0,75,846.8789800000063,876.739320000006,1.7061032775220868,2307,29.860339999999724,0.015797037821444444,0.8851322063285653,0.4358545513115951,False,,
426,COMPLETE,27,175,14,50.0,56.0,3.4000000000000004,26,37.5,2.25,1.8,2.7,70.0,25,380.0,60.0,12,6.0,75,718.3686400000045,760.8730200000034,1.5055973652984478,2453,42.504379999998946,0.024101970611077616,0.86180187525479,0.35406324481191287,False,,
427,COMPLETE,25,175,16,38.0,56.0,3.4000000000000004,27,40.0,2.25,1.9,2.8,70.0,25,390.0,70.0,12,6.0,75,371.9680800000009,402.848080000001,1.6069274274952945,1074,30.88000000000011,0.022010793157791055,0.8798882681564246,0.27040279291107966,False,,
428,COMPLETE,31,175,15,50.0,56.0,3.5,26,40.0,2.25,1.9,2.7,70.0,25,390.0,70.0,12,6.5,75,753.4789800000093,789.1689800000089,1.5285109868640379,2368,35.6899999999996,0.019881469010270957,0.8673986486486487,0.3642559602646871,False,,
429,COMPLETE,26,170,13,49.0,57.0,3.7,27,37.5,2.25,1.8,2.8,60.0,25,380.0,60.0,12,6.0,75,-999355.65664,686.2433600000053,1.4709474914235643,2497,41.89999999999873,0.02459781457751648,0.8694433319983981,0.33042787473214935,False,,
430,COMPLETE,25,170,16,50.0,56.0,1.9,27,40.0,2.25,1.9,2.8,60.0,20,390.0,80.0,12,6.0,45,783.0793199999907,817.0393199999908,1.658510353944286,2291,33.960000000000036,0.018507625719478574,0.8847664775207333,0.4021001988413435,False,,
431,COMPLETE,25,175,16,50.0,56.0,2.1,27,50.0,1.5,1.9,2.9000000000000004,80.0,20,380.0,80.0,12,6.0,45,-999384.71506,665.4449399999862,1.4265691450412334,2244,50.159999999999854,0.029871635223217348,0.8547237076648841,0.3052177233397864,False,,
432,COMPLETE,25,170,16,49.0,56.0,3.5,27,40.0,2.0,1.9,2.9000000000000004,60.0,20,390.0,80.0,12,6.0,30,-999434.1406800001,606.8636999999875,1.4498604370728503,2258,41.004380000000765,0.025405066852488604,0.8786536758193091,0.3029642512366899,False,,
433,COMPLETE,26,165,16,50.0,56.0,1.2,27,40.0,2.25,1.9,2.8,70.0,20,390.0,80.0,12,6.0,45,672.60931999999,726.4993199999903,1.538355505499023,2203,53.89000000000033,0.03086908910215671,0.873354516568316,0.35023778362661434,False,,
434,COMPLETE,25,165,16,50.0,56.0,3.4000000000000004,27,37.5,2.25,2.0,2.8,60.0,20,390.0,70.0,12,6.5,45,765.5893199999896,803.9093199999893,1.6422751517354397,2273,38.31999999999971,0.02105969714089102,0.8900131984161901,0.39260256363173823,False,,
435,COMPLETE,25,165,14,49.0,56.0,1.5,27,37.5,2.25,2.0,2.8,60.0,20,380.0,80.0,12,6.5,45,678.1933599999961,722.683359999995,1.5191822390441034,2384,44.48999999999887,0.025614403702899073,0.8829697986577181,0.33356803281282266,False,,
436,COMPLETE,25,160,16,50.0,56.0,3.4000000000000004,27,37.5,2.25,2.0,2.8,70.0,20,390.0,70.0,12,7.0,45,673.4893199999906,724.0993199999903,1.5110884920380891,2239,50.60999999999967,0.029079533310780552,0.8767306833407771,0.34179244213158577,False,,
437,COMPLETE,26,165,15,49.0,56.0,3.4000000000000004,27,37.5,2.25,1.9,2.7,60.0,20,390.0,80.0,12,7.0,45,-999442.87664,604.1633599999863,1.4233448378185347,2351,47.03999999999678,0.029125251310547825,0.874096129306678,0.2970861061161571,False,,
438,COMPLETE,24,160,14,50.0,56.0,2.5,27,40.0,2.25,2.0,3.0,200.0,20,380.0,70.0,12,6.5,45,-999627.06588,453.14446000000873,1.1512283812689978,2081,80.21033999999281,0.05471506451117664,0.7280153772224892,0.15410105323774603,False,,
439,COMPLETE,26,165,16,50.0,57.0,3.4000000000000004,27,40.0,2.25,1.9,3.0,60.0,20,380.0,70.0,12,6.5,45,746.5433599999905,777.7933599999886,1.6505439021685966,2215,31.24999999999818,0.017439361915566696,0.8848758465011287,0.3860589014863566,False,,
440,COMPLETE,25,160,15,50.0,56.0,1.9,27,37.5,2.25,2.0,2.9000000000000004,60.0,20,390.0,70.0,12,6.5,45,725.7033600000012,760.503360000001,1.554695409890602,2362,34.79999999999973,0.019686783723528164,0.8848433530906011,0.3604443198432021,False,,
441,COMPLETE,24,165,16,49.0,58.0,3.4000000000000004,27,37.5,2.25,1.9,2.8,70.0,15,390.0,80.0,12,6.0,30,-999600.3226000001,461.54335999998045,1.330655232195155,2066,61.865960000000086,0.04193724179153207,0.8620522749273959,0.22660816484055965,False,,
442,COMPLETE,24,170,15,39.0,70.0,1.0,26,40.0,2.25,2.0,3.0,60.0,25,380.0,70.0,12,6.0,45,78.84562000000145,113.22562000000156,1.6333082341981016,308,34.38000000000011,0.030343800555900625,0.8701298701298701,0.14836335265402337,False,,
443,COMPLETE,25,165,16,50.0,57.0,3.4000000000000004,27,40.0,2.25,1.9,2.9000000000000004,60.0,25,390.0,70.0,12,5.5,45,767.5733600000052,798.1533600000047,1.6673552538760443,2211,30.579999999999472,0.016872344481674843,0.8846675712347354,0.4011184915857199,False,,
444,COMPLETE,25,165,16,50.0,56.0,3.4000000000000004,27,40.0,2.25,1.9,2.6,60.0,25,390.0,70.0,12,6.5,45,813.019320000009,848.1393200000084,1.6811331319759202,2284,35.119999999999436,0.018867424602773186,0.8844133099824869,0.4216496288927652,False,,
445,COMPLETE,25,165,14,50.0,56.0,3.4000000000000004,27,40.0,2.25,1.9,2.6,70.0,25,380.0,80.0,12,6.5,45,718.0911000000149,760.6814400000142,1.5167445626983156,2423,42.59033999999929,0.024176097218218492,0.8704085843995047,0.34483230005074633,False,,
446,COMPLETE,25,170,15,50.0,56.0,3.4000000000000004,28,40.0,2.25,1.9,2.7,70.0,25,390.0,70.0,12,6.5,45,728.0030200000109,760.8133600000114,1.508117162707569,2357,32.81034000000045,0.01852861024958906,0.8676283411115825,0.354267007118505,False,,
447,COMPLETE,25,165,16,49.0,56.0,3.3000000000000003,27,37.5,2.25,1.9,2.7,60.0,25,380.0,70.0,12,7.0,45,-999414.1663,621.8037000000003,1.4598546675614446,2250,35.970000000000255,0.022057015022992007,0.8777777777777778,0.315834281720611,False,,
448,COMPLETE,26,170,14,50.0,56.0,3.4000000000000004,27,40.0,2.25,1.9,2.5,60.0,25,390.0,80.0,12,6.5,45,812.6170600000099,847.4074000000095,1.644546300564735,2464,34.79033999999956,0.01883198042835564,0.8843344155844156,0.39964167989915533,False,,
449,COMPLETE,26,175,13,49.0,58.0,3.3000000000000003,28,40.0,2.25,1.9,2.6,80.0,25,380.0,80.0,12,6.5,45,-999451.26136,591.3886400000018,1.3454809833776418,2375,42.650000000000546,0.02658184343295495,0.8488421052631578,0.2628889846495649,False,,
450,COMPLETE,26,170,14,50.0,56.0,3.4000000000000004,27,40.0,2.25,1.8,2.5,70.0,25,390.0,80.0,12,6.5,45,-999310.4969799999,732.0274000000143,1.486418042106184,2446,42.52437999999984,0.024430068777462746,0.8622240392477515,0.3423627093669782,False,,
451,COMPLETE,25,175,14,49.0,56.0,3.4000000000000004,27,40.0,2.25,1.9,2.6,80.0,25,390.0,80.0,12,6.5,30,-999417.31698,638.1730200000106,1.3773115046266449,2374,55.48999999999842,0.03363961977784495,0.8508845829823083,0.27857649722674677,False,,
452,COMPLETE,26,170,15,50.0,57.0,1.6,28,42.5,2.25,2.0,2.5,60.0,25,380.0,80.0,12,6.5,45,772.1052800000102,806.2752800000103,1.6373371199206714,2286,34.17000000000007,0.018706320986847543,0.8871391076115486,0.39160645507450337,False,,
453,COMPLETE,26,170,15,50.0,57.0,1.4,27,42.5,2.25,1.9,2.5,70.0,25,380.0,70.0,12,6.5,45,710.8852800000104,744.1052800000116,1.5302770285507328,2251,33.220000000001164,0.018748709544721357,0.8685028876055086,0.3543519844974281,False,,
454,COMPLETE,27,170,15,50.0,57.0,1.1,28,42.5,2.25,1.9,2.4000000000000004,60.0,25,380.0,70.0,12,7.0,45,783.9552800000092,810.3652800000091,1.6708828570793817,2235,26.409999999999854,0.014456932158636917,0.8841163310961969,0.4042684327744018,False,,
455,COMPLETE,27,175,13,50.0,56.0,1.2,28,42.5,2.25,2.0,2.5,70.0,20,380.0,80.0,12,7.0,45,747.052680000001,797.3626799999978,1.5204958114575948,2493,50.30999999999676,0.02799101180847753,0.8764540713999198,0.34612857357087035,False,,
456,COMPLETE,27,170,14,49.0,57.0,1.5,28,40.0,2.25,1.9,2.6,60.0,25,380.0,70.0,12,7.0,45,718.3352800000043,756.6652800000038,1.5532275858555502,2366,38.32999999999947,0.021629640424071995,0.8782755705832629,0.36795798166130494,False,,
457,COMPLETE,26,175,15,50.0,57.0,1.6,28,42.5,2.25,1.8,2.5,60.0,25,380.0,70.0,12,7.5,45,753.8152800000075,790.1752800000086,1.613662235517057,2313,36.36000000000104,0.020100221606602114,0.8737570255079983,0.39585467720912465,False,,
458,COMPLETE,27,170,14,50.0,56.0,3.5,28,37.5,2.25,1.9,2.5,60.0,25,380.0,70.0,12,6.5,45,812.3970600000074,849.1474000000084,1.6472926155467638,2465,36.75034000000096,0.019872810861150853,0.8851926977687626,0.4005978535305573,False,,
459,COMPLETE,27,170,14,50.0,56.0,1.0,28,37.5,2.25,1.8,2.6,60.0,25,380.0,80.0,12,7.0,45,687.804600000015,729.5489800000132,1.5518672086801357,2388,41.74437999999827,0.023996277621665167,0.8773031825795645,0.3617810860854328,False,,
460,COMPLETE,27,175,13,49.0,56.0,1.7000000000000002,28,37.5,2.25,1.9,2.4000000000000004,230.0,25,380.0,70.0,12,6.5,45,-999601.60744,516.9772799999957,1.1536049316231307,2148,118.5847199999971,0.0775647911673672,0.6950651769087524,0.16972128837463604,False,,
461,COMPLETE,27,170,14,50.0,56.0,2.2,28,40.0,2.25,1.9,2.4000000000000004,70.0,25,390.0,70.0,12,6.5,45,748.6067200000132,793.6470600000137,1.542858006656879,2432,45.04034000000047,0.025111038288658707,0.8721217105263158,0.35865277745317536,False,,
462,COMPLETE,26,175,14,50.0,56.0,1.3,28,37.5,2.25,1.8,2.4000000000000004,70.0,25,390.0,80.0,12,6.5,45,-999316.42574,726.5786400000152,1.4917292112590075,2409,43.00437999999849,0.0247795501533791,0.863013698630137,0.34102774931622926,False,,
463,COMPLETE,26,170,15,49.0,57.0,2.3,28,40.0,2.25,1.8,2.4000000000000004,70.0,25,380.0,60.0,12,6.5,45,-999449.09506,598.5952800000014,1.4028452268817193,2252,47.69033999999783,0.029180981297331866,0.8565719360568383,0.2974771874032525,False,,
464,COMPLETE,27,170,15,50.0,57.0,1.9,27,37.5,1.25,1.9,2.5,60.0,20,390.0,70.0,12,7.0,30,784.7352799999953,812.1352799999968,1.655609358591809,2305,27.400000000001455,0.01503713777895011,0.8837310195227766,0.3922868853972393,False,,
465,COMPLETE,27,170,14,49.0,56.0,1.8,27,37.5,0.75,1.9,2.5,60.0,20,380.0,70.0,12,7.0,30,694.6833599999914,744.4333599999923,1.5353614713156596,2422,49.75000000000091,0.028327186646996384,0.8790255986787778,0.34848078465891613,False,,
466,COMPLETE,27,175,15,50.0,56.0,1.7000000000000002,26,37.5,1.25,1.9,2.6,70.0,20,380.0,80.0,12,7.0,45,-999310.05102,727.218979999995,1.4897911716152337,2353,37.27000000000044,0.021530919677376407,0.8674033149171271,0.33634918361879473,False,,
467,COMPLETE,26,170,13,50.0,57.0,1.9,28,37.5,1.0,2.0,2.3,60.0,20,390.0,70.0,12,7.0,30,-999365.61102,678.3889799999982,1.4690076714972673,2495,44.000000000000455,0.02614877853885141,0.8837675350701403,0.309473497176208,False,,
468,COMPLETE,26,170,14,50.0,57.0,1.9,26,37.5,2.25,1.8,2.5,60.0,20,390.0,60.0,12,7.0,45,695.0752799999959,731.8952799999975,1.5467132469257372,2418,36.82000000000153,0.021174606611235196,0.8742762613730356,0.35950935316063537,False,,
469,COMPLETE,27,175,15,49.0,56.0,1.7000000000000002,28,40.0,2.25,2.0,2.6,60.0,20,380.0,70.0,12,7.5,30,-999406.52664,642.1033599999872,1.4531911789935787,2344,48.629999999999654,0.029483388465996508,0.8809726962457338,0.312683728597903,False,,
470,COMPLETE,26,165,15,49.0,56.0,2.0,27,40.0,1.5,1.9,2.5,60.0,25,390.0,80.0,12,7.0,30,-999382.66664,661.7933600000059,1.469191025733343,2349,44.45999999999958,0.02651236525743295,0.8752660706683695,0.330895942033823,False,,
471,COMPLETE,27,170,14,50.0,57.0,1.6,27,37.5,1.25,1.9,2.4000000000000004,70.0,25,390.0,70.0,12,6.5,45,736.7205600000098,773.65056000001,1.5366040402728116,2364,36.93000000000029,0.02082028940980297,0.8701353637901861,0.35868996916603335,False,,
472,COMPLETE,25,170,15,40.0,56.0,1.3,26,37.5,1.25,2.0,2.5,60.0,20,380.0,60.0,12,6.5,30,388.7977399999912,425.5677399999912,1.5849612759544227,1323,36.76999999999998,0.025793232386137052,0.8888888888888888,0.2780076909461645,False,,
473,COMPLETE,26,165,15,50.0,57.0,2.1,27,40.0,1.0,1.9,2.7,70.0,15,210.0,60.0,12,6.5,45,-999337.48876,696.8112399999927,1.496474475339393,2273,34.29999999999836,0.020059286126615488,0.8697756269247691,0.34509212322564337,False,,
474,COMPLETE,25,175,14,50.0,57.0,2.2,26,40.0,2.25,1.9,2.6,60.0,25,390.0,80.0,12,6.5,45,825.2352800000035,851.7152800000017,1.6619898187994535,2417,26.4799999999982,0.01429569968077735,0.8837401737691353,0.41275417611428017,False,,
475,COMPLETE,25,175,14,50.0,56.0,1.9,25,37.5,2.25,1.9,2.6,50.0,25,380.0,80.0,12,6.5,45,822.3877400000041,853.2977400000044,1.7213118520634123,2491,30.91000000000031,0.016659321151041833,0.8972300281011641,0.4283530101846939,False,,
476,COMPLETE,26,175,13,50.0,57.0,2.0,25,42.5,2.25,1.8,2.6,50.0,25,370.0,80.0,12,6.5,45,694.3833600000038,734.5633600000027,1.5736757897225466,2551,40.17999999999893,0.023058514406371494,0.8871030968247746,0.37686219631947165,False,,
477,COMPLETE,27,175,14,49.0,56.0,1.8,25,40.0,2.25,1.8,2.5,50.0,25,370.0,80.0,12,6.5,45,723.2477399999997,761.0977399999991,1.6103624274048673,2464,37.849999999999454,0.02137128871197182,0.8867694805194806,0.39277921761929335,False,,
478,COMPLETE,28,175,14,50.0,56.0,1.9,25,40.0,1.5,1.9,2.6,50.0,25,380.0,80.0,12,6.5,30,834.9477400000036,865.8577400000039,1.7330196667625994,2491,30.91000000000031,0.016566107553301596,0.8972300281011641,0.43373658646770513,False,,
479,COMPLETE,27,175,14,50.0,56.0,1.8,25,37.5,1.5,1.9,2.6,50.0,25,370.0,90.0,12,6.5,30,820.9077400000018,851.917740000002,1.7212183122413915,2483,31.01000000000022,0.016744804226563638,0.8968989126057189,0.42898919055655454,False,,
480,COMPLETE,28,175,13,49.0,56.0,1.9,25,37.5,1.5,1.9,2.6,50.0,25,370.0,90.0,12,6.5,30,797.8137000000061,836.8537000000033,1.6757155766847074,2567,39.039999999997235,0.021253734034450956,0.8955979742890534,0.413524335578962,False,,
481,COMPLETE,28,175,14,49.0,56.0,1.9,25,37.5,1.5,1.8,2.6,50.0,25,370.0,90.0,12,6.5,30,725.7477399999988,763.9977399999988,1.6113153982786796,2468,38.25,0.021554544883138693,0.8865478119935171,0.3948408280100118,False,,
482,COMPLETE,28,175,13,49.0,56.0,1.8,25,37.5,1.5,1.9,2.5,50.0,25,370.0,90.0,12,6.5,30,794.2437000000086,831.6037000000051,1.6730797325441098,2564,37.35999999999649,0.020397425491112724,0.8958658346333853,0.4105319416824259,False,,
483,COMPLETE,29,180,13,49.0,56.0,1.9,25,37.5,1.5,1.9,2.5,50.0,25,370.0,90.0,12,6.5,30,811.4080800000083,845.3880800000056,1.6847765149221405,2569,33.97999999999729,0.018413471056991537,0.896457765667575,0.4159106286926133,False,,
484,COMPLETE,29,180,13,49.0,56.0,1.8,25,37.5,1.5,1.8,2.4000000000000004,50.0,25,370.0,90.0,12,6.5,30,788.2280799999999,820.6380800000011,1.6588792878999958,2574,32.41000000000122,0.017790214106572257,0.8904428904428905,0.41358937258030387,False,,
485,COMPLETE,30,180,13,49.0,56.0,1.8,25,37.5,1.5,1.8,2.4000000000000004,50.0,25,370.0,90.0,12,6.5,30,787.7280799999999,820.1380800000011,1.6584778446182633,2572,32.41000000000122,0.01779509807147104,0.890357698289269,0.41334654533741894,False,,
486,COMPLETE,30,180,12,48.0,56.0,1.8,25,37.5,1.5,1.7000000000000002,2.4000000000000004,50.0,25,370.0,90.0,12,6.5,30,673.2209000000098,726.2809000000061,1.5290782280980317,2622,53.05999999999631,0.030735528539001848,0.8764302059496567,0.36256278198676056,False,,
487,COMPLETE,29,180,13,49.0,56.0,1.8,25,37.5,1.5,1.7000000000000002,2.3,50.0,25,370.0,90.0,12,6.5,30,757.3780800000035,796.9480800000032,1.6384236761955417,2588,39.56999999999971,0.022020669623353636,0.883693972179289,0.40879167308327824,False,,
488,COMPLETE,30,180,13,49.0,56.0,1.9,25,37.5,1.5,1.8,2.4000000000000004,50.0,25,370.0,90.0,12,6.5,30,788.4780799999999,820.8880800000011,1.6590800095408622,2575,32.41000000000122,0.017787773129308685,0.8904854368932039,0.41360524976606317,False,,
489,COMPLETE,30,180,13,48.0,56.0,1.9,25,37.5,1.5,1.7000000000000002,2.4000000000000004,50.0,25,370.0,90.0,12,6.5,30,697.1737000000053,746.6237000000051,1.5786523105513697,2533,49.44999999999982,0.02831176515010055,0.8791946308724832,0.3869599106057652,False,,
490,COMPLETE,31,180,12,48.0,56.0,2.0,25,37.5,1.5,1.8,2.2,50.0,10,370.0,90.0,12,6.5,30,-999470.7991000001,597.5208999999695,1.43260096900963,2609,68.31999999999834,0.042729619638212576,0.8811805289382906,0.2849511242667488,False,,
491,COMPLETE,29,180,13,49.0,56.0,1.8,25,37.5,1.5,1.6,2.5,50.0,25,370.0,90.0,12,6.5,30,720.42808000001,768.1780800000091,1.6064662930753066,2599,47.74999999999909,0.027005198480912533,0.8768757214313198,0.4022382815120662,False,,
492,COMPLETE,31,180,13,49.0,56.0,1.9,25,37.5,1.5,1.8,2.3,50.0,25,360.0,90.0,12,6.5,30,789.5680799999985,821.9780799999997,1.6599551558950385,2576,32.41000000000122,0.01778835890275981,0.890527950310559,0.41617269807339025,False,,
493,COMPLETE,30,180,13,48.0,56.0,1.9,25,37.5,1.5,1.7000000000000002,2.3,50.0,25,360.0,90.0,12,6.5,30,676.8537000000047,727.0537000000045,1.5634850640288034,2533,50.19999999999982,0.02906684372350419,0.8791946308724832,0.3778205247983413,False,,
494,COMPLETE,31,175,13,49.0,56.0,1.7000000000000002,25,37.5,1.5,1.8,2.3,50.0,25,360.0,90.0,11,6.5,30,751.2080800000011,788.65808,1.6799151911800374,2446,37.44999999999891,0.020937484038312623,0.8916598528209322,0.4148708965993464,False,,
495,COMPLETE,29,180,12,49.0,56.0,1.8,25,37.5,1.5,1.8,2.4000000000000004,50.0,25,360.0,90.0,11,7.0,30,722.9496600000034,765.6796600000025,1.6186860430352557,2517,42.72999999999911,0.024042361459309682,0.8875645609853,0.39677233822149893,False,,
496,COMPLETE,32,175,13,49.0,56.0,2.1,25,35.0,1.5,1.8,2.5,50.0,25,370.0,90.0,12,6.5,30,766.6237000000023,806.1137000000011,1.6445813856087717,2573,39.48999999999887,0.02185071276538052,0.8896230081616789,0.40761956797892673,False,,
497,COMPLETE,28,180,13,48.0,56.0,1.9,25,35.0,1.5,1.8,2.2,50.0,25,360.0,90.0,12,6.5,30,694.7337000000048,738.9537000000032,1.5765237130634462,2525,44.219999999998436,0.025426598464501567,0.885940594059406,0.37638602703810226,False,,
498,COMPLETE,30,175,12,49.0,56.0,2.0,25,37.5,1.5,1.8,2.6,50.0,25,370.0,90.0,12,7.0,30,718.83932,760.8193199999992,1.5574975292451236,2655,41.97999999999911,0.023579244899339272,0.8839924670433145,0.3749978164704555,False,,
499,COMPLETE,29,175,13,49.0,56.0,1.8,25,37.5,1.25,1.8,2.4000000000000004,50.0,25,360.0,90.0,12,6.5,30,765.7937000000019,803.9637000000006,1.6449870681474208,2570,38.16999999999871,0.02115896234497329,0.8898832684824902,0.408174292292333,False,,
1 trial_number state InpFastEmaPeriod InpSlowEmaPeriod InpRsiPeriod InpRsiBuyLevel InpRsiSellLevel InpPullbackAtrMult InpAtrPeriod InpMaxSpreadAtrPct InpRiskPercent InpAtrSLMult InpAtrTPMult InpBreakEvenPoints InpBreakEvenLock InpTrailStartPoints InpTrailStepPoints InpMaxTradesPerDay InpDailyLossLimit InpMinSecondsBetween score net_profit profit_factor total_trades max_equity_dd max_equity_dd_pct win_rate sharpe is_finalist finalist_rank error_message
2 0 COMPLETE 18 195 23 42.0 53.0 1.4 8 45.0 2.0 2.4000000000000004 1.0 300.0 45 160.0 90.0 4 3.5 105 -999913.25192 162.55808000000607 1.193997279041466 712 75.80999999999858 0.06512729486731807 0.8202247191011236 0.10604606920464812 False
3 1 COMPLETE 19 95 20 32.0 56.0 2.1 17 42.5 0.75 2.0 2.8 60.0 35 150.0 70.0 12 8.0 150 131.69807999999412 149.85807999999625 1.935233764006505 308 18.160000000002128 0.015649936700489194 0.8928571428571429 0.19978627764213283 False
4 2 COMPLETE 16 65 22 39.0 52.0 2.5 7 47.5 1.0 2.3 1.9 180.0 30 150.0 240.0 10 8.0 165 -999903.8878799999 155.44212000001232 1.2830440292800405 515 59.3299999999972 0.05094881235595912 0.7242718446601941 0.10964086994385229 False
5 3 COMPLETE 24 190 8 34.0 50.0 2.0 15 20.0 2.5 1.7000000000000002 1.8 190.0 15 340.0 70.0 12 7.0 60 -999496.29226 634.7136999999906 1.216688257186548 2197 131.00595999999587 0.07920296662677688 0.7073281747837961 0.2063588394781333 False
6 4 COMPLETE 8 175 22 45.0 66.0 1.2 14 12.5 2.75 2.3 2.0 60.0 20 200.0 190.0 9 7.5 105 -999847.21438 186.40561999999684 1.470882528001121 689 33.61999999999989 0.02833769448934335 0.8911465892597968 0.16812890249915946 False
7 5 COMPLETE 11 160 23 41.0 66.0 2.5 18 27.5 0.25 1.2 1.0 210.0 20 250.0 230.0 5 4.5 150 -1000090.73 -30.630000000002383 0.9011776092918138 238 60.099999999999454 0.059941753770046645 0.592436974789916 -0.04019337119482629 False
8 6 COMPLETE 14 60 13 33.0 69.0 3.5 20 45.0 2.5 1.3 3.7 190.0 45 370.0 120.0 4 3.0 90 -2000004.88 4.559999999999491 1.3857868020304085 9 9.44000000000051 0.009309664694280581 0.6666666666666666 0.025470874656886095 False
9 7 COMPLETE 30 180 7 40.0 58.0 1.6 9 22.5 3.0 1.6 2.6 230.0 25 400.0 240.0 5 5.0 75 -1000003.92 118.25000000000045 1.0663211795915852 1229 122.17000000000053 0.10221207101383842 0.6200162733930025 0.05630799229441728 False
10 8 COMPLETE 15 55 20 40.0 51.0 1.8 26 20.0 0.5 2.0 4.0 110.0 40 330.0 100.0 10 4.0 120 -999911.17576 145.6742400000023 1.189474755418587 760 56.85000000000082 0.049106230329003554 0.8184210526315789 0.0933763414710417 False
11 9 COMPLETE 25 130 8 47.0 56.0 1.5 7 35.0 2.25 1.0 2.5 100.0 35 150.0 190.0 6 8.0 45 -999834.1 219.59999999998809 1.194786187565961 1476 53.70000000000255 0.04316477368637055 0.6734417344173442 0.14962123988569 False
12 10 COMPLETE 33 105 28 30.0 61.0 3.8000000000000003 28 35.0 1.5 3.0 3.2 290.0 10 260.0 140.0 7 2.0 30 -2000013.0 -3.960000000000491 0.46195652173907303 2 9.039999999999964 0.008994308910733443 0.5 -0.027966495848517944 False
13 11 COMPLETE 23 105 14 35.0 57.0 2.3 15 10.0 1.5 1.7000000000000002 1.7000000000000002 140.0 10 100.0 60.0 12 6.5 180 -999827.48596 206.95404000000138 1.3562399559334906 713 34.43999999999869 0.028253963159784356 0.820476858345021 0.17886521433115532 False
14 12 COMPLETE 22 135 14 35.0 50.0 3.0 21 35.0 1.0 1.8 2.9000000000000004 50.0 50 300.0 60.0 12 6.5 135 462.65808000000914 499.04808000000946 1.597765487593826 1502 36.39000000000033 0.024152471906938536 0.8848202396804261 0.2937385508934857 False
15 13 COMPLETE 20 135 17 30.0 61.0 3.0 22 40.0 0.75 2.0 3.1 50.0 50 260.0 60.0 12 5.5 135 54.38808000000054 86.11808000000056 1.9618907628727842 200 31.730000000000018 0.029214134801991327 0.905 0.14134431322073032 False
16 14 COMPLETE 27 90 12 37.0 54.0 3.0 24 32.5 1.25 2.8 2.9000000000000004 80.0 50 220.0 90.0 10 6.0 150 -999669.44294 424.35144000000844 1.459655401841997 1266 93.79437999999982 0.06585058811047312 0.8965244865718799 0.21895321953166047 False
17 15 COMPLETE 21 140 17 32.0 60.0 3.1 18 40.0 0.75 1.9 2.5 120.0 35 310.0 130.0 11 7.0 180 -1000100.61384 -32.431920000004624 0.9029379537598867 274 68.18192000000363 0.06798340844733743 0.7554744525547445 -0.03446503926034721 False
18 16 COMPLETE 27 85 27 36.0 55.0 4.0 12 50.0 1.75 2.5 3.3000000000000003 80.0 40 110.0 80.0 8 6.5 135 17.1599999999994 27.379999999999654 1.6719018404907815 75 10.220000000000255 0.009898688569048922 0.8933333333333333 0.08571882033649099 False
19 17 COMPLETE 19 115 17 37.0 59.0 1.0 21 40.0 0.25 1.5 3.6 50.0 30 290.0 110.0 11 6.0 150 63.71808000000502 87.76808000000293 1.792774636437569 249 24.049999999997908 0.02210949231016031 0.8594377510040161 0.15381776868049163 False
20 18 COMPLETE 12 155 11 32.0 63.0 2.2 18 30.0 1.0 2.1 2.2 150.0 45 210.0 150.0 11 7.5 120 -1000048.76452 41.645819999987715 1.0465901378076448 708 90.41034000000082 0.08410766328356396 0.769774011299435 0.02886967413035379 False
21 19 COMPLETE 17 80 20 49.0 50.0 2.7 24 25.0 1.25 1.4 2.8 80.0 35 180.0 160.0 9 5.5 165 -999695.30192 387.3380799999758 1.2767934358397688 1951 82.63999999999987 0.05872120451117638 0.7975397232188621 0.21722570029396357 False
22 20 COMPLETE 22 120 15 43.0 53.0 3.5 13 37.5 0.75 2.6 1.4 140.0 50 370.0 80.0 12 8.0 120 -999712.12554 388.9047999999918 1.21948949169073 1586 101.03033999999934 0.07274101147897244 0.830390920554855 0.1511747425418676 False
23 21 COMPLETE 19 110 17 38.0 59.0 1.0 21 42.5 0.25 1.5 3.6 50.0 30 300.0 110.0 11 6.0 150 78.96808000000229 98.2580800000018 1.9379350897289194 255 19.28999999999951 0.017564177629359645 0.8705882352941177 0.16647404323926174 False
24 22 COMPLETE 20 95 19 37.0 64.0 1.8 20 42.5 0.5 1.7000000000000002 3.5 70.0 25 290.0 110.0 11 7.0 135 -1000002.35 14.349999999999909 1.4355083459787432 42 16.700000000000273 0.016417616987809944 0.7857142857142857 0.05326440653660322 False
25 23 COMPLETE 26 145 15 38.0 56.0 1.1 23 50.0 0.5 1.8 4.0 100.0 30 230.0 60.0 9 6.0 165 -999755.77226 281.3177400000076 1.3987808932576764 901 37.090000000000146 0.028946762260545867 0.832408435072142 0.20362833071930228 False
26 24 COMPLETE 29 120 25 34.0 58.0 3.3000000000000003 17 45.0 0.25 2.2 2.9000000000000004 50.0 40 280.0 80.0 11 5.0 150 -1000016.54 17.309999999998126 1.3903043968432425 73 33.85000000000082 0.03295462289591873 0.9178082191780822 0.033937152964300395 False
27 25 COMPLETE 22 75 10 32.0 63.0 2.0 20 35.0 1.0 1.1 2.3 90.0 25 330.0 100.0 12 6.5 135 -999889.74418 130.79178000000397 1.3959663509171527 477 20.535959999999704 0.018045313684593663 0.7442348008385744 0.14629607567669914 False
28 26 COMPLETE 18 105 18 35.0 54.0 2.7 11 30.0 1.25 1.4 3.3000000000000003 70.0 35 120.0 70.0 10 7.5 105 239.84404000000126 282.48404000000113 1.7181858490326263 702 42.63999999999987 0.03324797710543036 0.8461538461538461 0.2709683951296399 False
29 27 COMPLETE 13 95 20 35.0 54.0 2.7 11 30.0 1.25 1.9 3.1 120.0 40 120.0 70.0 8 7.5 90 194.0200000000027 236.56000000000358 1.6215449290593902 454 42.54000000000087 0.03440188911172992 0.8325991189427313 0.20883002383811294 False
30 28 COMPLETE 13 125 18 35.0 52.0 2.7 11 30.0 1.5 1.3 3.3000000000000003 120.0 45 120.0 70.0 8 7.0 90 -999874.81596 171.90403999999165 1.188595504032724 919 46.72000000000344 0.03948867440814037 0.7138193688792165 0.12875563327193457 False
31 29 COMPLETE 10 70 15 43.0 54.0 2.8 9 27.5 2.0 1.5 3.1 160.0 40 180.0 90.0 8 7.5 90 -999648.89068 401.749320000004 1.3717043324301978 1049 50.639999999998054 0.036126288258158674 0.7292659675881792 0.2521148014240056 False
32 30 COMPLETE 8 150 24 35.0 52.0 2.5 10 17.5 1.75 1.8 3.8000000000000003 120.0 45 180.0 90.0 7 7.5 105 -999851.03788 186.55212000000517 1.299802523101655 615 37.590000000000146 0.03168002430436851 0.7967479674796748 0.1320483624524398 False
33 31 COMPLETE 17 95 21 31.0 53.0 3.2 16 32.5 1.25 2.0 2.7 70.0 35 140.0 70.0 10 8.0 75 257.29807999999855 283.70807999999977 1.841888720733554 594 26.41000000000122 0.020573213187223393 0.8905723905723906 0.2591532259340743 False
34 32 COMPLETE 17 100 22 31.0 54.0 3.2 12 32.5 1.25 1.9 2.7 70.0 40 130.0 60.0 10 7.5 75 180.56999999999744 208.0199999999968 1.8583807873235747 440 27.449999999999363 0.022707344109325622 0.8909090909090909 0.24189114253472999 False
35 33 COMPLETE 15 90 21 34.0 51.0 3.4000000000000004 15 27.5 1.25 2.2 3.0 100.0 35 130.0 80.0 9 8.0 75 -999810.48192 239.65808000000143 1.3273677775186086 800 50.13999999999987 0.040420225887634095 0.8425 0.1626828628166489 False
36 34 COMPLETE 17 50 19 33.0 53.0 2.9000000000000004 16 32.5 1.75 2.1 3.3000000000000003 70.0 35 150.0 70.0 7 7.0 60 -999926.02192 114.18808000000072 1.4843198031980358 352 40.20999999999913 0.03602149027238717 0.8806818181818182 0.13973902240738295 False
37 35 COMPLETE 18 110 25 36.0 50.0 2.6 13 30.0 1.0 1.9 2.3 90.0 45 100.0 70.0 10 8.0 105 -999837.18788 219.85212000000172 1.3071203743801112 886 57.03999999999951 0.04622320889360418 0.8318284424379232 0.16327811855640154 False
38 36 COMPLETE 15 170 21 33.0 55.0 3.7 10 25.0 1.5 2.4000000000000004 3.4000000000000004 130.0 30 170.0 100.0 8 6.5 60 -1000040.78384 48.93211999999981 1.0788774883375019 513 89.71595999999636 0.08119766849745232 0.8265107212475633 0.03890256860515704 False
39 37 COMPLETE 10 80 23 31.0 52.0 2.4000000000000004 8 37.5 1.0 1.6 2.7 60.0 40 130.0 70.0 9 7.5 105 207.46000000000458 231.61000000000558 1.7736580151652026 551 24.150000000001 0.01960847995713001 0.8711433756805808 0.23697554590418157 False
40 38 COMPLETE 8 75 24 31.0 52.0 2.3 7 37.5 1.0 1.6 2.6 60.0 50 160.0 60.0 10 7.0 105 191.83000000000675 213.8700000000058 1.9043511353545892 449 22.039999999999054 0.01815680427063767 0.8730512249443207 0.2442199232512432 False
41 39 COMPLETE 24 65 23 30.0 51.0 2.4000000000000004 9 37.5 0.75 1.2 2.1 70.0 45 140.0 80.0 3 7.5 120 159.38404000000259 190.88404000000213 1.6326529232401024 529 31.499999999999545 0.026450938077900086 0.8241965973534972 0.22899064656785126 True 1.0
42 40 COMPLETE 21 165 13 31.0 53.0 3.2 8 35.0 1.0 1.4 2.4000000000000004 90.0 20 200.0 90.0 9 8.0 75 -999745.35788 294.17211999998597 1.3281610898461553 1176 39.52999999999929 0.030544623384407103 0.7950680272108843 0.2024938565918597 False
43 41 COMPLETE 10 85 19 33.0 55.0 2.9000000000000004 11 32.5 1.25 1.8 2.8 60.0 40 120.0 70.0 9 7.5 90 204.93000000000893 228.00000000000728 2.640759930915429 363 23.069999999998345 0.018786644951138607 0.9090909090909091 0.2963334568788378 False
44 42 COMPLETE 10 85 22 33.0 55.0 2.9000000000000004 14 32.5 1.25 1.6 2.8 60.0 40 140.0 70.0 10 8.0 90 95.72403999999865 113.25403999999885 2.076456990780337 224 17.5300000000002 0.015746630481574733 0.875 0.2011377188880557 False
45 43 COMPLETE 10 65 19 34.0 50.0 2.9000000000000004 11 37.5 1.5 1.8 2.7 60.0 35 100.0 60.0 9 7.0 105 -999751.76192 296.6480800000021 1.4460202676289309 1012 48.40999999999849 0.03672326018680811 0.866600790513834 0.21284954866448813 False
46 44 COMPLETE 12 185 16 32.0 57.0 3.1 13 22.5 1.0 1.7000000000000002 2.9000000000000004 80.0 35 120.0 210.0 10 7.5 45 171.25211999999996 218.06212000000036 1.5118637339314727 690 46.8100000000004 0.03828593767078823 0.8594202898550725 0.18351573044731218 False
47 45 COMPLETE 14 100 18 31.0 51.0 2.5 8 35.0 0.75 2.0 2.6 280.0 30 160.0 80.0 9 6.5 75 -999773.21384 287.1561600000053 1.2728630685711575 865 60.37000000000353 0.046766685969321195 0.7676300578034682 0.1676352812608313 False
48 46 COMPLETE 9 85 24 30.0 69.0 3.7 26 25.0 1.5 1.4 3.0 100.0 40 240.0 100.0 10 2.5 90 -2000000.0 0.0 0.0 0 0.0 0.0 0.0 0.0 False
49 47 COMPLETE 16 130 21 36.0 56.0 2.1 7 27.5 1.25 1.6 2.5 50.0 45 360.0 70.0 7 8.0 120 119.69403999999207 146.52403999999245 1.6865846961247952 437 26.830000000000382 0.02329692691391989 0.8810068649885584 0.18357242141039948 False
50 48 COMPLETE 11 75 27 33.0 52.0 3.4000000000000004 16 32.5 2.0 2.1 1.9 250.0 25 140.0 90.0 11 7.0 105 139.58808000000263 170.37808000000078 1.5284843822699203 335 30.789999999998145 0.02623309877869985 0.8208955223880597 0.17043231311057908 False
51 49 COMPLETE 24 200 9 34.0 53.0 3.1 10 40.0 0.5 1.3 3.2 70.0 40 200.0 60.0 8 7.5 60 -999553.4238400001 504.50807999998403 1.4636699077516455 1767 57.93191999999999 0.03794440046454543 0.8064516129032258 0.32846684550465083 False
52 50 COMPLETE 33 60 13 40.0 57.0 2.6 19 35.0 1.75 1.0 2.7 90.0 50 110.0 120.0 6 5.5 45 -999798.47192 220.2480800000025 1.4685073126918098 713 18.7199999999998 0.015341142761724125 0.7475455820476858 0.22646407096002782 False
53 51 COMPLETE 13 95 20 35.0 54.0 2.8 11 30.0 1.25 1.8 3.1 110.0 40 120.0 70.0 8 7.5 90 223.71000000000458 252.51000000000522 1.7409548402242023 459 28.800000000000637 0.022993828392588095 0.840958605664488 0.2318463473839453 False
54 52 COMPLETE 13 105 21 38.0 55.0 2.8 12 30.0 1.25 1.8 3.0 110.0 35 130.0 80.0 9 7.5 90 -999938.63192 95.15808000000234 1.246398434618536 411 33.78999999999951 0.030159192696872898 0.8126520681265207 0.09424210849956756 False
55 53 COMPLETE 11 80 23 36.0 54.0 3.0 14 32.5 1.0 1.7000000000000002 2.8 60.0 35 400.0 60.0 8 4.0 105 115.90403999999802 135.3040399999972 2.113063836788395 270 19.39999999999918 0.017086880020613485 0.8851851851851852 0.19686981736090514 False
56 54 COMPLETE 12 90 18 32.0 53.0 2.4000000000000004 9 27.5 1.5 1.6 3.2 80.0 45 110.0 70.0 12 6.5 120 -999813.07192 233.17808000000005 1.4862983204279783 712 46.249999999999545 0.037504721134841726 0.8356741573033708 0.20975825448764251 False
57 55 COMPLETE 9 100 16 35.0 51.0 2.8 11 37.5 0.75 2.0 2.9000000000000004 170.0 40 170.0 90.0 6 8.0 75 -999766.9898 294.88020000000483 1.2662623252790168 858 61.870000000000346 0.04735806015506991 0.7610722610722611 0.1575948694387805 False
58 56 COMPLETE 18 115 20 33.0 56.0 3.2 8 22.5 3.0 1.8 3.4000000000000004 50.0 35 100.0 80.0 10 7.0 90 185.3821200000015 200.74808000000158 2.0847380036826033 427 15.365960000000086 0.012784425504061834 0.8969555035128806 0.2566758182883463 False
59 57 COMPLETE 14 90 19 37.0 52.0 2.6 16 30.0 1.0 2.2 2.4000000000000004 80.0 30 150.0 70.0 9 8.0 60 -999821.37596 229.63403999999713 1.40160136843219 771 51.00999999999931 0.04148388735236984 0.8690012970168612 0.17055014912299238 False
60 58 COMPLETE 16 110 16 39.0 55.0 2.3 10 40.0 1.25 1.5 3.1 110.0 40 120.0 60.0 11 7.0 105 -999790.6363 235.0237000000065 1.2824789215653 948 25.66000000000031 0.02077692922006288 0.7784810126582279 0.17471845819569096 False
61 59 COMPLETE 20 95 14 34.0 70.0 3.4000000000000004 28 45.0 2.75 1.9 1.1 60.0 45 270.0 170.0 7 6.0 135 18.31999999999516 30.19999999999527 1.829442460862274 87 11.88000000000011 0.01153174140943522 0.8850574712643678 0.09183995204427259 False
62 60 COMPLETE 22 135 22 30.0 54.0 1.8 26 35.0 1.5 1.7000000000000002 2.6 190.0 50 140.0 100.0 10 7.5 75 -999891.59192 162.75808000000043 1.3010637613066705 510 54.349999999999 0.0460625198657849 0.7784313725490196 0.1328100475563679 False
63 61 COMPLETE 13 80 20 35.0 54.0 3.0 11 30.0 1.25 2.0 3.2 140.0 40 120.0 70.0 8 7.5 90 186.02000000000362 222.39000000000487 1.7065383149066125 387 36.370000000001255 0.029753188425953345 0.8397932816537468 0.20631548239062422 False
64 62 COMPLETE 12 95 20 35.0 53.0 2.7 12 32.5 1.25 1.9 3.0 130.0 40 130.0 70.0 8 7.5 90 253.54808000000855 276.65808000000777 1.5177081906472978 566 23.109999999999218 0.01807900828589588 0.803886925795053 0.21658202617248543 False
65 63 COMPLETE 9 100 18 32.0 50.0 2.7 12 32.5 1.0 1.8 2.9000000000000004 130.0 35 110.0 80.0 9 7.5 105 -999802.14788 269.41212000000303 1.2971479054993094 986 71.55999999999904 0.05549600790134021 0.8032454361054767 0.1644813747634095 False
66 64 COMPLETE 11 85 21 36.0 53.0 2.9000000000000004 14 32.5 1.25 1.7000000000000002 3.5 70.0 40 130.0 60.0 8 7.0 75 218.99404000000953 240.71404000000842 1.8246173135555799 514 21.71999999999889 0.017506048371950994 0.8715953307392996 0.24313796469953594 False
67 65 COMPLETE 12 105 23 37.0 52.0 2.4000000000000004 15 37.5 0.75 1.7000000000000002 3.8000000000000003 90.0 45 170.0 60.0 7 6.5 75 -999807.05596 219.78404000000086 1.4539210640451095 625 26.839999999997872 0.022003895050141706 0.8288 0.18478698223364118 False
68 66 COMPLETE 15 70 21 36.0 53.0 2.8 13 30.0 1.5 1.4 3.5 100.0 35 130.0 60.0 8 7.0 75 -999924.8359599999 102.6740400000062 1.2719842119205476 441 27.509999999999764 0.024948442605939654 0.7913832199546486 0.11463103800296467 False
69 67 COMPLETE 11 120 25 39.0 51.0 3.3000000000000003 14 35.0 1.25 2.0 3.6 150.0 30 380.0 80.0 8 8.0 60 -999778.4138399999 270.81616000001105 1.3472269148909033 704 49.23000000000002 0.0382361163053957 0.7855113636363636 0.16117826255664155 False
70 68 COMPLETE 16 95 20 41.0 52.0 2.5 17 27.5 1.0 2.3 3.3000000000000003 70.0 40 190.0 90.0 7 7.0 120 286.37000000001217 326.6300000000092 1.6494541983974127 829 40.259999999997035 0.03034757242034083 0.8986731001206273 0.2458899314281657 False
71 69 COMPLETE 18 115 20 44.0 53.0 2.6 17 25.0 1.75 2.6 3.4000000000000004 110.0 40 190.0 110.0 5 6.5 135 399.920900000001 436.46528000000217 1.5246930704086186 979 36.54438000000118 0.025440489588443884 0.8610827374872319 0.24873054703622094 False
72 70 COMPLETE 19 115 20 46.0 53.0 2.6 18 25.0 2.0 2.7 3.3000000000000003 130.0 35 190.0 130.0 5 6.0 135 -999658.74102 394.16335999999717 1.3529466839072015 1074 52.90437999999858 0.037936432923583986 0.8361266294227188 0.19551028947390992 False
73 71 COMPLETE 18 95 20 41.0 51.0 2.7 17 20.0 1.75 2.4000000000000004 3.4000000000000004 110.0 40 220.0 110.0 3 6.5 120 -999910.01576 158.07211999999834 1.262608808333192 600 68.08787999999686 0.058752054056124214 0.835 0.11775813566669881 False
74 72 COMPLETE 17 125 21 45.0 53.0 3.0 19 27.5 2.25 3.0 3.7 70.0 40 320.0 90.0 4 7.0 135 235.77966000000742 310.03966000000537 1.5075757781639363 877 74.25999999999794 0.05668530676391709 0.9019384264538198 0.2040183666501753 False
75 73 COMPLETE 17 125 17 44.0 56.0 3.1 19 27.5 2.25 3.0 3.8000000000000003 80.0 45 310.0 100.0 4 6.5 135 284.4796600000018 355.96966000000066 1.5627494983119077 892 71.48999999999887 0.05272241858272761 0.899103139013453 0.23751240058293188 False
76 74 COMPLETE 16 125 18 43.0 57.0 3.0 19 22.5 2.25 3.0 3.8000000000000003 80.0 45 330.0 120.0 4 6.5 135 -999835.8463 237.7836999999899 1.3836208853395855 786 73.6299999999992 0.059070640640071205 0.8867684478371501 0.17109220746410006 False
77 75 COMPLETE 17 140 17 44.0 50.0 3.1 21 25.0 2.25 2.9000000000000004 3.9000000000000004 50.0 50 300.0 100.0 4 6.0 150 241.72000000000526 295.9200000000046 1.5786921151439388 955 54.19999999999936 0.041823569356132455 0.9172774869109948 0.21822093561717917 False
78 76 COMPLETE 19 145 17 44.0 50.0 3.3000000000000003 22 25.0 2.5 2.9000000000000004 3.9000000000000004 50.0 50 310.0 110.0 5 5.5 150 313.370000000004 361.5600000000045 1.57450662598914 1169 48.19000000000051 0.035393225417903254 0.9178785286569717 0.24024102907945222 False
79 77 COMPLETE 21 145 17 44.0 50.0 3.6 22 20.0 2.5 2.9000000000000004 4.0 50.0 50 300.0 120.0 5 5.5 165 309.9500000000053 359.3900000000049 1.5753830390163552 1170 49.4399999999996 0.03636925385650874 0.9188034188034188 0.24027077851778816 False
80 78 COMPLETE 21 155 11 47.0 50.0 3.6 22 15.0 2.5 2.9000000000000004 4.0 50.0 50 310.0 130.0 6 5.0 165 406.21562000000586 454.07562000000644 1.5831275860740575 1473 47.86000000000058 0.032782042936640596 0.9192124915139172 0.28008341135400644 False
81 79 COMPLETE 23 155 12 48.0 50.0 3.6 23 15.0 2.5 2.8 4.0 50.0 50 340.0 140.0 5 5.0 165 392.5900000000047 436.250000000005 1.6807896379525684 1229 43.66000000000031 0.030398607484769476 0.9186330349877949 0.30136312066623544 False
82 80 COMPLETE 23 150 11 48.0 50.0 3.9000000000000004 23 15.0 2.5 2.9000000000000004 3.9000000000000004 50.0 50 340.0 140.0 5 5.0 180 311.77000000000635 359.130000000006 1.5232004195743176 1229 47.35999999999967 0.034845820488105965 0.9161920260374288 0.23748811898661112 False
83 81 COMPLETE 23 150 11 49.0 50.0 4.0 23 15.0 2.5 2.9000000000000004 3.9000000000000004 50.0 50 340.0 140.0 5 5.0 180 -999714.27 333.1400000000044 1.4757511710270832 1229 47.409999999999854 0.035562656585204626 0.9153783563873068 0.21909097089959298 False
84 82 COMPLETE 21 160 12 48.0 50.0 3.9000000000000004 22 12.5 2.75 2.8 4.0 50.0 50 350.0 130.0 5 4.5 165 394.4600000000032 437.970000000003 1.6887620305718136 1229 43.50999999999976 0.0302579330584085 0.919446704637917 0.30174986986942326 False
85 83 COMPLETE 21 160 12 48.0 50.0 3.9000000000000004 22 10.0 2.5 2.8 4.0 50.0 50 350.0 140.0 6 4.5 165 452.8156200000067 498.76562000000695 1.6583147933055404 1470 45.95000000000027 0.03054504552647638 0.9217687074829932 0.31447331483401364 False
86 84 COMPLETE 21 160 12 48.0 50.0 3.9000000000000004 22 10.0 2.75 2.8 4.0 50.0 50 350.0 150.0 6 4.5 165 446.3756200000071 492.42562000000726 1.6499467029196055 1470 46.05000000000018 0.030741077867771048 0.9217687074829932 0.3102057189171196 False
87 85 COMPLETE 23 160 12 48.0 50.0 3.9000000000000004 24 10.0 2.75 2.7 3.9000000000000004 50.0 50 350.0 150.0 6 4.5 165 457.3756200000048 500.9356200000043 1.6661023615765185 1472 43.55999999999949 0.028919778168570574 0.9198369565217391 0.32211088304831326 False
88 86 COMPLETE 25 160 12 50.0 51.0 3.9000000000000004 25 10.0 2.75 2.7 4.0 60.0 50 350.0 160.0 6 4.5 165 -999621.58 421.3600000000015 1.473172375070187 1472 42.9399999999996 0.030210502617211372 0.9055706521739131 0.24745216865677602 False
89 87 COMPLETE 20 170 10 47.0 51.0 3.8000000000000003 22 10.0 2.75 2.8 3.7 50.0 50 370.0 150.0 6 4.5 165 476.2100000000073 519.2200000000071 1.7029881260239241 1472 43.00999999999976 0.028310580429430604 0.9225543478260869 0.3275498928242469 False
90 88 COMPLETE 22 175 10 47.0 51.0 3.8000000000000003 24 10.0 2.75 2.7 3.7 60.0 50 380.0 150.0 6 4.5 165 400.9100000000035 454.2700000000027 1.5170561252945154 1472 53.35999999999922 0.03669194853775373 0.904891304347826 0.2657125827872516 False
91 89 COMPLETE 21 175 10 47.0 51.0 3.8000000000000003 24 10.0 2.75 2.6 3.7 210.0 50 380.0 150.0 6 4.0 165 -999938.21438 199.37562000000256 1.0851918108540626 1458 137.59000000000196 0.11181582413252332 0.7503429355281207 0.07194065303031767 False
92 90 COMPLETE 20 165 7 47.0 51.0 3.9000000000000004 21 12.5 3.0 2.8 3.6 60.0 50 360.0 170.0 6 4.5 180 -999708.52 369.45000000000437 1.3962312716508898 1474 77.96999999999935 0.05693526598269312 0.8975576662143826 0.19606727638183957 False
93 91 COMPLETE 23 160 12 48.0 50.0 3.7 25 12.5 2.75 2.8 4.0 50.0 50 390.0 150.0 6 4.0 165 485.5256200000035 530.8456200000032 1.7128123590074167 1473 45.31999999999971 0.029496074919821775 0.921928038017651 0.33646610512263553 False
94 92 COMPLETE 22 175 10 48.0 51.0 3.8000000000000003 25 12.5 2.75 2.7 3.7 60.0 50 390.0 150.0 6 4.0 165 -999648.42 393.5400000000004 1.4275424511390917 1471 41.95999999999958 0.030110366404982682 0.9000679809653297 0.22984974554700185 False
95 93 COMPLETE 24 165 9 49.0 50.0 3.7 27 10.0 2.75 2.6 3.9000000000000004 50.0 50 360.0 130.0 6 3.5 165 -999657.9 382.86000000000195 1.4731573483612665 1473 40.75999999999976 0.029475145712508647 0.9103869653767821 0.23605047426081177 False
96 94 COMPLETE 20 160 14 47.0 52.0 4.0 24 12.5 3.0 2.8 4.0 60.0 50 370.0 150.0 6 4.5 150 -999691.71 391.25000000000045 1.4196835612764824 1462 82.96000000000186 0.059509633731691464 0.9028727770177839 0.22378349637972386 False
97 95 COMPLETE 22 180 12 46.0 50.0 3.6 22 12.5 2.75 2.5 3.7 70.0 45 350.0 160.0 6 4.0 180 -999758.06 294.0399999999895 1.2826601042047083 1469 52.09999999999991 0.040057510591021465 0.8781484002722941 0.16839519114843854 False
98 96 COMPLETE 26 170 9 50.0 51.0 3.9000000000000004 20 10.0 3.0 2.5 3.8000000000000003 50.0 50 390.0 130.0 5 4.5 165 -999721.67 314.74000000000115 1.455550730930673 1230 36.41000000000031 0.027693688485936594 0.9040650406504065 0.2166682823675746 False
99 97 COMPLETE 20 155 13 46.0 52.0 3.8000000000000003 24 10.0 2.75 2.7 3.9000000000000004 60.0 45 370.0 170.0 6 4.5 150 -999756.77 356.8099999999895 1.3663384634339053 1462 113.57999999999856 0.08313448785700651 0.8974008207934336 0.19814163509752847 False
100 98 COMPLETE 21 190 11 48.0 51.0 3.7 25 12.5 2.75 2.8 4.0 50.0 50 350.0 140.0 7 3.5 165 554.1156200000019 605.3756200000021 1.6933316764780018 1714 51.26000000000022 0.03182851358196449 0.9235705950991832 0.3538456371967244 False
101 99 COMPLETE 22 195 11 49.0 51.0 3.5 25 17.5 3.0 2.6 3.8000000000000003 70.0 50 330.0 160.0 7 3.5 165 -999682.78 359.41000000000577 1.2975913490598119 1708 42.18999999999869 0.031023655629332778 0.8858313817330211 0.18430413351857214 False
102 100 COMPLETE 21 180 10 47.0 52.0 3.7 24 15.0 2.5 2.8 3.6 60.0 45 380.0 150.0 6 4.0 180 -999651.76 405.83000000000857 1.4478371220481228 1473 57.58999999999969 0.0409651238058651 0.902919212491514 0.2364844650182565 False
103 101 COMPLETE 21 170 11 48.0 50.0 4.0 21 12.5 2.75 2.8 4.0 50.0 50 350.0 140.0 5 3.0 165 330.4600000000023 376.85000000000355 1.559506488107617 1229 46.39000000000124 0.033692849620511396 0.9161920260374288 0.2537555124008654 False
104 102 COMPLETE 23 160 12 48.0 50.0 3.8000000000000003 22 12.5 2.75 2.7 3.9000000000000004 50.0 50 390.0 130.0 6 4.5 165 508.83562000000074 552.7156200000009 1.7628082751387033 1473 43.88000000000011 0.028164573174943728 0.9205702647657841 0.3562924596935152 False
105 103 COMPLETE 23 185 13 46.0 51.0 3.8000000000000003 23 10.0 2.75 2.7 3.9000000000000004 60.0 50 400.0 150.0 6 3.5 150 469.63999999999487 525.3699999999953 1.6346274642442917 1462 55.73000000000047 0.036409368568909056 0.9090287277701778 0.3018283584542877 False
106 104 COMPLETE 24 185 13 46.0 51.0 3.8000000000000003 23 10.0 2.75 2.7 3.9000000000000004 60.0 50 390.0 180.0 6 3.5 150 488.3900000000008 542.3500000000013 1.6551386741399308 1462 53.96000000000049 0.03486621479294176 0.9090287277701778 0.30717649767065885 False
107 105 COMPLETE 25 190 14 46.0 51.0 3.5 23 10.0 3.0 2.7 3.9000000000000004 60.0 50 400.0 210.0 6 3.0 150 384.47999999999774 449.26999999999816 1.5264718290053407 1448 64.79000000000042 0.044140590403390426 0.9060773480662984 0.2564362914061711 False
108 106 COMPLETE 24 185 13 45.0 50.0 3.7 22 12.5 2.75 2.9000000000000004 3.9000000000000004 80.0 50 390.0 200.0 7 3.5 150 -999663.16 406.5200000000009 1.319654020051111 1660 69.68000000000211 0.0488615565855828 0.8903614457831325 0.19075859641649634 False
109 107 COMPLETE 23 185 13 49.0 51.0 3.6 21 10.0 2.5 2.7 3.8000000000000003 50.0 50 390.0 140.0 6 3.5 150 533.640000000004 580.4200000000042 1.8531573377234285 1470 46.7800000000002 0.029599726654939873 0.9285714285714286 0.36711531607069997 False
110 108 COMPLETE 23 190 15 50.0 51.0 3.8000000000000003 21 10.0 3.0 2.6 3.8000000000000003 60.0 50 400.0 140.0 7 3.5 150 -999594.45 457.7700000000059 1.4550442847344471 1698 52.220000000000255 0.035282353418104685 0.9063604240282686 0.2555639303393717 False
111 109 COMPLETE 26 200 13 49.0 52.0 3.9000000000000004 23 10.0 2.5 2.7 3.7 70.0 45 390.0 190.0 6 3.5 150 -999747.8 336.0000000000018 1.328571009475755 1468 83.79999999999609 0.06181490934304757 0.8957765667574932 0.18453901346683735 False
112 110 COMPLETE 28 185 14 48.0 67.0 3.7 25 12.5 2.75 2.5 3.9000000000000004 50.0 50 360.0 180.0 7 3.0 150 375.78000000000156 430.5000000000018 1.60607340456984 1349 54.720000000000255 0.03825235931492498 0.916234247590808 0.2839925502747245 False
113 111 COMPLETE 25 195 12 48.0 50.0 3.6 22 15.0 2.5 2.8 4.0 50.0 50 390.0 140.0 6 4.0 165 426.9456200000059 472.91562000000613 1.6044268040183125 1471 45.970000000000255 0.0310926257098125 0.9177430319510537 0.2999751164618944 False
114 112 COMPLETE 24 195 12 49.0 51.0 3.6 20 12.5 2.75 2.8 1.7000000000000002 60.0 50 370.0 160.0 6 4.0 180 -999656.84 397.330000000004 1.4536507392818434 1472 54.16999999999916 0.03876679095131358 0.907608695652174 0.24360834318184224 False
115 113 COMPLETE 23 190 13 48.0 50.0 4.0 21 10.0 2.5 2.8 3.8000000000000003 50.0 50 390.0 230.0 6 3.5 165 491.63000000000056 534.9700000000012 1.7300354803493467 1471 43.3400000000006 0.0281397508067295 0.9265805574439157 0.3371144865927234 False
116 114 COMPLETE 23 190 13 46.0 51.0 4.0 21 10.0 2.75 2.7 3.8000000000000003 70.0 50 400.0 230.0 7 3.5 150 -999600.14 456.41999999999825 1.3905899669673247 1680 56.560000000000855 0.03841190932181582 0.8952380952380953 0.22338355704126953 False
117 115 COMPLETE 23 185 14 50.0 52.0 3.8000000000000003 20 10.0 2.75 2.6 3.8000000000000003 60.0 50 370.0 160.0 6 3.5 165 371.21000000000595 452.21000000000413 1.5492384677047222 1468 80.99999999999818 0.055666277231803986 0.9066757493188011 0.2720892726887757 False
118 116 COMPLETE 24 165 12 49.0 50.0 3.9000000000000004 23 12.5 2.5 2.8 3.9000000000000004 50.0 45 380.0 230.0 6 2.5 180 398.65000000001237 446.4100000000085 1.5842833396594498 1473 47.759999999996126 0.03301968321568286 0.9212491513917176 0.27602798411184976 False
119 117 COMPLETE 22 170 13 48.0 52.0 3.7 27 10.0 3.0 2.7 3.6 80.0 50 400.0 240.0 6 3.0 165 -999839.76 233.70000000000118 1.1946964584739208 1468 73.46000000000004 0.05786666876728083 0.8801089918256131 0.12729737908786556 False
120 118 COMPLETE 23 190 15 47.0 51.0 4.0 20 10.0 2.75 2.9000000000000004 3.7 60.0 50 390.0 150.0 7 4.0 150 488.51000000000204 545.340000000002 1.5457930081968063 1665 56.82999999999993 0.03656825903428386 0.9153153153153153 0.27789916567766604 False
121 119 COMPLETE 31 180 15 47.0 51.0 4.0 20 17.5 2.5 3.0 3.5 70.0 45 390.0 170.0 7 4.0 150 -999679.43 408.5599999999931 1.3358846403643578 1665 87.98999999999796 0.06205131098291871 0.9009009009009009 0.19345893436681233 False
122 120 COMPLETE 25 195 13 45.0 52.0 3.5 21 12.5 2.25 2.9000000000000004 3.6 70.0 50 380.0 220.0 7 3.5 150 -999600.59 485.2399999999989 1.4264309128138413 1656 85.82999999999856 0.057041270685185504 0.9009661835748792 0.22833414736551516 False
123 121 COMPLETE 23 185 11 48.0 50.0 3.8000000000000003 23 10.0 2.75 2.9000000000000004 3.7 50.0 50 370.0 150.0 6 4.0 165 394.77000000000544 439.4500000000053 1.5546440155999628 1471 44.679999999999836 0.031039633193233298 0.9218218898708361 0.2679516666628968 False
124 122 COMPLETE 24 180 15 46.0 51.0 3.9000000000000004 21 10.0 2.75 2.8 3.8000000000000003 60.0 50 390.0 140.0 6 4.5 165 -999690.24 376.25000000000364 1.4130076838638896 1433 66.48999999999933 0.04762552825728754 0.9057920446615492 0.2091942427689989 False
125 123 COMPLETE 22 200 12 47.0 50.0 4.0 22 10.0 2.75 2.7 4.0 50.0 50 400.0 150.0 6 3.5 165 489.3300000000004 531.0100000000002 1.7491253315275672 1466 41.679999999999836 0.027130471007889068 0.9229195088676672 0.3321184594089717 False
126 124 COMPLETE 22 200 14 47.0 50.0 4.0 24 12.5 3.0 2.7 3.9000000000000004 50.0 50 400.0 140.0 5 3.5 150 406.23999999999796 442.4999999999977 1.7275208391562364 1225 36.25999999999976 0.025036249395843275 0.92 0.3044823278950454 False
127 125 COMPLETE 26 190 13 47.0 51.0 3.8000000000000003 26 47.5 2.5 2.5 4.0 60.0 50 380.0 150.0 7 3.0 165 -999638.09 413.9000000000033 1.3752867466383807 1703 51.98999999999978 0.03643052343914208 0.8919553728714034 0.23110398461138934 False
128 126 COMPLETE 23 190 11 49.0 50.0 3.7 23 12.5 2.75 2.7 3.8000000000000003 70.0 50 400.0 160.0 6 3.5 150 -999724.47 334.39000000000306 1.3318414576055924 1471 58.86000000000104 0.04411004279108874 0.8891910265125765 0.18432712974529022 False
129 127 COMPLETE 22 195 14 46.0 51.0 4.0 25 10.0 2.75 2.6 3.9000000000000004 50.0 45 390.0 180.0 5 4.0 135 339.5899999999956 397.4999999999968 1.6325588796944597 1220 57.91000000000122 0.04121590844388868 0.9163934426229509 0.2621287432051863 False
130 128 COMPLETE 24 175 12 48.0 50.0 3.9000000000000004 21 10.0 2.5 2.9000000000000004 3.7 60.0 10 370.0 130.0 6 3.5 180 -999759.44438 323.8656199999814 1.3544201840685293 1468 83.30999999999767 0.06253914702128384 0.9073569482288828 0.18143782498401217 False
131 129 COMPLETE 22 185 13 45.0 51.0 1.4 22 12.5 3.0 2.7 4.0 50.0 50 360.0 150.0 7 4.0 150 499.74000000000024 541.5700000000006 1.6266140602582502 1668 41.83000000000038 0.026901705553983715 0.9190647482014388 0.3052173463606272 False
132 130 COMPLETE 25 185 14 45.0 52.0 1.1 20 15.0 3.0 2.7 3.9000000000000004 60.0 50 380.0 150.0 7 2.5 150 -999633.77 448.71000000000004 1.4348344332354563 1642 82.48000000000093 0.0569200510679417 0.9037758830694276 0.2240543285416689 False
133 131 COMPLETE 22 200 13 47.0 51.0 3.8000000000000003 22 12.5 3.0 2.8 4.0 50.0 50 360.0 140.0 7 4.0 150 485.3500000000008 532.7800000000016 1.5845731841123563 1699 47.430000000000746 0.030773522961733052 0.9199529134785168 0.3075737713149808 False
134 132 COMPLETE 22 200 15 47.0 51.0 3.8000000000000003 23 12.5 3.0 2.8 4.0 50.0 50 360.0 150.0 7 4.0 150 564.6900000000023 604.3300000000027 1.702921813571549 1672 39.64000000000033 0.024645304087241054 0.9234449760765551 0.33226684963832975 False
135 133 COMPLETE 22 195 16 47.0 51.0 3.8000000000000003 22 12.5 3.0 2.9000000000000004 4.0 60.0 50 360.0 160.0 7 4.0 150 -999587.39 482.7700000000027 1.4629643836667399 1653 70.16000000000122 0.04674777788142554 0.9086509376890503 0.247422649407387 False
136 134 COMPLETE 23 200 15 46.0 51.0 3.7 21 15.0 3.0 2.8 3.8000000000000003 50.0 50 390.0 140.0 7 3.5 135 480.030000000002 530.8000000000011 1.609785518168347 1653 50.76999999999907 0.032878078474798456 0.9225650332728372 0.2941279367090679 False
137 135 COMPLETE 23 200 15 45.0 52.0 1.6 23 15.0 3.0 2.8 3.8000000000000003 50.0 50 390.0 120.0 7 3.5 135 463.7200000000021 524.400000000001 1.6060956299626679 1633 60.67999999999893 0.03979694898802345 0.9210042865890998 0.29286114869581137 False
138 136 COMPLETE 20 200 13 46.0 51.0 3.7 21 12.5 3.0 2.8 3.7 70.0 50 370.0 140.0 7 4.0 150 -999579.69 479.40999999999804 1.4060938214715284 1683 59.09999999999991 0.03937584947898621 0.8954248366013072 0.23282769309980542 False
139 137 COMPLETE 22 190 13 46.0 52.0 3.6 22 15.0 3.0 2.7 4.0 50.0 45 380.0 130.0 7 3.0 150 498.72999999999 552.9499999999903 1.6246117003851825 1690 54.220000000000255 0.03480951708375635 0.9207100591715977 0.30269316103371957 False
140 138 COMPLETE 22 195 16 47.0 52.0 3.4000000000000004 22 17.5 3.0 2.6 4.0 50.0 45 360.0 130.0 7 3.0 135 529.0199999999872 605.6699999999873 1.682091535654747 1657 76.65000000000009 0.04754549852990477 0.9155099577549789 0.3313015037064247 False
141 139 COMPLETE 22 190 16 45.0 52.0 1.3 20 17.5 3.0 2.6 4.0 50.0 45 360.0 130.0 7 3.0 135 470.95999999998 526.2899999999809 1.6294506703663136 1597 55.33000000000084 0.03623966779758806 0.915466499686913 0.2874528425017057 False
142 140 COMPLETE 24 200 15 46.0 52.0 3.5 22 15.0 3.0 2.6 4.0 60.0 45 380.0 120.0 7 3.0 135 475.2799999999834 550.9199999999846 1.5582498201384005 1646 75.64000000000124 0.0485625136429602 0.9034021871202916 0.28030357222111 False
143 141 COMPLETE 20 195 14 47.0 52.0 3.6 22 17.5 3.0 2.7 3.9000000000000004 50.0 45 360.0 130.0 7 4.0 150 546.0199999999859 594.2299999999864 1.6918419857726497 1692 48.21000000000049 0.030240304096649104 0.9231678486997635 0.33672651473660714 False
144 142 COMPLETE 22 195 16 47.0 53.0 3.6 21 17.5 3.0 2.7 3.8000000000000003 50.0 45 360.0 130.0 7 4.0 150 610.1099999999901 652.5099999999911 1.826056132977162 1640 42.400000000001 0.025554022046371642 0.9225609756097561 0.36461006239593885 False
145 143 COMPLETE 19 195 16 47.0 53.0 3.6 22 17.5 3.0 2.7 3.9000000000000004 50.0 45 360.0 130.0 7 4.0 150 631.0999999999949 668.9099999999949 1.8625643141755486 1634 37.809999999999945 0.022563839373631187 0.9241126070991432 0.37325057484732593 False
146 144 COMPLETE 21 195 16 47.0 53.0 3.4000000000000004 22 17.5 3.0 2.7 3.9000000000000004 60.0 45 340.0 130.0 7 4.0 150 560.2999999999929 602.1899999999932 1.6360266159695749 1631 41.89000000000033 0.02604257329719275 0.9086450030656039 0.3121720004124801 False
147 145 COMPLETE 19 195 16 47.0 53.0 3.5 21 17.5 3.0 2.5 3.9000000000000004 60.0 45 330.0 130.0 7 4.0 150 551.9199999999955 589.1899999999964 1.619189743050809 1633 37.27000000000089 0.023284872642305728 0.900796080832823 0.3114948087195637 False
148 146 COMPLETE 19 195 16 47.0 53.0 3.4000000000000004 21 17.5 3.0 2.6 3.8000000000000003 60.0 45 330.0 130.0 7 4.0 150 562.6699999999933 601.1999999999935 1.6389898603405328 1632 38.5300000000002 0.023973966499913096 0.9056372549019608 0.3154679220450983 False
149 147 COMPLETE 19 195 16 47.0 53.0 3.4000000000000004 21 17.5 3.0 2.5 3.8000000000000003 70.0 45 330.0 130.0 8 4.0 150 -999488.15 556.2799999999911 1.4479265641355914 1803 44.4300000000012 0.02834901898229475 0.8879645036051026 0.26194932274115434 False
150 148 COMPLETE 19 195 16 47.0 54.0 3.3000000000000003 22 17.5 3.0 2.4000000000000004 3.9000000000000004 50.0 45 340.0 120.0 7 4.0 150 532.0299999999947 576.8899999999958 1.6870355373475572 1623 44.86000000000104 0.028248125082648214 0.9081947011706716 0.3412028374795733 False
151 149 COMPLETE 19 195 16 49.0 54.0 3.3000000000000003 21 17.5 3.0 2.4000000000000004 3.9000000000000004 70.0 45 340.0 120.0 7 4.0 150 -999629.75596 443.96404000000933 1.3860791874288096 1654 73.7199999999998 0.05105390297669693 0.8821039903264812 0.24430837777922948 False
152 150 COMPLETE 20 190 16 47.0 54.0 3.4000000000000004 22 20.0 3.0 2.3 3.8000000000000003 50.0 45 320.0 130.0 7 4.0 150 490.94403999999395 541.6940399999958 1.6263039741337868 1625 50.75000000000182 0.032801103595878636 0.9015384615384615 0.3166375955532262 False
153 151 COMPLETE 20 190 16 47.0 54.0 3.4000000000000004 22 20.0 3.0 2.3 3.8000000000000003 50.0 45 340.0 130.0 7 4.0 150 513.3040399999959 567.1240399999974 1.6557060145590854 1625 53.82000000000153 0.03422283801004435 0.9015384615384615 0.3288783725238105 False
154 152 COMPLETE 19 195 17 47.0 53.0 3.5 21 20.0 3.0 2.3 3.9000000000000004 60.0 45 320.0 120.0 7 4.0 150 -999615.42596 441.99403999998225 1.4387577801638027 1617 57.42000000000144 0.03968199010695374 0.8843537414965986 0.24973244008486672 False
155 153 COMPLETE 18 190 17 48.0 55.0 3.4000000000000004 22 17.5 3.0 2.5 3.8000000000000003 50.0 45 340.0 130.0 7 4.0 150 654.6299999999928 689.2599999999929 1.912600791769823 1608 34.63000000000011 0.020500100635781497 0.9210199004975125 0.4042806724199889 False
156 154 COMPLETE 18 190 17 48.0 55.0 3.4000000000000004 22 17.5 3.0 2.6 3.9000000000000004 60.0 45 340.0 130.0 8 4.0 135 610.1199999999985 651.5099999999961 1.6230371999617448 1761 41.3899999999976 0.02506191303715854 0.9085746734809768 0.3375895691195681 False
157 155 COMPLETE 18 195 17 48.0 55.0 3.4000000000000004 22 17.5 3.0 2.4000000000000004 3.9000000000000004 60.0 45 340.0 130.0 8 4.0 135 588.3399999999983 629.0700000000002 1.5898895369554222 1771 40.73000000000184 0.024954508415178458 0.8983625070581592 0.3325759343781531 False
158 156 COMPLETE 18 195 17 48.0 54.0 3.3000000000000003 23 17.5 3.0 2.4000000000000004 3.9000000000000004 60.0 45 340.0 130.0 8 4.0 135 612.4199999999964 677.4699999999984 1.6457876575219694 1791 65.050000000002 0.03870641437581936 0.9000558347292016 0.3468285222893029 False
159 157 COMPLETE 19 195 18 49.0 55.0 3.3000000000000003 23 17.5 3.0 2.4000000000000004 3.8000000000000003 80.0 45 340.0 120.0 8 4.0 135 -999702.18034 413.58965999999054 1.2984796685014557 1743 115.77000000000317 0.0816909952757554 0.8691910499139415 0.20844057729713475 False
160 158 COMPLETE 18 195 16 48.0 54.0 3.4000000000000004 23 17.5 3.0 2.4000000000000004 3.6 60.0 45 330.0 130.0 8 4.0 135 536.174039999988 606.2340399999862 1.5437340120053746 1829 70.05999999999813 0.04353272364653971 0.8983050847457628 0.3126491547734482 False
161 159 COMPLETE 18 195 17 48.0 55.0 3.2 23 17.5 3.0 2.5 3.6 300.0 45 330.0 120.0 8 4.0 135 -999599.18834 504.5379599999977 1.1702521363550795 1473 103.72630000000572 0.06864300180777552 0.7012898845892735 0.15605517300694183 False
162 160 COMPLETE 18 195 17 49.0 55.0 3.4000000000000004 23 17.5 3.0 2.4000000000000004 3.9000000000000004 70.0 45 330.0 130.0 8 4.0 135 -999516.58596 523.3740399999933 1.4091576750185622 1793 39.96000000000049 0.02623124652957895 0.8817624093697713 0.2697614455119891 False
163 161 COMPLETE 18 195 16 48.0 54.0 3.4000000000000004 22 20.0 3.0 2.4000000000000004 3.7 60.0 45 340.0 130.0 8 4.0 135 546.9640399999944 614.334039999992 1.5498646332093176 1831 67.36999999999762 0.04165239405991353 0.8973238667394866 0.3143425977792501 False
164 162 COMPLETE 18 200 16 48.0 54.0 3.3000000000000003 22 20.0 3.0 2.5 3.7 60.0 45 320.0 130.0 8 4.0 135 597.9340399999928 653.0040399999903 1.6097792523117858 1822 55.069999999997435 0.03324691991767716 0.9045005488474204 0.3326351921852728 False
165 163 COMPLETE 18 200 17 48.0 54.0 3.3000000000000003 21 20.0 3.0 2.5 3.5 60.0 45 320.0 120.0 8 4.0 120 668.929999999998 725.4400000000005 1.7354718358408692 1789 56.51000000000249 0.03268741323461503 0.907769703745109 0.3782700451150446 False
166 164 COMPLETE 18 200 17 48.0 56.0 3.5 20 22.5 3.0 2.5 3.5 60.0 45 320.0 130.0 8 4.0 120 615.7199999999839 649.1899999999864 1.6680009054988347 1739 33.47000000000253 0.02025379266942372 0.9108683151236343 0.3576048221863868 False
167 165 COMPLETE 18 200 17 48.0 56.0 3.2 20 22.5 3.0 2.5 3.5 80.0 45 320.0 130.0 8 4.0 120 -999582.52034 476.97965999998496 1.3581212348084126 1712 59.50000000000637 0.04023533519070927 0.8802570093457944 0.2381928925195306 False
168 166 COMPLETE 17 200 17 48.0 55.0 3.5 24 20.0 3.0 2.4000000000000004 3.5 60.0 45 320.0 120.0 8 4.5 120 602.5000000000014 637.760000000002 1.610413476263403 1774 35.26000000000067 0.021488076737908 0.9013528748590756 0.34770443644317506 False
169 167 COMPLETE 17 200 18 48.0 56.0 3.5 24 20.0 3.0 2.5 3.5 70.0 45 320.0 110.0 8 4.5 120 556.589659999976 614.8696599999762 1.5844188767657985 1673 58.2800000000002 0.03601288519775692 0.8977884040645547 0.3183238802085501 False
170 168 COMPLETE 17 200 18 48.0 55.0 3.5 24 20.0 3.0 2.5 3.5 80.0 45 310.0 110.0 8 4.5 120 567.1596599999821 637.1996599999834 1.5193513666373228 1697 70.04000000000133 0.04273546880266357 0.882734236888627 0.29453719953710544 False
171 169 COMPLETE 17 200 18 49.0 56.0 3.5 24 22.5 3.0 2.5 3.4000000000000004 90.0 45 300.0 110.0 8 4.5 120 -999729.42068 359.8693199999811 1.245577742948261 1699 89.29000000000815 0.06517949669837209 0.8616833431430253 0.1736220140150533 False
172 170 COMPLETE 17 200 18 48.0 57.0 3.3000000000000003 24 22.5 3.0 2.5 3.4000000000000004 70.0 45 310.0 110.0 8 4.5 120 586.3077399999759 626.5077399999775 1.6236201665977725 1636 40.20000000000164 0.024674418288621252 0.8985330073349633 0.3337409673170451 False
173 171 COMPLETE 17 200 18 48.0 57.0 3.3000000000000003 24 22.5 3.0 2.5 3.4000000000000004 70.0 45 310.0 110.0 8 4.5 120 586.3077399999759 626.5077399999775 1.6236201665977725 1636 40.20000000000164 0.024674418288621252 0.8985330073349633 0.3337409673170451 False
174 172 COMPLETE 17 200 18 48.0 57.0 3.3000000000000003 24 22.5 3.0 2.5 3.5 80.0 45 310.0 110.0 8 5.0 120 -999508.07226 542.2977399999767 1.45443297062284 1629 50.37000000000171 0.032638113227026894 0.8809085328422345 0.27081247227643623 False
175 173 COMPLETE 17 200 19 48.0 55.0 3.3000000000000003 24 20.0 3.0 2.5 3.4000000000000004 70.0 45 320.0 110.0 8 4.5 120 511.20561999998245 573.6756199999818 1.526972967480283 1665 62.469999999999345 0.039391984498563605 0.8954954954954955 0.3024945696525056 False
176 174 COMPLETE 16 200 18 49.0 58.0 3.2 25 20.0 3.0 2.5 3.5 90.0 45 310.0 110.0 8 4.5 120 -999760.2326 309.7173999999899 1.219040266858512 1594 69.95000000000391 0.05314552361219087 0.8557089084065245 0.15185288361486574 False
177 175 COMPLETE 16 200 19 48.0 57.0 3.3000000000000003 25 20.0 3.0 2.6 3.4000000000000004 70.0 45 300.0 120.0 9 4.5 120 531.5417799999748 569.4217799999758 1.5441252138074923 1635 37.88000000000102 0.024076141930205127 0.8972477064220183 0.29530041384424777 False
178 176 COMPLETE 17 190 17 48.0 58.0 3.5 24 22.5 3.0 2.4000000000000004 3.3000000000000003 70.0 45 320.0 120.0 8 5.0 120 -999579.7778800001 465.28807999998287 1.4158382726080543 1634 45.06596000000172 0.030755699589122602 0.8861689106487148 0.24943555047288493 False
179 177 COMPLETE 17 200 18 48.0 56.0 3.4000000000000004 24 20.0 3.0 2.5 3.5 70.0 45 290.0 100.0 8 4.5 120 567.2296599999781 625.3096599999776 1.5943418465760766 1673 58.07999999999947 0.0356592553333213 0.8977884040645547 0.32592462700566865 False
180 178 COMPLETE 15 200 18 49.0 56.0 3.4000000000000004 24 20.0 3.0 2.5 3.5 80.0 45 280.0 110.0 8 4.5 120 -999691.1463 383.2536999999778 1.2826908468604135 1702 74.40000000000464 0.05333739768127539 0.8742655699177438 0.19750491705963485 False
181 179 COMPLETE 16 200 17 48.0 56.0 3.2 23 22.5 3.0 2.3 3.3000000000000003 70.0 45 290.0 100.0 8 4.5 120 -999564.7000000001 481.7099999999773 1.4088039105860597 1723 46.409999999998945 0.03113720228111343 0.8827626233313988 0.2658124691995387 False
182 180 COMPLETE 18 200 17 50.0 55.0 3.5 24 22.5 3.0 2.4000000000000004 3.4000000000000004 90.0 45 310.0 100.0 8 4.5 120 -999464.14472 575.1952800000022 1.4115626115939877 1803 39.33999999999742 0.024974681234441843 0.8713255684969495 0.28002449079478775 False
183 181 COMPLETE 18 190 18 48.0 57.0 3.4000000000000004 26 20.0 3.0 2.6 3.5 70.0 45 320.0 120.0 8 4.5 120 516.5177399999724 559.7177399999745 1.5415381211500052 1625 43.20000000000209 0.02769731913160313 0.8996923076923077 0.29021087303605814 False
184 182 COMPLETE 17 200 18 48.0 56.0 3.3000000000000003 25 20.0 3.0 2.4000000000000004 3.6 80.0 45 330.0 110.0 8 4.5 105 -999511.0263 554.4136999999754 1.4599667189448091 1668 65.44000000000051 0.042009208516084036 0.8782973621103117 0.27495675629189104 False
185 183 COMPLETE 17 195 17 49.0 55.0 3.4000000000000004 24 22.5 3.0 2.5 3.4000000000000004 270.0 45 280.0 100.0 9 4.5 120 -999675.52396 437.4623399999989 1.1441980387193889 1601 112.98630000000139 0.0783303984989698 0.7158026233603998 0.13719764595031553 False
186 184 COMPLETE 18 190 18 48.0 55.0 3.6 23 20.0 3.0 2.6 3.5 60.0 45 350.0 120.0 8 4.5 120 665.9199999999846 714.3799999999851 1.7724363133082313 1715 48.46000000000049 0.028266778660507537 0.9119533527696793 0.3773971234327652 False
187 185 COMPLETE 18 195 18 49.0 56.0 3.2 23 20.0 3.0 2.6 3.5 60.0 45 300.0 120.0 8 5.0 120 531.2340399999862 563.6940399999867 1.5596366741126708 1731 32.46000000000049 0.020758536625234414 0.9093009820912767 0.3136666388108305 False
188 186 COMPLETE 16 200 19 48.0 55.0 3.5 23 20.0 3.0 2.5 3.6 80.0 45 310.0 120.0 8 4.5 105 -999558.20034 525.68965999998 1.4294694445637504 1650 83.89000000000306 0.05460132293102351 0.8812121212121212 0.2552491289131132 False
189 187 COMPLETE 17 190 17 47.0 57.0 3.3000000000000003 24 20.0 3.0 2.6 3.3000000000000003 70.0 40 320.0 110.0 8 4.5 120 -999556.31034 480.04965999998603 1.4481150208690647 1622 36.36000000000104 0.024455704860160604 0.8964241676942046 0.2461862969162894 False
190 188 COMPLETE 18 195 19 48.0 55.0 3.5 23 22.5 3.0 2.5 3.6 60.0 40 350.0 110.0 8 4.5 120 616.4556199999834 651.2356199999836 1.7062493510767003 1681 34.7800000000002 0.020906397274613995 0.91017251635931 0.3573803118170366 False
191 189 COMPLETE 19 195 17 47.0 55.0 3.1 23 22.5 3.0 2.6 3.6 60.0 45 350.0 120.0 8 4.0 120 621.3096599999922 662.0896599999905 1.6802353599731985 1718 40.77999999999838 0.024452697599652084 0.9086146682188592 0.3441073196454752 False
192 190 COMPLETE 19 190 19 49.0 55.0 3.1 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.0 120 659.0840399999915 694.0440399999893 1.6710861817232385 1844 34.95999999999776 0.0206370077604346 0.9126898047722343 0.3557614993366742 False
193 191 COMPLETE 19 190 19 49.0 55.0 3.6 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.0 120 659.0840399999915 694.0440399999893 1.6710861817232385 1844 34.95999999999776 0.0206370077604346 0.9126898047722343 0.3557614993366742 False
194 192 COMPLETE 18 190 19 49.0 55.0 3.6 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.0 120 646.774039999987 688.4640399999889 1.6637781312970528 1840 41.690000000001874 0.02469107959207834 0.9130434782608695 0.35555036543480306 False
195 193 COMPLETE 18 190 19 50.0 55.0 3.1 23 25.0 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.0 120 554.464039999993 588.3240399999927 1.5341844463612788 1877 33.85999999999967 0.021318068068780113 0.9099627064464572 0.31145525382034306 False
196 194 COMPLETE 18 190 19 49.0 55.0 3.1 23 22.5 3.0 2.5 3.6 60.0 40 350.0 120.0 9 5.0 120 647.6940399999876 686.5840399999888 1.6607678404727204 1847 38.89000000000124 0.02305844184319537 0.9095831077422848 0.3589403036206419 False
197 195 COMPLETE 19 180 19 49.0 55.0 3.1 23 25.0 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 663.8340399999865 705.5240399999884 1.6928041557013132 1833 41.690000000001874 0.024444099890847715 0.9138025095471904 0.36586483732520925 False
198 196 COMPLETE 19 180 19 50.0 55.0 3.1 23 25.0 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 580.004039999993 613.8640399999927 1.5684610554974157 1877 33.85999999999967 0.020980701695292637 0.9115610015982951 0.3262867254720367 False
199 197 COMPLETE 18 185 19 49.0 54.0 3.0 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.0 105 701.2840399999986 745.3840399999985 1.7110679030011633 1886 44.09999999999991 0.025266645614566263 0.9135737009544008 0.37447566652567105 False
200 198 COMPLETE 19 185 19 49.0 54.0 3.0 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.0 105 711.4940399999987 753.6840399999987 1.7189857859691293 1888 42.190000000000055 0.02405792550863386 0.9136652542372882 0.377722922566942 False
201 199 COMPLETE 19 180 19 49.0 54.0 3.0 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.0 105 702.3440399999977 746.4440399999976 1.7095610562938441 1883 44.09999999999991 0.025251310084919737 0.9129049389272438 0.3743671655377701 False
202 200 COMPLETE 19 180 19 50.0 54.0 3.0 23 25.0 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.0 105 564.0340400000018 609.2940400000016 1.5309150510181875 1927 45.25999999999976 0.028124133237950547 0.909704203425013 0.3145530668782391 False
203 201 COMPLETE 19 185 19 49.0 54.0 3.0 23 22.5 3.0 2.6 3.7 60.0 40 350.0 120.0 9 5.5 105 714.7440399999987 756.9340399999987 1.72208616183008 1888 42.190000000000055 0.024013422837433376 0.9136652542372882 0.3793541593075854 False
204 202 COMPLETE 19 185 20 49.0 54.0 2.9000000000000004 23 22.5 3.0 2.6 3.7 60.0 40 350.0 120.0 9 5.5 105 643.8240399999945 701.6340399999931 1.6683565665513993 1828 57.80999999999858 0.03397322728687234 0.9108315098468271 0.3531017577644858 False
205 203 COMPLETE 19 185 20 49.0 54.0 2.9000000000000004 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 641.094039999994 698.9040399999926 1.665756046447378 1828 57.80999999999858 0.034027819487673264 0.9108315098468271 0.3516656279942476 False
206 204 COMPLETE 19 185 20 49.0 54.0 2.9000000000000004 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 641.094039999994 698.9040399999926 1.665756046447378 1828 57.80999999999858 0.034027819487673264 0.9108315098468271 0.3516656279942476 False
207 205 COMPLETE 19 185 20 49.0 54.0 2.9000000000000004 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 641.094039999994 698.9040399999926 1.665756046447378 1828 57.80999999999858 0.034027819487673264 0.9108315098468271 0.3516656279942476 False
208 206 COMPLETE 19 185 20 49.0 54.0 2.9000000000000004 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 641.094039999994 698.9040399999926 1.665756046447378 1828 57.80999999999858 0.034027819487673264 0.9108315098468271 0.3516656279942476 False
209 207 COMPLETE 19 180 20 49.0 54.0 2.9000000000000004 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 632.7099999999928 691.3199999999915 1.656206395762728 1824 58.60999999999876 0.03465340680651743 0.9100877192982456 0.34788003651504595 False
210 208 COMPLETE 19 180 20 49.0 54.0 2.9000000000000004 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 632.7099999999928 691.3199999999915 1.656206395762728 1824 58.60999999999876 0.03465340680651743 0.9100877192982456 0.34788003651504595 False
211 209 COMPLETE 19 180 20 50.0 54.0 2.9000000000000004 23 25.0 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 555.5840400000034 610.2640400000037 1.5492925652565297 1875 54.68000000000029 0.03395716394436789 0.9077333333333333 0.31476143749935304 False
212 210 COMPLETE 20 175 20 49.0 54.0 2.9000000000000004 23 22.5 3.0 2.6 3.7 70.0 40 350.0 120.0 9 5.5 105 552.9540399999937 620.3340399999925 1.5086748284146851 1794 67.37999999999874 0.04158401807074241 0.8968784838350056 0.29903357693458293 False
213 211 COMPLETE 19 185 20 49.0 54.0 3.0 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 641.094039999994 698.9040399999926 1.665756046447378 1828 57.80999999999858 0.034027819487673264 0.9108315098468271 0.3516656279942476 False
214 212 COMPLETE 19 185 20 49.0 54.0 3.0 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 641.094039999994 698.9040399999926 1.665756046447378 1828 57.80999999999858 0.034027819487673264 0.9108315098468271 0.3516656279942476 False
215 213 COMPLETE 20 185 20 49.0 54.0 3.0 23 25.0 3.0 2.6 3.7 60.0 40 350.0 120.0 9 5.5 105 660.3340399999947 718.1440399999933 1.6944762881014948 1829 57.80999999999858 0.03364677154774451 0.9114270092946966 0.3608429310158045 False
216 214 COMPLETE 20 185 20 49.0 54.0 3.0 23 25.0 3.0 2.6 3.7 60.0 40 350.0 120.0 9 5.5 105 660.3340399999947 718.1440399999933 1.6944762881014948 1829 57.80999999999858 0.03364677154774451 0.9114270092946966 0.3608429310158045 False
217 215 COMPLETE 20 185 21 50.0 54.0 3.0 23 25.0 3.0 2.6 3.7 70.0 40 350.0 120.0 9 5.5 105 -999501.53034 561.7396599999988 1.4559669982747527 1795 63.26999999999862 0.04051251410238161 0.8935933147632312 0.27859045799251597 False
218 216 COMPLETE 20 185 20 49.0 54.0 3.0 23 25.0 3.0 2.6 3.7 60.0 40 360.0 120.0 9 5.5 105 665.7140399999939 725.5040399999925 1.701593725823914 1829 59.7899999999986 0.034650744718047057 0.9114270092946966 0.364396348011819 False
219 217 COMPLETE 20 185 21 49.0 54.0 3.0 23 25.0 3.0 2.6 3.7 70.0 40 360.0 120.0 9 5.5 105 550.4340399999924 621.01403999999 1.5534933822939503 1725 70.57999999999765 0.04354064693973785 0.9008695652173913 0.3051519407921731 False
220 218 COMPLETE 20 185 20 50.0 54.0 2.8 23 25.0 3.0 2.6 3.7 60.0 40 340.0 120.0 9 5.5 105 562.6940400000049 617.3740400000052 1.5617853769507313 1872 54.68000000000029 0.033807887753657846 0.9086538461538461 0.3191925822730189 False
221 219 COMPLETE 19 185 20 49.0 54.0 2.8 23 25.0 3.0 2.6 3.6 60.0 40 360.0 120.0 9 6.0 105 646.4740399999932 706.2640399999918 1.6727669724421 1828 59.7899999999986 0.035041469900519547 0.9108315098468271 0.3552318587874484 False
222 220 COMPLETE 20 180 19 49.0 54.0 2.8 23 27.5 3.0 2.6 3.7 70.0 40 360.0 120.0 9 6.0 105 578.1996599999961 653.1696599999968 1.521695014397516 1864 74.97000000000071 0.04534924745715503 0.8986051502145923 0.3192511648478602 False
223 221 COMPLETE 19 185 20 49.0 54.0 3.0 23 25.0 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.5 105 641.094039999994 698.9040399999926 1.665756046447378 1828 57.80999999999858 0.034027819487673264 0.9108315098468271 0.35166038176464837 False
224 222 COMPLETE 19 185 20 49.0 54.0 3.1 23 22.5 3.0 2.6 3.6 60.0 40 340.0 120.0 9 6.0 105 626.1840399999946 685.1940399999935 1.6526962916392745 1828 59.009999999998854 0.03501673908127463 0.9108315098468271 0.3466039466530174 False
225 223 COMPLETE 19 185 19 50.0 54.0 3.0 23 25.0 3.0 2.6 3.7 60.0 40 360.0 120.0 9 5.5 105 589.6580800000019 634.6680800000012 1.5552505883485144 1923 45.00999999999931 0.02753464177265838 0.9100364014560582 0.3262085019611222 False
226 224 COMPLETE 19 175 20 49.0 55.0 2.8 23 22.5 3.0 2.6 3.6 60.0 40 350.0 120.0 9 5.0 90 496.0380799999833 547.2580799999845 1.5072135687473798 1763 51.220000000001164 0.033103721132289494 0.9052750992626205 0.28607990391991495 False
227 225 COMPLETE 20 180 21 49.0 54.0 2.9000000000000004 24 22.5 3.0 2.6 3.7 70.0 40 340.0 110.0 9 5.5 105 503.3040399999836 574.5440399999829 1.5003039385574428 1724 71.23999999999933 0.045244844342365996 0.8990719257540604 0.28402369536998273 False
228 226 COMPLETE 19 185 19 50.0 53.0 3.0 23 22.5 3.0 2.6 3.6 60.0 40 360.0 120.0 10 5.0 105 638.4199999999928 683.8699999999922 1.5726067771349088 2071 45.44999999999936 0.02699139482264045 0.9116368903911154 0.3329397296212084 False
229 227 COMPLETE 20 185 20 49.0 55.0 3.0 22 25.0 3.0 2.6 3.5 70.0 40 350.0 120.0 9 6.0 90 -999555.46192 504.2180799999836 1.4091915308018659 1744 59.6800000000012 0.0396750981745957 0.893348623853211 0.2549629150342197 False
230 228 COMPLETE 19 180 21 49.0 54.0 2.9000000000000004 23 27.5 3.0 2.7 3.7 60.0 40 370.0 110.0 9 5.5 105 632.0640399999847 689.9840399999816 1.7184190666583168 1739 57.91999999999689 0.034272513011423186 0.9166187464059804 0.3543809108262284 False
231 229 COMPLETE 20 185 19 50.0 55.0 3.1 24 22.5 3.0 2.6 3.6 50.0 40 350.0 120.0 9 5.0 105 646.809999999994 680.7599999999943 1.73225983413469 1893 33.95000000000027 0.02019919560198981 0.9249867934495509 0.387063173406479 False
232 230 COMPLETE 20 185 19 50.0 55.0 3.1 24 22.5 2.75 2.6 3.5 50.0 40 340.0 110.0 10 5.0 105 659.7399999999898 693.68999999999 1.7083746055735323 1995 33.95000000000027 0.020044990523649824 0.924812030075188 0.38576342116060386 False
233 231 COMPLETE 20 185 19 50.0 55.0 3.1 24 22.5 2.75 2.6 3.5 50.0 40 340.0 110.0 10 5.0 105 659.7399999999898 693.68999999999 1.7083746055735323 1995 33.95000000000027 0.020044990523649824 0.924812030075188 0.38576342116060386 False
234 232 COMPLETE 20 180 19 50.0 55.0 3.1 24 25.0 2.75 2.6 3.5 50.0 40 340.0 110.0 10 5.0 105 641.03999999999 674.9899999999902 1.6772520217526465 2003 33.95000000000027 0.020268777724046394 0.9236145781328008 0.3745935190735758 False
235 233 COMPLETE 20 185 19 50.0 55.0 3.1 24 22.5 2.75 2.7 3.5 50.0 40 340.0 110.0 10 5.0 105 674.989999999988 709.9899999999884 1.7352380755131112 1987 35.000000000000455 0.020467955952959194 0.9285354806240563 0.38972726272747066 False
236 234 COMPLETE 20 175 19 50.0 55.0 3.1 24 22.5 2.75 2.7 3.5 50.0 40 340.0 110.0 10 5.0 105 631.2699999999859 666.2699999999863 1.6644891690269958 1986 35.000000000000455 0.02100499918980762 0.9259818731117825 0.36434196355672027 False
237 235 COMPLETE 20 190 19 50.0 55.0 3.1 24 25.0 2.75 2.5 3.5 50.0 40 360.0 110.0 10 5.0 105 657.4999999999909 690.4099999999908 1.69036857788532 2010 32.909999999999854 0.019468649617548427 0.9203980099502488 0.3816364704771256 False
238 236 COMPLETE 21 190 19 50.0 55.0 3.1 24 25.0 2.75 2.5 3.5 50.0 40 360.0 110.0 10 5.0 90 662.0799999999908 694.9899999999907 1.6973050527752067 2012 32.909999999999854 0.019416043752470538 0.9209741550695825 0.38428039220805366 False
239 237 COMPLETE 21 190 19 50.0 55.0 3.1 24 25.0 2.75 2.5 3.5 50.0 40 360.0 110.0 10 5.0 90 662.0799999999908 694.9899999999907 1.6973050527752067 2012 32.909999999999854 0.019416043752470538 0.9209741550695825 0.38428039220805366 False
240 238 COMPLETE 21 190 19 50.0 55.0 3.1 25 27.5 2.75 2.5 3.5 50.0 35 360.0 110.0 10 5.0 90 662.1999999999862 695.2299999999864 1.6971681273941461 2010 33.0300000000002 0.0194840818060089 0.9208955223880597 0.38389773013154105 False
241 239 COMPLETE 21 190 19 50.0 55.0 3.1 25 27.5 2.75 2.5 3.4000000000000004 50.0 35 360.0 110.0 10 5.0 90 660.6599999999853 693.6899999999855 1.69562383425923 2010 33.0300000000002 0.019501797849665808 0.9208955223880597 0.38321546496388 False
242 240 COMPLETE 21 190 19 50.0 55.0 3.1 25 27.5 2.75 2.5 3.4000000000000004 50.0 35 370.0 100.0 10 5.0 90 671.0999999999863 704.1299999999865 1.7060929383686554 2010 33.0300000000002 0.01938232411846541 0.9208955223880597 0.3880456419827778 False
243 241 COMPLETE 21 190 19 50.0 55.0 3.1 25 27.5 2.75 2.5 3.4000000000000004 50.0 35 370.0 100.0 10 5.0 90 671.0999999999863 704.1299999999865 1.7060929383686554 2010 33.0300000000002 0.01938232411846541 0.9208955223880597 0.3880456419827778 False
244 242 COMPLETE 21 190 19 50.0 55.0 3.1 25 27.5 2.75 2.5 3.5 50.0 35 370.0 100.0 10 5.0 90 673.3499999999872 706.3799999999874 1.708349210806032 2010 33.0300000000002 0.019356766956950062 0.9208955223880597 0.38903702815830793 False
245 243 COMPLETE 21 190 19 50.0 55.0 3.1 25 27.5 2.75 2.5 3.4000000000000004 50.0 35 370.0 100.0 10 5.0 90 671.0999999999863 704.1299999999865 1.7060929383686554 2010 33.0300000000002 0.01938232411846541 0.9208955223880597 0.3880456419827778 False
246 244 COMPLETE 21 190 19 50.0 56.0 3.1 26 27.5 2.75 2.5 3.4000000000000004 50.0 35 370.0 100.0 10 5.0 90 637.621779999978 670.7217799999784 1.7107856540792632 1944 33.100000000000364 0.01981179655178781 0.9202674897119342 0.3721307440067888 False
247 245 COMPLETE 21 190 19 50.0 55.0 3.2 25 27.5 2.75 2.5 3.4000000000000004 50.0 35 370.0 100.0 10 5.0 90 671.0999999999863 704.1299999999865 1.7060929383686554 2010 33.0300000000002 0.01938232411846541 0.9208955223880597 0.3880456419827778 False
248 246 COMPLETE 21 190 19 50.0 55.0 3.2 25 27.5 2.75 2.5 3.3000000000000003 50.0 35 370.0 100.0 10 5.0 90 672.2899999999868 705.319999999987 1.7072862557910902 2010 33.0300000000002 0.01936879881781745 0.9208955223880597 0.38883109533179583 False
249 247 COMPLETE 21 190 19 50.0 56.0 3.2 25 27.5 2.75 2.5 3.2 50.0 35 370.0 90.0 10 5.0 90 635.2161599999797 668.2461599999799 1.708067898618276 1946 33.0300000000002 0.01979923634291512 0.920349434737924 0.37149547712664543 False
250 248 COMPLETE 21 190 19 50.0 55.0 3.2 25 27.5 2.75 2.5 3.3000000000000003 50.0 35 370.0 100.0 10 5.0 90 672.2899999999868 705.319999999987 1.7072862557910902 2010 33.0300000000002 0.01936879881781745 0.9208955223880597 0.38883109533179583 False
251 249 COMPLETE 21 190 19 50.0 55.0 3.2 26 27.5 2.75 2.5 3.3000000000000003 50.0 35 370.0 100.0 10 5.0 90 674.4556199999847 707.5556199999851 1.7093613845276685 2009 33.100000000000364 0.0193844344584223 0.9208561473369836 0.3897382677481275 False
252 250 COMPLETE 21 190 19 50.0 55.0 3.2 25 27.5 2.75 2.5 3.3000000000000003 50.0 35 370.0 100.0 10 5.0 90 672.2899999999868 705.319999999987 1.7072862557910902 2010 33.0300000000002 0.01936879881781745 0.9208955223880597 0.38883109533179583 False
253 251 COMPLETE 21 190 19 50.0 56.0 3.2 26 27.5 2.75 2.5 3.3000000000000003 50.0 35 370.0 100.0 10 5.0 90 639.6717799999777 672.7717799999781 1.7129581056595031 1944 33.100000000000364 0.01978751697975249 0.9202674897119342 0.3736984094416922 False
254 252 COMPLETE 21 190 19 50.0 55.0 3.2 25 27.5 2.75 2.5 3.2 50.0 35 370.0 90.0 11 5.0 90 651.9099999999821 684.9399999999823 1.635138769113775 2089 33.0300000000002 0.0196030719194752 0.9181426519865965 0.36366788330757166 False
255 253 COMPLETE 21 180 19 50.0 55.0 3.2 26 27.5 2.75 2.4000000000000004 3.4000000000000004 50.0 35 370.0 100.0 10 5.0 90 692.2156199999881 724.2656199999883 1.7431990772770554 2011 32.05000000000018 0.01858762340804568 0.9179512680258578 0.40345851437618385 False
256 254 COMPLETE 21 180 19 50.0 56.0 3.2 26 27.5 2.75 2.4000000000000004 3.3000000000000003 50.0 35 370.0 100.0 10 5.0 90 619.8617799999832 655.1917799999827 1.6952194721447977 1949 35.32999999999947 0.02134495858842402 0.9158542842483325 0.3684182960763705 False
257 255 COMPLETE 21 180 18 50.0 55.0 3.2 27 30.0 2.75 2.5 3.4000000000000004 50.0 35 370.0 100.0 11 5.0 90 684.2640399999837 730.2740399999834 1.6762735935546467 2144 46.00999999999976 0.026591163559270763 0.917910447761194 0.3803812834153004 False
258 256 COMPLETE 21 180 18 50.0 55.0 3.2 27 30.0 2.75 2.5 3.4000000000000004 50.0 35 370.0 100.0 11 5.0 90 684.2640399999837 730.2740399999834 1.6762735935546467 2144 46.00999999999976 0.026591163559270763 0.917910447761194 0.3803812834153004 False
259 257 COMPLETE 21 175 18 50.0 55.0 3.2 28 30.0 2.75 2.4000000000000004 3.4000000000000004 50.0 35 380.0 100.0 11 5.0 90 674.2240399999814 715.5240399999811 1.6605467352270367 2135 41.29999999999973 0.024074276452576076 0.9147540983606557 0.37608842170407786 False
260 258 COMPLETE 21 175 18 50.0 55.0 3.2 27 30.0 2.75 2.4000000000000004 3.3000000000000003 50.0 35 380.0 100.0 11 5.0 90 671.3340399999838 712.5740399999836 1.6551742260552837 2136 41.23999999999978 0.02408071069441189 0.9138576779026217 0.37470621423767114 False
261 259 COMPLETE 21 170 18 50.0 55.0 3.2 27 30.0 2.75 2.4000000000000004 3.3000000000000003 50.0 35 380.0 100.0 11 5.0 90 686.5540399999836 728.1440399999833 1.678561547708898 2133 41.58999999999969 0.02406628095653421 0.9146741678387248 0.3818617658404983 False
262 260 COMPLETE 21 175 18 50.0 56.0 3.2 27 30.0 2.75 2.4000000000000004 3.2 50.0 35 380.0 100.0 11 5.0 90 612.5421199999785 653.042119999978 1.628166717968432 2089 40.499999999999545 0.024461512714925162 0.9143130684538057 0.3529837078389122 False
263 261 COMPLETE 21 175 18 50.0 55.0 3.2 28 30.0 2.75 2.4000000000000004 3.3000000000000003 50.0 35 380.0 90.0 11 5.0 90 681.9840399999734 723.674039999974 1.668070529804359 2135 41.69000000000051 0.024186707598149556 0.9147540983606557 0.38003521492716474 False
264 262 COMPLETE 21 180 18 50.0 55.0 3.2 28 30.0 2.75 2.3 3.3000000000000003 50.0 35 380.0 100.0 11 5.0 90 703.26403999998 747.7640399999809 1.707138909641102 2152 44.50000000000091 0.025461102861460288 0.912639405204461 0.39760903316896834 False
265 263 COMPLETE 21 170 18 50.0 55.0 3.2 28 30.0 2.75 2.2 3.3000000000000003 50.0 35 380.0 90.0 11 5.0 90 708.6240399999729 745.7140399999726 1.705353701216374 2143 37.08999999999969 0.02115108866461105 0.9080727951469902 0.40087716469392387 False
266 264 COMPLETE 21 170 18 50.0 56.0 3.2 28 30.0 2.75 2.3 3.3000000000000003 50.0 35 380.0 90.0 11 5.0 90 640.4321199999697 683.3721199999684 1.6704064590813388 2090 42.93999999999869 0.025508323138914463 0.9119617224880383 0.3711808463609977 False
267 265 COMPLETE 22 170 18 50.0 55.0 3.2 27 30.0 2.75 2.2 3.3000000000000003 50.0 35 380.0 90.0 11 5.0 90 718.594039999974 755.1440399999733 1.7195891405646744 2147 36.54999999999927 0.02073213019137915 0.9091755938518864 0.40616355055511794 False
268 266 COMPLETE 22 170 18 50.0 56.0 3.2 27 30.0 2.75 2.2 3.2 50.0 35 380.0 90.0 11 5.0 90 658.0821199999702 697.8521199999702 1.6969669719456022 2098 39.76999999999998 0.023405102625460826 0.9099142040038132 0.3860614205868306 False
269 267 COMPLETE 21 165 18 50.0 55.0 3.2 28 30.0 2.75 2.2 3.3000000000000003 50.0 35 380.0 100.0 11 5.0 90 725.5140399999773 763.4740399999769 1.7381767236794827 2133 37.95999999999958 0.021503987040868058 0.9095171120487576 0.41357765723997136 False
270 268 COMPLETE 21 170 18 50.0 55.0 3.2 28 30.0 2.75 2.3 3.3000000000000003 50.0 35 380.0 100.0 11 5.0 90 693.6940399999799 736.1340399999804 1.6937853803814964 2136 42.44000000000051 0.024445117152360533 0.9119850187265918 0.3904534239567018 False
271 269 COMPLETE 22 165 18 50.0 55.0 3.2 28 30.0 2.75 2.2 3.3000000000000003 50.0 35 380.0 100.0 11 5.0 75 723.0140399999782 760.274039999978 1.7318278899188346 2138 37.25999999999976 0.021145775983124865 0.9092609915809168 0.4111398606290364 False
272 270 COMPLETE 22 165 18 50.0 61.0 3.2 28 30.0 2.75 2.2 3.1 50.0 30 380.0 90.0 11 5.0 75 426.5599999999931 465.2399999999934 1.5463962323980818 1722 38.68000000000029 0.02639840572192983 0.9065040650406504 0.2873800707462657 False
273 271 COMPLETE 22 165 18 50.0 56.0 3.2 27 30.0 2.75 2.1 3.3000000000000003 50.0 35 380.0 100.0 11 5.0 75 620.7721199999799 659.0421199999798 1.6403876283851264 2095 38.26999999999998 0.023051826698547554 0.9040572792362769 0.36986698390667655 False
274 272 COMPLETE 21 170 18 50.0 55.0 3.2 28 30.0 2.75 2.2 3.3000000000000003 50.0 35 380.0 90.0 11 5.0 90 708.6240399999729 745.7140399999726 1.705353701216374 2143 37.08999999999969 0.02115108866461105 0.9080727951469902 0.40087716469392387 False
275 273 COMPLETE 22 170 18 50.0 56.0 3.2 28 32.5 2.75 2.1 3.3000000000000003 50.0 35 380.0 90.0 11 5.0 90 649.5421199999707 687.9021199999709 1.6766893770227096 2107 38.36000000000013 0.022651419246049173 0.9055529188419554 0.3838607337958217 False
276 274 COMPLETE 21 170 18 50.0 55.0 3.2 28 30.0 2.75 2.2 3.2 50.0 35 380.0 90.0 11 5.0 90 707.554039999975 744.6440399999747 1.7043416129093065 2143 37.08999999999969 0.021164002566293746 0.9080727951469902 0.4006987142870508 False
277 275 COMPLETE 21 170 18 50.0 55.0 3.2 28 30.0 2.75 2.2 3.2 50.0 35 380.0 90.0 11 5.0 75 707.554039999975 744.6440399999747 1.7043416129093065 2143 37.08999999999969 0.021164002566293746 0.9080727951469902 0.4006987142870508 False
278 276 COMPLETE 22 170 18 50.0 55.0 3.2 28 32.5 2.75 2.2 3.1 50.0 35 380.0 90.0 11 5.0 75 715.2240399999746 751.9640399999744 1.7160948490129193 2149 36.73999999999978 0.02087708723424431 0.9092601209865053 0.40482159071174206 False
279 277 COMPLETE 22 165 18 50.0 56.0 3.2 28 32.5 2.75 2.2 3.1 50.0 35 380.0 90.0 11 5.0 90 638.4621199999694 677.8321199999693 1.669001302802973 2090 39.36999999999989 0.02344649659553566 0.9090909090909091 0.37579792785468386 False
280 278 COMPLETE 22 170 18 50.0 55.0 3.3000000000000003 28 30.0 2.75 2.2 3.2 50.0 35 380.0 80.0 11 5.0 75 725.4440399999771 761.6840399999774 1.7253511984686831 2147 36.24000000000024 0.020484482428011142 0.9091755938518864 0.40920597286345023 False
281 279 COMPLETE 22 170 18 50.0 55.0 3.3000000000000003 28 30.0 2.5 2.2 3.2 50.0 35 380.0 80.0 11 5.0 75 725.4440399999771 761.6840399999774 1.7253511984686831 2147 36.24000000000024 0.020484482428011142 0.9091755938518864 0.40920597286345023 False
282 280 COMPLETE 22 170 18 50.0 56.0 3.3000000000000003 28 30.0 2.5 2.2 3.2 50.0 35 380.0 80.0 11 5.0 75 665.792119999973 705.1121199999732 1.7039295184090495 2098 39.320000000000164 0.023047766813246665 0.9099142040038132 0.3892852613929353 False
283 281 COMPLETE 22 170 18 50.0 55.0 3.3000000000000003 28 30.0 2.5 2.2 3.2 50.0 35 390.0 80.0 12 5.0 75 715.504039999973 756.9740399999732 1.6812711858304905 2208 41.470000000000255 0.023521550584175512 0.907608695652174 0.40012361111169664 False
284 282 COMPLETE 22 170 18 50.0 55.0 3.3000000000000003 28 30.0 2.5 2.2 3.1 50.0 35 390.0 80.0 12 5.0 75 713.5540399999722 755.0240399999725 1.6795161998703774 2208 41.470000000000255 0.02354759490759659 0.907608695652174 0.39891444528068365 False
285 283 COMPLETE 22 170 18 50.0 56.0 3.3000000000000003 27 32.5 2.5 2.2 3.0 50.0 30 390.0 80.0 12 5.0 75 648.8361599999919 688.5961599999907 1.653974737401934 2151 39.759999999998854 0.023516383537925314 0.9088795908879591 0.3710726381708653 False
286 284 COMPLETE 22 165 18 50.0 55.0 3.3000000000000003 28 30.0 2.5 2.1 3.1 50.0 35 390.0 80.0 12 5.0 75 732.3640399999781 770.7240399999782 1.6973679095901906 2207 38.36000000000013 0.021663454684898612 0.9039420027186226 0.4113083150210808 False
287 285 COMPLETE 22 165 18 50.0 55.0 3.3000000000000003 28 30.0 2.5 2.1 3.2 50.0 35 390.0 80.0 12 5.0 75 734.2940399999784 772.6540399999785 1.6991142156552113 2207 38.36000000000013 0.021639868318580988 0.9039420027186226 0.41250496102408196 False
288 286 COMPLETE 22 165 18 50.0 55.0 3.3000000000000003 28 30.0 2.5 2.1 3.0 50.0 35 390.0 80.0 12 5.0 75 728.5440399999788 766.904039999979 1.693911490331964 2207 38.36000000000013 0.02171029050338273 0.9039420027186226 0.40949783720094607 False
289 287 COMPLETE 22 165 18 50.0 56.0 3.3000000000000003 28 30.0 2.5 2.1 3.0 180.0 35 390.0 80.0 12 5.0 75 -999784.53046 322.5395399999747 1.1289913220958196 1781 107.07000000000426 0.07876561314759842 0.751263335204941 0.12431505242255064 False
290 288 COMPLETE 22 165 18 50.0 55.0 3.3000000000000003 28 30.0 2.5 2.2 3.1 50.0 35 390.0 80.0 12 5.0 75 733.7140399999726 770.8540399999733 1.700228948276779 2198 37.14000000000078 0.02097293123040301 0.9076433121019108 0.4077250294775756 False
291 289 COMPLETE 23 165 18 50.0 65.0 3.3000000000000003 28 30.0 2.5 2.2 3.1 50.0 35 400.0 80.0 12 5.0 75 405.93999999996913 443.24999999996953 1.5272015795232534 1638 37.3100000000004 0.025851377100295298 0.9047619047619048 0.27574131532189683 False
292 290 COMPLETE 22 170 18 50.0 55.0 3.3000000000000003 28 30.0 2.5 2.1 3.2 50.0 35 390.0 80.0 12 5.0 60 718.8040399999772 757.1640399999774 1.6790769782688466 2217 38.36000000000013 0.021777092002491585 0.9039242219215156 0.40383697794405915 False
293 291 COMPLETE 22 170 18 50.0 55.0 3.3000000000000003 28 32.5 2.5 2.1 3.2 50.0 30 390.0 80.0 12 5.0 60 716.6440400000024 757.4740400000023 1.6793550076682358 2216 40.82999999999993 0.02315972843252978 0.9038808664259927 0.39850496016831977 False
294 292 COMPLETE 22 165 18 50.0 55.0 3.3000000000000003 28 32.5 2.5 2.2 3.2 50.0 30 390.0 80.0 12 5.0 60 739.3940400000006 773.7340400000007 1.7028450847519232 2197 34.340000000000146 0.019336739257258925 0.9076012744651798 0.4039176369218729 False
295 293 COMPLETE 23 165 17 50.0 56.0 3.3000000000000003 28 32.5 2.25 2.1 3.1 50.0 30 390.0 80.0 12 5.0 60 660.7540400000048 700.5540400000059 1.6379924958563366 2214 39.80000000000109 0.023156443934491226 0.9060523938572719 0.3895760405740098 False
296 294 COMPLETE 22 160 18 50.0 55.0 3.3000000000000003 28 32.5 2.5 2.0 3.1 50.0 30 400.0 80.0 12 5.0 60 708.3840400000058 749.384040000004 1.668490058072639 2210 40.99999999999818 0.023436820653741693 0.8986425339366516 0.396269985623567 False
297 295 COMPLETE 22 155 18 50.0 56.0 3.3000000000000003 28 32.5 2.5 2.0 3.1 50.0 30 400.0 80.0 12 5.0 60 601.4561599999963 638.256159999996 1.5887559392055894 2145 36.79999999999973 0.022453589650496077 0.8979020979020979 0.34701537381264647 False
298 296 COMPLETE 23 160 17 49.0 55.0 3.3000000000000003 28 32.5 2.5 2.1 3.0 50.0 30 390.0 80.0 12 5.0 60 682.6236999999973 723.9836999999978 1.6132262254843954 2237 41.36000000000058 0.02399094608609155 0.8980777827447475 0.3674569174286764 False
299 297 COMPLETE 22 160 18 50.0 54.0 3.3000000000000003 28 35.0 2.5 2.2 3.2 50.0 30 400.0 70.0 12 5.0 60 735.6040400000088 776.5640400000075 1.6644796180306065 2275 40.95999999999867 0.023055740788268178 0.9081318681318681 0.4028182218439981 False
300 298 COMPLETE 22 165 18 50.0 62.0 3.3000000000000003 28 35.0 2.5 2.2 3.2 50.0 30 400.0 70.0 12 5.0 60 418.36403999999715 454.36403999999624 1.5343824712440868 1715 35.99999999999909 0.024753087266926085 0.9072886297376094 0.2782856098014545 False
301 299 COMPLETE 23 160 17 50.0 55.0 3.3000000000000003 28 32.5 2.5 2.1 3.2 50.0 30 400.0 70.0 12 5.0 75 737.9280800000155 782.5480800000145 1.6634405907437848 2288 44.61999999999898 0.02499120547045423 0.902972027972028 0.4167308549268992 False
302 300 COMPLETE 23 160 17 50.0 55.0 3.3000000000000003 28 35.0 2.5 2.1 3.2 50.0 30 400.0 70.0 12 5.0 75 738.2280800000152 782.8480800000142 1.6636949293362748 2289 44.61999999999898 0.024987006980367692 0.9030144167758847 0.4168057151539455 False
303 301 COMPLETE 23 160 17 50.0 56.0 3.3000000000000003 28 32.5 2.5 2.1 3.2 210.0 30 400.0 70.0 12 5.0 45 -1000003.25866 172.3711199999866 1.0602273208975037 1776 175.62977999998975 0.14072722903900098 0.7212837837837838 0.06533269025069673 False
304 302 COMPLETE 23 165 17 50.0 55.0 3.4000000000000004 28 35.0 2.5 2.2 3.1 50.0 30 400.0 70.0 12 5.0 75 728.9380800000102 763.4680800000091 1.6421310052482923 2286 34.529999999998836 0.019554786497521674 0.9068241469816273 0.4029293136506475 False
305 303 COMPLETE 23 155 17 50.0 55.0 3.4000000000000004 28 35.0 2.5 2.0 3.1 50.0 30 400.0 70.0 12 5.0 75 750.6080800000158 792.8580800000149 1.677720195915871 2294 42.24999999999909 0.02355127495509745 0.9001743679163035 0.4243644442140266 False
306 304 COMPLETE 23 155 17 50.0 56.0 3.4000000000000004 27 35.0 2.5 2.0 2.9000000000000004 50.0 30 400.0 70.0 12 5.0 75 683.5340400000086 721.1440400000092 1.6685616650442805 2211 37.61000000000058 0.021654966382579376 0.9032112166440525 0.4024110700286253 False
307 305 COMPLETE 23 155 17 50.0 55.0 3.4000000000000004 28 35.0 2.5 2.1 3.1 50.0 25 400.0 70.0 12 5.0 75 723.8180800000044 768.6380800000037 1.658548523351359 2286 44.819999999999254 0.02526325643443031 0.9041994750656168 0.4070488836130032 False
308 306 COMPLETE 23 150 17 50.0 55.0 3.4000000000000004 27 37.5 2.25 2.1 3.0 50.0 25 400.0 70.0 12 5.0 75 683.188080000008 727.8580800000071 1.6234971303260377 2253 44.66999999999916 0.025764840271140343 0.902352418996893 0.39048728604442623 False
309 307 COMPLETE 24 165 17 50.0 54.0 3.4000000000000004 28 35.0 2.5 2.1 3.1 50.0 20 390.0 70.0 12 5.0 75 706.1680799999843 757.258079999985 1.6066509220835299 2361 51.0900000000006 0.028955558222583305 0.9038542990258365 0.3846033176212734 False
310 308 COMPLETE 23 160 17 49.0 56.0 3.4000000000000004 28 35.0 2.5 2.2 3.1 60.0 15 390.0 70.0 12 5.0 75 -999520.71068 536.3693199999842 1.4233017219453081 2105 57.08000000000402 0.03696677339883705 0.8907363420427553 0.2582854109758908 False
311 309 COMPLETE 23 155 17 50.0 55.0 3.3000000000000003 27 35.0 2.5 2.1 3.2 50.0 30 400.0 80.0 12 5.0 75 733.3280800000106 777.8980800000098 1.6655755501557317 2286 44.569999999999254 0.025022483743076446 0.9037620297462817 0.415066567582767 False
312 310 COMPLETE 24 155 17 50.0 54.0 3.3000000000000003 27 35.0 2.5 2.1 3.1 60.0 30 400.0 80.0 12 5.0 75 680.2137000000157 732.6137000000135 1.530800880373974 2311 52.39999999999782 0.030243325445249224 0.8896581566421462 0.3575725310980902 False
313 311 COMPLETE 23 155 17 49.0 55.0 3.4000000000000004 27 35.0 2.25 2.1 2.9000000000000004 60.0 25 390.0 80.0 12 5.0 75 -999412.09226 638.6077400000016 1.476610507165501 2195 50.69999999999936 0.03094090108472166 0.8838268792710706 0.30859361180263534 False
314 312 COMPLETE 22 165 17 50.0 55.0 3.3000000000000003 28 32.5 2.5 2.2 3.2 50.0 30 400.0 70.0 12 5.0 75 744.8380800000126 779.3680800000114 1.6608566558978504 2281 34.529999999998836 0.019380279175698987 0.9070583077597545 0.4122663327992482 False
315 313 COMPLETE 23 160 17 50.0 56.0 3.3000000000000003 27 35.0 2.5 2.1 3.2 50.0 30 400.0 60.0 12 5.0 75 673.1040400000065 712.8240400000077 1.6442966484688637 2209 39.720000000001164 0.022957360736731623 0.9049343594386601 0.3935337619199954 False
316 314 COMPLETE 22 150 17 49.0 54.0 3.4000000000000004 28 37.5 2.5 2.1 3.0 60.0 30 400.0 70.0 12 5.0 60 642.3837000000134 702.2237000000099 1.5198251681613273 2230 59.83999999999651 0.03515401647856046 0.885201793721973 0.33110750422485097 False
317 315 COMPLETE 24 160 17 50.0 54.0 3.3000000000000003 28 32.5 2.5 2.0 3.1 50.0 30 390.0 80.0 12 5.0 75 763.2380800000154 813.0180800000152 1.6601476814147942 2366 49.779999999999745 0.027456979358969947 0.9010989010989011 0.42601301949699905 False
318 316 COMPLETE 24 160 17 50.0 68.0 3.3000000000000003 28 32.5 2.5 1.9 3.2 50.0 30 390.0 80.0 12 5.0 75 438.7140400000025 480.844039999999 1.58926243550937 1645 42.12999999999647 0.02822791841768191 0.894224924012158 0.3155558659100974 False
319 317 COMPLETE 24 165 17 50.0 55.0 3.3000000000000003 27 32.5 2.5 2.0 3.1 50.0 30 390.0 70.0 12 5.0 75 751.108080000013 793.2180800000123 1.674109646550931 2308 42.10999999999922 0.023432351740933537 0.8999133448873483 0.42603041908782036 False
320 318 COMPLETE 24 165 17 50.0 55.0 3.4000000000000004 27 35.0 2.25 2.0 3.1 50.0 25 390.0 70.0 12 5.0 75 728.858080000004 771.1680800000034 1.6553706413753888 2307 42.30999999999949 0.023801245301855484 0.8998699609882965 0.41246371955775135 False
321 319 COMPLETE 25 165 17 50.0 56.0 3.4000000000000004 27 35.0 2.25 2.0 3.0 50.0 25 390.0 60.0 12 5.0 75 680.4540400000046 719.2640400000041 1.6612219750317234 2226 38.80999999999949 0.0223456412503505 0.9025157232704403 0.39753924748527086 False
322 320 COMPLETE 24 165 17 50.0 55.0 3.4000000000000004 27 35.0 2.5 1.9 3.1 50.0 30 400.0 70.0 12 5.0 75 758.1380800000155 797.8980800000148 1.6799533686704438 2321 39.75999999999931 0.022088053469621546 0.8944420508401552 0.430308055942394 False
323 321 COMPLETE 24 165 17 50.0 55.0 3.4000000000000004 27 37.5 2.5 1.9 3.2 50.0 30 400.0 70.0 12 5.0 75 762.7380800000163 802.4980800000156 1.6838734000306954 2324 39.75999999999931 0.022031752232243716 0.8945783132530121 0.43298248059587474 False
324 322 COMPLETE 24 165 16 50.0 56.0 3.4000000000000004 27 40.0 2.5 1.9 3.1 50.0 25 400.0 70.0 12 5.0 60 845.3240400000091 877.6640400000074 1.7908735739903154 2319 32.33999999999833 0.017121492352049725 0.8978007761966365 0.46030336180428405 False
325 323 COMPLETE 24 165 16 50.0 56.0 3.4000000000000004 27 40.0 2.25 1.9 3.1 50.0 25 400.0 70.0 12 5.0 75 845.3240400000091 877.6640400000074 1.7908735739903154 2319 32.33999999999833 0.017121492352049725 0.8978007761966365 0.46030336180428405 False
326 324 COMPLETE 25 160 16 50.0 56.0 3.4000000000000004 27 37.5 2.25 1.9 3.1 50.0 25 400.0 70.0 12 5.0 75 858.4740400000092 890.8140400000075 1.8074306742683233 2321 32.33999999999833 0.017003118458149134 0.8987505385609651 0.4668672820258996 True 0.0
327 325 COMPLETE 25 160 16 50.0 57.0 3.4000000000000004 27 40.0 2.25 1.9 3.0 50.0 25 400.0 70.0 12 5.0 75 806.9021200000104 839.2421200000088 1.7941608187303986 2256 32.33999999999833 0.017476998832033998 0.8993794326241135 0.44412789233084954 False
328 326 COMPLETE 25 160 16 50.0 57.0 3.4000000000000004 27 40.0 2.25 1.9 3.0 60.0 25 400.0 70.0 12 5.0 75 764.9033600000083 804.0433600000077 1.6694031457187515 2214 39.13999999999942 0.021525324296553752 0.8848238482384824 0.40196153907079535 False
329 327 COMPLETE 25 160 16 50.0 57.0 3.5 27 40.0 2.25 1.9 3.0 60.0 25 400.0 70.0 12 5.0 75 764.9033600000083 804.0433600000077 1.6694031457187515 2214 39.13999999999942 0.021525324296553752 0.8848238482384824 0.40196153907079535 False
330 328 COMPLETE 25 160 16 49.0 58.0 3.5 27 40.0 2.25 1.9 3.0 260.0 25 400.0 70.0 12 4.5 75 -999931.59496 208.2348199999887 1.0685125146531196 1688 139.82977999999866 0.11106109043116043 0.659952606635071 0.07534159695618309 False
331 329 COMPLETE 26 155 16 42.0 57.0 3.5 27 40.0 2.25 1.9 3.0 60.0 25 400.0 60.0 12 5.0 75 407.9721200000048 440.35212000000445 1.5878682833218127 1368 32.379999999999654 0.0224751526012883 0.8830409356725146 0.28179559991935377 False
332 330 COMPLETE 25 160 16 50.0 57.0 3.4000000000000004 27 42.5 2.0 1.9 2.9000000000000004 60.0 25 400.0 70.0 12 5.0 75 764.0833600000068 803.2233600000062 1.6687204579349852 2214 39.13999999999942 0.021535035841694007 0.8848238482384824 0.4018375305264162 False
333 331 COMPLETE 25 160 16 50.0 58.0 3.4000000000000004 26 42.5 2.0 1.8 2.9000000000000004 60.0 25 400.0 70.0 12 5.0 75 682.4277399999991 729.9177399999993 1.6225468697144185 2151 47.49000000000024 0.027048150731774787 0.8754067875406788 0.3793550515441227 False
334 332 COMPLETE 26 160 16 49.0 57.0 3.4000000000000004 27 40.0 2.25 1.9 2.8 60.0 25 400.0 60.0 12 5.0 75 -999443.25226 597.4077400000026 1.453626219298301 2182 40.66000000000031 0.02530640700093984 0.8767186067827681 0.3020207816804473 False
335 333 COMPLETE 24 160 16 50.0 57.0 3.5 27 40.0 2.25 1.9 2.9000000000000004 60.0 25 400.0 70.0 12 5.0 75 761.8333600000068 800.9733600000062 1.6668472292600203 2205 39.13999999999942 0.02156172844103662 0.8843537414965986 0.40068654730336656 False
336 334 COMPLETE 25 160 15 50.0 57.0 3.5 27 40.0 2.0 1.9 2.9000000000000004 230.0 25 400.0 70.0 12 5.0 75 -999925.70182 272.7035799999943 1.0868893742196608 1918 198.40539999999874 0.15269429053875694 0.6819603753910324 0.09451036055144169 False
337 335 COMPLETE 24 155 16 49.0 57.0 3.5 26 42.5 2.25 2.0 3.0 60.0 25 400.0 70.0 12 4.5 75 -999479.00226 564.0277400000003 1.4335172303940225 2149 43.02999999999929 0.027336121223823777 0.8818054909260121 0.2830612677257347 False
338 336 COMPLETE 24 165 16 50.0 58.0 3.4000000000000004 27 37.5 2.25 1.9 3.0 60.0 20 400.0 60.0 12 5.0 75 723.0573999999837 765.13773999998 1.672022125766283 2136 42.08033999999634 0.02374284485980459 0.8848314606741573 0.38530321461504247 False
339 337 COMPLETE 27 150 16 50.0 57.0 3.4000000000000004 27 37.5 2.25 1.8 3.1 60.0 25 400.0 70.0 12 5.0 75 679.3533600000086 721.9433600000074 1.5819285936619774 2202 42.58999999999878 0.024339460530115032 0.8742052679382379 0.36436582412569773 False
340 338 COMPLETE 25 160 15 49.0 57.0 3.4000000000000004 27 42.5 2.25 2.0 2.8 60.0 25 400.0 70.0 12 4.5 75 -999391.85472 646.1152800000054 1.4848244748794583 2261 37.969999999999345 0.022805006420236473 0.8827952233524989 0.32599818289477434 False
341 339 COMPLETE 24 165 16 50.0 57.0 3.5 26 40.0 2.25 1.9 3.1 60.0 25 390.0 70.0 12 5.5 75 772.503360000005 803.2433600000048 1.6721675208111375 2209 30.73999999999978 0.01691312512208906 0.8845631507469444 0.40326605609709415 False
342 340 COMPLETE 24 160 15 50.0 57.0 3.5 26 42.5 2.25 1.9 3.1 60.0 25 400.0 70.0 12 5.5 60 781.3752800000093 815.4152800000097 1.649278661261866 2291 34.04000000000042 0.01858144246231245 0.8825840244434745 0.3977598738852071 False
343 341 COMPLETE 24 155 15 49.0 58.0 3.5 26 42.5 2.25 1.9 3.1 60.0 25 400.0 70.0 12 5.5 30 611.8633600000029 662.9433600000015 1.527642722597819 2194 51.07999999999856 0.030535385011510516 0.8787602552415679 0.33502552881358394 False
344 342 COMPLETE 25 160 16 50.0 57.0 3.5 26 40.0 2.0 1.8 2.9000000000000004 70.0 30 400.0 70.0 12 5.5 60 649.5230200000182 707.1233600000127 1.5125401849832858 2203 57.6003399999945 0.03314434340798462 0.861552428506582 0.34881255019867957 False
345 343 COMPLETE 24 150 16 50.0 57.0 3.5 27 40.0 2.25 1.9 3.1 60.0 30 400.0 60.0 12 2.0 60 744.9833600000128 783.6233600000122 1.647882449913479 2185 38.63999999999942 0.021524383583766623 0.8832951945080092 0.3935855373590688 False
346 344 COMPLETE 26 150 16 49.0 57.0 3.5 26 40.0 2.25 1.9 3.0 70.0 25 390.0 60.0 12 5.5 45 -999577.32226 478.4177400000002 1.3273133983603778 2103 55.73999999999842 0.03716550693704679 0.8611507370423205 0.2344943498283603 False
347 345 COMPLETE 25 155 15 50.0 59.0 3.5 27 40.0 2.25 1.9 3.1 60.0 30 400.0 60.0 12 5.5 60 751.7117799999999 785.9317799999997 1.683977814428789 2153 34.2199999999998 0.01906989108394977 0.8834184858337204 0.39260028604981995 False
348 346 COMPLETE 25 155 15 50.0 58.0 3.6 27 40.0 2.0 1.9 3.1 70.0 30 400.0 60.0 12 2.5 60 741.057400000011 793.6777400000077 1.5967410543511014 2195 52.62033999999676 0.029205164980529705 0.8715261958997722 0.37470547367149515 False
349 347 COMPLETE 25 160 15 49.0 58.0 3.6 27 40.0 2.0 1.9 3.0 70.0 30 400.0 60.0 12 2.0 60 -999415.30698 655.413360000004 1.4673896468043994 2169 70.72033999999576 0.04239413338990708 0.8658367911479945 0.31872202000263566 False
350 348 COMPLETE 24 155 15 50.0 60.0 3.6 26 40.0 2.0 1.8 2.9000000000000004 70.0 25 400.0 60.0 12 2.5 60 -999489.6426 585.4777400000029 1.442008639721392 2059 75.12033999999903 0.04679031420463099 0.8542982030111704 0.29618179331999833 False
351 349 COMPLETE 25 160 15 49.0 59.0 3.5 27 45.0 2.25 1.9 3.1 70.0 30 390.0 60.0 12 2.0 60 -999461.86294 615.8473999999994 1.4504440416164812 2098 77.71033999999509 0.0476774712632647 0.8636796949475691 0.30599139698802846 False
352 350 COMPLETE 26 155 15 50.0 60.0 3.5 26 40.0 2.25 1.9 3.1 60.0 25 400.0 70.0 12 2.0 60 640.9114400000065 688.1917800000053 1.6133701968293062 2077 47.28033999999889 0.027891837412191468 0.8810784785748677 0.35272646470650326 False
353 351 COMPLETE 24 145 16 49.0 58.0 3.5 27 42.5 2.0 1.9 3.0 60.0 25 390.0 60.0 12 2.5 60 -999502.39226 549.6577400000009 1.4424943160829626 2050 52.05000000000018 0.03344411248494494 0.8736585365853659 0.283428587342046 False
354 352 COMPLETE 25 145 16 50.0 57.0 3.6 27 37.5 2.25 1.8 3.1 70.0 30 400.0 70.0 12 2.5 60 -999418.05698 646.0333600000189 1.462706758361354 2161 64.09033999999338 0.038208067020917724 0.8583988894030541 0.3181489983034084 False
355 353 COMPLETE 25 150 16 50.0 58.0 3.5 27 37.5 2.25 1.9 1.2 60.0 30 390.0 70.0 12 5.5 60 590.1437000000041 630.4337000000017 1.548498767605511 2114 40.28999999999769 0.02453201482734562 0.8826868495742668 0.34375968427921216 False
356 354 COMPLETE 24 160 15 50.0 59.0 3.4000000000000004 26 42.5 2.25 2.0 2.9000000000000004 70.0 30 400.0 60.0 12 5.5 60 684.7914400000125 734.7417800000082 1.5602573148234589 2116 49.95033999999578 0.02860628308362584 0.8747637051039697 0.35266467337252605 False
357 355 COMPLETE 24 155 16 49.0 59.0 3.6 27 40.0 2.25 2.0 3.0 60.0 25 390.0 70.0 12 2.0 60 -999556.87418 505.63177999999766 1.4193002209695997 1997 62.505959999996776 0.04131527956824589 0.8788182273410116 0.26598293636861703 False
358 356 COMPLETE 26 160 15 50.0 57.0 3.5 27 40.0 1.75 2.0 3.1 60.0 30 400.0 60.0 12 5.5 60 783.6452800000143 816.6452800000143 1.6425224836568826 2292 33.0 0.018005284256297143 0.8878708551483421 0.3981461123526927 False
359 357 COMPLETE 27 155 14 50.0 57.0 3.6 26 40.0 1.75 2.0 2.8 70.0 20 400.0 60.0 12 5.5 60 -999333.11664 712.9133600000013 1.484010754192893 2353 46.02999999999702 0.0268532198684919 0.8750531236719082 0.3239586186476466 False
360 358 COMPLETE 25 160 15 49.0 57.0 3.5 27 40.0 1.75 1.9 3.2 60.0 30 400.0 60.0 12 5.5 45 641.6652800000047 676.4852800000053 1.5082806084977889 2272 34.82000000000062 0.020607875754845108 0.8776408450704225 0.3443881338998008 False
361 359 COMPLETE 26 160 16 50.0 57.0 3.5 26 42.5 2.0 2.0 3.1 60.0 30 400.0 70.0 12 5.5 60 760.6433600000195 801.4233600000192 1.6678056529209224 2206 40.779999999999745 0.02245541097653049 0.8902991840435177 0.4012794130667133 False
362 360 COMPLETE 26 160 16 50.0 57.0 3.6 26 42.5 2.0 1.8 3.0 70.0 30 400.0 70.0 12 6.0 60 646.2730200000191 706.3933600000122 1.5120110632540333 2203 60.12033999999312 0.03460893756596362 0.861552428506582 0.34800980552778676 False
363 361 COMPLETE 27 150 15 49.0 57.0 3.5 26 45.0 2.0 1.9 3.0 60.0 30 400.0 60.0 12 5.5 60 -999413.05472 629.2552800000049 1.4719147637818175 2249 42.310000000000855 0.025746733152752492 0.8759448643841707 0.3206077150591516 False
364 362 COMPLETE 24 160 16 50.0 58.0 3.5 27 40.0 2.25 2.0 3.1 60.0 30 400.0 70.0 12 5.5 60 723.0374000000078 776.1677400000034 1.6721927386414204 2120 53.13033999999561 0.02975226639644607 0.8886792452830189 0.39589628398357013 False
365 363 COMPLETE 26 155 15 50.0 57.0 3.4000000000000004 27 42.5 2.25 1.9 3.1 60.0 30 400.0 70.0 12 5.5 60 782.9052800000186 814.0852800000175 1.6463052408848196 2295 31.179999999998927 0.017054231274015754 0.8823529411764706 0.39964761390221604 False
366 364 COMPLETE 26 150 15 50.0 58.0 3.4000000000000004 26 42.5 2.25 1.9 3.1 70.0 30 390.0 70.0 12 6.0 45 715.3974000000197 765.2177400000154 1.5726218966045868 2181 49.82033999999567 0.028082546611210728 0.8707015130674003 0.36021961243254674 False
367 365 COMPLETE 26 155 15 49.0 57.0 3.6 27 42.5 2.25 1.9 2.9000000000000004 80.0 25 400.0 60.0 12 5.5 60 -999602.55472 467.71528000000035 1.2779273649360523 2198 70.2700000000018 0.04727894499500241 0.8444040036396724 0.21674306860680234 False
368 366 COMPLETE 25 155 16 50.0 59.0 3.5 27 37.5 2.0 2.0 3.1 60.0 30 390.0 70.0 12 5.5 60 679.9114400000083 729.631780000004 1.6617468859843703 2049 49.72033999999576 0.028580134925592873 0.8887262079062958 0.38244202428844853 False
369 367 COMPLETE 27 160 16 50.0 57.0 3.4000000000000004 27 40.0 1.75 1.8 3.0 70.0 25 390.0 60.0 12 5.5 75 651.1830200000062 707.503360000005 1.5125147168898148 2202 56.32033999999885 0.032367576950230494 0.8614895549500454 0.34657509294691846 False
370 368 COMPLETE 25 165 15 50.0 57.0 3.4000000000000004 26 37.5 2.25 1.9 3.1 60.0 30 400.0 70.0 12 5.5 60 790.1952800000172 821.5552800000164 1.6565095845228572 2298 31.359999999999218 0.017086423872941646 0.8825065274151436 0.4017590878977682 False
371 369 COMPLETE 26 165 14 49.0 57.0 2.0 26 37.5 2.0 1.9 2.9000000000000004 70.0 30 400.0 70.0 12 5.5 60 -999349.24102 708.3293200000162 1.4701263061543508 2330 57.57033999999885 0.03345188684843111 0.8639484978540772 0.3315786029078608 False
372 370 COMPLETE 25 165 15 50.0 57.0 3.5 26 40.0 2.25 1.8 3.1 60.0 25 390.0 60.0 12 6.0 60 732.7352799999999 769.1552800000009 1.592862439993083 2311 36.42000000000098 0.02031974553474481 0.8736477715274773 0.38443666378748054 False
373 371 COMPLETE 25 150 15 49.0 58.0 3.5 27 37.5 2.25 1.9 3.0 60.0 30 400.0 70.0 12 5.5 45 598.4233600000115 648.9833600000082 1.5169432700034853 2177 50.55999999999676 0.030509599130899172 0.8778135048231511 0.3282111202114088 False
374 372 COMPLETE 26 160 14 50.0 57.0 3.4000000000000004 26 42.5 2.25 2.0 3.1 70.0 25 400.0 60.0 12 5.5 60 746.2033600000058 781.7033600000049 1.53286617455866 2357 35.49999999999909 0.019897281154792324 0.8756894357233772 0.35993078317699034 False
375 373 COMPLETE 28 155 14 50.0 57.0 3.4000000000000004 26 45.0 2.25 1.9 3.1 70.0 25 390.0 60.0 12 5.5 60 727.2833600000057 773.4833600000055 1.5235724211611632 2369 46.19999999999982 0.02604425981807694 0.86787674124103 0.3562724016136422 False
376 374 COMPLETE 26 165 14 49.0 58.0 3.6 26 42.5 2.0 2.0 3.0 70.0 25 400.0 60.0 12 6.0 60 695.2030200000044 757.3133600000023 1.5374734376555186 2258 62.110339999997905 0.03489926545960885 0.8737821080602303 0.34504759208992836 False
377 375 COMPLETE 25 160 15 50.0 57.0 3.4000000000000004 26 40.0 2.25 1.7000000000000002 3.1 70.0 25 390.0 60.0 12 5.5 60 702.755280000003 737.8452800000036 1.5165288178930874 2292 35.0900000000006 0.01989990184907942 0.8542757417102966 0.35762911064506114 False
378 376 COMPLETE 24 165 15 50.0 57.0 3.5 27 40.0 2.25 1.9 2.9000000000000004 80.0 25 400.0 70.0 12 5.5 60 -999416.80472 639.4052800000109 1.4061782388902488 2236 56.210000000000946 0.03381611426340511 0.8519677996422182 0.2914125605297735 False
379 377 COMPLETE 26 160 14 50.0 57.0 3.4000000000000004 26 42.5 2.25 1.8 3.0 60.0 25 390.0 60.0 12 5.5 60 729.0152799999983 771.7052799999983 1.5730050346579152 2415 42.690000000000055 0.02399008324474595 0.874120082815735 0.3821111834837834 False
380 378 COMPLETE 24 155 16 49.0 58.0 3.5 27 42.5 2.25 2.0 3.1 80.0 25 400.0 70.0 12 5.5 60 -999639.90226 419.70773999999653 1.2676689874379252 2004 59.61000000000058 0.041488960491276504 0.8488023952095808 0.19896364601435054 False
381 379 COMPLETE 27 155 16 50.0 57.0 3.7 26 40.0 2.0 1.9 3.1 70.0 30 400.0 60.0 12 5.5 75 701.9830200000168 755.4733600000139 1.556516193917924 2178 53.490339999997104 0.03017257270669298 0.8700642791551882 0.3653431359093628 False
382 380 COMPLETE 25 165 15 50.0 58.0 3.4000000000000004 27 42.5 2.25 2.0 3.0 60.0 30 390.0 70.0 12 6.0 45 764.2577400000172 803.4477400000154 1.671913687988698 2225 39.189999999998236 0.021655310733704754 0.8898876404494382 0.39187292653504285 False
383 381 COMPLETE 25 160 15 49.0 58.0 3.4000000000000004 27 45.0 2.25 2.0 2.9000000000000004 70.0 25 400.0 70.0 12 6.5 45 -999467.41698 599.6833600000008 1.4201450108704083 2159 67.10033999999723 0.04149569619456409 0.8698471514590088 0.28779470981728544 False
384 382 COMPLETE 25 165 14 50.0 57.0 3.6 26 42.5 2.25 1.9 2.8 160.0 30 390.0 60.0 12 6.0 30 -999653.748 422.7326800000054 1.1616439522785955 2134 76.48067999999193 0.05324533709915777 0.7549203373945642 0.15990826465328087 False
385 383 COMPLETE 34 150 15 49.0 58.0 3.5 27 42.5 2.25 2.0 3.0 60.0 30 400.0 70.0 12 6.0 45 614.9130200000199 671.0133600000121 1.5360110795358257 2189 56.10033999999223 0.033447145150233774 0.8835084513476473 0.33314140290563077 False
386 384 COMPLETE 25 155 16 50.0 59.0 3.4000000000000004 27 37.5 2.25 2.0 3.0 60.0 25 390.0 70.0 12 5.5 75 667.7614400000045 722.4517800000028 1.6518767480373286 2045 54.69033999999829 0.03152632015169236 0.8880195599022005 0.3764519825137012 False
387 385 COMPLETE 26 145 15 50.0 57.0 3.4000000000000004 27 40.0 2.0 1.8 3.1 60.0 25 400.0 70.0 12 6.0 45 661.6152800000114 700.2852800000105 1.5324356131687311 2278 38.66999999999916 0.02241563339890591 0.8713784021071115 0.3491032625609114 False
388 386 COMPLETE 24 140 28 50.0 58.0 3.5 26 40.0 1.75 1.9 3.0 70.0 30 390.0 60.0 12 5.5 75 428.25123999999687 467.4612399999951 1.6673209380932008 1211 39.20999999999822 0.026719615435974547 0.8728323699421965 0.3048915683738275 False
389 387 COMPLETE 26 160 16 49.0 57.0 3.4000000000000004 27 42.5 2.25 2.0 3.1 80.0 30 400.0 60.0 12 5.5 75 -999609.62226 456.9877400000049 1.2782607595392728 2096 66.60999999999785 0.0451208472580116 0.8506679389312977 0.21117515808527007 False
390 388 COMPLETE 24 165 16 50.0 58.0 3.5 27 40.0 2.25 1.9 1.7000000000000002 60.0 25 400.0 70.0 12 6.0 75 642.8393200000022 689.9437000000011 1.6030921888345895 2140 47.104379999998855 0.027703509673006537 0.8841121495327103 0.36312552100175494 False
391 389 COMPLETE 25 160 15 50.0 57.0 3.6 26 37.5 2.25 1.9 3.0 70.0 30 390.0 70.0 12 5.5 75 714.5149400000155 753.7452800000133 1.5319570759506755 2267 39.230339999997796 0.022114740765846793 0.8689898544331716 0.357095993527377 False
392 390 COMPLETE 24 155 16 49.0 57.0 3.4000000000000004 26 40.0 2.25 1.8 3.1 60.0 25 390.0 70.0 12 5.5 60 -999500.63226 543.7877399999974 1.4112313022228422 2177 44.42000000000098 0.02854704891058114 0.868626550298576 0.28080867229337697 False
393 391 COMPLETE 25 165 14 50.0 58.0 3.5 27 45.0 1.5 1.9 3.0 60.0 20 400.0 70.0 12 2.5 75 794.9877400000004 836.5777399999996 1.7019563185611895 2334 41.589999999999236 0.02264044854457477 0.8868894601542416 0.3964929510055184 True 2.0
394 392 COMPLETE 26 165 14 50.0 57.0 3.4000000000000004 27 47.5 1.5 2.0 2.9000000000000004 60.0 20 390.0 70.0 12 6.5 75 733.6452800000047 764.7952800000048 1.5823334592931693 2391 31.15000000000009 0.01763218911614715 0.8879130071099958 0.36365527780287404 False
395 393 COMPLETE 24 165 16 49.0 56.0 3.5 27 47.5 1.75 2.0 3.0 60.0 20 400.0 70.0 12 6.0 75 -999455.2606800001 583.7736999999901 1.4299553060546863 2237 39.034380000001875 0.024525188022622733 0.8828788556101922 0.28794425149631103 False
396 394 COMPLETE 25 165 14 50.0 57.0 3.4000000000000004 26 45.0 2.25 1.9 2.7 60.0 25 390.0 70.0 12 5.5 75 771.1652800000038 807.7352800000031 1.6203809902246018 2395 36.569999999999254 0.02022637522869532 0.8818371607515657 0.3910188132434733 False
397 395 COMPLETE 25 50 15 50.0 60.0 3.4000000000000004 26 45.0 2.25 1.9 2.8 60.0 25 240.0 70.0 12 5.5 75 478.1968600000033 516.6168600000034 1.5916575164691003 1618 38.42000000000007 0.02504225538399692 0.8819530284301607 0.3207958221442681 False
398 396 COMPLETE 25 160 14 50.0 57.0 3.5 26 45.0 2.25 1.8 2.6 60.0 15 390.0 70.0 12 5.5 75 649.0552799999937 695.915279999992 1.51574541592505 2414 46.85999999999831 0.02752091072390304 0.8736536868268434 0.3373623911295948 False
399 397 COMPLETE 27 165 14 49.0 59.0 3.4000000000000004 26 45.0 1.5 1.9 2.7 60.0 20 390.0 70.0 12 5.5 75 684.4633599999902 727.4433599999866 1.600292559575435 2243 42.97999999999638 0.024789288738665982 0.8818546589389211 0.3535629145579141 False
400 398 COMPLETE 24 160 15 50.0 57.0 3.5 27 42.5 2.25 2.0 2.4000000000000004 60.0 25 400.0 60.0 12 5.5 75 756.3452800000077 790.6852800000088 1.6193056072458278 2282 34.340000000001055 0.018976828640144137 0.8869412795793163 0.3833975116919674 False
401 399 COMPLETE 26 160 14 49.0 58.0 3.5 26 42.5 2.25 2.0 2.4000000000000004 70.0 25 390.0 70.0 12 5.5 75 -999341.28856 713.6174000000027 1.4969567987937868 2258 54.905959999998686 0.031620436540410156 0.8728963684676705 0.3263402272718675 False
402 400 COMPLETE 24 165 26 50.0 56.0 3.4000000000000004 27 42.5 2.25 2.0 2.1 60.0 25 400.0 60.0 12 5.5 75 503.90527999999676 530.5452799999975 1.6886578784200543 1520 26.640000000000782 0.01730830763422205 0.8907894736842106 0.3279439397928013 False
403 401 COMPLETE 24 160 15 50.0 57.0 3.6 27 42.5 2.25 1.1 2.3 60.0 25 390.0 70.0 12 5.5 75 645.8196600000065 679.8696600000067 1.5400186618571303 2383 34.05000000000018 0.020086485030648762 0.8111624003357113 0.3924965662662643 False
404 402 COMPLETE 25 160 14 49.0 58.0 3.4000000000000004 26 45.0 2.25 2.0 2.5 70.0 25 400.0 80.0 12 5.5 75 661.3914400000048 719.387400000004 1.5009749753811863 2257 57.995959999999286 0.033281712479456674 0.872840053167922 0.3292761704202415 False
405 403 COMPLETE 26 165 15 50.0 56.0 3.4000000000000004 27 42.5 2.25 1.9 2.9000000000000004 60.0 25 400.0 60.0 12 6.0 75 770.9933600000035 807.893360000004 1.5927061867824444 2383 36.900000000000546 0.02031185176844365 0.8787242971044902 0.3866829989160712 False
406 404 COMPLETE 25 165 15 50.0 56.0 3.5 27 37.5 2.25 1.9 2.9000000000000004 60.0 25 390.0 70.0 12 6.0 75 771.8133600000068 806.1033600000068 1.5922663343817378 2376 34.289999999999964 0.01888857238396183 0.8787878787878788 0.3848146173586656 False
407 405 COMPLETE 25 165 15 49.0 56.0 3.5 27 37.5 1.5 1.9 2.8 60.0 25 390.0 70.0 12 6.0 75 -999397.88664 649.103360000005 1.4555211161260877 2346 46.99000000000069 0.028241501754086688 0.8746803069053708 0.3232998463608287 False
408 406 COMPLETE 25 165 15 50.0 56.0 3.5 27 37.5 2.25 1.8 2.8 60.0 25 390.0 80.0 12 6.0 75 689.8933600000099 727.4133600000085 1.5196965073864077 2387 37.51999999999862 0.021503732639918807 0.8701298701298701 0.35877613384350715 False
409 407 COMPLETE 25 165 15 50.0 56.0 3.6 27 37.5 2.25 1.9 2.3 60.0 25 390.0 70.0 12 6.0 75 745.2933600000055 780.1133600000047 1.5731707657556717 2377 34.819999999999254 0.0194584562963961 0.8788388725283971 0.37368306756208813 False
410 408 COMPLETE 27 170 15 50.0 57.0 3.5 27 45.0 2.25 1.8 2.7 60.0 25 400.0 60.0 12 6.0 75 754.8552800000039 791.2352800000049 1.6152260284119178 2324 36.38000000000102 0.02011127783410852 0.8747848537005164 0.3955814186288243 False
411 409 COMPLETE 27 170 15 49.0 57.0 3.6 27 45.0 2.25 1.7000000000000002 2.6 70.0 25 400.0 60.0 12 6.0 75 -999427.61944 617.2709000000036 1.4233470071329928 2263 44.89034000000038 0.0273231617765437 0.8506407423773752 0.3059694349456593 False
412 410 COMPLETE 28 170 15 50.0 57.0 3.5 26 45.0 2.25 1.8 2.7 60.0 25 400.0 60.0 12 6.0 75 759.5952799999986 796.0152799999996 1.6220187471601404 2325 36.42000000000098 0.02014452641247256 0.875268817204301 0.39851074449726276 False
413 411 COMPLETE 28 170 16 50.0 57.0 3.5 26 47.5 2.0 1.8 2.9000000000000004 60.0 25 400.0 60.0 12 6.0 75 760.2033600000021 797.2633600000025 1.6560139088910266 2248 37.0600000000004 0.020387131492971493 0.8772241992882562 0.4051435990316795 False
414 412 COMPLETE 28 170 16 49.0 57.0 3.5 26 47.5 2.0 1.8 2.2 60.0 25 400.0 60.0 12 6.5 75 -999445.8663 600.7336999999974 1.4662740838942288 2214 46.59999999999991 0.02897895151790315 0.8730803974706414 0.31252870588515413 False
415 413 COMPLETE 28 170 16 50.0 56.0 3.6 26 42.5 2.0 1.7000000000000002 2.9000000000000004 70.0 15 390.0 60.0 12 6.0 75 688.7645999999918 744.4849399999903 1.5362089686865859 2292 55.72033999999849 0.031663692900329915 0.8577661431064573 0.35833433954899546 False
416 414 COMPLETE 29 165 16 50.0 57.0 3.5 26 50.0 2.0 1.8 2.7 60.0 20 400.0 70.0 12 6.0 75 700.4833599999846 735.6733599999851 1.6053107745302875 2238 35.19000000000051 0.020037314615836056 0.8771224307417337 0.372797724079951 False
417 415 COMPLETE 29 165 16 49.0 58.0 3.6 26 42.5 1.75 1.9 2.9000000000000004 70.0 25 390.0 70.0 3 6.5 75 196.5300000000002 252.07000000000016 1.508256880733946 736 55.539999999999964 0.04427791286323588 0.8532608695652174 0.21171171437059152 False
418 416 COMPLETE 30 175 15 50.0 57.0 3.7 26 47.5 2.25 1.7000000000000002 2.5 60.0 25 400.0 80.0 12 6.0 75 755.6952800000045 790.0652800000053 1.6168294842242 2346 34.3700000000008 0.019083574440443545 0.8687127024722933 0.39719559454447984 False
419 417 COMPLETE 26 160 16 50.0 56.0 3.5 26 47.5 2.0 1.8 2.9000000000000004 70.0 25 390.0 60.0 12 6.0 75 713.5989800000029 765.1993200000024 1.5409149965606792 2268 51.600339999999505 0.028787614480502807 0.86331569664903 0.37310849432549614 False
420 418 COMPLETE 29 170 15 49.0 58.0 3.4000000000000004 26 42.5 1.75 1.9 2.8 60.0 25 400.0 60.0 12 6.0 75 680.9833600000005 732.7033599999994 1.5971771572561155 2230 51.71999999999889 0.02973946298395911 0.8825112107623319 0.3677868603684985 False
421 419 COMPLETE 26 165 14 50.0 57.0 3.4000000000000004 25 45.0 2.25 1.8 2.7 60.0 25 390.0 70.0 12 6.0 75 713.5252800000012 750.1552800000013 1.5563882114142538 2418 36.63000000000011 0.020838841242550678 0.8726220016542597 0.3721902488291766 False
422 420 COMPLETE 24 165 15 50.0 56.0 3.5 27 45.0 2.0 1.9 2.6 60.0 25 400.0 80.0 12 6.0 75 745.5733600000052 783.2733600000055 1.5754925047652284 2375 37.70000000000027 0.021025587325521747 0.8787368421052631 0.377269543380355 False
423 421 COMPLETE 26 160 16 49.0 57.0 3.4000000000000004 26 42.5 0.25 1.8 2.9000000000000004 70.0 20 400.0 70.0 12 6.5 75 -999589.73822 466.8077399999851 1.3172001713396022 2149 56.54595999999492 0.0380215611303874 0.8543508608655188 0.23011829483846621 False
424 422 COMPLETE 28 160 16 50.0 58.0 3.6 27 37.5 2.25 1.9 2.9000000000000004 60.0 25 400.0 80.0 12 6.0 75 748.697739999999 788.7077399999993 1.6912605107684056 2142 40.01000000000022 0.02224597325365704 0.88468720821662 0.40425189963154984 False
425 423 COMPLETE 24 170 14 50.0 56.0 3.4000000000000004 27 40.0 2.25 1.9 2.8 60.0 25 390.0 60.0 12 6.0 75 819.6914400000068 859.9274000000058 1.6516256644339247 2459 40.23595999999907 0.021633080947137475 0.8836925579503864 0.4012607976995771 False
426 424 COMPLETE 25 170 14 49.0 56.0 3.4000000000000004 25 40.0 2.0 1.9 2.8 290.0 25 390.0 70.0 12 6.0 75 -999453.1606 646.3953600000007 1.1816716997827084 1953 99.55595999999287 0.05965595072242048 0.6492575524833589 0.19266505479472168 False
427 425 COMPLETE 25 175 16 50.0 56.0 3.4000000000000004 27 37.5 2.25 1.9 2.7 60.0 25 390.0 70.0 12 6.0 75 846.8789800000063 876.739320000006 1.7061032775220868 2307 29.860339999999724 0.015797037821444444 0.8851322063285653 0.4358545513115951 False
428 426 COMPLETE 27 175 14 50.0 56.0 3.4000000000000004 26 37.5 2.25 1.8 2.7 70.0 25 380.0 60.0 12 6.0 75 718.3686400000045 760.8730200000034 1.5055973652984478 2453 42.504379999998946 0.024101970611077616 0.86180187525479 0.35406324481191287 False
429 427 COMPLETE 25 175 16 38.0 56.0 3.4000000000000004 27 40.0 2.25 1.9 2.8 70.0 25 390.0 70.0 12 6.0 75 371.9680800000009 402.848080000001 1.6069274274952945 1074 30.88000000000011 0.022010793157791055 0.8798882681564246 0.27040279291107966 False
430 428 COMPLETE 31 175 15 50.0 56.0 3.5 26 40.0 2.25 1.9 2.7 70.0 25 390.0 70.0 12 6.5 75 753.4789800000093 789.1689800000089 1.5285109868640379 2368 35.6899999999996 0.019881469010270957 0.8673986486486487 0.3642559602646871 False
431 429 COMPLETE 26 170 13 49.0 57.0 3.7 27 37.5 2.25 1.8 2.8 60.0 25 380.0 60.0 12 6.0 75 -999355.65664 686.2433600000053 1.4709474914235643 2497 41.89999999999873 0.02459781457751648 0.8694433319983981 0.33042787473214935 False
432 430 COMPLETE 25 170 16 50.0 56.0 1.9 27 40.0 2.25 1.9 2.8 60.0 20 390.0 80.0 12 6.0 45 783.0793199999907 817.0393199999908 1.658510353944286 2291 33.960000000000036 0.018507625719478574 0.8847664775207333 0.4021001988413435 False
433 431 COMPLETE 25 175 16 50.0 56.0 2.1 27 50.0 1.5 1.9 2.9000000000000004 80.0 20 380.0 80.0 12 6.0 45 -999384.71506 665.4449399999862 1.4265691450412334 2244 50.159999999999854 0.029871635223217348 0.8547237076648841 0.3052177233397864 False
434 432 COMPLETE 25 170 16 49.0 56.0 3.5 27 40.0 2.0 1.9 2.9000000000000004 60.0 20 390.0 80.0 12 6.0 30 -999434.1406800001 606.8636999999875 1.4498604370728503 2258 41.004380000000765 0.025405066852488604 0.8786536758193091 0.3029642512366899 False
435 433 COMPLETE 26 165 16 50.0 56.0 1.2 27 40.0 2.25 1.9 2.8 70.0 20 390.0 80.0 12 6.0 45 672.60931999999 726.4993199999903 1.538355505499023 2203 53.89000000000033 0.03086908910215671 0.873354516568316 0.35023778362661434 False
436 434 COMPLETE 25 165 16 50.0 56.0 3.4000000000000004 27 37.5 2.25 2.0 2.8 60.0 20 390.0 70.0 12 6.5 45 765.5893199999896 803.9093199999893 1.6422751517354397 2273 38.31999999999971 0.02105969714089102 0.8900131984161901 0.39260256363173823 False
437 435 COMPLETE 25 165 14 49.0 56.0 1.5 27 37.5 2.25 2.0 2.8 60.0 20 380.0 80.0 12 6.5 45 678.1933599999961 722.683359999995 1.5191822390441034 2384 44.48999999999887 0.025614403702899073 0.8829697986577181 0.33356803281282266 False
438 436 COMPLETE 25 160 16 50.0 56.0 3.4000000000000004 27 37.5 2.25 2.0 2.8 70.0 20 390.0 70.0 12 7.0 45 673.4893199999906 724.0993199999903 1.5110884920380891 2239 50.60999999999967 0.029079533310780552 0.8767306833407771 0.34179244213158577 False
439 437 COMPLETE 26 165 15 49.0 56.0 3.4000000000000004 27 37.5 2.25 1.9 2.7 60.0 20 390.0 80.0 12 7.0 45 -999442.87664 604.1633599999863 1.4233448378185347 2351 47.03999999999678 0.029125251310547825 0.874096129306678 0.2970861061161571 False
440 438 COMPLETE 24 160 14 50.0 56.0 2.5 27 40.0 2.25 2.0 3.0 200.0 20 380.0 70.0 12 6.5 45 -999627.06588 453.14446000000873 1.1512283812689978 2081 80.21033999999281 0.05471506451117664 0.7280153772224892 0.15410105323774603 False
441 439 COMPLETE 26 165 16 50.0 57.0 3.4000000000000004 27 40.0 2.25 1.9 3.0 60.0 20 380.0 70.0 12 6.5 45 746.5433599999905 777.7933599999886 1.6505439021685966 2215 31.24999999999818 0.017439361915566696 0.8848758465011287 0.3860589014863566 False
442 440 COMPLETE 25 160 15 50.0 56.0 1.9 27 37.5 2.25 2.0 2.9000000000000004 60.0 20 390.0 70.0 12 6.5 45 725.7033600000012 760.503360000001 1.554695409890602 2362 34.79999999999973 0.019686783723528164 0.8848433530906011 0.3604443198432021 False
443 441 COMPLETE 24 165 16 49.0 58.0 3.4000000000000004 27 37.5 2.25 1.9 2.8 70.0 15 390.0 80.0 12 6.0 30 -999600.3226000001 461.54335999998045 1.330655232195155 2066 61.865960000000086 0.04193724179153207 0.8620522749273959 0.22660816484055965 False
444 442 COMPLETE 24 170 15 39.0 70.0 1.0 26 40.0 2.25 2.0 3.0 60.0 25 380.0 70.0 12 6.0 45 78.84562000000145 113.22562000000156 1.6333082341981016 308 34.38000000000011 0.030343800555900625 0.8701298701298701 0.14836335265402337 False
445 443 COMPLETE 25 165 16 50.0 57.0 3.4000000000000004 27 40.0 2.25 1.9 2.9000000000000004 60.0 25 390.0 70.0 12 5.5 45 767.5733600000052 798.1533600000047 1.6673552538760443 2211 30.579999999999472 0.016872344481674843 0.8846675712347354 0.4011184915857199 False
446 444 COMPLETE 25 165 16 50.0 56.0 3.4000000000000004 27 40.0 2.25 1.9 2.6 60.0 25 390.0 70.0 12 6.5 45 813.019320000009 848.1393200000084 1.6811331319759202 2284 35.119999999999436 0.018867424602773186 0.8844133099824869 0.4216496288927652 False
447 445 COMPLETE 25 165 14 50.0 56.0 3.4000000000000004 27 40.0 2.25 1.9 2.6 70.0 25 380.0 80.0 12 6.5 45 718.0911000000149 760.6814400000142 1.5167445626983156 2423 42.59033999999929 0.024176097218218492 0.8704085843995047 0.34483230005074633 False
448 446 COMPLETE 25 170 15 50.0 56.0 3.4000000000000004 28 40.0 2.25 1.9 2.7 70.0 25 390.0 70.0 12 6.5 45 728.0030200000109 760.8133600000114 1.508117162707569 2357 32.81034000000045 0.01852861024958906 0.8676283411115825 0.354267007118505 False
449 447 COMPLETE 25 165 16 49.0 56.0 3.3000000000000003 27 37.5 2.25 1.9 2.7 60.0 25 380.0 70.0 12 7.0 45 -999414.1663 621.8037000000003 1.4598546675614446 2250 35.970000000000255 0.022057015022992007 0.8777777777777778 0.315834281720611 False
450 448 COMPLETE 26 170 14 50.0 56.0 3.4000000000000004 27 40.0 2.25 1.9 2.5 60.0 25 390.0 80.0 12 6.5 45 812.6170600000099 847.4074000000095 1.644546300564735 2464 34.79033999999956 0.01883198042835564 0.8843344155844156 0.39964167989915533 False
451 449 COMPLETE 26 175 13 49.0 58.0 3.3000000000000003 28 40.0 2.25 1.9 2.6 80.0 25 380.0 80.0 12 6.5 45 -999451.26136 591.3886400000018 1.3454809833776418 2375 42.650000000000546 0.02658184343295495 0.8488421052631578 0.2628889846495649 False
452 450 COMPLETE 26 170 14 50.0 56.0 3.4000000000000004 27 40.0 2.25 1.8 2.5 70.0 25 390.0 80.0 12 6.5 45 -999310.4969799999 732.0274000000143 1.486418042106184 2446 42.52437999999984 0.024430068777462746 0.8622240392477515 0.3423627093669782 False
453 451 COMPLETE 25 175 14 49.0 56.0 3.4000000000000004 27 40.0 2.25 1.9 2.6 80.0 25 390.0 80.0 12 6.5 30 -999417.31698 638.1730200000106 1.3773115046266449 2374 55.48999999999842 0.03363961977784495 0.8508845829823083 0.27857649722674677 False
454 452 COMPLETE 26 170 15 50.0 57.0 1.6 28 42.5 2.25 2.0 2.5 60.0 25 380.0 80.0 12 6.5 45 772.1052800000102 806.2752800000103 1.6373371199206714 2286 34.17000000000007 0.018706320986847543 0.8871391076115486 0.39160645507450337 False
455 453 COMPLETE 26 170 15 50.0 57.0 1.4 27 42.5 2.25 1.9 2.5 70.0 25 380.0 70.0 12 6.5 45 710.8852800000104 744.1052800000116 1.5302770285507328 2251 33.220000000001164 0.018748709544721357 0.8685028876055086 0.3543519844974281 False
456 454 COMPLETE 27 170 15 50.0 57.0 1.1 28 42.5 2.25 1.9 2.4000000000000004 60.0 25 380.0 70.0 12 7.0 45 783.9552800000092 810.3652800000091 1.6708828570793817 2235 26.409999999999854 0.014456932158636917 0.8841163310961969 0.4042684327744018 False
457 455 COMPLETE 27 175 13 50.0 56.0 1.2 28 42.5 2.25 2.0 2.5 70.0 20 380.0 80.0 12 7.0 45 747.052680000001 797.3626799999978 1.5204958114575948 2493 50.30999999999676 0.02799101180847753 0.8764540713999198 0.34612857357087035 False
458 456 COMPLETE 27 170 14 49.0 57.0 1.5 28 40.0 2.25 1.9 2.6 60.0 25 380.0 70.0 12 7.0 45 718.3352800000043 756.6652800000038 1.5532275858555502 2366 38.32999999999947 0.021629640424071995 0.8782755705832629 0.36795798166130494 False
459 457 COMPLETE 26 175 15 50.0 57.0 1.6 28 42.5 2.25 1.8 2.5 60.0 25 380.0 70.0 12 7.5 45 753.8152800000075 790.1752800000086 1.613662235517057 2313 36.36000000000104 0.020100221606602114 0.8737570255079983 0.39585467720912465 False
460 458 COMPLETE 27 170 14 50.0 56.0 3.5 28 37.5 2.25 1.9 2.5 60.0 25 380.0 70.0 12 6.5 45 812.3970600000074 849.1474000000084 1.6472926155467638 2465 36.75034000000096 0.019872810861150853 0.8851926977687626 0.4005978535305573 False
461 459 COMPLETE 27 170 14 50.0 56.0 1.0 28 37.5 2.25 1.8 2.6 60.0 25 380.0 80.0 12 7.0 45 687.804600000015 729.5489800000132 1.5518672086801357 2388 41.74437999999827 0.023996277621665167 0.8773031825795645 0.3617810860854328 False
462 460 COMPLETE 27 175 13 49.0 56.0 1.7000000000000002 28 37.5 2.25 1.9 2.4000000000000004 230.0 25 380.0 70.0 12 6.5 45 -999601.60744 516.9772799999957 1.1536049316231307 2148 118.5847199999971 0.0775647911673672 0.6950651769087524 0.16972128837463604 False
463 461 COMPLETE 27 170 14 50.0 56.0 2.2 28 40.0 2.25 1.9 2.4000000000000004 70.0 25 390.0 70.0 12 6.5 45 748.6067200000132 793.6470600000137 1.542858006656879 2432 45.04034000000047 0.025111038288658707 0.8721217105263158 0.35865277745317536 False
464 462 COMPLETE 26 175 14 50.0 56.0 1.3 28 37.5 2.25 1.8 2.4000000000000004 70.0 25 390.0 80.0 12 6.5 45 -999316.42574 726.5786400000152 1.4917292112590075 2409 43.00437999999849 0.0247795501533791 0.863013698630137 0.34102774931622926 False
465 463 COMPLETE 26 170 15 49.0 57.0 2.3 28 40.0 2.25 1.8 2.4000000000000004 70.0 25 380.0 60.0 12 6.5 45 -999449.09506 598.5952800000014 1.4028452268817193 2252 47.69033999999783 0.029180981297331866 0.8565719360568383 0.2974771874032525 False
466 464 COMPLETE 27 170 15 50.0 57.0 1.9 27 37.5 1.25 1.9 2.5 60.0 20 390.0 70.0 12 7.0 30 784.7352799999953 812.1352799999968 1.655609358591809 2305 27.400000000001455 0.01503713777895011 0.8837310195227766 0.3922868853972393 False
467 465 COMPLETE 27 170 14 49.0 56.0 1.8 27 37.5 0.75 1.9 2.5 60.0 20 380.0 70.0 12 7.0 30 694.6833599999914 744.4333599999923 1.5353614713156596 2422 49.75000000000091 0.028327186646996384 0.8790255986787778 0.34848078465891613 False
468 466 COMPLETE 27 175 15 50.0 56.0 1.7000000000000002 26 37.5 1.25 1.9 2.6 70.0 20 380.0 80.0 12 7.0 45 -999310.05102 727.218979999995 1.4897911716152337 2353 37.27000000000044 0.021530919677376407 0.8674033149171271 0.33634918361879473 False
469 467 COMPLETE 26 170 13 50.0 57.0 1.9 28 37.5 1.0 2.0 2.3 60.0 20 390.0 70.0 12 7.0 30 -999365.61102 678.3889799999982 1.4690076714972673 2495 44.000000000000455 0.02614877853885141 0.8837675350701403 0.309473497176208 False
470 468 COMPLETE 26 170 14 50.0 57.0 1.9 26 37.5 2.25 1.8 2.5 60.0 20 390.0 60.0 12 7.0 45 695.0752799999959 731.8952799999975 1.5467132469257372 2418 36.82000000000153 0.021174606611235196 0.8742762613730356 0.35950935316063537 False
471 469 COMPLETE 27 175 15 49.0 56.0 1.7000000000000002 28 40.0 2.25 2.0 2.6 60.0 20 380.0 70.0 12 7.5 30 -999406.52664 642.1033599999872 1.4531911789935787 2344 48.629999999999654 0.029483388465996508 0.8809726962457338 0.312683728597903 False
472 470 COMPLETE 26 165 15 49.0 56.0 2.0 27 40.0 1.5 1.9 2.5 60.0 25 390.0 80.0 12 7.0 30 -999382.66664 661.7933600000059 1.469191025733343 2349 44.45999999999958 0.02651236525743295 0.8752660706683695 0.330895942033823 False
473 471 COMPLETE 27 170 14 50.0 57.0 1.6 27 37.5 1.25 1.9 2.4000000000000004 70.0 25 390.0 70.0 12 6.5 45 736.7205600000098 773.65056000001 1.5366040402728116 2364 36.93000000000029 0.02082028940980297 0.8701353637901861 0.35868996916603335 False
474 472 COMPLETE 25 170 15 40.0 56.0 1.3 26 37.5 1.25 2.0 2.5 60.0 20 380.0 60.0 12 6.5 30 388.7977399999912 425.5677399999912 1.5849612759544227 1323 36.76999999999998 0.025793232386137052 0.8888888888888888 0.2780076909461645 False
475 473 COMPLETE 26 165 15 50.0 57.0 2.1 27 40.0 1.0 1.9 2.7 70.0 15 210.0 60.0 12 6.5 45 -999337.48876 696.8112399999927 1.496474475339393 2273 34.29999999999836 0.020059286126615488 0.8697756269247691 0.34509212322564337 False
476 474 COMPLETE 25 175 14 50.0 57.0 2.2 26 40.0 2.25 1.9 2.6 60.0 25 390.0 80.0 12 6.5 45 825.2352800000035 851.7152800000017 1.6619898187994535 2417 26.4799999999982 0.01429569968077735 0.8837401737691353 0.41275417611428017 False
477 475 COMPLETE 25 175 14 50.0 56.0 1.9 25 37.5 2.25 1.9 2.6 50.0 25 380.0 80.0 12 6.5 45 822.3877400000041 853.2977400000044 1.7213118520634123 2491 30.91000000000031 0.016659321151041833 0.8972300281011641 0.4283530101846939 False
478 476 COMPLETE 26 175 13 50.0 57.0 2.0 25 42.5 2.25 1.8 2.6 50.0 25 370.0 80.0 12 6.5 45 694.3833600000038 734.5633600000027 1.5736757897225466 2551 40.17999999999893 0.023058514406371494 0.8871030968247746 0.37686219631947165 False
479 477 COMPLETE 27 175 14 49.0 56.0 1.8 25 40.0 2.25 1.8 2.5 50.0 25 370.0 80.0 12 6.5 45 723.2477399999997 761.0977399999991 1.6103624274048673 2464 37.849999999999454 0.02137128871197182 0.8867694805194806 0.39277921761929335 False
480 478 COMPLETE 28 175 14 50.0 56.0 1.9 25 40.0 1.5 1.9 2.6 50.0 25 380.0 80.0 12 6.5 30 834.9477400000036 865.8577400000039 1.7330196667625994 2491 30.91000000000031 0.016566107553301596 0.8972300281011641 0.43373658646770513 False
481 479 COMPLETE 27 175 14 50.0 56.0 1.8 25 37.5 1.5 1.9 2.6 50.0 25 370.0 90.0 12 6.5 30 820.9077400000018 851.917740000002 1.7212183122413915 2483 31.01000000000022 0.016744804226563638 0.8968989126057189 0.42898919055655454 False
482 480 COMPLETE 28 175 13 49.0 56.0 1.9 25 37.5 1.5 1.9 2.6 50.0 25 370.0 90.0 12 6.5 30 797.8137000000061 836.8537000000033 1.6757155766847074 2567 39.039999999997235 0.021253734034450956 0.8955979742890534 0.413524335578962 False
483 481 COMPLETE 28 175 14 49.0 56.0 1.9 25 37.5 1.5 1.8 2.6 50.0 25 370.0 90.0 12 6.5 30 725.7477399999988 763.9977399999988 1.6113153982786796 2468 38.25 0.021554544883138693 0.8865478119935171 0.3948408280100118 False
484 482 COMPLETE 28 175 13 49.0 56.0 1.8 25 37.5 1.5 1.9 2.5 50.0 25 370.0 90.0 12 6.5 30 794.2437000000086 831.6037000000051 1.6730797325441098 2564 37.35999999999649 0.020397425491112724 0.8958658346333853 0.4105319416824259 False
485 483 COMPLETE 29 180 13 49.0 56.0 1.9 25 37.5 1.5 1.9 2.5 50.0 25 370.0 90.0 12 6.5 30 811.4080800000083 845.3880800000056 1.6847765149221405 2569 33.97999999999729 0.018413471056991537 0.896457765667575 0.4159106286926133 False
486 484 COMPLETE 29 180 13 49.0 56.0 1.8 25 37.5 1.5 1.8 2.4000000000000004 50.0 25 370.0 90.0 12 6.5 30 788.2280799999999 820.6380800000011 1.6588792878999958 2574 32.41000000000122 0.017790214106572257 0.8904428904428905 0.41358937258030387 False
487 485 COMPLETE 30 180 13 49.0 56.0 1.8 25 37.5 1.5 1.8 2.4000000000000004 50.0 25 370.0 90.0 12 6.5 30 787.7280799999999 820.1380800000011 1.6584778446182633 2572 32.41000000000122 0.01779509807147104 0.890357698289269 0.41334654533741894 False
488 486 COMPLETE 30 180 12 48.0 56.0 1.8 25 37.5 1.5 1.7000000000000002 2.4000000000000004 50.0 25 370.0 90.0 12 6.5 30 673.2209000000098 726.2809000000061 1.5290782280980317 2622 53.05999999999631 0.030735528539001848 0.8764302059496567 0.36256278198676056 False
489 487 COMPLETE 29 180 13 49.0 56.0 1.8 25 37.5 1.5 1.7000000000000002 2.3 50.0 25 370.0 90.0 12 6.5 30 757.3780800000035 796.9480800000032 1.6384236761955417 2588 39.56999999999971 0.022020669623353636 0.883693972179289 0.40879167308327824 False
490 488 COMPLETE 30 180 13 49.0 56.0 1.9 25 37.5 1.5 1.8 2.4000000000000004 50.0 25 370.0 90.0 12 6.5 30 788.4780799999999 820.8880800000011 1.6590800095408622 2575 32.41000000000122 0.017787773129308685 0.8904854368932039 0.41360524976606317 False
491 489 COMPLETE 30 180 13 48.0 56.0 1.9 25 37.5 1.5 1.7000000000000002 2.4000000000000004 50.0 25 370.0 90.0 12 6.5 30 697.1737000000053 746.6237000000051 1.5786523105513697 2533 49.44999999999982 0.02831176515010055 0.8791946308724832 0.3869599106057652 False
492 490 COMPLETE 31 180 12 48.0 56.0 2.0 25 37.5 1.5 1.8 2.2 50.0 10 370.0 90.0 12 6.5 30 -999470.7991000001 597.5208999999695 1.43260096900963 2609 68.31999999999834 0.042729619638212576 0.8811805289382906 0.2849511242667488 False
493 491 COMPLETE 29 180 13 49.0 56.0 1.8 25 37.5 1.5 1.6 2.5 50.0 25 370.0 90.0 12 6.5 30 720.42808000001 768.1780800000091 1.6064662930753066 2599 47.74999999999909 0.027005198480912533 0.8768757214313198 0.4022382815120662 False
494 492 COMPLETE 31 180 13 49.0 56.0 1.9 25 37.5 1.5 1.8 2.3 50.0 25 360.0 90.0 12 6.5 30 789.5680799999985 821.9780799999997 1.6599551558950385 2576 32.41000000000122 0.01778835890275981 0.890527950310559 0.41617269807339025 False
495 493 COMPLETE 30 180 13 48.0 56.0 1.9 25 37.5 1.5 1.7000000000000002 2.3 50.0 25 360.0 90.0 12 6.5 30 676.8537000000047 727.0537000000045 1.5634850640288034 2533 50.19999999999982 0.02906684372350419 0.8791946308724832 0.3778205247983413 False
496 494 COMPLETE 31 175 13 49.0 56.0 1.7000000000000002 25 37.5 1.5 1.8 2.3 50.0 25 360.0 90.0 11 6.5 30 751.2080800000011 788.65808 1.6799151911800374 2446 37.44999999999891 0.020937484038312623 0.8916598528209322 0.4148708965993464 False
497 495 COMPLETE 29 180 12 49.0 56.0 1.8 25 37.5 1.5 1.8 2.4000000000000004 50.0 25 360.0 90.0 11 7.0 30 722.9496600000034 765.6796600000025 1.6186860430352557 2517 42.72999999999911 0.024042361459309682 0.8875645609853 0.39677233822149893 False
498 496 COMPLETE 32 175 13 49.0 56.0 2.1 25 35.0 1.5 1.8 2.5 50.0 25 370.0 90.0 12 6.5 30 766.6237000000023 806.1137000000011 1.6445813856087717 2573 39.48999999999887 0.02185071276538052 0.8896230081616789 0.40761956797892673 False
499 497 COMPLETE 28 180 13 48.0 56.0 1.9 25 35.0 1.5 1.8 2.2 50.0 25 360.0 90.0 12 6.5 30 694.7337000000048 738.9537000000032 1.5765237130634462 2525 44.219999999998436 0.025426598464501567 0.885940594059406 0.37638602703810226 False
500 498 COMPLETE 30 175 12 49.0 56.0 2.0 25 37.5 1.5 1.8 2.6 50.0 25 370.0 90.0 12 7.0 30 718.83932 760.8193199999992 1.5574975292451236 2655 41.97999999999911 0.023579244899339272 0.8839924670433145 0.3749978164704555 False
501 499 COMPLETE 29 175 13 49.0 56.0 1.8 25 37.5 1.25 1.8 2.4000000000000004 50.0 25 360.0 90.0 12 6.5 30 765.7937000000019 803.9637000000006 1.6449870681474208 2570 38.16999999999871 0.02115896234497329 0.8898832684824902 0.408174292292333 False
@@ -0,0 +1,251 @@
{
"windows": {
"IS": [
"2025-01-01 00:00:00",
"2026-01-01 00:00:00"
],
"OOS": [
"2026-01-01 00:00:00",
"2026-06-26 00:00:00"
]
},
"finalists": [
{
"index": 1,
"trial_number": 324,
"score": 858.47,
"params": {
"InpFastEmaPeriod": 25,
"InpSlowEmaPeriod": 160,
"InpRsiPeriod": 16,
"InpRsiBuyLevel": 50.0,
"InpRsiSellLevel": 56.0,
"InpPullbackAtrMult": 3.4000000000000004,
"InpAtrPeriod": 27,
"InpMaxSpreadAtrPct": 37.5,
"InpRiskPercent": 2.25,
"InpAtrSLMult": 1.9,
"InpAtrTPMult": 3.1,
"InpBreakEvenPoints": 50.0,
"InpBreakEvenLock": 25,
"InpTrailStartPoints": 400.0,
"InpTrailStepPoints": 70.0,
"InpMaxTradesPerDay": 12,
"InpDailyLossLimit": 5.0,
"InpMinSecondsBetween": 75
},
"merged_params": {
"InpTimeframe": 5,
"InpFastEmaPeriod": 25,
"InpSlowEmaPeriod": 160,
"InpRsiPeriod": 16,
"InpRsiBuyLevel": 50.0,
"InpRsiSellLevel": 56.0,
"InpPullbackAtrMult": 3.4000000000000004,
"InpAtrPeriod": 27,
"InpMinAtrPoints": 0,
"InpMaxSpreadAtrPct": 37.5,
"InpSizingMode": 1,
"InpFixedLots": 0.01,
"InpRiskPercent": 2.25,
"InpStopMode": 0,
"InpAtrSLMult": 1.9,
"InpAtrTPMult": 3.1,
"InpStopLossPoints": 200,
"InpTakeProfitPoints": 300,
"InpUseBreakEven": true,
"InpBreakEvenPoints": 50.0,
"InpBreakEvenLock": 25,
"InpUseTrailing": true,
"InpTrailStartPoints": 400.0,
"InpTrailStepPoints": 70.0,
"InpMaxPositions": 1,
"InpMaxTradesPerDay": 12,
"InpDailyLossLimit": 5.0,
"InpDailyProfitTarget": 0.0,
"InpMinSecondsBetween": 75,
"InpUseSession": false,
"InpSessionStartHour": 7,
"InpSessionEndHour": 20,
"InpMagicNumber": 20240530,
"InpComment": "GoldScalperPro"
},
"IS": {
"net": 28983.81,
"PF": 1.7053,
"trades": 2396,
"DD%": 0.103408,
"sharpe": 6.9717,
"win_rate": 0.8998,
"first_trade_ts": "2025-01-02T01:55:00"
},
"OOS": {
"net": 4213.78,
"PF": 2.3636,
"trades": 1161,
"DD%": 0.078049,
"sharpe": 9.457,
"win_rate": 0.9518,
"first_trade_ts": "2026-01-02T08:50:00"
}
},
{
"index": 2,
"trial_number": 39,
"score": 159.38,
"params": {
"InpFastEmaPeriod": 24,
"InpSlowEmaPeriod": 65,
"InpRsiPeriod": 23,
"InpRsiBuyLevel": 30.0,
"InpRsiSellLevel": 51.0,
"InpPullbackAtrMult": 2.4000000000000004,
"InpAtrPeriod": 9,
"InpMaxSpreadAtrPct": 37.5,
"InpRiskPercent": 0.75,
"InpAtrSLMult": 1.2,
"InpAtrTPMult": 2.1,
"InpBreakEvenPoints": 70.0,
"InpBreakEvenLock": 45,
"InpTrailStartPoints": 140.0,
"InpTrailStepPoints": 80.0,
"InpMaxTradesPerDay": 3,
"InpDailyLossLimit": 7.5,
"InpMinSecondsBetween": 120
},
"merged_params": {
"InpTimeframe": 5,
"InpFastEmaPeriod": 24,
"InpSlowEmaPeriod": 65,
"InpRsiPeriod": 23,
"InpRsiBuyLevel": 30.0,
"InpRsiSellLevel": 51.0,
"InpPullbackAtrMult": 2.4000000000000004,
"InpAtrPeriod": 9,
"InpMinAtrPoints": 0,
"InpMaxSpreadAtrPct": 37.5,
"InpSizingMode": 1,
"InpFixedLots": 0.01,
"InpRiskPercent": 0.75,
"InpStopMode": 0,
"InpAtrSLMult": 1.2,
"InpAtrTPMult": 2.1,
"InpStopLossPoints": 200,
"InpTakeProfitPoints": 300,
"InpUseBreakEven": true,
"InpBreakEvenPoints": 70.0,
"InpBreakEvenLock": 45,
"InpUseTrailing": true,
"InpTrailStartPoints": 140.0,
"InpTrailStepPoints": 80.0,
"InpMaxPositions": 1,
"InpMaxTradesPerDay": 3,
"InpDailyLossLimit": 7.5,
"InpDailyProfitTarget": 0.0,
"InpMinSecondsBetween": 120,
"InpUseSession": false,
"InpSessionStartHour": 7,
"InpSessionEndHour": 20,
"InpMagicNumber": 20240530,
"InpComment": "GoldScalperPro"
},
"IS": {
"net": 471.1,
"PF": 1.5311,
"trades": 555,
"DD%": 0.040607,
"sharpe": 3.65,
"win_rate": 0.8234,
"first_trade_ts": "2025-01-03T12:35:00"
},
"OOS": {
"net": 265.82,
"PF": 1.8351,
"trades": 276,
"DD%": 0.029001,
"sharpe": 4.0478,
"win_rate": 0.8841,
"first_trade_ts": "2026-01-07T11:10:00"
}
},
{
"index": 3,
"trial_number": 391,
"score": 794.99,
"params": {
"InpFastEmaPeriod": 25,
"InpSlowEmaPeriod": 165,
"InpRsiPeriod": 14,
"InpRsiBuyLevel": 50.0,
"InpRsiSellLevel": 58.0,
"InpPullbackAtrMult": 3.5,
"InpAtrPeriod": 27,
"InpMaxSpreadAtrPct": 45.0,
"InpRiskPercent": 1.5,
"InpAtrSLMult": 1.9,
"InpAtrTPMult": 3.0,
"InpBreakEvenPoints": 60.0,
"InpBreakEvenLock": 20,
"InpTrailStartPoints": 400.0,
"InpTrailStepPoints": 70.0,
"InpMaxTradesPerDay": 12,
"InpDailyLossLimit": 2.5,
"InpMinSecondsBetween": 75
},
"merged_params": {
"InpTimeframe": 5,
"InpFastEmaPeriod": 25,
"InpSlowEmaPeriod": 165,
"InpRsiPeriod": 14,
"InpRsiBuyLevel": 50.0,
"InpRsiSellLevel": 58.0,
"InpPullbackAtrMult": 3.5,
"InpAtrPeriod": 27,
"InpMinAtrPoints": 0,
"InpMaxSpreadAtrPct": 45.0,
"InpSizingMode": 1,
"InpFixedLots": 0.01,
"InpRiskPercent": 1.5,
"InpStopMode": 0,
"InpAtrSLMult": 1.9,
"InpAtrTPMult": 3.0,
"InpStopLossPoints": 200,
"InpTakeProfitPoints": 300,
"InpUseBreakEven": true,
"InpBreakEvenPoints": 60.0,
"InpBreakEvenLock": 20,
"InpUseTrailing": true,
"InpTrailStartPoints": 400.0,
"InpTrailStepPoints": 70.0,
"InpMaxPositions": 1,
"InpMaxTradesPerDay": 12,
"InpDailyLossLimit": 2.5,
"InpDailyProfitTarget": 0.0,
"InpMinSecondsBetween": 75,
"InpUseSession": false,
"InpSessionStartHour": 7,
"InpSessionEndHour": 20,
"InpMagicNumber": 20240530,
"InpComment": "GoldScalperPro"
},
"IS": {
"net": 5171.29,
"PF": 1.5425,
"trades": 2260,
"DD%": 0.061668,
"sharpe": 5.4414,
"win_rate": 0.8885,
"first_trade_ts": "2025-01-02T01:55:00"
},
"OOS": {
"net": 1614.25,
"PF": 1.9341,
"trades": 1131,
"DD%": 0.053726,
"sharpe": 7.5916,
"win_rate": 0.9416,
"first_trade_ts": "2026-01-02T08:15:00"
}
}
]
}
Binary file not shown.
@@ -0,0 +1 @@
study DB: C:\Users\Administrator\Desktop\backtesting-optuna-mt5-stack\studies\optuna_xauusd_is2025.db