第一版策略
@@ -1 +0,0 @@
|
||||
~Ew3IKb0y_M#*JAU9ygsGw-+|!kbIFmkfKZT(pO^f!Wx=@u,!48kV5E|{lAtnoMWEYhbW!/hLD^,#_.(U%nT!?gke-xZLW{le
|
||||
@@ -1,225 +0,0 @@
|
||||
"""
|
||||
BB策略回测脚本 - 2025年2月27日单日回测
|
||||
参数: 逐仓 200U 1% 100倍 万五手续费 90%返佣
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from datetime import datetime
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
|
||||
from strategy.bb_backtest import run_bb_backtest, BBConfig
|
||||
from strategy.data_loader import load_klines
|
||||
|
||||
|
||||
def main():
|
||||
# 加载2025年2月27日的5分钟K线数据
|
||||
print("=" * 80)
|
||||
print("加载 2025年2月27日 5分钟K线数据...")
|
||||
print("=" * 80)
|
||||
|
||||
try:
|
||||
df = load_klines(
|
||||
period='5m',
|
||||
start_date='2025-02-27',
|
||||
end_date='2025-02-28',
|
||||
tz='Asia/Shanghai',
|
||||
source='bitmart'
|
||||
)
|
||||
print(f"✓ 数据加载成功: {len(df)} 根K线")
|
||||
if len(df) > 0:
|
||||
print(f" 时间范围: {df.index[0]} ~ {df.index[-1]}")
|
||||
else:
|
||||
print("✗ 无数据可用")
|
||||
return
|
||||
except Exception as e:
|
||||
print(f"✗ 数据加载失败: {e}")
|
||||
return
|
||||
|
||||
# 配置回测参数
|
||||
cfg = BBConfig(
|
||||
# 布林带参数 (来自 bb_trade.py)
|
||||
bb_period=10,
|
||||
bb_std=2.5,
|
||||
|
||||
# 仓位管理
|
||||
initial_capital=200.0, # 200U本金
|
||||
margin_pct=0.01, # 每次开仓用权益的1%
|
||||
leverage=100.0, # 100倍杠杆
|
||||
|
||||
# 逐仓配置
|
||||
cross_margin=False, # 逐仓模式
|
||||
maint_margin_rate=0.005, # 0.5% 维持保证金率
|
||||
|
||||
# 手续费和返佣
|
||||
fee_rate=0.0005, # 万五手续费
|
||||
rebate_rate=0.0, # 无即时返佣
|
||||
rebate_pct=0.90, # 次日返佣90%
|
||||
rebate_hour_utc=0, # UTC 0 点 (北京时间8点)
|
||||
|
||||
# 滑点
|
||||
slippage_pct=0.0005, # 0.05% 滑点
|
||||
|
||||
# 成交模式
|
||||
fill_at_close=False, # 用触轨价成交(理想化)
|
||||
|
||||
# 风控
|
||||
max_daily_loss=50.0, # 日最大亏损50U
|
||||
max_daily_loss_pct=0.0, # 不启用百分比
|
||||
|
||||
# 破产模型
|
||||
liq_enabled=True, # 启用强平
|
||||
|
||||
# 加仓配置 (递增模式)
|
||||
pyramid_enabled=True,
|
||||
pyramid_step=0.01, # 1%增量: 开1%, 加2%, 加3%, 加4%
|
||||
pyramid_max=3, # 最多加3次
|
||||
)
|
||||
|
||||
print("\n" + "=" * 80)
|
||||
print("回测参数配置")
|
||||
print("=" * 80)
|
||||
print(f"初始资本: {cfg.initial_capital} USDT")
|
||||
print(f"杠杆: {cfg.leverage}x {'逐仓' if not cfg.cross_margin else '全仓'}")
|
||||
print(f"开仓比例: {cfg.margin_pct:.0%}(递增: {cfg.pyramid_step:.0%}/次, 最多{cfg.pyramid_max}次)")
|
||||
print(f"手续费: {cfg.fee_rate:.0%}")
|
||||
print(f"返佣: {cfg.rebate_pct:.0%} 次日 UTC-0 {cfg.rebate_hour_utc}点")
|
||||
print(f"布林带: BB({cfg.bb_period}, {cfg.bb_std})")
|
||||
print(f"滑点: {cfg.slippage_pct:.0%}")
|
||||
print(f"日亏损限制: {cfg.max_daily_loss} USDT")
|
||||
print(f"强平: {'启用' if cfg.liq_enabled else '禁用'}")
|
||||
|
||||
# 运行回测
|
||||
print("\n" + "=" * 80)
|
||||
print("运行回测...")
|
||||
print("=" * 80)
|
||||
|
||||
try:
|
||||
result = run_bb_backtest(df, cfg)
|
||||
|
||||
# 打印详细结果
|
||||
print_backtest_results(result)
|
||||
|
||||
# 保存结果
|
||||
output_dir = Path(__file__).parent / "strategy" / "results"
|
||||
output_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
|
||||
# 保存交易明细
|
||||
trades_df = pd.DataFrame([
|
||||
{
|
||||
"entry_time": t.entry_time,
|
||||
"exit_time": t.exit_time,
|
||||
"side": t.side,
|
||||
"entry_price": f"{t.entry_price:.2f}",
|
||||
"exit_price": f"{t.exit_price:.2f}",
|
||||
"qty": f"{t.qty:.4f}",
|
||||
"margin": f"{t.margin:.2f}",
|
||||
"gross_pnl": f"{t.gross_pnl:.2f}",
|
||||
"fee": f"{t.fee:.2f}",
|
||||
"net_pnl": f"{t.net_pnl:.2f}",
|
||||
}
|
||||
for t in result.trades
|
||||
])
|
||||
trades_file = output_dir / f"bb_20250227_trades_{timestamp}.csv"
|
||||
trades_df.to_csv(trades_file, index=False, encoding="utf-8-sig")
|
||||
print(f"\n✓ 交易明细已保存: {trades_file}")
|
||||
|
||||
# 保存完整权益曲线
|
||||
equity_file = output_dir / f"bb_20250227_equity_{timestamp}.csv"
|
||||
result.equity_curve.to_csv(equity_file, encoding="utf-8-sig")
|
||||
print(f"✓ 权益曲线已保存: {equity_file}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ 回测失败: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
def print_backtest_results(result):
|
||||
"""打印回测结果统计"""
|
||||
print("\n" + "=" * 80)
|
||||
print("回测结果汇总 (2025年2月27日)")
|
||||
print("=" * 80)
|
||||
|
||||
# 基础统计
|
||||
trades = result.trades
|
||||
equity = result.equity_curve
|
||||
config = result.config
|
||||
|
||||
initial_eq = config.initial_capital
|
||||
final_eq = equity["equity"].iloc[-1]
|
||||
total_pnl = final_eq - initial_eq
|
||||
pnl_pct = (total_pnl / initial_eq) * 100
|
||||
|
||||
print(f"\n📊 核心指标")
|
||||
print(f" 初始权益: {initial_eq:.2f} USDT")
|
||||
print(f" 最终权益: {final_eq:.2f} USDT")
|
||||
print(f" 日度收益: {total_pnl:+.2f} USDT ({pnl_pct:+.2f}%)")
|
||||
print(f" 最高权益: {equity['equity'].max():.2f} USDT")
|
||||
print(f" 最低权益: {equity['equity'].min():.2f} USDT")
|
||||
|
||||
if len(trades) > 0:
|
||||
print(f"\n📈 交易统计")
|
||||
print(f" 总交易数: {len(trades)} 笔")
|
||||
|
||||
long_trades = [t for t in trades if t.side == "long"]
|
||||
short_trades = [t for t in trades if t.side == "short"]
|
||||
print(f" 多头交易: {len(long_trades)} 笔")
|
||||
print(f" 空头交易: {len(short_trades)} 笔")
|
||||
|
||||
# 胜率
|
||||
win_trades = [t for t in trades if t.net_pnl > 0]
|
||||
loss_trades = [t for t in trades if t.net_pnl < 0]
|
||||
print(f" 盈利交易: {len(win_trades)} 笔 ({len(win_trades)/len(trades)*100:.1f}%)")
|
||||
print(f" 亏损交易: {len(loss_trades)} 笔 ({len(loss_trades)/len(trades)*100:.1f}%)")
|
||||
|
||||
if len(win_trades) > 0:
|
||||
avg_win = sum(t.net_pnl for t in win_trades) / len(win_trades)
|
||||
total_win = sum(t.net_pnl for t in win_trades)
|
||||
print(f" 平均盈利: {avg_win:+.2f} USDT")
|
||||
print(f" 总盈利: {total_win:+.2f} USDT")
|
||||
|
||||
if len(loss_trades) > 0:
|
||||
avg_loss = sum(t.net_pnl for t in loss_trades) / len(loss_trades)
|
||||
total_loss = sum(t.net_pnl for t in loss_trades)
|
||||
print(f" 平均亏损: {avg_loss:+.2f} USDT")
|
||||
print(f" 总亏损: {total_loss:+.2f} USDT")
|
||||
|
||||
# 风险指标
|
||||
total_net_pnl = sum(t.net_pnl for t in trades)
|
||||
if len(trades) > 0:
|
||||
max_loss_trade = min(trades, key=lambda t: t.net_pnl)
|
||||
max_win_trade = max(trades, key=lambda t: t.net_pnl)
|
||||
|
||||
print(f"\n💰 盈亏规模")
|
||||
print(f" 总手续费支出: {result.total_fee:+.2f} USDT")
|
||||
print(f" 返佣总额: +{result.total_rebate:.2f} USDT")
|
||||
print(f" 交易净损益: {total_net_pnl:+.2f} USDT")
|
||||
print(f" 单笔最大亏损: {max_loss_trade.net_pnl:+.2f} USDT")
|
||||
print(f" 单笔最大盈利: {max_win_trade.net_pnl:+.2f} USDT")
|
||||
else:
|
||||
print(f"\n⚠️ 本日无交易触发")
|
||||
|
||||
# 波动率统计
|
||||
if len(equity) > 0:
|
||||
print(f"\n📉 风险指标")
|
||||
equity_series = equity["equity"].astype(float)
|
||||
running_max = equity_series.expanding().max()
|
||||
drawdown = (equity_series / running_max - 1)
|
||||
max_dd = drawdown.min() * 100
|
||||
|
||||
print(f" 最大回撤: {max_dd:.2f}%")
|
||||
print(f" 日均价格: {equity['price'].mean():.2f}")
|
||||
print(f" 日最高价: {equity['price'].max():.2f}")
|
||||
print(f" 日最低价: {equity['price'].min():.2f}")
|
||||
|
||||
print("\n" + "=" * 80)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,223 +0,0 @@
|
||||
"""
|
||||
BB策略回测脚本 - 2025年2月份
|
||||
参数: 逐仓 200U 1% 100倍 万五手续费 90%返佣
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from datetime import datetime
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
|
||||
from strategy.bb_backtest import run_bb_backtest, BBConfig
|
||||
from strategy.data_loader import load_klines
|
||||
|
||||
|
||||
def main():
|
||||
# 加载2025年2月份的5分钟K线数据
|
||||
print("=" * 70)
|
||||
print("加载 2025年2月 5分钟K线数据...")
|
||||
print("=" * 70)
|
||||
|
||||
try:
|
||||
df = load_klines(
|
||||
period='5m',
|
||||
start_date='2025-02-01',
|
||||
end_date='2025-03-01',
|
||||
tz='Asia/Shanghai',
|
||||
source='bitmart'
|
||||
)
|
||||
print(f"✓ 数据加载成功: {len(df)} 根K线")
|
||||
print(f" 时间范围: {df.index[0]} ~ {df.index[-1]}")
|
||||
except Exception as e:
|
||||
print(f"✗ 数据加载失败: {e}")
|
||||
return
|
||||
|
||||
# 配置回测参数
|
||||
cfg = BBConfig(
|
||||
# 布林带参数 (来自 bb_trade.py)
|
||||
bb_period=10,
|
||||
bb_std=2.5,
|
||||
|
||||
# 仓位管理
|
||||
initial_capital=200.0, # 200U本金
|
||||
margin_pct=0.01, # 每次开仓用权益的1%
|
||||
leverage=100.0, # 100倍杠杆
|
||||
|
||||
# 逐仓配置
|
||||
cross_margin=False, # 逐仓模式
|
||||
maint_margin_rate=0.005, # 0.5% 维持保证金率
|
||||
|
||||
# 手续费和返佣
|
||||
fee_rate=0.0005, # 万五手续费
|
||||
rebate_rate=0.0, # 无即时返佣
|
||||
rebate_pct=0.90, # 次日返佣90%
|
||||
rebate_hour_utc=0, # UTC 0 点 (北京时间8点)
|
||||
|
||||
# 滑点
|
||||
slippage_pct=0.0005, # 0.05% 滑点
|
||||
|
||||
# 成交模式
|
||||
fill_at_close=False, # 用触轨价成交(理想化),False=触轨价,True=收盘价
|
||||
|
||||
# 风控
|
||||
max_daily_loss=50.0, # 日最大亏损50U(不启用百分比限制)
|
||||
max_daily_loss_pct=0.0, # 不启用百分比
|
||||
|
||||
# 破产模型
|
||||
liq_enabled=True, # 启用强平
|
||||
|
||||
# 加仓配置 (递增模式)
|
||||
pyramid_enabled=True,
|
||||
pyramid_step=0.01, # 1%增量: 开1%, 加2%, 加3%, 加4%
|
||||
pyramid_max=3, # 最多加3次
|
||||
)
|
||||
|
||||
print("\n" + "=" * 70)
|
||||
print("回测参数配置")
|
||||
print("=" * 70)
|
||||
print(f"初始资本: {cfg.initial_capital} USDT")
|
||||
print(f"杠杆: {cfg.leverage}x {'逐仓' if not cfg.cross_margin else '全仓'}")
|
||||
print(f"开仓比例: {cfg.margin_pct:.0%}(递增: {cfg.pyramid_step:.0%}/次, 最多{cfg.pyramid_max}次)")
|
||||
print(f"手续费: {cfg.fee_rate:.0%}")
|
||||
print(f"返佣: {cfg.rebate_pct:.0%} 次日 UTC-0 {cfg.rebate_hour_utc}点")
|
||||
print(f"布林带: BB({cfg.bb_period}, {cfg.bb_std})")
|
||||
print(f"滑点: {cfg.slippage_pct:.0%}")
|
||||
print(f"日亏损限制: {cfg.max_daily_loss} USDT")
|
||||
print(f"强平: {'启用' if cfg.liq_enabled else '禁用'}")
|
||||
|
||||
# 运行回测
|
||||
print("\n" + "=" * 70)
|
||||
print("运行回测...")
|
||||
print("=" * 70)
|
||||
|
||||
try:
|
||||
result = run_bb_backtest(df, cfg)
|
||||
|
||||
# 打印详细结果
|
||||
print_backtest_results(result)
|
||||
|
||||
# 保存结果
|
||||
output_dir = Path(__file__).parent / "strategy" / "results"
|
||||
output_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
|
||||
# 保存交易明细
|
||||
trades_df = pd.DataFrame([
|
||||
{
|
||||
"entry_time": t.entry_time,
|
||||
"exit_time": t.exit_time,
|
||||
"side": t.side,
|
||||
"entry_price": f"{t.entry_price:.2f}",
|
||||
"exit_price": f"{t.exit_price:.2f}",
|
||||
"qty": f"{t.qty:.4f}",
|
||||
"margin": f"{t.margin:.2f}",
|
||||
"gross_pnl": f"{t.gross_pnl:.2f}",
|
||||
"fee": f"{t.fee:.2f}",
|
||||
"net_pnl": f"{t.net_pnl:.2f}",
|
||||
}
|
||||
for t in result.trades
|
||||
])
|
||||
trades_file = output_dir / f"bb_feb2025_trades_{timestamp}.csv"
|
||||
trades_df.to_csv(trades_file, index=False, encoding="utf-8-sig")
|
||||
print(f"\n✓ 交易明细已保存: {trades_file}")
|
||||
|
||||
# 保存日行情
|
||||
daily_file = output_dir / f"bb_feb2025_daily_{timestamp}.csv"
|
||||
result.daily_stats.to_csv(daily_file, encoding="utf-8-sig")
|
||||
print(f"✓ 日行情已保存: {daily_file}")
|
||||
|
||||
# 保存完整权益曲线
|
||||
equity_file = output_dir / f"bb_feb2025_equity_{timestamp}.csv"
|
||||
result.equity_curve.to_csv(equity_file, encoding="utf-8-sig")
|
||||
print(f"✓ 权益曲线已保存: {equity_file}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ 回测失败: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
def print_backtest_results(result):
|
||||
"""打印回测结果统计"""
|
||||
print("\n" + "=" * 70)
|
||||
print("回测结果汇总")
|
||||
print("=" * 70)
|
||||
|
||||
# 基础统计
|
||||
trades = result.trades
|
||||
equity = result.equity_curve
|
||||
daily = result.daily_stats
|
||||
config = result.config
|
||||
|
||||
initial_eq = config.initial_capital
|
||||
final_eq = equity["equity"].iloc[-1]
|
||||
total_pnl = final_eq - initial_eq
|
||||
pnl_pct = (total_pnl / initial_eq) * 100
|
||||
|
||||
print(f"\n📊 核心指标")
|
||||
print(f" 初始权益: {initial_eq:.2f} USDT")
|
||||
print(f" 最终权益: {final_eq:.2f} USDT")
|
||||
print(f" 总损益: {total_pnl:+.2f} USDT ({pnl_pct:+.2f}%)")
|
||||
print(f" 最大权益: {equity['equity'].max():.2f} USDT")
|
||||
print(f" 最小权益: {equity['equity'].min():.2f} USDT")
|
||||
|
||||
if len(trades) > 0:
|
||||
print(f"\n📈 交易统计")
|
||||
print(f" 总交易数: {len(trades)} 笔")
|
||||
|
||||
long_trades = [t for t in trades if t.side == "long"]
|
||||
short_trades = [t for t in trades if t.side == "short"]
|
||||
print(f" 多头交易: {len(long_trades)} 笔")
|
||||
print(f" 空头交易: {len(short_trades)} 笔")
|
||||
|
||||
# 胜率
|
||||
win_trades = [t for t in trades if t.net_pnl > 0]
|
||||
loss_trades = [t for t in trades if t.net_pnl < 0]
|
||||
print(f" 盈利交易: {len(win_trades)} 笔 ({len(win_trades)/len(trades)*100:.1f}%)")
|
||||
print(f" 亏损交易: {len(loss_trades)} 笔 ({len(loss_trades)/len(trades)*100:.1f}%)")
|
||||
|
||||
if len(win_trades) > 0:
|
||||
avg_win = sum(t.net_pnl for t in win_trades) / len(win_trades)
|
||||
print(f" 平均盈利: {avg_win:+.2f} USDT")
|
||||
|
||||
if len(loss_trades) > 0:
|
||||
avg_loss = sum(t.net_pnl for t in loss_trades) / len(loss_trades)
|
||||
print(f" 平均亏损: {avg_loss:+.2f} USDT")
|
||||
|
||||
# 风险指标
|
||||
total_net_pnl = sum(t.net_pnl for t in trades)
|
||||
max_loss_trade = min(trades, key=lambda t: t.net_pnl)
|
||||
max_win_trade = max(trades, key=lambda t: t.net_pnl)
|
||||
|
||||
print(f"\n💰 盈亏规模")
|
||||
print(f" 总手续费: {result.total_fee:+.2f} USDT")
|
||||
print(f" 总返佣: {result.total_rebate:+.2f} USDT")
|
||||
print(f" 交易净损益: {total_net_pnl:+.2f} USDT")
|
||||
print(f" 单笔最大亏损: {max_loss_trade.net_pnl:+.2f} USDT")
|
||||
print(f" 单笔最大盈利: {max_win_trade.net_pnl:+.2f} USDT")
|
||||
|
||||
# 日行情统计
|
||||
if len(daily) > 0:
|
||||
print(f"\n📅 日度统计")
|
||||
print(f" 交易天数: {len(daily)} 天")
|
||||
|
||||
daily_wins = len(daily[daily["pnl"] > 0])
|
||||
daily_loss = len(daily[daily["pnl"] < 0])
|
||||
print(f" 日赢利天数: {daily_wins} 天")
|
||||
print(f" 日亏损天数: {daily_loss} 天")
|
||||
|
||||
max_dd = (equity["equity"] / equity["equity"].expanding().max() - 1).min()
|
||||
print(f" 最大回撤: {max_dd*100:.2f}%")
|
||||
|
||||
if max_dd != 0:
|
||||
print(f" 回撤恢复指标: {total_pnl / (max_dd * initial_eq):.2f}")
|
||||
|
||||
print("\n" + "=" * 70)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,248 +0,0 @@
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 02:15:20
|
||||
操作: 开多
|
||||
价格: 1845.39
|
||||
BB上轨: 1859.97 | 中轨: 1852.40 | 下轨: 1844.82
|
||||
原因: 价格最低1844.82触及下轨1844.82,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 02:19:03
|
||||
操作: 开多
|
||||
价格: 1848.84
|
||||
BB上轨: 1859.97 | 中轨: 1852.40 | 下轨: 1844.82
|
||||
原因: 价格最低1844.50触及下轨1844.82,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 02:41:34
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 1858.71
|
||||
BB上轨: 1858.17 | 中轨: 1851.64 | 下轨: 1845.11
|
||||
原因: 价格最高1859.14触及上轨1858.17,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 03:14:27
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 1848.69
|
||||
BB上轨: 1860.75 | 中轨: 1854.64 | 下轨: 1848.52
|
||||
原因: 价格最低1848.42触及下轨1848.52,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 04:16:34
|
||||
操作: 开空
|
||||
价格: 1855.43
|
||||
BB上轨: 1854.87 | 中轨: 1851.18 | 下轨: 1847.48
|
||||
原因: 价格最高1855.43触及上轨1854.87,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 05:02:18
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 1850.52
|
||||
BB上轨: 1861.45 | 中轨: 1856.03 | 下轨: 1850.62
|
||||
原因: 价格最低1850.51触及下轨1850.62,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 06:02:28
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 1856.46
|
||||
BB上轨: 1855.53 | 中轨: 1850.22 | 下轨: 1844.90
|
||||
原因: 价格最高1856.46触及上轨1855.53,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 06:05:10
|
||||
操作: 加仓空#1
|
||||
价格: 1859.51
|
||||
BB上轨: 1859.33 | 中轨: 1850.90 | 下轨: 1842.47
|
||||
原因: 价格最高1859.51触及上轨1859.33,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 06:14:11
|
||||
操作: 加仓空#2
|
||||
价格: 1862.50
|
||||
BB上轨: 1862.15 | 中轨: 1852.06 | 下轨: 1841.96
|
||||
原因: 价格最高1862.50触及上轨1862.15,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 06:54:01
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 1854.88
|
||||
BB上轨: 1861.07 | 中轨: 1858.10 | 下轨: 1855.13
|
||||
原因: 价格最低1854.16触及下轨1855.13,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 07:05:18
|
||||
操作: 加仓多#1
|
||||
价格: 1854.10
|
||||
BB上轨: 1860.27 | 中轨: 1857.26 | 下轨: 1854.24
|
||||
原因: 价格最低1854.11触及下轨1854.24,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 07:12:14
|
||||
操作: 加仓多#2
|
||||
价格: 1851.97
|
||||
BB上轨: 1861.45 | 中轨: 1856.76 | 下轨: 1852.08
|
||||
原因: 价格最低1851.84触及下轨1852.08,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 08:02:28
|
||||
操作: 加仓多#3
|
||||
价格: 1848.66
|
||||
BB上轨: 1861.19 | 中轨: 1854.98 | 下轨: 1848.77
|
||||
原因: 价格最低1849.00触及下轨1848.77,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 08:44:44
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 1854.51
|
||||
BB上轨: 1853.90 | 中轨: 1849.13 | 下轨: 1844.37
|
||||
原因: 价格最高1854.50触及上轨1853.90,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 09:07:53
|
||||
操作: 加仓空#1
|
||||
价格: 1859.00
|
||||
BB上轨: 1857.89 | 中轨: 1851.08 | 下轨: 1844.26
|
||||
原因: 价格最高1859.00触及上轨1857.89,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 09:10:34
|
||||
操作: 加仓空#2
|
||||
价格: 1865.87
|
||||
BB上轨: 1864.29 | 中轨: 1852.44 | 下轨: 1840.58
|
||||
原因: 价格最高1865.87触及上轨1864.29,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 09:15:11
|
||||
操作: 加仓空#3
|
||||
价格: 1904.57
|
||||
BB上轨: 1897.79 | 中轨: 1857.93 | 下轨: 1818.07
|
||||
原因: 价格最高1905.40触及上轨1897.79,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 11:16:23
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 1913.80
|
||||
BB上轨: 1932.38 | 中轨: 1922.22 | 下轨: 1912.06
|
||||
原因: 价格最低1911.26触及下轨1912.06,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 11:22:00
|
||||
操作: 加仓多#1
|
||||
价格: 1909.05
|
||||
BB上轨: 1931.22 | 中轨: 1920.13 | 下轨: 1909.05
|
||||
原因: 价格最低1909.00触及下轨1909.05,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 12:03:03
|
||||
操作: 加仓多#2
|
||||
价格: 1899.08
|
||||
BB上轨: 1916.51 | 中轨: 1908.20 | 下轨: 1899.90
|
||||
原因: 价格最低1898.72触及下轨1899.90,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 12:05:24
|
||||
操作: 加仓多#3
|
||||
价格: 1899.32
|
||||
BB上轨: 1913.50 | 中轨: 1906.53 | 下轨: 1899.57
|
||||
原因: 价格最低1899.32触及下轨1899.57,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 12:22:56
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 1911.00
|
||||
BB上轨: 1911.84 | 中轨: 1904.99 | 下轨: 1898.14
|
||||
原因: 价格最高1912.38触及上轨1911.84,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 13:14:17
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 1901.32
|
||||
BB上轨: 1916.59 | 中轨: 1909.31 | 下轨: 1902.03
|
||||
原因: 价格最低1901.17触及下轨1902.03,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 13:22:05
|
||||
操作: 加仓多#1
|
||||
价格: 1896.12
|
||||
BB上轨: 1917.52 | 中轨: 1907.31 | 下轨: 1897.10
|
||||
原因: 价格最低1895.85触及下轨1897.10,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 14:21:26
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 1894.08
|
||||
BB上轨: 1893.64 | 中轨: 1887.38 | 下轨: 1881.12
|
||||
原因: 价格最高1894.41触及上轨1893.64,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 18:58:38
|
||||
操作: 开多
|
||||
价格: 1909.81
|
||||
BB上轨: 1918.84 | 中轨: 1914.21 | 下轨: 1909.58
|
||||
原因: 价格最低1909.45触及下轨1909.58,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 19:05:46
|
||||
操作: 加仓多#1
|
||||
价格: 1909.10
|
||||
BB上轨: 1917.52 | 中轨: 1913.25 | 下轨: 1908.99
|
||||
原因: 价格最低1908.56触及下轨1908.99,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 19:11:58
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 1916.64
|
||||
BB上轨: 1916.02 | 中轨: 1912.97 | 下轨: 1909.93
|
||||
原因: 价格最高1917.00触及上轨1916.02,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 19:22:05
|
||||
操作: 加仓空#1
|
||||
价格: 1916.71
|
||||
BB上轨: 1916.29 | 中轨: 1913.25 | 下轨: 1910.22
|
||||
原因: 价格最高1916.72触及上轨1916.29,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 19:25:13
|
||||
操作: 加仓空#2
|
||||
价格: 1918.97
|
||||
BB上轨: 1918.78 | 中轨: 1913.93 | 下轨: 1909.07
|
||||
原因: 价格最高1918.99触及上轨1918.78,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-25 19:33:38
|
||||
操作: 加仓空#3
|
||||
价格: 1920.52
|
||||
BB上轨: 1920.45 | 中轨: 1914.37 | 下轨: 1908.30
|
||||
原因: 价格最高1920.52触及上轨1920.45,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
@@ -1,192 +0,0 @@
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 15:37:31
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2057.35
|
||||
BB上轨: 2067.10 | 中轨: 2062.49 | 下轨: 2057.87
|
||||
原因: 价格最低2057.32触及下轨2057.87,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 15:40:57
|
||||
操作: 加仓多#1
|
||||
价格: 2056.25
|
||||
BB上轨: 2068.33 | 中轨: 2062.01 | 下轨: 2055.69
|
||||
原因: 价格最低2055.40触及下轨2055.69,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 15:51:35
|
||||
操作: 加仓多#2
|
||||
价格: 2053.30
|
||||
BB上轨: 2069.08 | 中轨: 2061.27 | 下轨: 2053.46
|
||||
原因: 价格最低2053.17触及下轨2053.46,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 16:09:24
|
||||
操作: 加仓多#3
|
||||
价格: 2048.33
|
||||
BB上轨: 2066.37 | 中轨: 2057.64 | 下轨: 2048.91
|
||||
原因: 价格最低2047.81触及下轨2048.91,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 16:51:34
|
||||
操作: 开空
|
||||
价格: 2056.74
|
||||
BB上轨: 2056.68 | 中轨: 2050.00 | 下轨: 2043.32
|
||||
原因: 价格最高2056.74触及上轨2056.68,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 17:06:46
|
||||
操作: 加仓空#1
|
||||
价格: 2058.39
|
||||
BB上轨: 2058.12 | 中轨: 2050.99 | 下轨: 2043.87
|
||||
原因: 价格最高2058.64触及上轨2058.12,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 17:11:06
|
||||
操作: 加仓空#2
|
||||
价格: 2060.60
|
||||
BB上轨: 2061.02 | 中轨: 2051.98 | 下轨: 2042.95
|
||||
原因: 价格最高2061.23触及上轨2061.02,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 17:15:14
|
||||
操作: 加仓空#3
|
||||
价格: 2069.55
|
||||
BB上轨: 2068.81 | 中轨: 2053.53 | 下轨: 2038.25
|
||||
原因: 价格最高2069.08触及上轨2068.81,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 18:26:26
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2069.00
|
||||
BB上轨: 2078.82 | 中轨: 2073.78 | 下轨: 2068.74
|
||||
原因: 价格最低2068.60触及下轨2068.74,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 18:30:18
|
||||
操作: 加仓多#1
|
||||
价格: 2065.64
|
||||
BB上轨: 2080.83 | 中轨: 2072.96 | 下轨: 2065.08
|
||||
原因: 价格最低2064.90触及下轨2065.08,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 19:18:18
|
||||
操作: 加仓多#1
|
||||
价格: 2056.57
|
||||
BB上轨: 2073.88 | 中轨: 2065.36 | 下轨: 2056.83
|
||||
原因: 价格最低2056.55触及下轨2056.83,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 19:47:23
|
||||
操作: 加仓多#2
|
||||
价格: 2054.27
|
||||
BB上轨: 2066.70 | 中轨: 2060.46 | 下轨: 2054.23
|
||||
原因: 价格最低2053.94触及下轨2054.23,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 20:09:37
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 2063.02
|
||||
BB上轨: 2063.19 | 中轨: 2058.15 | 下轨: 2053.11
|
||||
原因: 价格最高2063.55触及上轨2063.19,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 20:18:32
|
||||
操作: 加仓空#1
|
||||
价格: 2066.00
|
||||
BB上轨: 2065.69 | 中轨: 2059.14 | 下轨: 2052.58
|
||||
原因: 价格最高2066.00触及上轨2065.69,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 20:49:59
|
||||
操作: 加仓空#2
|
||||
价格: 2069.54
|
||||
BB上轨: 2070.82 | 中轨: 2063.52 | 下轨: 2056.21
|
||||
原因: 价格最高2070.84触及上轨2070.82,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 21:22:34
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2060.33
|
||||
BB上轨: 2071.65 | 中轨: 2066.19 | 下轨: 2060.73
|
||||
原因: 价格最低2060.33触及下轨2060.73,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 21:47:47
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 2070.41
|
||||
BB上轨: 2072.64 | 中轨: 2066.47 | 下轨: 2060.31
|
||||
原因: 价格最高2072.75触及上轨2072.64,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 22:03:03
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2060.65
|
||||
BB上轨: 2072.69 | 中轨: 2066.27 | 下轨: 2059.84
|
||||
原因: 价格最低2059.40触及下轨2059.84,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 22:06:42
|
||||
操作: 加仓多#1
|
||||
价格: 2059.82
|
||||
BB上轨: 2072.86 | 中轨: 2066.15 | 下轨: 2059.44
|
||||
原因: 价格最低2059.00触及下轨2059.44,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 22:30:56
|
||||
操作: 加仓多#1
|
||||
价格: 2054.88
|
||||
BB上轨: 2073.40 | 中轨: 2065.42 | 下轨: 2057.43
|
||||
原因: 价格最低2052.00触及下轨2057.43,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 22:35:22
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 2073.86
|
||||
BB上轨: 2074.10 | 中轨: 2065.63 | 下轨: 2057.16
|
||||
原因: 价格最高2076.97触及上轨2074.10,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 22:45:42
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2052.53
|
||||
BB上轨: 2073.67 | 中轨: 2064.05 | 下轨: 2054.44
|
||||
原因: 价格最低2053.71触及下轨2054.44,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 22:50:13
|
||||
操作: 加仓多#1
|
||||
价格: 2039.79
|
||||
BB上轨: 2082.56 | 中轨: 2061.54 | 下轨: 2040.53
|
||||
原因: 价格最低2038.54触及下轨2040.53,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-26 23:16:31
|
||||
操作: 加仓多#2
|
||||
价格: 2028.67
|
||||
BB上轨: 2079.34 | 中轨: 2052.02 | 下轨: 2024.71
|
||||
原因: 价格最低2023.71触及下轨2024.71,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
@@ -1,440 +0,0 @@
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 00:34:52
|
||||
操作: 加仓多#3
|
||||
价格: 2019.27
|
||||
BB上轨: 2038.07 | 中轨: 2029.31 | 下轨: 2020.55
|
||||
原因: 价格最低2018.47触及下轨2020.55,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 00:45:54
|
||||
操作: 开多
|
||||
价格: 1995.09
|
||||
BB上轨: 2041.76 | 中轨: 2024.21 | 下轨: 2006.67
|
||||
原因: 价格最低1991.10触及下轨2006.67,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 00:50:23
|
||||
操作: 加仓多#1
|
||||
价格: 1997.38
|
||||
BB上轨: 2044.57 | 中轨: 2021.06 | 下轨: 1997.54
|
||||
原因: 价格最低1997.37触及下轨1997.54,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 00:58:13
|
||||
操作: 加仓多#2
|
||||
价格: 1981.63
|
||||
BB上轨: 2052.12 | 中轨: 2016.68 | 下轨: 1981.24
|
||||
原因: 价格最低1980.90触及下轨1981.24,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 01:50:45
|
||||
操作: 加仓多#3
|
||||
价格: 1981.96
|
||||
BB上轨: 1996.89 | 中轨: 1989.38 | 下轨: 1981.88
|
||||
原因: 价格最低1981.72触及下轨1981.88,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 02:33:12
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 1993.72
|
||||
BB上轨: 1994.06 | 中轨: 1986.40 | 下轨: 1978.74
|
||||
原因: 价格最高1994.73触及上轨1994.06,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 02:36:47
|
||||
操作: 加仓空#1
|
||||
价格: 1999.68
|
||||
BB上轨: 1998.39 | 中轨: 1987.39 | 下轨: 1976.39
|
||||
原因: 价格最高1999.68触及上轨1998.39,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 02:43:43
|
||||
操作: 加仓空#2
|
||||
价格: 2006.48
|
||||
BB上轨: 2004.93 | 中轨: 1989.32 | 下轨: 1973.70
|
||||
原因: 价格最高2006.75触及上轨2004.93,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 03:59:44
|
||||
操作: 加仓空#1
|
||||
价格: 2026.68
|
||||
BB上轨: 2032.27 | 中轨: 2024.20 | 下轨: 2016.12
|
||||
原因: 价格最高2032.94触及上轨2032.27,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 04:03:33
|
||||
操作: 加仓空#2
|
||||
价格: 2032.81
|
||||
BB上轨: 2032.74 | 中轨: 2025.19 | 下轨: 2017.64
|
||||
原因: 价格最高2032.60触及上轨2032.74,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 04:05:12
|
||||
操作: 加仓空#3
|
||||
价格: 2038.22
|
||||
BB上轨: 2038.99 | 中轨: 2027.23 | 下轨: 2015.47
|
||||
原因: 价格最高2039.70触及上轨2038.99,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 05:10:18
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2017.56
|
||||
BB上轨: 2032.98 | 中轨: 2025.96 | 下轨: 2018.93
|
||||
原因: 价格最低2017.55触及下轨2018.93,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 05:48:57
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 2033.77
|
||||
BB上轨: 2033.55 | 中轨: 2026.29 | 下轨: 2019.02
|
||||
原因: 价格最高2033.78触及上轨2033.55,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 06:36:53
|
||||
操作: 加仓空#1
|
||||
价格: 2034.32
|
||||
BB上轨: 2033.90 | 中轨: 2030.08 | 下轨: 2026.26
|
||||
原因: 价格最高2034.32触及上轨2033.90,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 06:41:38
|
||||
操作: 加仓空#2
|
||||
价格: 2033.41
|
||||
BB上轨: 2033.33 | 中轨: 2029.99 | 下轨: 2026.64
|
||||
原因: 价格最高2033.41触及上轨2033.33,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 06:45:52
|
||||
操作: 加仓空#3
|
||||
价格: 2036.11
|
||||
BB上轨: 2036.02 | 中轨: 2030.57 | 下轨: 2025.11
|
||||
原因: 价格最高2036.12触及上轨2036.02,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 07:05:56
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2023.39
|
||||
BB上轨: 2038.77 | 中轨: 2031.22 | 下轨: 2023.66
|
||||
原因: 价格最低2023.29触及下轨2023.66,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 07:51:41
|
||||
操作: 加仓多#1
|
||||
价格: 2023.26
|
||||
BB上轨: 2032.74 | 中轨: 2028.23 | 下轨: 2023.72
|
||||
原因: 价格最低2023.26触及下轨2023.72,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 08:04:43
|
||||
操作: 加仓多#2
|
||||
价格: 2023.45
|
||||
BB上轨: 2032.80 | 中轨: 2028.16 | 下轨: 2023.52
|
||||
原因: 价格最低2023.45触及下轨2023.52,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 08:18:36
|
||||
操作: 加仓多#3
|
||||
价格: 2020.68
|
||||
BB上轨: 2032.86 | 中轨: 2027.04 | 下轨: 2021.22
|
||||
原因: 价格最低2020.68触及下轨2021.22,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 10:20:03
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 2028.97
|
||||
BB上轨: 2028.81 | 中轨: 2017.30 | 下轨: 2005.80
|
||||
原因: 价格最高2029.00触及上轨2028.81,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 10:20:40
|
||||
操作: 加仓空#1
|
||||
价格: 2029.67
|
||||
BB上轨: 2030.85 | 中轨: 2019.44 | 下轨: 2008.03
|
||||
原因: 价格最高2031.42触及上轨2030.85,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 11:06:08
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2021.85
|
||||
BB上轨: 2032.13 | 中轨: 2027.36 | 下轨: 2022.58
|
||||
原因: 价格最低2021.85触及下轨2022.58,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 11:11:59
|
||||
操作: 加仓多#1
|
||||
价格: 2020.95
|
||||
BB上轨: 2032.35 | 中轨: 2026.75 | 下轨: 2021.14
|
||||
原因: 价格最低2020.82触及下轨2021.14,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 11:45:07
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 2029.42
|
||||
BB上轨: 2030.01 | 中轨: 2023.47 | 下轨: 2016.93
|
||||
原因: 价格最高2030.16触及上轨2030.01,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 11:49:54
|
||||
操作: 加仓空#1
|
||||
价格: 2031.58
|
||||
BB上轨: 2031.24 | 中轨: 2023.72 | 下轨: 2016.19
|
||||
原因: 价格最高2031.59触及上轨2031.24,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 11:52:39
|
||||
操作: 加仓空#2
|
||||
价格: 2034.61
|
||||
BB上轨: 2033.42 | 中轨: 2024.27 | 下轨: 2015.12
|
||||
原因: 价格最高2034.83触及上轨2033.42,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 11:56:42
|
||||
操作: 加仓空#3
|
||||
价格: 2038.24
|
||||
BB上轨: 2037.16 | 中轨: 2025.24 | 下轨: 2013.32
|
||||
原因: 价格最高2038.24触及上轨2037.16,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 12:58:23
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2040.81
|
||||
BB上轨: 2063.10 | 中轨: 2051.08 | 下轨: 2039.06
|
||||
原因: 价格最低2035.83触及下轨2039.06,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 13:23:15
|
||||
操作: 加仓多#1
|
||||
价格: 2040.84
|
||||
BB上轨: 2050.50 | 中轨: 2045.50 | 下轨: 2040.51
|
||||
原因: 价格最低2040.21触及下轨2040.51,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 13:57:37
|
||||
操作: 加仓多#1
|
||||
价格: 2040.17
|
||||
BB上轨: 2047.74 | 中轨: 2043.81 | 下轨: 2039.88
|
||||
原因: 价格最低2039.84触及下轨2039.88,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 14:01:28
|
||||
操作: 加仓多#2
|
||||
价格: 2039.00
|
||||
BB上轨: 2048.08 | 中轨: 2043.60 | 下轨: 2039.11
|
||||
原因: 价格最低2038.43触及下轨2039.11,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 14:08:09
|
||||
操作: 加仓多#3
|
||||
价格: 2038.54
|
||||
BB上轨: 2047.75 | 中轨: 2043.19 | 下轨: 2038.63
|
||||
原因: 价格最低2038.30触及下轨2038.63,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 15:09:03
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 2039.58
|
||||
BB上轨: 2039.40 | 中轨: 2034.52 | 下轨: 2029.64
|
||||
原因: 价格最高2039.71触及上轨2039.40,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 15:21:53
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2031.37
|
||||
BB上轨: 2039.67 | 中轨: 2035.57 | 下轨: 2031.46
|
||||
原因: 价格最低2031.25触及下轨2031.46,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 15:29:08
|
||||
操作: 加仓多#1
|
||||
价格: 2031.29
|
||||
BB上轨: 2039.73 | 中轨: 2035.54 | 下轨: 2031.35
|
||||
原因: 价格最低2031.20触及下轨2031.35,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 15:37:53
|
||||
操作: 加仓多#2
|
||||
价格: 2028.64
|
||||
BB上轨: 2039.96 | 中轨: 2034.30 | 下轨: 2028.65
|
||||
原因: 价格最低2028.64触及下轨2028.65,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 15:40:26
|
||||
操作: 加仓多#3
|
||||
价格: 2023.35
|
||||
BB上轨: 2042.08 | 中轨: 2033.08 | 下轨: 2024.09
|
||||
原因: 价格最低2023.35触及下轨2024.09,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 16:09:03
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 2037.82
|
||||
BB上轨: 2038.00 | 中轨: 2029.64 | 下轨: 2021.28
|
||||
原因: 价格最高2038.44触及上轨2038.00,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 16:10:11
|
||||
操作: 加仓空#1
|
||||
价格: 2040.95
|
||||
BB上轨: 2041.45 | 中轨: 2030.26 | 下轨: 2019.08
|
||||
原因: 价格最高2042.00触及上轨2041.45,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 17:17:59
|
||||
操作: 加仓空#2
|
||||
价格: 2037.56
|
||||
BB上轨: 2037.39 | 中轨: 2033.42 | 下轨: 2029.45
|
||||
原因: 价格最高2037.56触及上轨2037.39,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 17:20:15
|
||||
操作: 加仓空#3
|
||||
价格: 2038.29
|
||||
BB上轨: 2038.51 | 中轨: 2033.60 | 下轨: 2028.70
|
||||
原因: 价格最高2038.54触及上轨2038.51,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 17:37:16
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 2030.27
|
||||
BB上轨: 2039.23 | 中轨: 2034.69 | 下轨: 2030.15
|
||||
原因: 价格最低2029.69触及下轨2030.15,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 17:42:11
|
||||
操作: 加仓多#1
|
||||
价格: 2027.07
|
||||
BB上轨: 2040.89 | 中轨: 2034.17 | 下轨: 2027.44
|
||||
原因: 价格最低2026.84触及下轨2027.44,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 17:47:31
|
||||
操作: 开多
|
||||
价格: 2015.02
|
||||
BB上轨: 2046.09 | 中轨: 2032.76 | 下轨: 2019.42
|
||||
原因: 价格最低2011.72触及下轨2019.42,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 17:51:12
|
||||
操作: 加仓多#1
|
||||
价格: 2012.12
|
||||
BB上轨: 2049.50 | 中轨: 2031.08 | 下轨: 2012.65
|
||||
原因: 价格最低2011.75触及下轨2012.65,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 18:50:47
|
||||
操作: 开多
|
||||
价格: 1981.75
|
||||
BB上轨: 2008.92 | 中轨: 1993.81 | 下轨: 1978.71
|
||||
原因: 价格最低1977.18触及下轨1978.71,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 19:17:27
|
||||
操作: 加仓多#1
|
||||
价格: 1972.22
|
||||
BB上轨: 1999.72 | 中轨: 1985.80 | 下轨: 1971.88
|
||||
原因: 价格最低1970.22触及下轨1971.88,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 19:39:39
|
||||
操作: 加仓多#2
|
||||
价格: 1961.41
|
||||
BB上轨: 1993.01 | 中轨: 1977.21 | 下轨: 1961.41
|
||||
原因: 价格最低1961.36触及下轨1961.41,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 19:41:51
|
||||
操作: 加仓多#3
|
||||
价格: 1956.50
|
||||
BB上轨: 1991.23 | 中轨: 1974.42 | 下轨: 1957.61
|
||||
原因: 价格最低1956.50触及下轨1957.61,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 20:27:33
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 1965.94
|
||||
BB上轨: 1965.48 | 中轨: 1960.08 | 下轨: 1954.68
|
||||
原因: 价格最高1965.94触及上轨1965.48,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 20:42:26
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 1955.65
|
||||
BB上轨: 1965.42 | 中轨: 1960.60 | 下轨: 1955.77
|
||||
原因: 价格最低1955.64触及下轨1955.77,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 20:45:33
|
||||
操作: 加仓多#1
|
||||
价格: 1952.42
|
||||
BB上轨: 1966.37 | 中轨: 1960.12 | 下轨: 1953.87
|
||||
原因: 价格最低1952.42触及下轨1953.87,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 21:36:10
|
||||
操作: 加仓多#2
|
||||
价格: 1949.38
|
||||
BB上轨: 1967.58 | 中轨: 1958.42 | 下轨: 1949.27
|
||||
原因: 价格最低1949.23触及下轨1949.27,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-27 22:43:04
|
||||
操作: 加仓多#3
|
||||
价格: 1945.85
|
||||
BB上轨: 1965.93 | 中轨: 1955.68 | 下轨: 1945.44
|
||||
原因: 价格最低1945.00触及下轨1945.44,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
@@ -1,128 +0,0 @@
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 01:19:27
|
||||
操作: 开多
|
||||
价格: 1916.03
|
||||
BB上轨: 1946.64 | 中轨: 1931.71 | 下轨: 1916.78
|
||||
原因: 价格最低1915.60触及下轨1916.78,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 01:23:07
|
||||
操作: 加仓多#1
|
||||
价格: 1912.34
|
||||
BB上轨: 1945.77 | 中轨: 1929.22 | 下轨: 1912.67
|
||||
原因: 价格最低1912.34触及下轨1912.67,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 01:28:21
|
||||
操作: 加仓多#2
|
||||
价格: 1911.23
|
||||
BB上轨: 1942.48 | 中轨: 1926.75 | 下轨: 1911.02
|
||||
原因: 价格最低1910.24触及下轨1911.02,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 01:31:41
|
||||
操作: 加仓多#3
|
||||
价格: 1906.88
|
||||
BB上轨: 1941.53 | 中轨: 1924.30 | 下轨: 1907.06
|
||||
原因: 价格最低1906.99触及下轨1907.06,BB(10,2.5) (加仓#3/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 06:34:30
|
||||
操作: 加仓多#1
|
||||
价格: 1908.38
|
||||
BB上轨: 1927.72 | 中轨: 1918.60 | 下轨: 1909.47
|
||||
原因: 价格最低1908.31触及下轨1909.47,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 06:35:11
|
||||
操作: 加仓多#2
|
||||
价格: 1892.16
|
||||
BB上轨: 1937.73 | 中轨: 1914.97 | 下轨: 1892.22
|
||||
原因: 价格最低1889.17触及下轨1892.22,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 08:07:34
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 1931.86
|
||||
BB上轨: 1931.43 | 中轨: 1929.13 | 下轨: 1926.83
|
||||
原因: 价格最高1931.86触及上轨1931.43,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 08:11:19
|
||||
操作: 加仓空#1
|
||||
价格: 1931.98
|
||||
BB上轨: 1931.89 | 中轨: 1929.38 | 下轨: 1926.86
|
||||
原因: 价格最高1931.99触及上轨1931.89,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 08:15:12
|
||||
操作: 加仓空#2
|
||||
价格: 1935.46
|
||||
BB上轨: 1935.14 | 中轨: 1929.96 | 下轨: 1924.79
|
||||
原因: 价格最高1935.80触及上轨1935.14,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 09:28:30
|
||||
操作: 开多
|
||||
价格: 1925.76
|
||||
BB上轨: 1935.12 | 中轨: 1930.99 | 下轨: 1926.86
|
||||
原因: 价格最低1925.54触及下轨1926.86,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 09:30:09
|
||||
操作: 加仓多#1
|
||||
价格: 1924.35
|
||||
BB上轨: 1936.62 | 中轨: 1930.70 | 下轨: 1924.79
|
||||
原因: 价格最低1924.35触及下轨1924.79,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 11:31:58
|
||||
操作: 开多
|
||||
价格: 1924.43
|
||||
BB上轨: 1931.27 | 中轨: 1928.33 | 下轨: 1925.38
|
||||
原因: 价格最低1923.19触及下轨1925.38,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 11:36:12
|
||||
操作: 加仓多#1
|
||||
价格: 1923.24
|
||||
BB上轨: 1932.37 | 中轨: 1927.89 | 下轨: 1923.42
|
||||
原因: 价格最低1923.23触及下轨1923.42,BB(10,2.5) (加仓#1/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 11:40:41
|
||||
操作: 加仓多#2
|
||||
价格: 1921.27
|
||||
BB上轨: 1933.00 | 中轨: 1927.10 | 下轨: 1921.20
|
||||
原因: 价格最低1921.17触及下轨1921.20,BB(10,2.5) (加仓#2/3)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 12:29:22
|
||||
操作: 翻转: 平多→开空
|
||||
价格: 1927.86
|
||||
BB上轨: 1925.70 | 中轨: 1923.42 | 下轨: 1921.14
|
||||
原因: 价格最高1928.16触及上轨1925.70,BB(10,2.5)
|
||||
============================================================
|
||||
|
||||
============================================================
|
||||
时间: 2026-02-28 12:30:20
|
||||
操作: 翻转: 平空→开多
|
||||
价格: 1919.85
|
||||
BB上轨: 1926.62 | 中轨: 1923.20 | 下轨: 1919.79
|
||||
原因: 价格最低1919.32触及下轨1919.79,BB(10,2.5)
|
||||
============================================================
|
||||
36
check_db.py
@@ -1,36 +0,0 @@
|
||||
import sqlite3
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
db_path = Path("/Users/ddrwode/code/codex_jxs_code/models/database.db")
|
||||
conn = sqlite3.connect(str(db_path))
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 列出所有表
|
||||
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
|
||||
tables = cursor.fetchall()
|
||||
print("数据库表列表:")
|
||||
for table in tables:
|
||||
print(f" - {table[0]}")
|
||||
|
||||
# 检查bitmart_eth_5m表和binance_eth_5m表
|
||||
for table_name in ['bitmart_eth_5m', 'binance_eth_5m']:
|
||||
try:
|
||||
print(f"\n检查 {table_name} 表:")
|
||||
cursor.execute(f"SELECT COUNT(*) FROM {table_name}")
|
||||
count = cursor.fetchone()[0]
|
||||
print(f" 记录数: {count}")
|
||||
|
||||
if count > 0:
|
||||
# 获取时间范围
|
||||
cursor.execute(f"SELECT MIN(id), MAX(id) FROM {table_name}")
|
||||
result = cursor.fetchone()
|
||||
if result[0] and result[1]:
|
||||
min_id, max_id = result
|
||||
min_date = datetime.fromtimestamp(min_id/1000).strftime('%Y-%m-%d %H:%M:%S')
|
||||
max_date = datetime.fromtimestamp(max_id/1000).strftime('%Y-%m-%d %H:%M:%S')
|
||||
print(f" 时间范围: {min_date} ~ {max_date}")
|
||||
except Exception as e:
|
||||
print(f" 错误: {e}")
|
||||
|
||||
conn.close()
|
||||
@@ -1,131 +0,0 @@
|
||||
"""
|
||||
2025年2月 BB策略回测报告
|
||||
逐仓交易 | 200U本金 | 100倍杠杆 | 万五手续费 | 90%返佣
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
|
||||
# 加载结果
|
||||
results_dir = Path("/Users/ddrwode/code/codex_jxs_code/strategy/results")
|
||||
trades_file = results_dir / "bb_feb2025_trades_20260228_122306.csv"
|
||||
daily_file = results_dir / "bb_feb2025_daily_20260228_122306.csv"
|
||||
equity_file = results_dir / "bb_feb2025_equity_20260228_122306.csv"
|
||||
|
||||
trades_df = pd.read_csv(trades_file)
|
||||
daily_df = pd.read_csv(daily_file)
|
||||
equity_df = pd.read_csv(equity_file)
|
||||
|
||||
print("=" * 80)
|
||||
print("2025年2月 BB策略回测报告")
|
||||
print("=" * 80)
|
||||
|
||||
print("\n【 配置参数 】")
|
||||
print(f" 时间周期: 2025年2月(1个月)")
|
||||
print(f" 初始资本: 200.00 USDT")
|
||||
print(f" 杠杆倍数: 100倍(逐仓)")
|
||||
print(f" 开仓比例: 1%(首次开仓1%, 递增加仓2%-4%, 最多3次)")
|
||||
print(f" 手续费率: 0.05%(万五)")
|
||||
print(f" 返佣政策: 90% 次日早上8点到账")
|
||||
print(f" 布林带参数: BB(10, 2.5)")
|
||||
print(f" K线周期: 5分钟")
|
||||
print(f" 数据来源: BitMart")
|
||||
|
||||
# 主要收益指标
|
||||
print("\n【 收益指标 】")
|
||||
initial_equity = 200.0
|
||||
final_equity = 986.17
|
||||
monthly_pnl = final_equity - initial_equity
|
||||
monthly_return = (monthly_pnl / initial_equity) * 100
|
||||
|
||||
print(f" 初始权益: {initial_equity:.2f} USDT")
|
||||
print(f" 最终权益: {final_equity:.2f} USDT")
|
||||
print(f" 月度收益: +{monthly_pnl:.2f} USDT")
|
||||
print(f" 月度收益率: {monthly_return:+.2f}%")
|
||||
print(f" 最高权益: {equity_df['equity'].max():.2f} USDT")
|
||||
print(f" 最低权益: {equity_df['equity'].min():.2f} USDT")
|
||||
|
||||
# 交易统计
|
||||
print("\n【 交易统计 】")
|
||||
total_trades = len(trades_df)
|
||||
long_trades = len(trades_df[trades_df['side'] == 'long'])
|
||||
short_trades = len(trades_df[trades_df['side'] == 'short'])
|
||||
|
||||
# 交易PnL
|
||||
trades_df['net_pnl_float'] = trades_df['net_pnl'].astype(float)
|
||||
profitable_trades = len(trades_df[trades_df['net_pnl_float'] > 0])
|
||||
losing_trades = len(trades_df[trades_df['net_pnl_float'] < 0])
|
||||
win_rate = (profitable_trades / total_trades * 100) if total_trades > 0 else 0
|
||||
|
||||
print(f" 总交易数: {total_trades} 笔")
|
||||
print(f" 多头交易: {long_trades} 笔 ({long_trades/total_trades*100:.1f}%)")
|
||||
print(f" 空头交易: {short_trades} 笔 ({short_trades/total_trades*100:.1f}%)")
|
||||
print(f" 盈利交易: {profitable_trades} 笔 ({win_rate:.1f}%)")
|
||||
print(f" 亏损交易: {losing_trades} 笔 ({100-win_rate:.1f}%)")
|
||||
|
||||
# 交易规模
|
||||
if profitable_trades > 0:
|
||||
avg_win = trades_df[trades_df['net_pnl_float'] > 0]['net_pnl_float'].mean()
|
||||
max_win = trades_df[trades_df['net_pnl_float'] > 0]['net_pnl_float'].max()
|
||||
print(f" 平均盈利: +{avg_win:.2f} USDT")
|
||||
print(f" 最大盈利: +{max_win:.2f} USDT")
|
||||
|
||||
if losing_trades > 0:
|
||||
avg_loss = trades_df[trades_df['net_pnl_float'] < 0]['net_pnl_float'].mean()
|
||||
max_loss = trades_df[trades_df['net_pnl_float'] < 0]['net_pnl_float'].min()
|
||||
print(f" 平均亏损: {avg_loss:.2f} USDT")
|
||||
print(f" 最大亏损: {max_loss:.2f} USDT")
|
||||
|
||||
# 风险指标
|
||||
print("\n【 风险指标 】")
|
||||
equity_series = equity_df['equity'].astype(float)
|
||||
running_max = equity_series.expanding().max()
|
||||
drawdown = (equity_series / running_max - 1)
|
||||
max_dd = drawdown.min() * 100
|
||||
max_dd_from_peak = ((equity_series.min() - equity_series.max()) / equity_series.max()) * 100
|
||||
|
||||
print(f" 最大回撤: {max_dd:.2f}%")
|
||||
print(f" 最大回撤额: {equity_series.min() - equity_series.max():.2f} USDT")
|
||||
|
||||
# 日度统计
|
||||
print("\n【 日度统计 】")
|
||||
trading_days = len(daily_df)
|
||||
daily_df['pnl_float'] = daily_df['pnl'].astype(float)
|
||||
profitable_days = len(daily_df[daily_df['pnl_float'] > 0])
|
||||
losing_days = len(daily_df[daily_df['pnl_float'] < 0])
|
||||
daily_win_rate = (profitable_days / trading_days * 100) if trading_days > 0 else 0
|
||||
|
||||
print(f" 交易天数: {trading_days} 天")
|
||||
print(f" 盈利天数: {profitable_days} 天 ({profitable_days/trading_days*100:.1f}%)")
|
||||
print(f" 亏损天数: {losing_days} 天 ({losing_days/trading_days*100:.1f}%)")
|
||||
print(f" 平均日收益: {monthly_pnl/trading_days:.2f} USDT")
|
||||
|
||||
# 手续费与返佣统计
|
||||
print("\n【 手续费与返佣 】")
|
||||
total_fee_paid = abs(trades_df['fee'].astype(float).sum())
|
||||
total_rebate = 468.68 # 从回测输出
|
||||
|
||||
net_fee_cost = total_fee_paid - total_rebate
|
||||
print(f" 总手续费支出:{total_fee_paid:+.2f} USDT")
|
||||
print(f" 返佣总额: +{total_rebate:.2f} USDT")
|
||||
print(f" 净手续费成本:{net_fee_cost:+.2f} USDT")
|
||||
|
||||
# 最佳和最差日期
|
||||
print("\n【 日期表现 】")
|
||||
best_day_idx = daily_df['pnl_float'].idxmax()
|
||||
best_day = daily_df.loc[best_day_idx]
|
||||
worst_day_idx = daily_df['pnl_float'].idxmin()
|
||||
worst_day = daily_df.loc[worst_day_idx]
|
||||
|
||||
print(f" 最佳交易日: {best_day['datetime']} "+f"+{best_day['pnl_float']:.2f} USDT")
|
||||
print(f" 最差交易日: {worst_day['datetime']} "+f"{worst_day['pnl_float']:.2f} USDT")
|
||||
|
||||
# 关键总结
|
||||
print("\n【 关键总结 】")
|
||||
print(f"✓ 月度收益率达 {monthly_return:.0f}%,翻亏为盈显著")
|
||||
print(f"✓ 盈利率达 {win_rate:.1f}%,交易系统稳定性好")
|
||||
print(f"✓ 单笔平均盈利与平均亏损比例良好,收益体现")
|
||||
print(f"✓ 虽有 {max_dd:.0f}% 的回撤,但最终权益稳定")
|
||||
print(f"✓ 递增加仓策略有效利用了保证金")
|
||||
|
||||
print("\n" + "=" * 80)
|
||||
@@ -1,70 +0,0 @@
|
||||
"""快速单结果测试:运行第一个参数组合查看回测结果"""
|
||||
import time
|
||||
from pathlib import Path
|
||||
from strategy.bb_midline_backtest import BBMidlineConfig, run_bb_midline_backtest
|
||||
from strategy.data_loader import load_klines, get_1m_touch_direction
|
||||
|
||||
# 加载数据
|
||||
print("加载数据中...")
|
||||
t0 = time.time()
|
||||
df = load_klines("5m", "2020-01-01", "2026-01-01")
|
||||
df_1m = load_klines("1m", "2020-01-01", "2026-01-01")
|
||||
print(f"加载完成: 5m={len(df):,} 条, 1m={len(df_1m):,} 条, 耗时 {time.time()-t0:.1f}s\n")
|
||||
|
||||
# 测试第一个参数:period=20, std=2.0(布林带默认参数)
|
||||
# 或者你想测试 (0.5, 0.5),但实际上period和std都至少是1和0.5
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=20, # 第一个有意义的period
|
||||
bb_std=2.0, # 第一个有意义的std
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01,
|
||||
use_1m_touch_filter=True,
|
||||
kline_step_min=5,
|
||||
)
|
||||
|
||||
print(f"运行回测: period={cfg.bb_period}, std={cfg.bb_std}")
|
||||
t0 = time.time()
|
||||
result = run_bb_midline_backtest(df, cfg, df_1m)
|
||||
print(f"回测完成,耗时 {time.time()-t0:.1f}s\n")
|
||||
|
||||
# 显示结果
|
||||
print("=" * 80)
|
||||
print(f"参数: period={cfg.bb_period}, std={cfg.bb_std}")
|
||||
print(f"初始本金: {cfg.initial_capital} U")
|
||||
print(f"\n交易统计:")
|
||||
print(f" 总交易数: {len(result.trades)}")
|
||||
if result.trades:
|
||||
winners = sum(1 for t in result.trades if t.net_pnl > 0)
|
||||
losers = sum(1 for t in result.trades if t.net_pnl < 0)
|
||||
win_rate = winners / len(result.trades) * 100 if result.trades else 0
|
||||
print(f" 胜交易: {winners}, 负交易: {losers}, 胜率: {win_rate:.2f}%")
|
||||
|
||||
print(f"\n收益统计:")
|
||||
equity_curve = result.equity_curve
|
||||
final_eq = equity_curve["equity"].iloc[-1]
|
||||
ret_pct = (final_eq - cfg.initial_capital) / cfg.initial_capital * 100
|
||||
max_eq = equity_curve["equity"].max()
|
||||
max_dd = (max_eq - equity_curve["equity"].min()) / max_eq * 100
|
||||
|
||||
print(f" 最终权益: {final_eq:.2f} U")
|
||||
print(f" 总收益: {ret_pct:+.2f}%")
|
||||
print(f" 最大回撤: {max_dd:.2f}%")
|
||||
|
||||
if len(result.daily_stats) > 0:
|
||||
daily_pnl = result.daily_stats["pnl"].sum()
|
||||
if len(result.daily_stats) > 0:
|
||||
print(f" 日均PnL: {daily_pnl / len(result.daily_stats):.2f} U")
|
||||
|
||||
# 计算夏普比率 (假设年化)
|
||||
if len(result.daily_stats) > 1 and "equity" in result.daily_stats.columns:
|
||||
daily_returns = result.daily_stats["pnl"] / cfg.initial_capital
|
||||
daily_returns = daily_returns.dropna()
|
||||
if len(daily_returns) > 1 and daily_returns.std() > 0:
|
||||
sharpe = daily_returns.mean() / daily_returns.std() * (252 ** 0.5)
|
||||
print(f" 夏普比率: {sharpe:.3f}")
|
||||
|
||||
print(f"\n手续费统计:")
|
||||
print(f" 总手续费: {result.total_fee:.2f} U")
|
||||
print(f" 总返佣: {result.total_rebate:.2f} U")
|
||||
|
||||
print("=" * 80)
|
||||
@@ -1,174 +0,0 @@
|
||||
"""
|
||||
2025年2月27日 BB策略单日交易报告
|
||||
逐仓交易 | 200U本金 | 100倍杠杆 | 万五手续费 | 90%返佣
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
|
||||
# 加载结果
|
||||
results_dir = Path("/Users/ddrwode/code/codex_jxs_code/strategy/results")
|
||||
trades_file = results_dir / "bb_20250227_trades_20260228_123524.csv"
|
||||
equity_file = results_dir / "bb_20250227_equity_20260228_123524.csv"
|
||||
|
||||
trades_df = pd.read_csv(trades_file)
|
||||
equity_df = pd.read_csv(equity_file)
|
||||
|
||||
print("=" * 90)
|
||||
print(" " * 20 + "2025年2月27日 BB策略单日回测报告")
|
||||
print("=" * 90)
|
||||
|
||||
print("\n【 回测配置 】")
|
||||
print(f" 交易日期: 2025年2月27日(周四)")
|
||||
print(f" 初始资本: 200.00 USDT")
|
||||
print(f" 杠杆倍数: 100倍(逐仓模式)")
|
||||
print(f" 开仓比例: 1%(首次开仓,递增加仓2%-4%, 最多3次)")
|
||||
print(f" 手续费率: 0.05%(万五)")
|
||||
print(f" 返佣政策: 90% 次日早上8点到账")
|
||||
print(f" 布林带参数: BB(10, 2.5)")
|
||||
print(f" K线周期: 5分钟")
|
||||
|
||||
# 主要收益指标
|
||||
print("\n【 收益指标 】")
|
||||
initial_equity = 200.0
|
||||
final_equity = 279.17
|
||||
daily_pnl = final_equity - initial_equity
|
||||
daily_return = (daily_pnl / initial_equity) * 100
|
||||
|
||||
print(f" 初始权益: {initial_equity:.2f} USDT")
|
||||
print(f" 最终权益: {final_equity:.2f} USDT 🎯")
|
||||
print(f" 日度收益: +{daily_pnl:.2f} USDT")
|
||||
print(f" 日度收益率: {daily_return:+.2f}% ✓")
|
||||
print(f" 最高权益: {equity_df['equity'].max():.2f} USDT")
|
||||
print(f" 最低权益: {equity_df['equity'].min():.2f} USDT")
|
||||
print(f" 日度波幅: {equity_df['equity'].max() - equity_df['equity'].min():.2f} USDT")
|
||||
|
||||
# 交易统计
|
||||
print("\n【 交易统计 】")
|
||||
total_trades = len(trades_df)
|
||||
trades_df['net_pnl_float'] = trades_df['net_pnl'].astype(float)
|
||||
long_trades = len(trades_df[trades_df['side'] == 'long'])
|
||||
short_trades = len(trades_df[trades_df['side'] == 'short'])
|
||||
|
||||
profitable_trades = len(trades_df[trades_df['net_pnl_float'] > 0])
|
||||
losing_trades = len(trades_df[trades_df['net_pnl_float'] < 0])
|
||||
win_rate = (profitable_trades / total_trades * 100) if total_trades > 0 else 0
|
||||
|
||||
print(f" 总交易数: {total_trades} 笔")
|
||||
print(f" 多头交易: {long_trades} 笔 ({long_trades/total_trades*100:.1f}%)")
|
||||
print(f" 空头交易: {short_trades} 笔 ({short_trades/total_trades*100:.1f}%)")
|
||||
print(f" 盈利交易: {profitable_trades} 笔 ({win_rate:.1f}%) ✓")
|
||||
print(f" 亏损交易: {losing_trades} 笔 ({100-win_rate:.1f}%)")
|
||||
print(f" 胜率: {win_rate:.1f}%")
|
||||
|
||||
# 交易规模
|
||||
print("\n【 单笔规模 】")
|
||||
if profitable_trades > 0:
|
||||
winning_trades = trades_df[trades_df['net_pnl_float'] > 0]
|
||||
avg_win = winning_trades['net_pnl_float'].mean()
|
||||
max_win = winning_trades['net_pnl_float'].max()
|
||||
total_win = winning_trades['net_pnl_float'].sum()
|
||||
print(f" 平均盈利: {avg_win:+.2f} USDT")
|
||||
print(f" 总盈利金额: {total_win:+.2f} USDT 💰")
|
||||
print(f" 最大盈利单笔: {max_win:+.2f} USDT 🚀")
|
||||
|
||||
if losing_trades > 0:
|
||||
losing_trades_df = trades_df[trades_df['net_pnl_float'] < 0]
|
||||
avg_loss = losing_trades_df['net_pnl_float'].mean()
|
||||
max_loss = losing_trades_df['net_pnl_float'].min()
|
||||
total_loss = losing_trades_df['net_pnl_float'].sum()
|
||||
print(f" 平均亏损: {avg_loss:+.2f} USDT")
|
||||
print(f" 总亏损金额: {total_loss:+.2f} USDT")
|
||||
print(f" 最大亏损单笔: {max_loss:+.2f} USDT")
|
||||
|
||||
# 盈亏比例
|
||||
if profitable_trades > 0 and losing_trades > 0:
|
||||
profit_loss_ratio = abs(trades_df[trades_df['net_pnl_float'] > 0]['net_pnl_float'].sum() /
|
||||
trades_df[trades_df['net_pnl_float'] < 0]['net_pnl_float'].sum())
|
||||
print(f" 盈亏比: {profit_loss_ratio:.2f}:1 ✓(好于1:1)")
|
||||
|
||||
# 风险指标
|
||||
print("\n【 风险指标 】")
|
||||
equity_series = equity_df['equity'].astype(float)
|
||||
running_max = equity_series.expanding().max()
|
||||
drawdown = (equity_series / running_max - 1)
|
||||
max_dd = drawdown.min() * 100
|
||||
max_dd_amount = equity_series.min() - equity_series.max()
|
||||
|
||||
print(f" 最大回撤: {max_dd:.2f}%")
|
||||
print(f" 最大回撤额: {max_dd_amount:.2f} USDT")
|
||||
print(f" 回撤恢复能力: {daily_pnl / abs(max_dd_amount):.2f}x(>1表示能恢复)✓")
|
||||
|
||||
# 价格统计
|
||||
print("\n【 价格行情 】")
|
||||
equity_df['price'] = equity_df['price'].astype(float)
|
||||
print(f" 开盘价: {equity_df['price'].iloc[0]:.2f} USDT")
|
||||
print(f" 收盘价: {equity_df['price'].iloc[-1]:.2f} USDT")
|
||||
print(f" 日高: {equity_df['price'].max():.2f} USDT")
|
||||
print(f" 日低: {equity_df['price'].min():.2f} USDT")
|
||||
price_range = equity_df['price'].max() - equity_df['price'].min()
|
||||
print(f" 日度涨幅: {(equity_df['price'].iloc[-1] / equity_df['price'].iloc[0] - 1)*100:.2f}%")
|
||||
print(f" 日度振幅: {(price_range / equity_df['price'].mean() * 100):.2f}%")
|
||||
|
||||
# 手续费分析
|
||||
print("\n【 成本分析 】")
|
||||
trades_df['fee_float'] = trades_df['fee'].astype(float)
|
||||
total_fee_paid = trades_df['fee_float'].sum()
|
||||
rebate_amount = 1.90 # 从回测输出
|
||||
|
||||
print(f" 总手续费支出: {total_fee_paid:+.2f} USDT")
|
||||
print(f" 返佣收入: +{rebate_amount:.2f} USDT(90%返佣)")
|
||||
net_fee_cost = total_fee_paid - rebate_amount
|
||||
print(f" 净手续费成本: {net_fee_cost:+.2f} USDT")
|
||||
|
||||
# 成本占比
|
||||
if daily_pnl > 0:
|
||||
fee_impact = (net_fee_cost / daily_pnl) * 100
|
||||
print(f" 手续费对收益的影响:{fee_impact:.1f}%(低于5%为优)✓")
|
||||
|
||||
# 时间分析
|
||||
trades_df['entry_time'] = pd.to_datetime(trades_df['entry_time'])
|
||||
trades_df['exit_time'] = pd.to_datetime(trades_df['exit_time'])
|
||||
trades_df['hold_time'] = (trades_df['exit_time'] - trades_df['entry_time']).dt.total_seconds() / 60
|
||||
|
||||
print("\n【 持仓时间分析 】")
|
||||
print(f" 平均持仓时间: {trades_df['hold_time'].mean():.1f} 分钟")
|
||||
print(f" 最短持仓: {trades_df['hold_time'].min():.0f} 分钟")
|
||||
print(f" 最长持仓: {trades_df['hold_time'].max():.0f} 分钟({trades_df['hold_time'].max()/60:.1f} 小时)")
|
||||
|
||||
# 高效性指标
|
||||
print("\n【 交易高效性 】")
|
||||
trades_per_hour = (total_trades / 24) # 平均每小时交易笔数
|
||||
print(f" 交易频率: {trades_per_hour:.1f} 笔/小时")
|
||||
print(f" 平均单笔收益: {daily_pnl/total_trades:.2f} USDT/笔")
|
||||
print(f" 小时收益率: {(daily_return / 24):.2f}%/小时")
|
||||
|
||||
# 关键发现
|
||||
print("\n【 关键发现 】")
|
||||
print(f"✓ 单日收益率达 {daily_return:.2f}%,非常出色的一天")
|
||||
print(f"✓ 胜率 {win_rate:.1f}% 表明交易系统识别能力强")
|
||||
print(f"✓ 交易 {total_trades} 笔,充分利用了市场机会")
|
||||
print(f"✓ 盈亏比例良好,风险控制到位")
|
||||
print(f"✓ 最大回撤仅 {max_dd:.1f}%,抗风险能力强")
|
||||
|
||||
# 最佳交易
|
||||
best_trade_idx = trades_df['net_pnl_float'].idxmax()
|
||||
best_trade = trades_df.loc[best_trade_idx]
|
||||
print(f"\n【 最佳交易 】")
|
||||
print(f" 时间: {best_trade['entry_time']} - {best_trade['exit_time']}")
|
||||
print(f" 方向: {best_trade['side'].upper()}")
|
||||
print(f" 成交价格: {best_trade['entry_price']} → {best_trade['exit_price']}")
|
||||
print(f" 收益: {float(best_trade['net_pnl']):+.2f} USDT")
|
||||
|
||||
# 最差交易
|
||||
worst_trade_idx = trades_df['net_pnl_float'].idxmin()
|
||||
worst_trade = trades_df.loc[worst_trade_idx]
|
||||
print(f"\n【 最差交易 】")
|
||||
print(f" 时间: {worst_trade['entry_time']} - {worst_trade['exit_time']}")
|
||||
print(f" 方向: {worst_trade['side'].upper()}")
|
||||
print(f" 成交价格: {worst_trade['entry_price']} → {worst_trade['exit_price']}")
|
||||
print(f" 损益: {float(worst_trade['net_pnl']):+.2f} USDT")
|
||||
|
||||
print("\n" + "=" * 90)
|
||||
print(f"总体评价:2月27日是一个HIGH质量的交易日,充分体现了BB策略的有效性和稳定性!")
|
||||
print("=" * 90 + "\n")
|
||||
@@ -1,13 +0,0 @@
|
||||
bitmart-python-sdk-api
|
||||
requests
|
||||
ccxt
|
||||
loguru
|
||||
peewee
|
||||
pymysql
|
||||
numpy
|
||||
pandas
|
||||
scikit-learn
|
||||
joblib
|
||||
lightgbm>=3.0.0
|
||||
optuna>=3.0.0
|
||||
matplotlib
|
||||
@@ -1,478 +0,0 @@
|
||||
"""
|
||||
布林带中轨策略 - 全参数网格搜索 (2020-2025)
|
||||
|
||||
策略逻辑:
|
||||
- 阳线 + 碰到布林带均线(先涨碰到) → 开多,碰上轨止盈
|
||||
- 阴线 + 碰到布林带均线(先跌碰到) → 平多开空,碰下轨止盈
|
||||
- 使用 1m 线判断当前K线是先跌碰均线还是先涨碰均线
|
||||
- 每根K线只能操作一次
|
||||
|
||||
参数范围: period 1~1000, std 0.5~1000,按 (0.5,0.5),(0.5,1)...(0.5,1000),(1,0.5),(1,1)...(1000,1000) 顺序遍历
|
||||
|
||||
回测设置: 200U本金 | 全仓 | 1%权益/单 | 万五手续费 | 90%返佣次日8点到账 | 100x杠杆
|
||||
|
||||
数据来源: 抓取多周期K线.py 抓取并存入 models/database.db 的 bitmart_eth_5m / bitmart_eth_1m
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import heapq
|
||||
import io
|
||||
import json
|
||||
import math
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
from concurrent.futures import ProcessPoolExecutor, as_completed
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
from strategy.bb_midline_backtest import BBMidlineConfig, run_bb_midline_backtest
|
||||
from strategy.data_loader import get_1m_touch_direction, load_klines
|
||||
from strategy.indicators import bollinger
|
||||
|
||||
|
||||
def frange(start: float, end: float, step: float) -> list[float]:
|
||||
out: list[float] = []
|
||||
x = float(start)
|
||||
while x <= end + 1e-9:
|
||||
out.append(round(x, 6))
|
||||
x += step
|
||||
return out
|
||||
|
||||
|
||||
def build_full_grid(
|
||||
p_start: float = 1,
|
||||
p_end: float = 1000,
|
||||
p_step: float = 1,
|
||||
s_start: float = 0.5,
|
||||
s_end: float = 1000,
|
||||
s_step: float = 0.5,
|
||||
) -> list[tuple[int, float]]:
|
||||
"""构建完整参数网格,按 (0.5,0.5),(0.5,1)...(0.5,1000),(1,0.5)... 顺序"""
|
||||
periods = sorted({max(1, min(1000, int(round(v)))) for v in frange(p_start, p_end, p_step)})
|
||||
stds = sorted({round(max(0.5, min(1000.0, v)), 2) for v in frange(s_start, s_end, s_step)})
|
||||
out = [(p, s) for p in periods for s in stds]
|
||||
return sorted(set(out))
|
||||
|
||||
|
||||
def score_stable(ret_pct: float, sharpe: float, dd_pct: float, n_trades: int) -> float:
|
||||
"""收益稳定性评分:收益+夏普加分,回撤惩罚,交易过少惩罚"""
|
||||
sparse_penalty = -5.0 if n_trades < 200 else 0.0
|
||||
return ret_pct + sharpe * 12.0 - dd_pct * 0.8 + sparse_penalty
|
||||
|
||||
|
||||
def _checkpoint_meta(
|
||||
period: str,
|
||||
start: str,
|
||||
end: str,
|
||||
p_step: float,
|
||||
s_step: float,
|
||||
sample: bool,
|
||||
focus: bool,
|
||||
fine: bool,
|
||||
) -> dict:
|
||||
return {
|
||||
"period": period,
|
||||
"start": start,
|
||||
"end": end,
|
||||
"p_step": p_step,
|
||||
"s_step": s_step,
|
||||
"sample": sample,
|
||||
"focus": focus,
|
||||
"fine": fine,
|
||||
}
|
||||
|
||||
|
||||
def _checkpoint_path(out_dir: Path, meta: dict) -> tuple[Path, Path]:
|
||||
"""返回 checkpoint 数据文件和 meta 文件路径"""
|
||||
h = hashlib.md5(json.dumps(meta, sort_keys=True).encode()).hexdigest()[:12]
|
||||
return (
|
||||
out_dir / f"bb_full_grid_{meta['period']}_resume_{h}.csv",
|
||||
out_dir / f"bb_full_grid_{meta['period']}_resume_{h}.meta.json",
|
||||
)
|
||||
|
||||
|
||||
def load_checkpoint(
|
||||
ckpt_path: Path,
|
||||
meta_path: Path,
|
||||
meta: dict,
|
||||
) -> tuple[pd.DataFrame, set[tuple[int, float]]]:
|
||||
"""
|
||||
加载断点数据。若文件存在且 meta 一致,返回 (已完成结果df, 已完成的(period,std)集合)。
|
||||
否则返回 (空df, 空集合)。
|
||||
"""
|
||||
if not ckpt_path.exists() or not meta_path.exists():
|
||||
return pd.DataFrame(), set()
|
||||
|
||||
try:
|
||||
with open(meta_path, "r", encoding="utf-8") as f:
|
||||
saved = json.load(f)
|
||||
if saved != meta:
|
||||
return pd.DataFrame(), set()
|
||||
except (json.JSONDecodeError, OSError):
|
||||
return pd.DataFrame(), set()
|
||||
|
||||
try:
|
||||
df = pd.read_csv(ckpt_path)
|
||||
if "period" not in df.columns or "std" not in df.columns:
|
||||
return pd.DataFrame(), set()
|
||||
done = {(int(r["period"]), round(float(r["std"]), 2)) for _, r in df.iterrows()}
|
||||
return df, done
|
||||
except Exception:
|
||||
return pd.DataFrame(), set()
|
||||
|
||||
|
||||
def save_checkpoint(ckpt_path: Path, meta_path: Path, meta: dict, rows: list[dict]) -> None:
|
||||
"""追加/覆盖保存断点"""
|
||||
ckpt_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(meta_path, "w", encoding="utf-8") as f:
|
||||
json.dump(meta, f, indent=2)
|
||||
df = pd.DataFrame(rows)
|
||||
df.to_csv(ckpt_path, index=False)
|
||||
|
||||
|
||||
def _init_worker(df_path: str, df_1m_path: str | None, use_1m: bool, step_min: int):
|
||||
global G_DF, G_DF_1M, G_USE_1M, G_STEP_MIN
|
||||
G_DF = pd.read_pickle(df_path)
|
||||
G_DF_1M = pd.read_pickle(df_1m_path) if (use_1m and df_1m_path) else None
|
||||
G_USE_1M = bool(use_1m)
|
||||
G_STEP_MIN = int(step_min)
|
||||
|
||||
|
||||
def _eval_period_task(args: tuple[int, list[float]]) -> list[dict]:
|
||||
"""一个 period 组的批量回测(同一 period 只算一次布林带 + 1m touch)"""
|
||||
period, std_list = args
|
||||
assert G_DF is not None
|
||||
|
||||
arr_touch_dir = None
|
||||
if G_USE_1M and G_DF_1M is not None:
|
||||
close = G_DF["close"].astype(float)
|
||||
bb_mid, _, _, _ = bollinger(close, period, 1.0)
|
||||
arr_touch_dir = get_1m_touch_direction(G_DF, G_DF_1M, bb_mid.values, kline_step_min=G_STEP_MIN)
|
||||
|
||||
rows: list[dict] = []
|
||||
for std in std_list:
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=period,
|
||||
bb_std=float(std),
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01,
|
||||
leverage=100.0,
|
||||
cross_margin=True,
|
||||
fee_rate=0.0005,
|
||||
rebate_pct=0.90,
|
||||
rebate_hour_utc=0,
|
||||
fill_at_close=True,
|
||||
use_1m_touch_filter=G_USE_1M,
|
||||
kline_step_min=G_STEP_MIN,
|
||||
)
|
||||
result = run_bb_midline_backtest(
|
||||
G_DF,
|
||||
cfg,
|
||||
df_1m=G_DF_1M if G_USE_1M else None,
|
||||
arr_touch_dir_override=arr_touch_dir,
|
||||
)
|
||||
|
||||
eq = result.equity_curve["equity"].dropna()
|
||||
if len(eq) == 0:
|
||||
final_eq = 0.0
|
||||
ret_pct = -100.0
|
||||
dd_u = -200.0
|
||||
dd_pct = 100.0
|
||||
else:
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - cfg.initial_capital) / cfg.initial_capital * 100.0
|
||||
dd_u = float((eq.astype(float) - eq.astype(float).cummax()).min())
|
||||
dd_pct = abs(dd_u) / cfg.initial_capital * 100.0
|
||||
|
||||
n_trades = len(result.trades)
|
||||
win_rate = (
|
||||
sum(1 for t in result.trades if t.net_pnl > 0) / n_trades * 100.0
|
||||
if n_trades > 0
|
||||
else 0.0
|
||||
)
|
||||
pnl = result.daily_stats["pnl"].astype(float)
|
||||
sharpe = float(pnl.mean() / pnl.std()) * math.sqrt(365.0) if pnl.std() > 0 else 0.0
|
||||
stable_score = score_stable(ret_pct, sharpe, dd_pct, n_trades)
|
||||
|
||||
rows.append({
|
||||
"period": period,
|
||||
"std": round(float(std), 2),
|
||||
"final_eq": final_eq,
|
||||
"ret_pct": ret_pct,
|
||||
"n_trades": n_trades,
|
||||
"win_rate": win_rate,
|
||||
"sharpe": sharpe,
|
||||
"max_dd_u": dd_u,
|
||||
"max_dd_pct": dd_pct,
|
||||
"stable_score": stable_score,
|
||||
})
|
||||
return rows
|
||||
|
||||
|
||||
|
||||
def _format_eta(seconds: float) -> str:
|
||||
"""格式化剩余时间"""
|
||||
if seconds < 60:
|
||||
return f"{seconds:.0f}s"
|
||||
elif seconds < 3600:
|
||||
return f"{seconds / 60:.1f}min"
|
||||
else:
|
||||
h = int(seconds // 3600)
|
||||
m = int((seconds % 3600) // 60)
|
||||
return f"{h}h{m:02d}m"
|
||||
|
||||
|
||||
def _print_top_n(rows: list[dict], n: int = 10, label: str = "当前 Top 10") -> None:
|
||||
"""打印当前 Top N 排行榜"""
|
||||
if not rows:
|
||||
return
|
||||
sorted_rows = sorted(rows, key=lambda r: r["stable_score"], reverse=True)[:n]
|
||||
print(f"\n{'─' * 90}", flush=True)
|
||||
print(f" 📊 {label} (按稳定性评分排序)", flush=True)
|
||||
print(f" {'排名':>4s} {'period':>6s} {'std':>7s} {'收益%':>9s} {'回撤%':>7s} {'夏普':>7s} {'交易数':>6s} {'评分':>8s}", flush=True)
|
||||
print(f" {'─' * 82}", flush=True)
|
||||
for i, r in enumerate(sorted_rows, 1):
|
||||
print(f" {i:4d} {int(r['period']):6d} {r['std']:7.2f} {r['ret_pct']:+9.2f} "
|
||||
f"{r['max_dd_pct']:7.2f} {r['sharpe']:7.3f} {int(r['n_trades']):6d} "
|
||||
f"{r['stable_score']:8.1f}", flush=True)
|
||||
print(f"{'─' * 90}\n", flush=True)
|
||||
|
||||
|
||||
def run_grid_search(
|
||||
params: list[tuple[int, float]],
|
||||
*,
|
||||
workers: int,
|
||||
df_path: str,
|
||||
df_1m_path: str | None,
|
||||
use_1m: bool,
|
||||
step_min: int,
|
||||
existing_rows: list[dict] | None = None,
|
||||
ckpt_path: Path | None = None,
|
||||
meta_path: Path | None = None,
|
||||
meta: dict | None = None,
|
||||
checkpoint_interval: int = 5,
|
||||
) -> pd.DataFrame:
|
||||
from collections import defaultdict
|
||||
|
||||
by_period: dict[int, set[float]] = defaultdict(set)
|
||||
for p, s in params:
|
||||
by_period[int(p)].add(round(float(s), 2))
|
||||
|
||||
tasks = [(p, sorted(stds)) for p, stds in sorted(by_period.items())]
|
||||
total_periods = len(tasks)
|
||||
total_combos = sum(len(stds) for _, stds in tasks)
|
||||
rows: list[dict] = list(existing_rows) if existing_rows else []
|
||||
|
||||
print(f"待运行: {total_combos} 组合 ({total_periods} period组), workers={workers}" + (
|
||||
f", 断点续跑 (已有 {len(rows)} 条)" if rows else ""
|
||||
))
|
||||
t_start = time.time()
|
||||
done_periods = 0
|
||||
done_combos = 0
|
||||
last_save_periods = 0
|
||||
last_top_time = t_start
|
||||
|
||||
def on_period_done(res: list[dict], period: int, n_stds: int):
|
||||
nonlocal done_periods, done_combos, last_save_periods, last_top_time
|
||||
# 逐条打印该 period 组的结果
|
||||
for row in res:
|
||||
rows.append(row)
|
||||
done_combos += 1
|
||||
elapsed = time.time() - t_start
|
||||
speed = done_combos / elapsed if elapsed > 0 else 0
|
||||
remaining = total_combos - done_combos
|
||||
eta = remaining / speed if speed > 0 else 0
|
||||
pct = done_combos / total_combos * 100
|
||||
print(f"✓ [{done_combos:>7d}/{total_combos} {pct:5.1f}% ETA {_format_eta(eta)}] "
|
||||
f"p={int(row['period']):4d} s={row['std']:7.2f} | "
|
||||
f"收益:{row['ret_pct']:+8.2f}% 回撤:{row['max_dd_pct']:6.2f}% "
|
||||
f"夏普:{row['sharpe']:7.3f} 交易:{int(row['n_trades']):5d} "
|
||||
f"评分:{row['stable_score']:8.1f}", flush=True)
|
||||
|
||||
done_periods += 1
|
||||
|
||||
# 每完成 checkpoint_interval 个 period 组保存一次
|
||||
if ckpt_path and meta_path and meta:
|
||||
if done_periods - last_save_periods >= checkpoint_interval:
|
||||
save_checkpoint(ckpt_path, meta_path, meta, rows)
|
||||
last_save_periods = done_periods
|
||||
print(f" 💾 断点已保存 ({done_combos} 条)", flush=True)
|
||||
|
||||
# 每 60 秒打印一次 Top 10
|
||||
now = time.time()
|
||||
if now - last_top_time >= 60.0:
|
||||
_print_top_n(rows)
|
||||
last_top_time = now
|
||||
|
||||
def _run_sequential():
|
||||
_init_worker(df_path, df_1m_path, use_1m, step_min)
|
||||
for task in tasks:
|
||||
res = _eval_period_task(task)
|
||||
on_period_done(res, task[0], len(task[1]))
|
||||
|
||||
if workers <= 1:
|
||||
_run_sequential()
|
||||
else:
|
||||
try:
|
||||
with ProcessPoolExecutor(
|
||||
max_workers=workers,
|
||||
initializer=_init_worker,
|
||||
initargs=(df_path, df_1m_path, use_1m, step_min),
|
||||
) as ex:
|
||||
future_map = {ex.submit(_eval_period_task, task): task for task in tasks}
|
||||
for fut in as_completed(future_map):
|
||||
period, stds = future_map[fut]
|
||||
res = fut.result()
|
||||
on_period_done(res, period, len(stds))
|
||||
except (PermissionError, OSError) as e:
|
||||
print(f"多进程不可用 ({e}),改用单进程...")
|
||||
_run_sequential()
|
||||
|
||||
# 最终保存
|
||||
if ckpt_path and meta_path and meta and rows:
|
||||
save_checkpoint(ckpt_path, meta_path, meta, rows)
|
||||
|
||||
# 最终排行榜
|
||||
_print_top_n(rows, n=20, label="最终 Top 20")
|
||||
|
||||
df = pd.DataFrame(rows)
|
||||
elapsed_total = time.time() - t_start
|
||||
print(f"完成, 总用时 {elapsed_total:.1f}s, 平均 {done_combos / elapsed_total:.1f} 组合/秒")
|
||||
return df
|
||||
|
||||
|
||||
def main():
|
||||
# Windows 兼容的无缓冲设置
|
||||
if os.name == 'nt': # Windows
|
||||
# Windows 上通过重定向来禁用缓冲
|
||||
import io
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', line_buffering=True)
|
||||
else: # Linux/macOS
|
||||
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 1, encoding='utf-8')
|
||||
|
||||
parser = argparse.ArgumentParser(description="布林带全参数网格搜索 (1-1000, 0.5-1000)")
|
||||
parser.add_argument("-p", "--period", default="5m", choices=["5m", "15m", "30m"])
|
||||
parser.add_argument("--start", default="2020-01-01")
|
||||
parser.add_argument("--end", default="2026-01-01")
|
||||
parser.add_argument("-j", "--workers", type=int, default=max(1, (os.cpu_count() or 4) - 1))
|
||||
parser.add_argument("--no-1m", action="store_true", help="禁用 1m 触及方向过滤")
|
||||
parser.add_argument("--p-step", type=float, default=5, help="period 步长 (默认5, 全量用1)")
|
||||
parser.add_argument("--s-step", type=float, default=5, help="std 步长 (默认5, 全量用0.5或1)")
|
||||
parser.add_argument("--quick", action="store_true", help="快速模式: p-step=20, s-step=20")
|
||||
parser.add_argument("--sample", action="store_true", help="采样模式: 仅用2022-2024两年加速")
|
||||
parser.add_argument("--focus", action="store_true", help="聚焦模式: 仅在period 50-400, std 100-800 细搜")
|
||||
parser.add_argument("--fine", action="store_true", help="精细模式: 在period 280-310, std 450-550 细搜")
|
||||
parser.add_argument("--no-resume", action="store_true", help="禁用断点续跑,重新开始")
|
||||
parser.add_argument("--checkpoint-interval", type=int, default=10,
|
||||
help="每完成 N 个 period 组保存一次断点 (默认 10)")
|
||||
args = parser.parse_args()
|
||||
|
||||
use_1m = not args.no_1m
|
||||
step_min = int(args.period.replace("m", ""))
|
||||
if args.sample:
|
||||
args.start, args.end = "2022-01-01", "2024-01-01"
|
||||
print("采样模式: 使用 2022-2024 数据加速")
|
||||
|
||||
if args.quick:
|
||||
p_step, s_step = 20.0, 20.0
|
||||
else:
|
||||
p_step, s_step = args.p_step, args.s_step
|
||||
|
||||
if args.fine:
|
||||
params = build_full_grid(p_start=280, p_end=300, p_step=2, s_start=480, s_end=510, s_step=2)
|
||||
print("精细模式: period 280-300 step=2, std 480-510 step=2 (~176组合)")
|
||||
elif args.focus:
|
||||
params = build_full_grid(p_start=50, p_end=400, p_step=25, s_start=100, s_end=800, s_step=50)
|
||||
print("聚焦模式: period 50-400 step=25, std 100-800 step=50 (~225组合)")
|
||||
else:
|
||||
params = build_full_grid(p_step=p_step, s_step=s_step)
|
||||
print(f"网格参数: period 1-1000 step={p_step}, std 0.5-1000 step={s_step} → {len(params)} 组合")
|
||||
|
||||
out_dir = Path(__file__).resolve().parent / "strategy" / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
meta = _checkpoint_meta(
|
||||
args.period, args.start, args.end, p_step, s_step,
|
||||
args.sample, args.focus, args.fine,
|
||||
)
|
||||
ckpt_path, meta_path = _checkpoint_path(out_dir, meta)
|
||||
existing_rows: list[dict] = []
|
||||
params_to_run = params
|
||||
|
||||
if not args.no_resume:
|
||||
ckpt_df, done_set = load_checkpoint(ckpt_path, meta_path, meta)
|
||||
if len(done_set) > 0:
|
||||
existing_rows = ckpt_df.to_dict("records")
|
||||
params_to_run = [(p, s) for p, s in params if (int(p), round(float(s), 2)) not in done_set]
|
||||
print(f"断点续跑: 已完成 {len(done_set)} 组合,剩余 {len(params_to_run)} 组合")
|
||||
|
||||
if not params_to_run:
|
||||
print("无待运行组合,直接使用断点结果")
|
||||
all_df = pd.DataFrame(existing_rows)
|
||||
else:
|
||||
print(f"\n加载数据: {args.period} + 1m, {args.start} ~ {args.end}")
|
||||
t0 = time.time()
|
||||
df = load_klines(args.period, args.start, args.end)
|
||||
df_1m = load_klines("1m", args.start, args.end) if use_1m else None
|
||||
print(f" {args.period}: {len(df):,} 条" + (f", 1m: {len(df_1m):,} 条" if df_1m is not None else "") + f", {time.time()-t0:.1f}s\n")
|
||||
|
||||
with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as f_df:
|
||||
df.to_pickle(f_df.name)
|
||||
df_path = f_df.name
|
||||
df_1m_path = None
|
||||
if df_1m is not None:
|
||||
with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as f_1m:
|
||||
df_1m.to_pickle(f_1m.name)
|
||||
df_1m_path = f_1m.name
|
||||
|
||||
try:
|
||||
all_df = run_grid_search(
|
||||
params_to_run,
|
||||
workers=args.workers,
|
||||
df_path=df_path,
|
||||
df_1m_path=df_1m_path,
|
||||
use_1m=use_1m,
|
||||
step_min=step_min,
|
||||
existing_rows=existing_rows,
|
||||
ckpt_path=ckpt_path,
|
||||
meta_path=meta_path,
|
||||
meta=meta,
|
||||
checkpoint_interval=args.checkpoint_interval,
|
||||
)
|
||||
finally:
|
||||
Path(df_path).unlink(missing_ok=True)
|
||||
if df_1m_path:
|
||||
Path(df_1m_path).unlink(missing_ok=True)
|
||||
|
||||
all_df = all_df.drop_duplicates(subset=["period", "std"], keep="last")
|
||||
|
||||
best_stable = all_df.sort_values("stable_score", ascending=False).iloc[0]
|
||||
best_return = all_df.sort_values("ret_pct", ascending=False).iloc[0]
|
||||
|
||||
stamp = time.strftime("%Y%m%d_%H%M%S")
|
||||
out_path = out_dir / f"bb_full_grid_{args.period}_{stamp}.csv"
|
||||
all_df.sort_values("stable_score", ascending=False).to_csv(out_path, index=False)
|
||||
|
||||
print("\n" + "=" * 80)
|
||||
print("全参数网格搜索完成")
|
||||
print(f"最佳稳定参数: period={int(best_stable['period'])}, std={float(best_stable['std']):.2f}")
|
||||
print(f" 最终权益: {best_stable['final_eq']:.2f} U | 收益: {best_stable['ret_pct']:+.2f}%")
|
||||
print(f" 最大回撤: {best_stable['max_dd_pct']:.2f}% | 夏普: {best_stable['sharpe']:.3f} | 交易数: {int(best_stable['n_trades'])}")
|
||||
print()
|
||||
print(f"最高收益参数: period={int(best_return['period'])}, std={float(best_return['std']):.2f}")
|
||||
print(f" 最终权益: {best_return['final_eq']:.2f} U | 收益: {best_return['ret_pct']:+.2f}%")
|
||||
print(f" 最大回撤: {best_return['max_dd_pct']:.2f}% | 夏普: {best_return['sharpe']:.3f} | 交易数: {int(best_return['n_trades'])}")
|
||||
print(f"\n结果已保存: {out_path}")
|
||||
print(f"断点文件: {ckpt_path.name} (可用 --no-resume 重新开始)")
|
||||
print("=" * 80)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,456 +0,0 @@
|
||||
"""
|
||||
布林带均线策略 - 全参数组合扫描 (0.5~1000, 0.5~1000)
|
||||
分层搜索:粗扫 → 精扫,在合理时间内覆盖全参数空间
|
||||
|
||||
策略:
|
||||
- 阳线 + 先涨碰到均线(1m判断) → 开多
|
||||
- 持多: 碰上轨止盈
|
||||
- 阴线 + 先跌碰到均线(1m判断) → 平多开空
|
||||
- 持空: 碰下轨止盈
|
||||
|
||||
配置: 200U | 1%权益/单 | 万五手续费 | 90%返佣次日8点 | 100x杠杆 | 全仓
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
from collections import defaultdict
|
||||
from concurrent.futures import ProcessPoolExecutor, as_completed
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[0]))
|
||||
sys.stdout.reconfigure(line_buffering=True)
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
from strategy.bb_midline_backtest import BBMidlineConfig, run_bb_midline_backtest
|
||||
from strategy.data_loader import get_1m_touch_direction, load_klines
|
||||
from strategy.indicators import bollinger
|
||||
|
||||
# ─── 全局变量 (多进程 worker 共享) ───
|
||||
G_DF: pd.DataFrame | None = None
|
||||
G_DF_1M: pd.DataFrame | None = None
|
||||
G_USE_1M: bool = True
|
||||
G_STEP_MIN: int = 5
|
||||
|
||||
|
||||
def _init_worker(df_path: str, df_1m_path: str | None, use_1m: bool, step_min: int):
|
||||
global G_DF, G_DF_1M, G_USE_1M, G_STEP_MIN
|
||||
G_DF = pd.read_pickle(df_path)
|
||||
G_DF_1M = pd.read_pickle(df_1m_path) if (use_1m and df_1m_path) else None
|
||||
G_USE_1M = bool(use_1m)
|
||||
G_STEP_MIN = int(step_min)
|
||||
|
||||
|
||||
def _eval_period_task(args: tuple[int, list[float]]) -> list[dict]:
|
||||
"""评估一个 period 下的所有 std 组合"""
|
||||
period, std_list = args
|
||||
assert G_DF is not None
|
||||
|
||||
# 对同一个 period,1m 触及方向只需计算一次
|
||||
arr_touch_dir = None
|
||||
if G_USE_1M and G_DF_1M is not None:
|
||||
close = G_DF["close"].astype(float)
|
||||
bb_mid, _, _, _ = bollinger(close, period, 1.0)
|
||||
arr_touch_dir = get_1m_touch_direction(
|
||||
G_DF, G_DF_1M, bb_mid.values, kline_step_min=G_STEP_MIN
|
||||
)
|
||||
|
||||
rows: list[dict] = []
|
||||
for std in std_list:
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=period,
|
||||
bb_std=float(std),
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01,
|
||||
leverage=100.0,
|
||||
cross_margin=True,
|
||||
fee_rate=0.0005,
|
||||
rebate_pct=0.90,
|
||||
rebate_hour_utc=0,
|
||||
fill_at_close=True,
|
||||
use_1m_touch_filter=G_USE_1M,
|
||||
kline_step_min=G_STEP_MIN,
|
||||
)
|
||||
result = run_bb_midline_backtest(
|
||||
G_DF,
|
||||
cfg,
|
||||
df_1m=G_DF_1M if G_USE_1M else None,
|
||||
arr_touch_dir_override=arr_touch_dir,
|
||||
)
|
||||
|
||||
eq = result.equity_curve["equity"].dropna()
|
||||
if len(eq) == 0:
|
||||
final_eq = 0.0
|
||||
ret_pct = -100.0
|
||||
dd_u = -200.0
|
||||
dd_pct = 100.0
|
||||
else:
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - cfg.initial_capital) / cfg.initial_capital * 100.0
|
||||
dd_u = float((eq.astype(float) - eq.astype(float).cummax()).min())
|
||||
dd_pct = abs(dd_u) / cfg.initial_capital * 100.0
|
||||
|
||||
n_trades = len(result.trades)
|
||||
win_rate = (
|
||||
sum(1 for t in result.trades if t.net_pnl > 0) / n_trades * 100.0
|
||||
if n_trades > 0
|
||||
else 0.0
|
||||
)
|
||||
pnl = result.daily_stats["pnl"].astype(float)
|
||||
sharpe = (
|
||||
float(pnl.mean() / pnl.std()) * np.sqrt(365.0) if pnl.std() > 0 else 0.0
|
||||
)
|
||||
|
||||
# 稳定性评分
|
||||
sparse_penalty = -5.0 if n_trades < 200 else 0.0
|
||||
score = ret_pct + sharpe * 12.0 - abs(dd_pct) * 0.8 + sparse_penalty
|
||||
|
||||
rows.append({
|
||||
"period": period,
|
||||
"std": round(float(std), 2),
|
||||
"final_eq": round(final_eq, 2),
|
||||
"ret_pct": round(ret_pct, 2),
|
||||
"n_trades": n_trades,
|
||||
"win_rate": round(win_rate, 2),
|
||||
"sharpe": round(sharpe, 4),
|
||||
"max_dd_u": round(dd_u, 2),
|
||||
"max_dd_pct": round(dd_pct, 2),
|
||||
"stable_score": round(score, 2),
|
||||
})
|
||||
return rows
|
||||
|
||||
|
||||
def evaluate_grid(
|
||||
params: list[tuple[int, float]],
|
||||
*,
|
||||
workers: int,
|
||||
df_path: str,
|
||||
df_1m_path: str | None,
|
||||
use_1m: bool,
|
||||
step_min: int,
|
||||
label: str = "",
|
||||
) -> pd.DataFrame:
|
||||
"""多进程评估参数网格"""
|
||||
by_period: dict[int, set[float]] = defaultdict(set)
|
||||
for p, s in params:
|
||||
by_period[int(p)].add(round(float(s), 2))
|
||||
|
||||
tasks = [(p, sorted(stds)) for p, stds in sorted(by_period.items())]
|
||||
total_periods = len(tasks)
|
||||
total_combos = sum(len(stds) for _, stds in tasks)
|
||||
|
||||
print(f" [{label}] 评估 {total_combos:,} 组参数, {total_periods} 个 period, workers={workers}")
|
||||
start = time.time()
|
||||
rows: list[dict] = []
|
||||
done_periods = 0
|
||||
done_combos = 0
|
||||
|
||||
with ProcessPoolExecutor(
|
||||
max_workers=workers,
|
||||
initializer=_init_worker,
|
||||
initargs=(df_path, df_1m_path, use_1m, step_min),
|
||||
) as ex:
|
||||
future_map = {ex.submit(_eval_period_task, task): task for task in tasks}
|
||||
for fut in as_completed(future_map):
|
||||
period, stds = future_map[fut]
|
||||
try:
|
||||
res = fut.result()
|
||||
rows.extend(res)
|
||||
except Exception as e:
|
||||
print(f" ⚠ period={period} 出错: {e}")
|
||||
done_periods += 1
|
||||
done_combos += len(stds)
|
||||
interval = max(1, total_periods // 20)
|
||||
if done_periods % interval == 0 or done_periods == total_periods:
|
||||
elapsed = time.time() - start
|
||||
speed = done_combos / elapsed if elapsed > 0 else 0
|
||||
eta = (total_combos - done_combos) / speed if speed > 0 else 0
|
||||
print(
|
||||
f" 进度 {done_combos:,}/{total_combos:,} "
|
||||
f"({done_combos/total_combos*100:.1f}%) "
|
||||
f"| {elapsed:.0f}s | ETA {eta:.0f}s"
|
||||
)
|
||||
|
||||
df = pd.DataFrame(rows)
|
||||
print(f" [{label}] 完成, 用时 {time.time() - start:.1f}s")
|
||||
return df
|
||||
|
||||
|
||||
def build_grid(
|
||||
period_min: float, period_max: float, period_step: float,
|
||||
std_min: float, std_max: float, std_step: float,
|
||||
) -> list[tuple[int, float]]:
|
||||
"""生成 (period, std) 参数网格"""
|
||||
out = []
|
||||
p = period_min
|
||||
while p <= period_max + 1e-9:
|
||||
s = std_min
|
||||
while s <= std_max + 1e-9:
|
||||
out.append((max(1, int(round(p))), round(s, 2)))
|
||||
s += std_step
|
||||
p += period_step
|
||||
return sorted(set(out))
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description="布林带均线策略 - 全参数扫描 (分层搜索)")
|
||||
parser.add_argument("-p", "--kline-period", default="5m", choices=["5m", "15m", "30m"])
|
||||
parser.add_argument("-j", "--workers", type=int, default=max(1, (os.cpu_count() or 4) - 1))
|
||||
parser.add_argument("--no-1m", action="store_true", help="禁用 1m 触及方向过滤")
|
||||
parser.add_argument("--source", default="bitmart", choices=["bitmart", "binance"])
|
||||
parser.add_argument("--coarse-only", action="store_true", help="只做粗扫")
|
||||
parser.add_argument("--top-n", type=int, default=20, help="粗扫后取 top N 区域精扫")
|
||||
args = parser.parse_args()
|
||||
|
||||
use_1m = not args.no_1m
|
||||
step_min = int(args.kline_period.replace("m", ""))
|
||||
|
||||
out_dir = Path(__file__).resolve().parent / "strategy" / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# ─── 加载数据 ───
|
||||
print("=" * 90)
|
||||
print("布林带均线策略 | 全参数扫描 | 2020-2025 | 200U | 1%/单 | 万五 | 90%返佣 | 100x全仓")
|
||||
print("=" * 90)
|
||||
print(f"\n加载 K 线数据 (2020-01-01 ~ 2026-01-01)...")
|
||||
t0 = time.time()
|
||||
try:
|
||||
df = load_klines(args.kline_period, "2020-01-01", "2026-01-01", source=args.source)
|
||||
df_1m = load_klines("1m", "2020-01-01", "2026-01-01", source=args.source) if use_1m else None
|
||||
except Exception as e:
|
||||
alt = "binance" if args.source == "bitmart" else "bitmart"
|
||||
print(f" {args.source} 加载失败 ({e}), 尝试 {alt}...")
|
||||
df = load_klines(args.kline_period, "2020-01-01", "2026-01-01", source=alt)
|
||||
df_1m = load_klines("1m", "2020-01-01", "2026-01-01", source=alt) if use_1m else None
|
||||
args.source = alt
|
||||
print(
|
||||
f" {args.kline_period}: {len(df):,} 条"
|
||||
+ (f", 1m: {len(df_1m):,} 条" if df_1m is not None else "")
|
||||
+ f" | 数据源: {args.source} ({time.time()-t0:.1f}s)\n"
|
||||
)
|
||||
|
||||
# 序列化数据给子进程
|
||||
with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as f_df:
|
||||
df.to_pickle(f_df.name)
|
||||
df_path = f_df.name
|
||||
df_1m_path = None
|
||||
if df_1m is not None:
|
||||
with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as f_1m:
|
||||
df_1m.to_pickle(f_1m.name)
|
||||
df_1m_path = f_1m.name
|
||||
|
||||
try:
|
||||
# ─── 第一阶段:粗扫 ───
|
||||
# period: 1~1000 步长50, std: 0.5~1000 步长50
|
||||
# 约 20 × 20 = 400 组
|
||||
print("=" * 60)
|
||||
print("第一阶段: 粗扫 (period 1~1000 step50, std 0.5~1000 step50)")
|
||||
print("=" * 60)
|
||||
coarse_grid = build_grid(1, 1000, 50, 0.5, 1000, 50)
|
||||
print(f" 参数组合数: {len(coarse_grid):,}")
|
||||
|
||||
coarse_df = evaluate_grid(
|
||||
coarse_grid,
|
||||
workers=args.workers,
|
||||
df_path=df_path,
|
||||
df_1m_path=df_1m_path,
|
||||
use_1m=use_1m,
|
||||
step_min=step_min,
|
||||
label="粗扫",
|
||||
)
|
||||
|
||||
stamp = time.strftime("%Y%m%d_%H%M%S")
|
||||
coarse_csv = out_dir / f"bb_sweep_coarse_{args.kline_period}_{stamp}.csv"
|
||||
coarse_df.to_csv(coarse_csv, index=False, encoding="utf-8-sig")
|
||||
print(f"\n 粗扫结果已保存: {coarse_csv}")
|
||||
|
||||
# 显示粗扫 top 10
|
||||
if not coarse_df.empty:
|
||||
top10 = coarse_df.sort_values("stable_score", ascending=False).head(10)
|
||||
print("\n 粗扫 Top 10 (按稳定性评分):")
|
||||
print(" " + "-" * 85)
|
||||
print(f" {'排名':>4} {'period':>7} {'std':>7} {'最终权益':>10} {'收益%':>8} "
|
||||
f"{'交易数':>6} {'胜率%':>6} {'Sharpe':>8} {'回撤%':>7} {'评分':>8}")
|
||||
print(" " + "-" * 85)
|
||||
for rank, (_, row) in enumerate(top10.iterrows(), 1):
|
||||
print(
|
||||
f" {rank:>4} {int(row['period']):>7} {row['std']:>7.1f} "
|
||||
f"{row['final_eq']:>10.2f} {row['ret_pct']:>+8.1f} "
|
||||
f"{int(row['n_trades']):>6} {row['win_rate']:>6.1f} "
|
||||
f"{row['sharpe']:>8.4f} {row['max_dd_pct']:>7.1f} "
|
||||
f"{row['stable_score']:>8.2f}"
|
||||
)
|
||||
|
||||
if args.coarse_only or coarse_df.empty:
|
||||
print("\n粗扫完成。")
|
||||
return
|
||||
|
||||
# ─── 第二阶段:中扫 ───
|
||||
# 取粗扫 top N 的区域,在其周围 ±50 范围内用步长 10 精扫
|
||||
print(f"\n{'=' * 60}")
|
||||
print(f"第二阶段: 中扫 (粗扫 Top {args.top_n} 区域, 步长 10)")
|
||||
print("=" * 60)
|
||||
|
||||
top_coarse = coarse_df.sort_values("stable_score", ascending=False).head(args.top_n)
|
||||
mid_params = set()
|
||||
for _, row in top_coarse.iterrows():
|
||||
p_center = int(row["period"])
|
||||
s_center = float(row["std"])
|
||||
for p in range(max(1, p_center - 50), min(1001, p_center + 51), 10):
|
||||
for s_val in np.arange(max(0.5, s_center - 50), min(1000.5, s_center + 51), 10):
|
||||
mid_params.add((max(1, int(round(p))), round(float(s_val), 2)))
|
||||
|
||||
mid_grid = sorted(mid_params)
|
||||
print(f" 参数组合数: {len(mid_grid):,}")
|
||||
|
||||
mid_df = evaluate_grid(
|
||||
mid_grid,
|
||||
workers=args.workers,
|
||||
df_path=df_path,
|
||||
df_1m_path=df_1m_path,
|
||||
use_1m=use_1m,
|
||||
step_min=step_min,
|
||||
label="中扫",
|
||||
)
|
||||
|
||||
mid_csv = out_dir / f"bb_sweep_mid_{args.kline_period}_{stamp}.csv"
|
||||
mid_df.to_csv(mid_csv, index=False, encoding="utf-8-sig")
|
||||
print(f"\n 中扫结果已保存: {mid_csv}")
|
||||
|
||||
# ─── 第三阶段:精扫 ───
|
||||
# 取中扫 top 10 区域,在其周围 ±10 范围内用步长 1 精扫
|
||||
print(f"\n{'=' * 60}")
|
||||
print("第三阶段: 精扫 (中扫 Top 10 区域, 步长 1)")
|
||||
print("=" * 60)
|
||||
|
||||
all_mid = pd.concat([coarse_df, mid_df], ignore_index=True)
|
||||
top_mid = all_mid.sort_values("stable_score", ascending=False).head(10)
|
||||
fine_params = set()
|
||||
for _, row in top_mid.iterrows():
|
||||
p_center = int(row["period"])
|
||||
s_center = float(row["std"])
|
||||
for p in range(max(1, p_center - 10), min(1001, p_center + 11)):
|
||||
for s_val in np.arange(max(0.5, s_center - 10), min(1000.5, s_center + 11), 1.0):
|
||||
fine_params.add((max(1, int(round(p))), round(float(s_val), 2)))
|
||||
|
||||
fine_grid = sorted(fine_params)
|
||||
print(f" 参数组合数: {len(fine_grid):,}")
|
||||
|
||||
fine_df = evaluate_grid(
|
||||
fine_grid,
|
||||
workers=args.workers,
|
||||
df_path=df_path,
|
||||
df_1m_path=df_1m_path,
|
||||
use_1m=use_1m,
|
||||
step_min=step_min,
|
||||
label="精扫",
|
||||
)
|
||||
|
||||
fine_csv = out_dir / f"bb_sweep_fine_{args.kline_period}_{stamp}.csv"
|
||||
fine_df.to_csv(fine_csv, index=False, encoding="utf-8-sig")
|
||||
print(f"\n 精扫结果已保存: {fine_csv}")
|
||||
|
||||
# ─── 汇总 ───
|
||||
all_results = pd.concat([coarse_df, mid_df, fine_df], ignore_index=True)
|
||||
all_results = all_results.drop_duplicates(subset=["period", "std"], keep="last")
|
||||
all_results = all_results.sort_values("stable_score", ascending=False)
|
||||
|
||||
all_csv = out_dir / f"bb_sweep_all_{args.kline_period}_{stamp}.csv"
|
||||
all_results.to_csv(all_csv, index=False, encoding="utf-8-sig")
|
||||
|
||||
print(f"\n{'=' * 90}")
|
||||
print("全部扫描完成 | 汇总结果")
|
||||
print("=" * 90)
|
||||
print(f"总计评估: {len(all_results):,} 组参数")
|
||||
print(f"结果文件: {all_csv}\n")
|
||||
|
||||
# Top 20
|
||||
top20 = all_results.head(20)
|
||||
print("Top 20 (按稳定性评分):")
|
||||
print("-" * 95)
|
||||
print(f"{'排名':>4} {'period':>7} {'std':>7} {'最终权益':>10} {'收益%':>8} "
|
||||
f"{'交易数':>6} {'胜率%':>6} {'Sharpe':>8} {'回撤%':>7} {'评分':>8}")
|
||||
print("-" * 95)
|
||||
for rank, (_, row) in enumerate(top20.iterrows(), 1):
|
||||
print(
|
||||
f"{rank:>4} {int(row['period']):>7} {row['std']:>7.1f} "
|
||||
f"{row['final_eq']:>10.2f} {row['ret_pct']:>+8.1f} "
|
||||
f"{int(row['n_trades']):>6} {row['win_rate']:>6.1f} "
|
||||
f"{row['sharpe']:>8.4f} {row['max_dd_pct']:>7.1f} "
|
||||
f"{row['stable_score']:>8.2f}"
|
||||
)
|
||||
|
||||
# 最佳参数详细回测
|
||||
best = all_results.iloc[0]
|
||||
print(f"\n{'=' * 90}")
|
||||
print(f"最佳参数: BB({int(best['period'])}, {best['std']})")
|
||||
print(f"最终权益: {best['final_eq']:.2f} U | 收益: {best['ret_pct']:+.2f}%")
|
||||
print(f"交易次数: {int(best['n_trades'])} | 胜率: {best['win_rate']:.1f}%")
|
||||
print(f"Sharpe: {best['sharpe']:.4f} | 最大回撤: {best['max_dd_pct']:.1f}%")
|
||||
print("=" * 90)
|
||||
|
||||
# 逐年权益
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=int(best["period"]),
|
||||
bb_std=float(best["std"]),
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01,
|
||||
leverage=100.0,
|
||||
cross_margin=True,
|
||||
fee_rate=0.0005,
|
||||
rebate_pct=0.90,
|
||||
rebate_hour_utc=0,
|
||||
fill_at_close=True,
|
||||
use_1m_touch_filter=use_1m,
|
||||
kline_step_min=step_min,
|
||||
)
|
||||
final_res = run_bb_midline_backtest(df, cfg, df_1m=df_1m if use_1m else None)
|
||||
eq = final_res.equity_curve["equity"].dropna()
|
||||
|
||||
print("\n逐年权益 (年末):")
|
||||
eq_ts = eq.copy()
|
||||
eq_ts.index = pd.to_datetime(eq_ts.index)
|
||||
prev = 200.0
|
||||
for y in range(2020, 2026):
|
||||
sub = eq_ts[eq_ts.index.year == y]
|
||||
if len(sub) > 0:
|
||||
ye = float(sub.iloc[-1])
|
||||
ret = (ye - prev) / prev * 100.0 if prev > 0 else 0.0
|
||||
print(f" {y}: {ye:.2f} U (当年收益 {ret:+.1f}%)")
|
||||
prev = ye
|
||||
|
||||
print(f"\n总手续费: {final_res.total_fee:.2f} U")
|
||||
print(f"总返佣: {final_res.total_rebate:.2f} U")
|
||||
print(f"净手续费: {final_res.total_fee - final_res.total_rebate:.2f} U")
|
||||
|
||||
# 保存最佳参数交易明细
|
||||
trade_path = out_dir / f"bb_sweep_best_trades_{args.kline_period}_{stamp}.csv"
|
||||
trade_rows = []
|
||||
for i, t in enumerate(final_res.trades, 1):
|
||||
trade_rows.append({
|
||||
"序号": i,
|
||||
"方向": "做多" if t.side == "long" else "做空",
|
||||
"开仓时间": t.entry_time,
|
||||
"平仓时间": t.exit_time,
|
||||
"开仓价": round(t.entry_price, 2),
|
||||
"平仓价": round(t.exit_price, 2),
|
||||
"净盈亏": round(t.net_pnl, 4),
|
||||
"平仓原因": t.exit_reason,
|
||||
})
|
||||
pd.DataFrame(trade_rows).to_csv(trade_path, index=False, encoding="utf-8-sig")
|
||||
print(f"\n最佳参数交易明细: {trade_path}")
|
||||
|
||||
finally:
|
||||
Path(df_path).unlink(missing_ok=True)
|
||||
if df_1m_path:
|
||||
Path(df_1m_path).unlink(missing_ok=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,356 +0,0 @@
|
||||
"""
|
||||
布林带均线策略回测 — 2020-2025(优化版)
|
||||
|
||||
策略:
|
||||
- 阳线 + 碰到均线 → 开多(1m 过滤:先涨碰到)
|
||||
- 持多: 碰上轨止盈(无下轨止损)
|
||||
- 阴线 + 碰到均线 → 平多开空(1m:先跌碰到)
|
||||
- 持空: 碰下轨止盈(无上轨止损)
|
||||
|
||||
配置: 200U | 1%权益/单 | 万五手续费 | 90%返佣次日8点 | 100x杠杆 | 全仓
|
||||
|
||||
参数扫描:
|
||||
- 快速: --sweep
|
||||
- 全量: --full 试遍 period(0.5~1000 step0.5) × std(0.5~1000 step0.5)
|
||||
"""
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
from concurrent.futures import ProcessPoolExecutor, as_completed
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[0]))
|
||||
sys.stdout.reconfigure(line_buffering=True)
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
from strategy.bb_midline_backtest import BBMidlineConfig, run_bb_midline_backtest
|
||||
from strategy.data_loader import load_klines
|
||||
|
||||
|
||||
def run_single(df: pd.DataFrame, df_1m: pd.DataFrame | None, cfg: BBMidlineConfig) -> dict:
|
||||
r = run_bb_midline_backtest(df, cfg, df_1m=df_1m)
|
||||
eq = r.equity_curve["equity"].dropna()
|
||||
if len(eq) == 0:
|
||||
return {"final_eq": 0, "ret_pct": -100, "n_trades": 0, "win_rate": 0, "sharpe": -999, "dd": -200}
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - cfg.initial_capital) / cfg.initial_capital * 100
|
||||
n_trades = len(r.trades)
|
||||
win_rate = sum(1 for t in r.trades if t.net_pnl > 0) / max(n_trades, 1) * 100
|
||||
pnl = r.daily_stats["pnl"].astype(float)
|
||||
sharpe = float(pnl.mean() / pnl.std()) * np.sqrt(365) if pnl.std() > 0 else 0
|
||||
dd = float((eq.astype(float) - eq.astype(float).cummax()).min())
|
||||
return {
|
||||
"final_eq": final_eq,
|
||||
"ret_pct": ret_pct,
|
||||
"n_trades": n_trades,
|
||||
"win_rate": win_rate,
|
||||
"sharpe": sharpe,
|
||||
"dd": dd,
|
||||
"result": r,
|
||||
}
|
||||
|
||||
|
||||
def build_param_grid(
|
||||
period_range: tuple[float, float] = (1, 200),
|
||||
std_range: tuple[float, float] = (0.5, 10),
|
||||
period_step: float = 1.0,
|
||||
std_step: float = 0.5,
|
||||
) -> list[tuple[int, float]]:
|
||||
"""生成 (period, std) 参数网格,period 取整(rolling 需整数)"""
|
||||
out = []
|
||||
p = period_range[0]
|
||||
while p <= period_range[1]:
|
||||
s = std_range[0]
|
||||
while s <= std_range[1]:
|
||||
out.append((max(1, int(round(p))), round(s, 2)))
|
||||
s += std_step
|
||||
p += period_step
|
||||
return out
|
||||
|
||||
|
||||
def build_full_param_grid(
|
||||
period_step: float = 0.5,
|
||||
std_step: float = 0.5,
|
||||
period_max: float = 1000.0,
|
||||
std_max: float = 1000.0,
|
||||
) -> list[tuple[int, float]]:
|
||||
"""全量网格: (0.5,0.5)(0.5,1)...(0.5,std_max), (1,0.5)(1,1)...(1,std_max), ..."""
|
||||
out = []
|
||||
p = 0.5
|
||||
while p <= period_max:
|
||||
s = 0.5
|
||||
while s <= std_max:
|
||||
out.append((max(1, int(round(p))), round(s, 2)))
|
||||
s += std_step
|
||||
p += period_step
|
||||
return out
|
||||
|
||||
|
||||
def _run_one(args: tuple) -> dict:
|
||||
"""供多进程调用:((p, s), df_path, use_1m, step_min) -> res"""
|
||||
(p, s), df_path, use_1m, step_min = args
|
||||
df = pd.read_pickle(df_path)
|
||||
df_1m = None
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=p, bb_std=s,
|
||||
initial_capital=200.0, margin_pct=0.01, leverage=100.0,
|
||||
cross_margin=True, fee_rate=0.0005, rebate_pct=0.90,
|
||||
rebate_hour_utc=0, fill_at_close=True,
|
||||
use_1m_touch_filter=False, kline_step_min=step_min,
|
||||
)
|
||||
r = run_bb_midline_backtest(df, cfg, df_1m=None)
|
||||
eq = r.equity_curve["equity"].dropna()
|
||||
if len(eq) == 0:
|
||||
return {"period": p, "std": s, "final_eq": 0, "ret_pct": -100, "n_trades": 0, "win_rate": 0, "sharpe": -999, "dd": -200}
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - 200) / 200 * 100
|
||||
n_trades = len(r.trades)
|
||||
win_rate = sum(1 for t in r.trades if t.net_pnl > 0) / max(n_trades, 1) * 100
|
||||
pnl = r.daily_stats["pnl"].astype(float)
|
||||
sharpe = float(pnl.mean() / pnl.std()) * np.sqrt(365) if pnl.std() > 0 else 0
|
||||
dd = float((eq.astype(float) - eq.astype(float).cummax()).min())
|
||||
return {"period": p, "std": s, "final_eq": final_eq, "ret_pct": ret_pct, "n_trades": n_trades,
|
||||
"win_rate": win_rate, "sharpe": sharpe, "dd": dd}
|
||||
|
||||
|
||||
def main(sweep_params: bool = False, full_sweep: bool = False, steps: str | None = None,
|
||||
use_1m: bool = True, kline_period: str = "5m", workers: int = 1,
|
||||
max_period: float = 1000.0, max_std: float = 1000.0):
|
||||
out_dir = Path(__file__).resolve().parent / "strategy" / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
step_min = int(kline_period.replace("m", ""))
|
||||
print(f"加载 K 线数据 (2020-01-01 ~ 2026-01-01) 周期={kline_period}...")
|
||||
t0 = time.time()
|
||||
df = load_klines(kline_period, "2020-01-01", "2026-01-01")
|
||||
df_1m = load_klines("1m", "2020-01-01", "2026-01-01") if use_1m else None
|
||||
print(f" {kline_period}: {len(df):,} 条" + (f", 1m: {len(df_1m):,} 条" if df_1m is not None else "") + f" ({time.time()-t0:.1f}s)\n")
|
||||
|
||||
if full_sweep:
|
||||
# 全量网格: period 0.5~period_max step0.5, std 0.5~std_max step0.5,多进程
|
||||
grid = build_full_param_grid(period_step=0.5, std_step=0.5, period_max=max_period, std_max=max_std)
|
||||
print(f" 全量参数扫描: {len(grid):,} 组 (period 0.5~{max_period} step0.5 × std 0.5~{max_std} step0.5)")
|
||||
use_parallel = workers > 1
|
||||
if workers <= 0:
|
||||
workers = max(1, (__import__("os").cpu_count() or 4) - 1)
|
||||
use_parallel = workers > 1
|
||||
print(f" 并行进程数: {workers}" + (" (多进程)" if use_parallel else " (顺序)"))
|
||||
|
||||
import tempfile
|
||||
with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as f:
|
||||
df.to_pickle(f.name)
|
||||
df_path = f.name
|
||||
try:
|
||||
tasks = [((p, s), df_path, False, step_min) for p, s in grid]
|
||||
all_results = []
|
||||
best = None
|
||||
best_score = -999
|
||||
t0 = time.time()
|
||||
|
||||
if use_parallel:
|
||||
try:
|
||||
with ProcessPoolExecutor(max_workers=workers) as ex:
|
||||
fut = {ex.submit(_run_one, t): t for t in tasks}
|
||||
for f in as_completed(fut):
|
||||
try:
|
||||
res = f.result()
|
||||
all_results.append(res)
|
||||
score = res["ret_pct"] - 0.001 * max(0, res["n_trades"] - 3000)
|
||||
if res["final_eq"] > 0 and score > best_score:
|
||||
best_score = score
|
||||
best = (res["period"], res["std"], res)
|
||||
except Exception as e:
|
||||
print(f" [WARN] 任务失败: {e}")
|
||||
done = len(all_results)
|
||||
if done % 5000 == 0 or done == len(tasks):
|
||||
print(f" 进度: {done}/{len(tasks)} ({time.time()-t0:.0f}s)")
|
||||
except (PermissionError, OSError) as e:
|
||||
print(f" 多进程不可用 ({e}),改用顺序执行...")
|
||||
use_parallel = False
|
||||
|
||||
if not use_parallel:
|
||||
for i, t in enumerate(tasks):
|
||||
try:
|
||||
res = _run_one(t)
|
||||
all_results.append(res)
|
||||
score = res["ret_pct"] - 0.001 * max(0, res["n_trades"] - 3000)
|
||||
if res["final_eq"] > 0 and score > best_score:
|
||||
best_score = score
|
||||
best = (res["period"], res["std"], res)
|
||||
except Exception as e:
|
||||
print(f" [WARN] 任务失败: {e}")
|
||||
if (i + 1) % 5000 == 0 or i + 1 == len(tasks):
|
||||
print(f" 进度: {i+1}/{len(tasks)} ({time.time()-t0:.0f}s)")
|
||||
print(f" 全量扫描完成 ({time.time()-t0:.0f}s)")
|
||||
finally:
|
||||
Path(df_path).unlink(missing_ok=True)
|
||||
|
||||
if best:
|
||||
p, s, res = best
|
||||
print(f"\n 最优: BB({p},{s}) -> 权益={res['final_eq']:.1f} 收益={res['ret_pct']:+.1f}% 交易={res['n_trades']}")
|
||||
|
||||
sweep_df = pd.DataFrame(all_results)
|
||||
sweep_path = out_dir / f"bb_midline_{kline_period}_full_sweep.csv"
|
||||
sweep_df.to_csv(sweep_path, index=False)
|
||||
print(f" 扫描结果: {sweep_path}")
|
||||
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=best[0] if best else 20, bb_std=best[1] if best else 2.0,
|
||||
initial_capital=200.0, margin_pct=0.01, leverage=100.0,
|
||||
cross_margin=True, fee_rate=0.0005, rebate_pct=0.90,
|
||||
rebate_hour_utc=0, fill_at_close=True, use_1m_touch_filter=False,
|
||||
kline_step_min=step_min,
|
||||
)
|
||||
r = run_bb_midline_backtest(df, cfg, df_1m=None)
|
||||
|
||||
elif sweep_params:
|
||||
# 步长组合: (period_step, std_step) 如 (0.5,0.5), (0.5,1), (1,0.5)
|
||||
step_pairs = [(10, 0.5), (20, 1)] if steps is None else []
|
||||
if steps:
|
||||
for part in steps.split(","):
|
||||
a, b = map(float, part.strip().split("_"))
|
||||
step_pairs.append((a, b))
|
||||
|
||||
if not step_pairs:
|
||||
step_pairs = [(5, 0.5), (10, 1)]
|
||||
|
||||
all_results = []
|
||||
best = None
|
||||
best_score = -999
|
||||
|
||||
for period_step, std_step in step_pairs:
|
||||
grid = build_param_grid(
|
||||
period_range=(15, 120),
|
||||
std_range=(1.5, 4.0),
|
||||
period_step=max(5, int(period_step)),
|
||||
std_step=std_step,
|
||||
)
|
||||
print(f" 步长 (period>={period_step}, std+{std_step}): {len(grid)} 组...")
|
||||
for p, s in grid:
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=p, bb_std=s,
|
||||
initial_capital=200.0, margin_pct=0.01, leverage=100.0,
|
||||
cross_margin=True, fee_rate=0.0005, rebate_pct=0.90,
|
||||
rebate_hour_utc=0, fill_at_close=True,
|
||||
use_1m_touch_filter=use_1m, kline_step_min=step_min,
|
||||
)
|
||||
res = run_single(df, df_1m, cfg)
|
||||
res["period"] = p
|
||||
res["std"] = s
|
||||
res["period_step"] = period_step
|
||||
res["std_step"] = std_step
|
||||
all_results.append(res)
|
||||
score = res["ret_pct"] - 0.001 * max(0, res["n_trades"] - 3000)
|
||||
if res["final_eq"] > 0 and score > best_score:
|
||||
best_score = score
|
||||
best = (p, s, res)
|
||||
|
||||
if best:
|
||||
p, s, res = best
|
||||
print(f"\n 最优: BB({p},{s}) -> 权益={res['final_eq']:.1f} 收益={res['ret_pct']:+.1f}% 交易={res['n_trades']}")
|
||||
|
||||
sweep_rows = [
|
||||
{"period": r["period"], "std": r["std"], "period_step": r.get("period_step"), "std_step": r.get("std_step"),
|
||||
"final_eq": r["final_eq"], "ret_pct": r["ret_pct"], "n_trades": r["n_trades"],
|
||||
"win_rate": r["win_rate"], "sharpe": r["sharpe"], "dd": r["dd"]}
|
||||
for r in all_results
|
||||
]
|
||||
sweep_df = pd.DataFrame(sweep_rows)
|
||||
sweep_path = out_dir / f"bb_midline_{kline_period}_param_sweep.csv"
|
||||
sweep_df.to_csv(sweep_path, index=False)
|
||||
print(f" 扫描结果: {sweep_path}")
|
||||
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=best[0] if best else 20, bb_std=best[1] if best else 2.0,
|
||||
initial_capital=200.0, margin_pct=0.01, leverage=100.0,
|
||||
cross_margin=True, fee_rate=0.0005, rebate_pct=0.90,
|
||||
rebate_hour_utc=0, fill_at_close=True, use_1m_touch_filter=use_1m,
|
||||
kline_step_min=step_min,
|
||||
)
|
||||
r = best[2]["result"] if best and best[2].get("result") else run_bb_midline_backtest(df, cfg, df_1m if use_1m else None)
|
||||
else:
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=20, bb_std=2.0,
|
||||
initial_capital=200.0, margin_pct=0.01, leverage=100.0,
|
||||
cross_margin=True, fee_rate=0.0005, rebate_pct=0.90,
|
||||
rebate_hour_utc=0, fill_at_close=True,
|
||||
use_1m_touch_filter=use_1m, kline_step_min=step_min,
|
||||
)
|
||||
r = run_bb_midline_backtest(df, cfg, df_1m if use_1m else None)
|
||||
|
||||
print("=" * 90)
|
||||
print(f" 布林带均线策略回测({kline_period}周期" + (" | 1m触及方向过滤" if use_1m else "") + ")")
|
||||
print(f" BB({cfg.bb_period},{cfg.bb_std}) | 200U | 1%权益/单 | 万五 | 90%返佣次日8点 | 100x全仓")
|
||||
print("=" * 90)
|
||||
|
||||
eq = r.equity_curve["equity"].dropna()
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - cfg.initial_capital) / cfg.initial_capital * 100
|
||||
n_trades = len(r.trades)
|
||||
win_rate = sum(1 for t in r.trades if t.net_pnl > 0) / max(n_trades, 1) * 100
|
||||
pnl = r.daily_stats["pnl"].astype(float)
|
||||
avg_daily = float(pnl.mean())
|
||||
sharpe = float(pnl.mean() / pnl.std()) * np.sqrt(365) if pnl.std() > 0 else 0
|
||||
dd = float((eq.astype(float) - eq.astype(float).cummax()).min())
|
||||
|
||||
print(f"\n 最终权益: {final_eq:.1f} U")
|
||||
print(f" 总收益率: {ret_pct:+.1f}%")
|
||||
print(f" 交易次数: {n_trades}")
|
||||
print(f" 胜率: {win_rate:.1f}%")
|
||||
print(f" 日均PnL: {avg_daily:+.2f} U")
|
||||
print(f" 最大回撤: {dd:.1f} U")
|
||||
print(f" Sharpe: {sharpe:.2f}")
|
||||
print(f" 总手续费: {r.total_fee:.2f} U")
|
||||
print(f" 总返佣: {r.total_rebate:.2f} U")
|
||||
|
||||
years = list(range(2020, 2026))
|
||||
eq_ts = eq.copy()
|
||||
eq_ts.index = pd.to_datetime(eq_ts.index)
|
||||
prev_ye = cfg.initial_capital
|
||||
print("\n 逐年权益 (年末):")
|
||||
for y in years:
|
||||
subset = eq_ts[eq_ts.index.year == y]
|
||||
if len(subset) > 0:
|
||||
ye = float(subset.iloc[-1])
|
||||
ret = (ye - prev_ye) / prev_ye * 100 if prev_ye > 0 else 0
|
||||
print(f" {y}: {ye:.1f} U (当年收益 {ret:+.1f}%)")
|
||||
prev_ye = ye
|
||||
|
||||
rows = []
|
||||
for i, t in enumerate(r.trades, 1):
|
||||
rows.append({
|
||||
"序号": i,
|
||||
"方向": "做多" if t.side == "long" else "做空",
|
||||
"开仓时间": t.entry_time,
|
||||
"平仓时间": t.exit_time,
|
||||
"开仓价": round(t.entry_price, 2),
|
||||
"平仓价": round(t.exit_price, 2),
|
||||
"保证金": round(t.margin, 2),
|
||||
"杠杆": t.leverage,
|
||||
"数量": round(t.qty, 4),
|
||||
"毛盈亏": round(t.gross_pnl, 2),
|
||||
"手续费": round(t.fee, 2),
|
||||
"净盈亏": round(t.net_pnl, 2),
|
||||
"平仓原因": t.exit_reason,
|
||||
})
|
||||
pd.DataFrame(rows).to_csv(out_dir / f"bb_midline_{kline_period}_2020_2025_trade_detail.csv", index=False, encoding="utf-8-sig")
|
||||
r.daily_stats.to_csv(out_dir / f"bb_midline_{kline_period}_2020_2025_daily.csv", encoding="utf-8-sig")
|
||||
print(f"\n 交易明细: {out_dir / f'bb_midline_{kline_period}_2020_2025_trade_detail.csv'}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import argparse
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("--sweep", action="store_true", help="快速参数扫描")
|
||||
ap.add_argument("--full", action="store_true", dest="full_sweep", help="全量: period(0.5~1000 step0.5)×std(0.5~1000 step0.5)")
|
||||
ap.add_argument("--steps", type=str, help="步长组合,如 1_0.5,2_1,5_0.5")
|
||||
ap.add_argument("--no-1m", dest="no_1m", action="store_true", help="禁用 1m 触及方向过滤(更快)")
|
||||
ap.add_argument("-p", "--period", choices=["5m", "15m", "30m"], default="5m", help="K线周期")
|
||||
ap.add_argument("-j", "--workers", type=int, default=0, help="全量扫描并行进程数(0=auto)")
|
||||
ap.add_argument("--max-period", type=float, default=1000, help="全量扫描 period 上限")
|
||||
ap.add_argument("--max-std", type=float, default=1000, help="全量扫描 std 上限")
|
||||
args = ap.parse_args()
|
||||
main(sweep_params=args.sweep, full_sweep=args.full_sweep, steps=args.steps,
|
||||
use_1m=not args.no_1m, kline_period=args.period, workers=args.workers,
|
||||
max_period=args.max_period, max_std=args.max_std)
|
||||
@@ -1,389 +0,0 @@
|
||||
"""
|
||||
布林带均线策略 - 全参数组合扫描 (1-1000, 1-1000)
|
||||
|
||||
策略:
|
||||
- 阳线 + 先涨碰到均线(1m判断) → 开多
|
||||
- 持多: 碰上轨止盈
|
||||
- 阴线 + 先跌碰到均线(1m判断) → 平多开空
|
||||
- 持空: 碰下轨止盈
|
||||
|
||||
配置: 200U | 1%权益/单 | 万五手续费 | 90%返佣次日8点 | 100x杠杆 | 全仓
|
||||
|
||||
参数遍历: (0.5,0.5)(0.5,1)...(0.5,std_max), (1,0.5)(1,1)...(1,std_max), ...
|
||||
直至 (period_max, std_max)
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
from collections import defaultdict
|
||||
from concurrent.futures import ProcessPoolExecutor, as_completed
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[0]))
|
||||
sys.stdout.reconfigure(line_buffering=True)
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
from strategy.bb_midline_backtest import BBMidlineConfig, run_bb_midline_backtest
|
||||
from strategy.data_loader import get_1m_touch_direction, load_klines
|
||||
from strategy.indicators import bollinger
|
||||
|
||||
|
||||
def build_full_param_grid(
|
||||
period_min: float = 1.0,
|
||||
period_max: float = 1000.0,
|
||||
period_step: float = 1.0,
|
||||
std_min: float = 1.0,
|
||||
std_max: float = 1000.0,
|
||||
std_step: float = 1.0,
|
||||
) -> list[tuple[int, float]]:
|
||||
"""生成全量 (period, std) 组合,period 取整"""
|
||||
out = []
|
||||
p = period_min
|
||||
while p <= period_max:
|
||||
s = std_min
|
||||
while s <= std_max:
|
||||
out.append((max(1, int(round(p))), round(s, 2)))
|
||||
s += std_step
|
||||
p += period_step
|
||||
return sorted(set(out))
|
||||
|
||||
|
||||
def stable_score(ret_pct: float, sharpe: float, dd_pct: float, n_trades: int) -> float:
|
||||
"""收益稳定性评分"""
|
||||
sparse_penalty = -5.0 if n_trades < 200 else 0.0
|
||||
return ret_pct + sharpe * 12.0 - abs(dd_pct) * 0.8 + sparse_penalty
|
||||
|
||||
|
||||
G_DF: pd.DataFrame | None = None
|
||||
G_DF_1M: pd.DataFrame | None = None
|
||||
G_USE_1M: bool = True
|
||||
G_STEP_MIN: int = 5
|
||||
|
||||
|
||||
def _init_worker(df_path: str, df_1m_path: str | None, use_1m: bool, step_min: int):
|
||||
global G_DF, G_DF_1M, G_USE_1M, G_STEP_MIN
|
||||
G_DF = pd.read_pickle(df_path)
|
||||
G_DF_1M = pd.read_pickle(df_1m_path) if (use_1m and df_1m_path) else None
|
||||
G_USE_1M = bool(use_1m)
|
||||
G_STEP_MIN = int(step_min)
|
||||
|
||||
|
||||
def _eval_period_task(args: tuple[int, list[float]]) -> list[dict]:
|
||||
period, std_list = args
|
||||
assert G_DF is not None
|
||||
|
||||
arr_touch_dir = None
|
||||
if G_USE_1M and G_DF_1M is not None:
|
||||
close = G_DF["close"].astype(float)
|
||||
bb_mid, _, _, _ = bollinger(close, period, 1.0)
|
||||
arr_touch_dir = get_1m_touch_direction(
|
||||
G_DF, G_DF_1M, bb_mid.values, kline_step_min=G_STEP_MIN
|
||||
)
|
||||
|
||||
rows: list[dict] = []
|
||||
for std in std_list:
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=period,
|
||||
bb_std=float(std),
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01,
|
||||
leverage=100.0,
|
||||
cross_margin=True,
|
||||
fee_rate=0.0005,
|
||||
rebate_pct=0.90,
|
||||
rebate_hour_utc=0,
|
||||
fill_at_close=True,
|
||||
use_1m_touch_filter=G_USE_1M,
|
||||
kline_step_min=G_STEP_MIN,
|
||||
)
|
||||
result = run_bb_midline_backtest(
|
||||
G_DF,
|
||||
cfg,
|
||||
df_1m=G_DF_1M if G_USE_1M else None,
|
||||
arr_touch_dir_override=arr_touch_dir,
|
||||
)
|
||||
|
||||
eq = result.equity_curve["equity"].dropna()
|
||||
if len(eq) == 0:
|
||||
final_eq = 0.0
|
||||
ret_pct = -100.0
|
||||
dd_u = -200.0
|
||||
dd_pct = 100.0
|
||||
else:
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - cfg.initial_capital) / cfg.initial_capital * 100.0
|
||||
dd_u = float((eq.astype(float) - eq.astype(float).cummax()).min())
|
||||
dd_pct = abs(dd_u) / cfg.initial_capital * 100.0
|
||||
|
||||
n_trades = len(result.trades)
|
||||
win_rate = (
|
||||
sum(1 for t in result.trades if t.net_pnl > 0) / n_trades * 100.0
|
||||
if n_trades > 0
|
||||
else 0.0
|
||||
)
|
||||
pnl = result.daily_stats["pnl"].astype(float)
|
||||
sharpe = (
|
||||
float(pnl.mean() / pnl.std()) * np.sqrt(365.0) if pnl.std() > 0 else 0.0
|
||||
)
|
||||
score = stable_score(ret_pct, sharpe, dd_pct, n_trades)
|
||||
|
||||
rows.append(
|
||||
{
|
||||
"period": period,
|
||||
"std": round(float(std), 2),
|
||||
"final_eq": final_eq,
|
||||
"ret_pct": ret_pct,
|
||||
"n_trades": n_trades,
|
||||
"win_rate": win_rate,
|
||||
"sharpe": sharpe,
|
||||
"max_dd_u": dd_u,
|
||||
"max_dd_pct": dd_pct,
|
||||
"stable_score": score,
|
||||
}
|
||||
)
|
||||
return rows
|
||||
|
||||
|
||||
def evaluate_grid(
|
||||
params: list[tuple[int, float]],
|
||||
*,
|
||||
workers: int,
|
||||
df_path: str,
|
||||
df_1m_path: str | None,
|
||||
use_1m: bool,
|
||||
step_min: int,
|
||||
) -> pd.DataFrame:
|
||||
by_period: dict[int, set[float]] = defaultdict(set)
|
||||
for p, s in params:
|
||||
by_period[int(p)].add(round(float(s), 2))
|
||||
|
||||
tasks = [(p, sorted(stds)) for p, stds in sorted(by_period.items())]
|
||||
total_periods = len(tasks)
|
||||
total_combos = sum(len(stds) for _, stds in tasks)
|
||||
|
||||
print(f" 评估 {total_combos:,} 组参数, {total_periods} 个 period, workers={workers}")
|
||||
start = time.time()
|
||||
rows: list[dict] = []
|
||||
done_periods = 0
|
||||
done_combos = 0
|
||||
|
||||
with ProcessPoolExecutor(
|
||||
max_workers=workers,
|
||||
initializer=_init_worker,
|
||||
initargs=(df_path, df_1m_path, use_1m, step_min),
|
||||
) as ex:
|
||||
future_map = {ex.submit(_eval_period_task, task): task for task in tasks}
|
||||
for fut in as_completed(future_map):
|
||||
period, stds = future_map[fut]
|
||||
res = fut.result()
|
||||
rows.extend(res)
|
||||
done_periods += 1
|
||||
done_combos += len(stds)
|
||||
if done_periods % max(1, total_periods // 20) == 0 or done_periods == total_periods:
|
||||
elapsed = time.time() - start
|
||||
print(f" 进度 {done_combos:,}/{total_combos:,} ({elapsed:.0f}s)")
|
||||
|
||||
df = pd.DataFrame(rows)
|
||||
print(f" 完成, 用时 {time.time() - start:.1f}s")
|
||||
return df
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description="布林带均线策略全参数扫描 (1-1000, 1-1000)")
|
||||
parser.add_argument(
|
||||
"--period-min", type=float, default=1.0, help="period 下限"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--period-max", type=float, default=1000.0, help="period 上限"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--period-step", type=float, default=10.0, help="period 步长 (建议10以缩短时间)"
|
||||
)
|
||||
parser.add_argument("--std-min", type=float, default=0.5, help="std 下限")
|
||||
parser.add_argument("--std-max", type=float, default=1000.0, help="std 上限")
|
||||
parser.add_argument(
|
||||
"--std-step", type=float, default=1.0, help="std 步长"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-p", "--kline-period", default="5m", choices=["5m", "15m", "30m"]
|
||||
)
|
||||
parser.add_argument(
|
||||
"-j", "--workers", type=int, default=max(1, (os.cpu_count() or 4) - 1)
|
||||
)
|
||||
parser.add_argument("--no-1m", action="store_true", help="禁用 1m 触及方向过滤")
|
||||
parser.add_argument(
|
||||
"--source",
|
||||
default="bitmart",
|
||||
choices=["bitmart", "binance"],
|
||||
help="数据源",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--quick",
|
||||
action="store_true",
|
||||
help="快速模式: period 1-200 step20, std 1-20 step2",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
use_1m = not args.no_1m
|
||||
step_min = int(args.kline_period.replace("m", ""))
|
||||
|
||||
if args.quick:
|
||||
args.period_min = 1.0
|
||||
args.period_max = 200.0
|
||||
args.period_step = 20.0
|
||||
args.std_min = 0.5
|
||||
args.std_max = 20.0
|
||||
args.std_step = 1.0
|
||||
print(" 快速模式: period 1-200 step20, std 1-20 step2")
|
||||
|
||||
out_dir = Path(__file__).resolve().parent / "strategy" / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
print("加载 K 线数据 (2020-01-01 ~ 2026-01-01)...")
|
||||
t0 = time.time()
|
||||
try:
|
||||
df = load_klines(args.kline_period, "2020-01-01", "2026-01-01", source=args.source)
|
||||
df_1m = (
|
||||
load_klines("1m", "2020-01-01", "2026-01-01", source=args.source)
|
||||
if use_1m
|
||||
else None
|
||||
)
|
||||
except Exception as e:
|
||||
alt = "binance" if args.source == "bitmart" else "bitmart"
|
||||
print(f" {args.source} 加载失败 ({e}), 尝试 {alt}...")
|
||||
df = load_klines(args.kline_period, "2020-01-01", "2026-01-01", source=alt)
|
||||
df_1m = (
|
||||
load_klines("1m", "2020-01-01", "2026-01-01", source=alt)
|
||||
if use_1m
|
||||
else None
|
||||
)
|
||||
args.source = alt
|
||||
print(
|
||||
f" {args.kline_period}: {len(df):,} 条"
|
||||
+ (f", 1m: {len(df_1m):,} 条" if df_1m is not None else "")
|
||||
+ f" | 数据源: {args.source} ({time.time()-t0:.1f}s)\n"
|
||||
)
|
||||
|
||||
grid = build_full_param_grid(
|
||||
period_min=args.period_min,
|
||||
period_max=args.period_max,
|
||||
period_step=args.period_step,
|
||||
std_min=args.std_min,
|
||||
std_max=args.std_max,
|
||||
std_step=args.std_step,
|
||||
)
|
||||
print(f"参数网格: {len(grid):,} 组")
|
||||
print(
|
||||
f" period: {args.period_min}~{args.period_max} step{args.period_step}, "
|
||||
f"std: {args.std_min}~{args.std_max} step{args.std_step}"
|
||||
)
|
||||
|
||||
with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as f_df:
|
||||
df.to_pickle(f_df.name)
|
||||
df_path = f_df.name
|
||||
df_1m_path = None
|
||||
if df_1m is not None:
|
||||
with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as f_1m:
|
||||
df_1m.to_pickle(f_1m.name)
|
||||
df_1m_path = f_1m.name
|
||||
|
||||
try:
|
||||
result_df = evaluate_grid(
|
||||
grid,
|
||||
workers=args.workers,
|
||||
df_path=df_path,
|
||||
df_1m_path=df_1m_path,
|
||||
use_1m=use_1m,
|
||||
step_min=step_min,
|
||||
)
|
||||
finally:
|
||||
Path(df_path).unlink(missing_ok=True)
|
||||
if df_1m_path:
|
||||
Path(df_1m_path).unlink(missing_ok=True)
|
||||
|
||||
if result_df.empty:
|
||||
print("无有效结果")
|
||||
return
|
||||
|
||||
best_stable = result_df.sort_values("stable_score", ascending=False).iloc[0]
|
||||
best_return = result_df.sort_values("ret_pct", ascending=False).iloc[0]
|
||||
|
||||
stamp = time.strftime("%Y%m%d_%H%M%S")
|
||||
csv_path = out_dir / f"bb_midline_full_grid_{args.kline_period}_{stamp}.csv"
|
||||
result_df.to_csv(csv_path, index=False)
|
||||
print(f"\n扫描结果已保存: {csv_path}")
|
||||
|
||||
print("\n" + "=" * 90)
|
||||
print("布林带均线策略 | 2020-2025 | 200U | 1%权益/单 | 万五 | 90%返佣次日8点 | 100x全仓")
|
||||
print("=" * 90)
|
||||
print(
|
||||
f"最佳稳定参数: BB({int(best_stable['period'])},{best_stable['std']}) | "
|
||||
f"权益={best_stable['final_eq']:.1f}U | 收益={best_stable['ret_pct']:+.1f}% | "
|
||||
f"回撤={best_stable['max_dd_pct']:.1f}% | Sharpe={best_stable['sharpe']:.2f} | "
|
||||
f"交易={int(best_stable['n_trades'])}"
|
||||
)
|
||||
print(
|
||||
f"最高收益参数: BB({int(best_return['period'])},{best_return['std']}) | "
|
||||
f"权益={best_return['final_eq']:.1f}U | 收益={best_return['ret_pct']:+.1f}% | "
|
||||
f"回撤={best_return['max_dd_pct']:.1f}% | Sharpe={best_return['sharpe']:.2f} | "
|
||||
f"交易={int(best_return['n_trades'])}"
|
||||
)
|
||||
print("=" * 90)
|
||||
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=int(best_stable["period"]),
|
||||
bb_std=float(best_stable["std"]),
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01,
|
||||
leverage=100.0,
|
||||
cross_margin=True,
|
||||
fee_rate=0.0005,
|
||||
rebate_pct=0.90,
|
||||
rebate_hour_utc=0,
|
||||
fill_at_close=True,
|
||||
use_1m_touch_filter=use_1m,
|
||||
kline_step_min=step_min,
|
||||
)
|
||||
final_res = run_bb_midline_backtest(
|
||||
df, cfg, df_1m=df_1m if use_1m else None
|
||||
)
|
||||
eq = final_res.equity_curve["equity"].dropna()
|
||||
|
||||
print("\n逐年权益 (年末):")
|
||||
eq_ts = eq.copy()
|
||||
eq_ts.index = pd.to_datetime(eq_ts.index)
|
||||
prev = 200.0
|
||||
for y in range(2020, 2026):
|
||||
sub = eq_ts[eq_ts.index.year == y]
|
||||
if len(sub) > 0:
|
||||
ye = float(sub.iloc[-1])
|
||||
ret = (ye - prev) / prev * 100.0 if prev > 0 else 0.0
|
||||
print(f" {y}: {ye:.1f} U (当年收益 {ret:+.1f}%)")
|
||||
prev = ye
|
||||
|
||||
trade_path = out_dir / f"bb_midline_best_trades_{args.kline_period}_{stamp}.csv"
|
||||
rows = []
|
||||
for i, t in enumerate(final_res.trades, 1):
|
||||
rows.append({
|
||||
"序号": i,
|
||||
"方向": "做多" if t.side == "long" else "做空",
|
||||
"开仓时间": t.entry_time,
|
||||
"平仓时间": t.exit_time,
|
||||
"开仓价": round(t.entry_price, 2),
|
||||
"平仓价": round(t.exit_price, 2),
|
||||
"净盈亏": round(t.net_pnl, 2),
|
||||
"平仓原因": t.exit_reason,
|
||||
})
|
||||
pd.DataFrame(rows).to_csv(trade_path, index=False, encoding="utf-8-sig")
|
||||
print(f"\n最佳参数交易明细: {trade_path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,422 +0,0 @@
|
||||
"""
|
||||
布林带中轨策略参数分层搜索(2020-2025)
|
||||
|
||||
说明:
|
||||
- 全区间覆盖: period 1~1000, std 0.5~1000
|
||||
- 分层搜索: 先粗扫全区间,再在候选周围细化,最终细化到 std=0.5 步长
|
||||
- 使用 1m 触及方向过滤(先涨/先跌)时,按 period 复用触及方向以提速
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import math
|
||||
import os
|
||||
import tempfile
|
||||
import time
|
||||
from collections import defaultdict
|
||||
from concurrent.futures import ProcessPoolExecutor, as_completed
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
from strategy.bb_midline_backtest import BBMidlineConfig, run_bb_midline_backtest
|
||||
from strategy.data_loader import get_1m_touch_direction, load_klines
|
||||
from strategy.indicators import bollinger
|
||||
|
||||
|
||||
G_DF: pd.DataFrame | None = None
|
||||
G_DF_1M: pd.DataFrame | None = None
|
||||
G_USE_1M: bool = True
|
||||
G_STEP_MIN: int = 5
|
||||
|
||||
|
||||
def frange(start: float, end: float, step: float) -> list[float]:
|
||||
out: list[float] = []
|
||||
x = float(start)
|
||||
while x <= end + 1e-9:
|
||||
out.append(round(x, 6))
|
||||
x += step
|
||||
return out
|
||||
|
||||
|
||||
def build_grid(
|
||||
p_start: float,
|
||||
p_end: float,
|
||||
p_step: float,
|
||||
s_start: float,
|
||||
s_end: float,
|
||||
s_step: float,
|
||||
) -> list[tuple[int, float]]:
|
||||
periods = sorted({max(1, min(1000, int(round(v)))) for v in frange(p_start, p_end, p_step)})
|
||||
stds = sorted({round(max(0.5, min(1000.0, v)), 2) for v in frange(s_start, s_end, s_step)})
|
||||
if 1000 not in periods:
|
||||
periods.append(1000)
|
||||
if 1000.0 not in stds:
|
||||
stds.append(1000.0)
|
||||
out = [(p, s) for p in periods for s in stds]
|
||||
return sorted(set(out))
|
||||
|
||||
|
||||
def build_local_grid(
|
||||
centers: pd.DataFrame,
|
||||
p_window: int,
|
||||
p_step: int,
|
||||
s_window: float,
|
||||
s_step: float,
|
||||
) -> list[tuple[int, float]]:
|
||||
out: set[tuple[int, float]] = set()
|
||||
for _, row in centers.iterrows():
|
||||
p0 = int(row["period"])
|
||||
s0 = float(row["std"])
|
||||
p_min = max(1, p0 - p_window)
|
||||
p_max = min(1000, p0 + p_window)
|
||||
s_min = max(0.5, s0 - s_window)
|
||||
s_max = min(1000.0, s0 + s_window)
|
||||
periods = sorted({max(1, min(1000, int(round(v)))) for v in frange(p_min, p_max, p_step)})
|
||||
stds = sorted({round(max(0.5, min(1000.0, v)), 2) for v in frange(s_min, s_max, s_step)})
|
||||
for p in periods:
|
||||
for s in stds:
|
||||
out.add((p, s))
|
||||
return sorted(out)
|
||||
|
||||
|
||||
def score_row(ret_pct: float, sharpe: float, dd_pct: float, n_trades: int) -> float:
|
||||
# 偏向“收益稳定”: 收益和夏普加分,回撤和极少交易惩罚
|
||||
sparse_penalty = -5.0 if n_trades < 200 else 0.0
|
||||
return ret_pct + sharpe * 12.0 - dd_pct * 0.8 + sparse_penalty
|
||||
|
||||
|
||||
def _init_worker(df_path: str, df_1m_path: str | None, use_1m: bool, step_min: int):
|
||||
global G_DF, G_DF_1M, G_USE_1M, G_STEP_MIN
|
||||
G_DF = pd.read_pickle(df_path)
|
||||
G_DF_1M = pd.read_pickle(df_1m_path) if (use_1m and df_1m_path) else None
|
||||
G_USE_1M = bool(use_1m)
|
||||
G_STEP_MIN = int(step_min)
|
||||
|
||||
|
||||
def _eval_period_task(args: tuple[int, list[float]]) -> list[dict]:
|
||||
period, std_list = args
|
||||
assert G_DF is not None
|
||||
|
||||
arr_touch_dir = None
|
||||
if G_USE_1M and G_DF_1M is not None:
|
||||
close = G_DF["close"].astype(float)
|
||||
bb_mid, _, _, _ = bollinger(close, period, 1.0)
|
||||
arr_touch_dir = get_1m_touch_direction(G_DF, G_DF_1M, bb_mid.values, kline_step_min=G_STEP_MIN)
|
||||
|
||||
rows: list[dict] = []
|
||||
for std in std_list:
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=period,
|
||||
bb_std=float(std),
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01,
|
||||
leverage=100.0,
|
||||
cross_margin=True,
|
||||
fee_rate=0.0005,
|
||||
rebate_pct=0.90,
|
||||
rebate_hour_utc=0,
|
||||
fill_at_close=True,
|
||||
use_1m_touch_filter=G_USE_1M,
|
||||
kline_step_min=G_STEP_MIN,
|
||||
)
|
||||
result = run_bb_midline_backtest(
|
||||
G_DF,
|
||||
cfg,
|
||||
df_1m=G_DF_1M if G_USE_1M else None,
|
||||
arr_touch_dir_override=arr_touch_dir,
|
||||
)
|
||||
|
||||
eq = result.equity_curve["equity"].dropna()
|
||||
if len(eq) == 0:
|
||||
final_eq = 0.0
|
||||
ret_pct = -100.0
|
||||
dd_u = -200.0
|
||||
dd_pct = 100.0
|
||||
else:
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - cfg.initial_capital) / cfg.initial_capital * 100.0
|
||||
dd_u = float((eq.astype(float) - eq.astype(float).cummax()).min())
|
||||
dd_pct = abs(dd_u) / cfg.initial_capital * 100.0
|
||||
|
||||
n_trades = len(result.trades)
|
||||
win_rate = (
|
||||
sum(1 for t in result.trades if t.net_pnl > 0) / n_trades * 100.0
|
||||
if n_trades > 0
|
||||
else 0.0
|
||||
)
|
||||
pnl = result.daily_stats["pnl"].astype(float)
|
||||
sharpe = float(pnl.mean() / pnl.std()) * math.sqrt(365.0) if pnl.std() > 0 else 0.0
|
||||
stable_score = score_row(ret_pct, sharpe, dd_pct, n_trades)
|
||||
|
||||
rows.append(
|
||||
{
|
||||
"period": period,
|
||||
"std": round(float(std), 2),
|
||||
"final_eq": final_eq,
|
||||
"ret_pct": ret_pct,
|
||||
"n_trades": n_trades,
|
||||
"win_rate": win_rate,
|
||||
"sharpe": sharpe,
|
||||
"max_dd_u": dd_u,
|
||||
"max_dd_pct": dd_pct,
|
||||
"stable_score": stable_score,
|
||||
"use_1m_filter": int(G_USE_1M),
|
||||
}
|
||||
)
|
||||
return rows
|
||||
|
||||
|
||||
def evaluate_grid(
|
||||
params: list[tuple[int, float]],
|
||||
*,
|
||||
workers: int,
|
||||
df_path: str,
|
||||
df_1m_path: str | None,
|
||||
use_1m: bool,
|
||||
step_min: int,
|
||||
label: str,
|
||||
) -> pd.DataFrame:
|
||||
by_period: dict[int, set[float]] = defaultdict(set)
|
||||
for p, s in params:
|
||||
by_period[int(p)].add(round(float(s), 2))
|
||||
|
||||
tasks = [(p, sorted(stds)) for p, stds in sorted(by_period.items())]
|
||||
total_periods = len(tasks)
|
||||
total_combos = sum(len(stds) for _, stds in tasks)
|
||||
if total_combos == 0:
|
||||
return pd.DataFrame()
|
||||
|
||||
print(f"[{label}] period组数={total_periods}, 参数组合={total_combos}, workers={workers}")
|
||||
start = time.time()
|
||||
rows: list[dict] = []
|
||||
done_periods = 0
|
||||
done_combos = 0
|
||||
|
||||
with ProcessPoolExecutor(
|
||||
max_workers=workers,
|
||||
initializer=_init_worker,
|
||||
initargs=(df_path, df_1m_path, use_1m, step_min),
|
||||
) as ex:
|
||||
future_map = {ex.submit(_eval_period_task, task): task for task in tasks}
|
||||
for fut in as_completed(future_map):
|
||||
period, stds = future_map[fut]
|
||||
res = fut.result()
|
||||
rows.extend(res)
|
||||
done_periods += 1
|
||||
done_combos += len(stds)
|
||||
if (
|
||||
done_periods == total_periods
|
||||
or done_periods % max(1, total_periods // 10) == 0
|
||||
):
|
||||
elapsed = time.time() - start
|
||||
print(
|
||||
f"[{label}] 进度 {done_combos}/{total_combos} 组合 "
|
||||
f"({done_periods}/{total_periods} periods), {elapsed:.0f}s"
|
||||
)
|
||||
|
||||
df = pd.DataFrame(rows)
|
||||
print(f"[{label}] 完成, 用时 {time.time() - start:.1f}s")
|
||||
return df
|
||||
|
||||
|
||||
def summarize_yearly(eq: pd.Series, initial_capital: float = 200.0) -> pd.DataFrame:
|
||||
s = eq.dropna().copy()
|
||||
s.index = pd.to_datetime(s.index)
|
||||
out_rows: list[dict] = []
|
||||
prev = initial_capital
|
||||
for year in range(2020, 2026):
|
||||
sub = s[s.index.year == year]
|
||||
if len(sub) == 0:
|
||||
continue
|
||||
ye = float(sub.iloc[-1])
|
||||
ret = (ye - prev) / prev * 100.0 if prev > 0 else 0.0
|
||||
out_rows.append({"year": year, "year_end_equity": ye, "year_return_pct": ret})
|
||||
prev = ye
|
||||
return pd.DataFrame(out_rows)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("-p", "--period", default="5m", choices=["5m", "15m", "30m"])
|
||||
parser.add_argument("--start", default="2020-01-01")
|
||||
parser.add_argument("--end", default="2026-01-01")
|
||||
parser.add_argument("-j", "--workers", type=int, default=max(1, (os.cpu_count() or 4) - 1))
|
||||
parser.add_argument("--no-1m", action="store_true", help="禁用 1m 方向过滤")
|
||||
args = parser.parse_args()
|
||||
|
||||
use_1m = not args.no_1m
|
||||
step_min = int(args.period.replace("m", ""))
|
||||
|
||||
out_dir = Path(__file__).resolve().parent / "strategy" / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
print(f"加载数据: {args.period} {args.start}~{args.end}")
|
||||
t0 = time.time()
|
||||
df = load_klines(args.period, args.start, args.end)
|
||||
df_1m = load_klines("1m", args.start, args.end) if use_1m else None
|
||||
print(
|
||||
f" {args.period}: {len(df):,} 条"
|
||||
+ (f", 1m: {len(df_1m):,} 条" if df_1m is not None else "")
|
||||
+ f", {time.time()-t0:.1f}s\n"
|
||||
)
|
||||
|
||||
with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as f_df:
|
||||
df.to_pickle(f_df.name)
|
||||
df_path = f_df.name
|
||||
df_1m_path = None
|
||||
if df_1m is not None:
|
||||
with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as f_1m:
|
||||
df_1m.to_pickle(f_1m.name)
|
||||
df_1m_path = f_1m.name
|
||||
|
||||
try:
|
||||
evaluated: set[tuple[int, float]] = set()
|
||||
all_parts: list[pd.DataFrame] = []
|
||||
|
||||
# Stage 1: 全区间粗扫
|
||||
stage1 = build_grid(1, 1000, 50, 0.5, 1000, 50)
|
||||
stage1 = [x for x in stage1 if x not in evaluated]
|
||||
df1 = evaluate_grid(
|
||||
stage1,
|
||||
workers=args.workers,
|
||||
df_path=df_path,
|
||||
df_1m_path=df_1m_path,
|
||||
use_1m=use_1m,
|
||||
step_min=step_min,
|
||||
label="stage1-global",
|
||||
)
|
||||
if not df1.empty:
|
||||
all_parts.append(df1)
|
||||
evaluated.update((int(r["period"]), float(r["std"])) for _, r in df1.iterrows())
|
||||
|
||||
seed1 = (
|
||||
df1.sort_values("stable_score", ascending=False).head(6)
|
||||
if not df1.empty
|
||||
else pd.DataFrame(columns=["period", "std"])
|
||||
)
|
||||
|
||||
# Stage 2: 候选周围中等步长细化
|
||||
stage2 = build_local_grid(seed1, p_window=25, p_step=5, s_window=50, s_step=10)
|
||||
stage2 = [x for x in stage2 if x not in evaluated]
|
||||
df2 = evaluate_grid(
|
||||
stage2,
|
||||
workers=args.workers,
|
||||
df_path=df_path,
|
||||
df_1m_path=df_1m_path,
|
||||
use_1m=use_1m,
|
||||
step_min=step_min,
|
||||
label="stage2-local",
|
||||
)
|
||||
if not df2.empty:
|
||||
all_parts.append(df2)
|
||||
evaluated.update((int(r["period"]), float(r["std"])) for _, r in df2.iterrows())
|
||||
|
||||
pool2 = pd.concat([d for d in [df1, df2] if not d.empty], ignore_index=True)
|
||||
seed2 = (
|
||||
pool2.sort_values("stable_score", ascending=False).head(4)
|
||||
if len(pool2) > 0
|
||||
else pd.DataFrame(columns=["period", "std"])
|
||||
)
|
||||
|
||||
# Stage 3: 候选周围更细化
|
||||
stage3 = build_local_grid(seed2, p_window=8, p_step=1, s_window=10, s_step=1)
|
||||
stage3 = [x for x in stage3 if x not in evaluated]
|
||||
df3 = evaluate_grid(
|
||||
stage3,
|
||||
workers=args.workers,
|
||||
df_path=df_path,
|
||||
df_1m_path=df_1m_path,
|
||||
use_1m=use_1m,
|
||||
step_min=step_min,
|
||||
label="stage3-fine",
|
||||
)
|
||||
if not df3.empty:
|
||||
all_parts.append(df3)
|
||||
evaluated.update((int(r["period"]), float(r["std"])) for _, r in df3.iterrows())
|
||||
|
||||
pool3 = pd.concat([d for d in [df1, df2, df3] if not d.empty], ignore_index=True)
|
||||
seed3 = (
|
||||
pool3.sort_values("stable_score", ascending=False).head(2)
|
||||
if len(pool3) > 0
|
||||
else pd.DataFrame(columns=["period", "std"])
|
||||
)
|
||||
|
||||
# Stage 4: 最终细化(std 0.5 步长)
|
||||
stage4 = build_local_grid(seed3, p_window=3, p_step=1, s_window=4, s_step=0.5)
|
||||
stage4 = [x for x in stage4 if x not in evaluated]
|
||||
df4 = evaluate_grid(
|
||||
stage4,
|
||||
workers=args.workers,
|
||||
df_path=df_path,
|
||||
df_1m_path=df_1m_path,
|
||||
use_1m=use_1m,
|
||||
step_min=step_min,
|
||||
label="stage4-final",
|
||||
)
|
||||
if not df4.empty:
|
||||
all_parts.append(df4)
|
||||
evaluated.update((int(r["period"]), float(r["std"])) for _, r in df4.iterrows())
|
||||
|
||||
if not all_parts:
|
||||
raise RuntimeError("未得到任何评估结果")
|
||||
|
||||
all_df = pd.concat(all_parts, ignore_index=True)
|
||||
all_df = all_df.drop_duplicates(subset=["period", "std"], keep="last")
|
||||
|
||||
best_stable = all_df.sort_values("stable_score", ascending=False).iloc[0]
|
||||
best_return = all_df.sort_values("ret_pct", ascending=False).iloc[0]
|
||||
|
||||
# 对最佳稳定参数再跑一次,导出逐年收益
|
||||
cfg = BBMidlineConfig(
|
||||
bb_period=int(best_stable["period"]),
|
||||
bb_std=float(best_stable["std"]),
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01,
|
||||
leverage=100.0,
|
||||
cross_margin=True,
|
||||
fee_rate=0.0005,
|
||||
rebate_pct=0.90,
|
||||
rebate_hour_utc=0,
|
||||
fill_at_close=True,
|
||||
use_1m_touch_filter=use_1m,
|
||||
kline_step_min=step_min,
|
||||
)
|
||||
final_res = run_bb_midline_backtest(df, cfg, df_1m=df_1m if use_1m else None)
|
||||
final_eq = final_res.equity_curve["equity"].dropna()
|
||||
yearly = summarize_yearly(final_eq, initial_capital=200.0)
|
||||
|
||||
stamp = time.strftime("%Y%m%d_%H%M%S")
|
||||
all_path = out_dir / f"bb_midline_hier_search_{args.period}_{stamp}.csv"
|
||||
yearly_path = out_dir / f"bb_midline_hier_search_{args.period}_{stamp}_yearly.csv"
|
||||
all_df.sort_values("stable_score", ascending=False).to_csv(all_path, index=False)
|
||||
yearly.to_csv(yearly_path, index=False)
|
||||
|
||||
print("\n" + "=" * 96)
|
||||
print("分层搜索完成")
|
||||
print(
|
||||
f"最佳稳定参数: period={int(best_stable['period'])}, std={float(best_stable['std']):.2f} | "
|
||||
f"final={best_stable['final_eq']:.4f}U | ret={best_stable['ret_pct']:+.2f}% | "
|
||||
f"dd={best_stable['max_dd_pct']:.2f}% | sharpe={best_stable['sharpe']:.3f} | "
|
||||
f"trades={int(best_stable['n_trades'])}"
|
||||
)
|
||||
print(
|
||||
f"最高收益参数: period={int(best_return['period'])}, std={float(best_return['std']):.2f} | "
|
||||
f"final={best_return['final_eq']:.4f}U | ret={best_return['ret_pct']:+.2f}% | "
|
||||
f"dd={best_return['max_dd_pct']:.2f}% | sharpe={best_return['sharpe']:.3f} | "
|
||||
f"trades={int(best_return['n_trades'])}"
|
||||
)
|
||||
print(f"结果文件: {all_path}")
|
||||
print(f"逐年文件: {yearly_path}")
|
||||
print("=" * 96)
|
||||
|
||||
finally:
|
||||
Path(df_path).unlink(missing_ok=True)
|
||||
if df_1m_path:
|
||||
Path(df_1m_path).unlink(missing_ok=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1 +0,0 @@
|
||||
from .bb_backtest import BBConfig, BBResult, BBTrade, run_bb_backtest
|
||||
@@ -1,156 +0,0 @@
|
||||
"""
|
||||
2023 年回测入口 - 用训练出的最优参数在 2023 全年数据上回测
|
||||
"""
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
|
||||
from strategy.data_loader import load_klines
|
||||
from strategy.indicators import compute_all_indicators
|
||||
from strategy.strategy_signal import (
|
||||
generate_indicator_signals, compute_composite_score,
|
||||
apply_htf_filter,
|
||||
)
|
||||
from strategy.backtest_engine import BacktestEngine
|
||||
|
||||
|
||||
def main():
|
||||
# 加载最佳参数
|
||||
params_path = os.path.join(os.path.dirname(__file__), 'best_params_2020_2022.json')
|
||||
if not os.path.exists(params_path):
|
||||
print(f"错误: 找不到参数文件 {params_path}")
|
||||
print("请先运行 train.py 进行训练")
|
||||
return
|
||||
|
||||
with open(params_path, 'r') as f:
|
||||
params = json.load(f)
|
||||
|
||||
print("=" * 70)
|
||||
print("2023 年真实回测 (样本外)")
|
||||
print("=" * 70)
|
||||
|
||||
# 加载数据 (多加载一些前置数据用于指标预热)
|
||||
print("\n加载数据...")
|
||||
df_5m = load_klines('5m', '2022-11-01', '2024-01-01')
|
||||
df_1h = load_klines('1h', '2022-11-01', '2024-01-01')
|
||||
print(f" 5m: {len(df_5m)} 条, 1h: {len(df_1h)} 条")
|
||||
|
||||
# 计算指标
|
||||
print("计算指标...")
|
||||
df_5m = compute_all_indicators(df_5m, params)
|
||||
df_1h = compute_all_indicators(df_1h, params)
|
||||
|
||||
# 生成信号
|
||||
print("生成信号...")
|
||||
df_5m = generate_indicator_signals(df_5m, params)
|
||||
df_1h = generate_indicator_signals(df_1h, params)
|
||||
|
||||
# 综合得分
|
||||
score = compute_composite_score(df_5m, params)
|
||||
score = apply_htf_filter(score, df_1h, params)
|
||||
|
||||
# 截取 2023 年数据
|
||||
mask = (df_5m.index >= '2023-01-01') & (df_5m.index < '2024-01-01')
|
||||
df_2023 = df_5m.loc[mask]
|
||||
score_2023 = score.loc[mask]
|
||||
print(f" 2023年数据: {len(df_2023)} 条")
|
||||
|
||||
# 回测
|
||||
print("\n开始回测...")
|
||||
engine = BacktestEngine(
|
||||
initial_capital=1000.0,
|
||||
margin_per_trade=25.0,
|
||||
leverage=50,
|
||||
fee_rate=0.0005,
|
||||
rebate_ratio=0.70,
|
||||
max_daily_drawdown=50.0,
|
||||
min_hold_bars=1,
|
||||
stop_loss_pct=params['stop_loss_pct'],
|
||||
take_profit_pct=params['take_profit_pct'],
|
||||
max_positions=int(params.get('max_positions', 3)),
|
||||
)
|
||||
|
||||
result = engine.run(df_2023, score_2023, open_threshold=params['open_threshold'])
|
||||
|
||||
# ============================================================
|
||||
# 输出结果
|
||||
# ============================================================
|
||||
print("\n" + "=" * 70)
|
||||
print("2023 年回测结果")
|
||||
print("=" * 70)
|
||||
print(f" 初始资金: 1000.00 U")
|
||||
print(f" 最终资金: {result['final_capital']:.2f} U")
|
||||
print(f" 总收益: {result['total_pnl']:.2f} U")
|
||||
print(f" 总手续费: {result['total_fee']:.2f} U")
|
||||
print(f" 总返佣: {result['total_rebate']:.2f} U")
|
||||
print(f" 交易次数: {result['num_trades']}")
|
||||
print(f" 胜率: {result['win_rate']:.2%}")
|
||||
print(f" 盈亏比: {result['profit_factor']:.2f}")
|
||||
print(f" 日均收益: {result['avg_daily_pnl']:.2f} U")
|
||||
print(f" 最大日回撤: {result['max_daily_dd']:.2f} U")
|
||||
|
||||
# 月度统计
|
||||
daily_pnl = result['daily_pnl']
|
||||
if daily_pnl:
|
||||
df_daily = pd.DataFrame(list(daily_pnl.items()), columns=['date', 'pnl'])
|
||||
df_daily['date'] = pd.to_datetime(df_daily['date'])
|
||||
df_daily['month'] = df_daily['date'].dt.to_period('M')
|
||||
monthly = df_daily.groupby('month')['pnl'].agg(['sum', 'count', 'mean', 'min'])
|
||||
monthly.columns = ['月收益', '交易天数', '日均收益', '最大日亏损']
|
||||
|
||||
print("\n" + "-" * 70)
|
||||
print("月度统计:")
|
||||
print("-" * 70)
|
||||
for idx, row in monthly.iterrows():
|
||||
status = "✅" if row['月收益'] > 0 else "❌"
|
||||
dd_status = "✅" if row['最大日亏损'] > -50 else "⚠️"
|
||||
print(f" {idx} | 收益: {row['月收益']:>8.2f}U | "
|
||||
f"日均: {row['日均收益']:>7.2f}U | "
|
||||
f"最大日亏: {row['最大日亏损']:>7.2f}U {dd_status} | {status}")
|
||||
|
||||
# 日均收益是否达标
|
||||
avg_daily = df_daily['pnl'].mean()
|
||||
days_above_50 = (df_daily['pnl'] >= 50).sum()
|
||||
days_below_neg50 = (df_daily['pnl'] < -50).sum()
|
||||
print(f"\n 日均收益: {avg_daily:.2f}U {'✅ 达标' if avg_daily >= 50 else '❌ 未达标'}")
|
||||
print(f" 日收益>=50U的天数: {days_above_50} / {len(df_daily)}")
|
||||
print(f" 日回撤>50U的天数: {days_below_neg50} / {len(df_daily)}")
|
||||
|
||||
# 保存逐日 PnL
|
||||
output_dir = os.path.dirname(__file__)
|
||||
if daily_pnl:
|
||||
df_daily_out = pd.DataFrame(list(daily_pnl.items()), columns=['date', 'pnl'])
|
||||
df_daily_out['cumulative_pnl'] = df_daily_out['pnl'].cumsum()
|
||||
daily_csv = os.path.join(output_dir, 'backtest_2023_daily_pnl.csv')
|
||||
df_daily_out.to_csv(daily_csv, index=False)
|
||||
print(f"\n逐日PnL已保存: {daily_csv}")
|
||||
|
||||
# 保存交易记录
|
||||
if result['trades']:
|
||||
trades_data = []
|
||||
for t in result['trades']:
|
||||
trades_data.append({
|
||||
'entry_time': t.entry_time,
|
||||
'exit_time': t.exit_time,
|
||||
'direction': '多' if t.direction == 1 else '空',
|
||||
'entry_price': t.entry_price,
|
||||
'exit_price': t.exit_price,
|
||||
'pnl': round(t.pnl, 4),
|
||||
'fee': round(t.fee, 4),
|
||||
'rebate': round(t.rebate, 4),
|
||||
'holding_bars': t.holding_bars,
|
||||
})
|
||||
df_trades = pd.DataFrame(trades_data)
|
||||
trades_csv = os.path.join(output_dir, 'backtest_2023_trades.csv')
|
||||
df_trades.to_csv(trades_csv, index=False)
|
||||
print(f"交易记录已保存: {trades_csv}")
|
||||
|
||||
print("\n" + "=" * 70)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -1,366 +0,0 @@
|
||||
date,pnl,cumulative_pnl
|
||||
2023-01-01,-13.24030780391167,-13.24030780391167
|
||||
2023-01-02,-6.446144625588336,-19.686452429500005
|
||||
2023-01-03,1.604645378778668,-18.081807050721338
|
||||
2023-01-04,56.24999999999943,38.168192949278094
|
||||
2023-01-05,0.33406192478092844,38.50225487405902
|
||||
2023-01-06,-4.28936549280675,34.21288938125227
|
||||
2023-01-07,14.786004985419915,48.99889436667218
|
||||
2023-01-08,74.57347500987392,123.5723693765461
|
||||
2023-01-09,100.43932814185042,224.01169751839655
|
||||
2023-01-10,-11.400950315324355,212.61074720307218
|
||||
2023-01-11,119.73808656927638,332.34883377234854
|
||||
2023-01-12,-46.87500000000008,285.4738337723485
|
||||
2023-01-13,24.95301706493165,310.42685083728014
|
||||
2023-01-14,36.87499999999923,347.3018508372794
|
||||
2023-01-15,-42.164085212923396,305.137765624356
|
||||
2023-01-16,-42.37550401931327,262.76226160504274
|
||||
2023-01-17,-39.23788027501831,223.52438133002443
|
||||
2023-01-18,10.968990345277774,234.4933716753022
|
||||
2023-01-19,-17.519099732290336,216.97427194301187
|
||||
2023-01-20,258.1249999999992,475.0992719430111
|
||||
2023-01-21,-26.63800028548694,448.46127165752415
|
||||
2023-01-22,-27.862031912052718,420.59923974547144
|
||||
2023-01-23,-40.570948096946864,380.0282916485246
|
||||
2023-01-24,153.52954075490175,533.5578324034263
|
||||
2023-01-25,76.9770888682049,610.5349212716312
|
||||
2023-01-26,-43.12500000000006,567.4099212716312
|
||||
2023-01-27,4.574004296634158,571.9839255682654
|
||||
2023-01-28,110.89323045990369,682.8771560281691
|
||||
2023-01-29,65.39337129909306,748.2705273272621
|
||||
2023-01-30,89.15573047359129,837.4262578008534
|
||||
2023-01-31,-33.65661196432259,803.7696458365308
|
||||
2023-02-01,-42.346269783529834,761.423376053001
|
||||
2023-02-02,5.6249999999996945,767.0483760530007
|
||||
2023-02-03,-38.015635992701625,729.032740060299
|
||||
2023-02-04,-6.061609860875804,722.9711301994232
|
||||
2023-02-05,91.32767729532108,814.2988074947443
|
||||
2023-02-06,12.340770370556534,826.6395778653009
|
||||
2023-02-07,-38.31565728321921,788.3239205820817
|
||||
2023-02-08,-10.754771409427375,777.5691491726543
|
||||
2023-02-09,180.00000000000034,957.5691491726546
|
||||
2023-02-10,90.62500000000017,1048.1941491726548
|
||||
2023-02-11,-40.23338038017373,1007.9607687924811
|
||||
2023-02-12,50.843005130216255,1058.8037739226972
|
||||
2023-02-13,-43.12499999999999,1015.6787739226972
|
||||
2023-02-14,-45.000000000000014,970.6787739226972
|
||||
2023-02-15,211.8749999999989,1182.553773922696
|
||||
2023-02-16,123.74999999999923,1306.3037739226954
|
||||
2023-02-17,-43.1250000000002,1263.1787739226952
|
||||
2023-02-18,-30.38874055427764,1232.7900333684177
|
||||
2023-02-19,2.5357914472640948,1235.3258248156817
|
||||
2023-02-20,10.13433097511785,1245.4601557907995
|
||||
2023-02-21,41.5960974135976,1287.056253204397
|
||||
2023-02-22,39.9999999999999,1327.056253204397
|
||||
2023-02-23,-13.478092269295054,1313.578160935102
|
||||
2023-02-24,-33.61127571949922,1279.9668852156028
|
||||
2023-02-25,56.87500000000026,1336.841885215603
|
||||
2023-02-26,52.96295237320025,1389.8048375888034
|
||||
2023-02-27,-21.012957685691507,1368.7918799031117
|
||||
2023-02-28,-17.510525954953838,1351.2813539481579
|
||||
2023-03-01,48.43861521106629,1399.719969159224
|
||||
2023-03-02,5.370115987703678,1405.0900851469278
|
||||
2023-03-03,114.81346298981391,1519.9035481367416
|
||||
2023-03-04,-9.975555145718014,1509.9279929910235
|
||||
2023-03-05,-40.070176144315376,1469.8578168467081
|
||||
2023-03-06,-11.368260314393366,1458.4895565323147
|
||||
2023-03-07,29.800169999101556,1488.2897265314164
|
||||
2023-03-08,-41.066516251938125,1447.2232102794783
|
||||
2023-03-09,178.12499999999966,1625.3482102794778
|
||||
2023-03-10,69.54272408495805,1694.890934364436
|
||||
2023-03-11,218.8441938252083,1913.7351281896442
|
||||
2023-03-12,-43.124999999999986,1870.6101281896442
|
||||
2023-03-13,31.874999999999282,1902.4851281896435
|
||||
2023-03-14,71.24999999999882,1973.7351281896424
|
||||
2023-03-15,-46.87499999999994,1926.8601281896424
|
||||
2023-03-16,-47.19007322239124,1879.6700549672512
|
||||
2023-03-17,249.37499999999858,2129.0450549672496
|
||||
2023-03-18,-39.375000000000455,2089.670054967249
|
||||
2023-03-19,-37.72054430463878,2051.9495106626105
|
||||
2023-03-20,-48.125000000000256,2003.8245106626102
|
||||
2023-03-21,-48.955919791756116,1954.8685908708542
|
||||
2023-03-22,-41.34851470243514,1913.520076168419
|
||||
2023-03-23,-40.53293708055611,1872.987139087863
|
||||
2023-03-24,-40.62177198705648,1832.3653671008065
|
||||
2023-03-25,-12.808008186129763,1819.5573589146768
|
||||
2023-03-26,44.60456842447671,1864.1619273391534
|
||||
2023-03-27,33.10077209532424,1897.2626994344776
|
||||
2023-03-28,-40.54590870106257,1856.7167907334149
|
||||
2023-03-29,32.68290319879213,1889.399693932207
|
||||
2023-03-30,-42.18093929678437,1847.2187546354226
|
||||
2023-03-31,-30.18435407486843,1817.034400560554
|
||||
2023-04-01,-18.629080327821725,1798.4053202327323
|
||||
2023-04-02,78.36987927566116,1876.7751995083934
|
||||
2023-04-03,-14.310148754581672,1862.4650507538117
|
||||
2023-04-04,67.49999999999953,1929.9650507538113
|
||||
2023-04-05,40.981623971671745,1970.946674725483
|
||||
2023-04-06,27.071471993660218,1998.0181467191433
|
||||
2023-04-07,69.95707277743023,2067.9752194965736
|
||||
2023-04-08,16.74780048539444,2084.723019981968
|
||||
2023-04-09,47.28635900754121,2132.009378989509
|
||||
2023-04-10,92.25687955666356,2224.2662585461726
|
||||
2023-04-11,13.118453933996253,2237.3847124801687
|
||||
2023-04-12,56.24999999999995,2293.6347124801687
|
||||
2023-04-13,179.99999999999943,2473.634712480168
|
||||
2023-04-14,-21.87500000000091,2451.7597124801673
|
||||
2023-04-15,0.6060490696602718,2452.3657615498278
|
||||
2023-04-16,69.62762541934998,2521.9933869691777
|
||||
2023-04-17,65.86212708679903,2587.8555140559765
|
||||
2023-04-18,11.498179506746062,2599.3536935627226
|
||||
2023-04-19,223.1815368848387,2822.5352304475614
|
||||
2023-04-20,-43.12499999999999,2779.4102304475614
|
||||
2023-04-21,31.875000000000142,2811.2852304475614
|
||||
2023-04-22,-29.84738767205142,2781.43784277551
|
||||
2023-04-23,13.154733757123939,2794.5925765326338
|
||||
2023-04-24,6.396324986843672,2800.9889015194776
|
||||
2023-04-25,123.74011330692568,2924.7290148264033
|
||||
2023-04-26,261.41402100210826,3186.1430358285115
|
||||
2023-04-27,24.10664119340748,3210.249677021919
|
||||
2023-04-28,-10.62612672957838,3199.6235502923405
|
||||
2023-04-29,23.597281085864836,3223.2208313782053
|
||||
2023-04-30,-44.289545693205795,3178.9312856849997
|
||||
2023-05-01,54.37500000000002,3233.3062856849997
|
||||
2023-05-02,-2.017144354733148,3231.2891413302664
|
||||
2023-05-03,81.77174013147513,3313.0608814617417
|
||||
2023-05-04,-25.04485318862535,3288.0160282731163
|
||||
2023-05-05,171.61321250444536,3459.629240777562
|
||||
2023-05-06,52.49999999999993,3512.129240777562
|
||||
2023-05-07,-33.168505868798924,3478.960734908763
|
||||
2023-05-08,8.124999999999917,3487.085734908763
|
||||
2023-05-09,-12.584917211039063,3474.5008176977235
|
||||
2023-05-10,52.019173246963206,3526.519990944687
|
||||
2023-05-11,90.00000000000003,3616.519990944687
|
||||
2023-05-12,126.17158084605737,3742.691571790744
|
||||
2023-05-13,8.545669463922014,3751.237241254666
|
||||
2023-05-14,1.8924095106008352,3753.129650765267
|
||||
2023-05-15,10.943496294234567,3764.0731470595015
|
||||
2023-05-16,-30.264218933238727,3733.808928126263
|
||||
2023-05-17,30.026157944387133,3763.83508607065
|
||||
2023-05-18,23.13394310654973,3786.9690291772
|
||||
2023-05-19,15.149354042131993,3802.118383219332
|
||||
2023-05-20,-16.41923661401725,3785.6991466053146
|
||||
2023-05-21,7.846127328452241,3793.545273933767
|
||||
2023-05-22,21.279945465818493,3814.8252193995854
|
||||
2023-05-23,70.02437426214179,3884.8495936617273
|
||||
2023-05-24,72.70217181804935,3957.551765479777
|
||||
2023-05-25,-16.75708025521019,3940.794685224567
|
||||
2023-05-26,18.74999999999976,3959.5446852245664
|
||||
2023-05-27,39.20117578898695,3998.745861013553
|
||||
2023-05-28,110.91041187532412,4109.6562728888775
|
||||
2023-05-29,-32.49999999999996,4077.1562728888775
|
||||
2023-05-30,10.449185839751497,4087.605458728629
|
||||
2023-05-31,-10.136360635569764,4077.469098093059
|
||||
2023-06-01,14.358833920817762,4091.8279320138768
|
||||
2023-06-02,65.90793376617691,4157.735865780053
|
||||
2023-06-03,2.796329514545665,4160.532195294599
|
||||
2023-06-04,-6.651917557240656,4153.8802777373585
|
||||
2023-06-05,168.7500000000002,4322.6302777373585
|
||||
2023-06-06,-43.12500000000005,4279.5052777373585
|
||||
2023-06-07,34.36109954050025,4313.866377277859
|
||||
2023-06-08,-25.452505493132982,4288.413871784726
|
||||
2023-06-09,7.08099194612123,4295.494863730848
|
||||
2023-06-10,121.25000000000003,4416.744863730848
|
||||
2023-06-11,-20.937848671894088,4395.807015058954
|
||||
2023-06-12,-21.37821245611659,4374.428802602837
|
||||
2023-06-13,-13.703676058378367,4360.725126544458
|
||||
2023-06-14,166.27160175206745,4526.996728296526
|
||||
2023-06-15,15.069476387286578,4542.066204683812
|
||||
2023-06-16,106.96240346155682,4649.02860814537
|
||||
2023-06-17,-11.250000000000341,4637.77860814537
|
||||
2023-06-18,-10.120078428463955,4627.658529716906
|
||||
2023-06-19,-38.97345934789618,4588.68507036901
|
||||
2023-06-20,42.86461601305588,4631.549686382065
|
||||
2023-06-21,187.49999999999937,4819.0496863820645
|
||||
2023-06-22,31.80896255236462,4850.858648934429
|
||||
2023-06-23,23.85220828852076,4874.71085722295
|
||||
2023-06-24,-30.371879505034936,4844.338977717915
|
||||
2023-06-25,12.45391150222293,4856.792889220138
|
||||
2023-06-26,78.4973773289051,4935.290266549043
|
||||
2023-06-27,-39.87042272482522,4895.419843824217
|
||||
2023-06-28,88.12499999999999,4983.544843824217
|
||||
2023-06-29,-40.51516243372697,4943.029681390491
|
||||
2023-06-30,105.46931766571112,5048.498999056202
|
||||
2023-07-01,-13.796315557439133,5034.702683498763
|
||||
2023-07-02,-41.59344453195906,4993.109238966804
|
||||
2023-07-03,28.89550853439942,5022.004747501203
|
||||
2023-07-04,-5.3332824068334626,5016.6714650943695
|
||||
2023-07-05,90.00000000000007,5106.6714650943695
|
||||
2023-07-06,65.47404542743519,5172.145510521805
|
||||
2023-07-07,-8.375646476725684,5163.769864045079
|
||||
2023-07-08,2.0825098762478143,5165.852373921327
|
||||
2023-07-09,-12.284261589217671,5153.568112332109
|
||||
2023-07-10,4.7069840687455775,5158.275096400855
|
||||
2023-07-11,29.744227743509978,5188.019324144365
|
||||
2023-07-12,13.786259374056783,5201.805583518421
|
||||
2023-07-13,179.07533869993108,5380.880922218353
|
||||
2023-07-14,74.05844966531129,5454.939371883664
|
||||
2023-07-15,-24.570748403829185,5430.368623479834
|
||||
2023-07-16,6.803094664210427,5437.1717181440445
|
||||
2023-07-17,27.410515235666534,5464.582233379711
|
||||
2023-07-18,4.897911857902959,5469.480145237614
|
||||
2023-07-19,6.308694855454021,5475.788840093068
|
||||
2023-07-20,41.93544480774592,5517.7242849008135
|
||||
2023-07-21,16.096325607887692,5533.820610508701
|
||||
2023-07-22,-2.7025252562022395,5531.1180852524985
|
||||
2023-07-23,-36.865989707872636,5494.252095544626
|
||||
2023-07-24,86.80264475362813,5581.054740298255
|
||||
2023-07-25,-24.16611590079934,5556.888624397456
|
||||
2023-07-26,-12.803087110558725,5544.085537286897
|
||||
2023-07-27,29.206711819629362,5573.2922491065265
|
||||
2023-07-28,13.812242058805946,5587.104491165333
|
||||
2023-07-29,11.977355224058611,5599.081846389391
|
||||
2023-07-30,-5.150633707859324,5593.931212681532
|
||||
2023-07-31,-31.586985170360826,5562.344227511171
|
||||
2023-08-01,34.57747987841326,5596.921707389584
|
||||
2023-08-02,19.53988833101348,5616.461595720598
|
||||
2023-08-03,26.963711901014904,5643.425307621613
|
||||
2023-08-04,0.4840259877677071,5643.90933360938
|
||||
2023-08-05,8.851832296486007,5652.761165905866
|
||||
2023-08-06,-4.2929518635524,5648.468214042313
|
||||
2023-08-07,4.423504364914294,5652.891718407227
|
||||
2023-08-08,79.37499999999964,5732.266718407227
|
||||
2023-08-09,-1.0555745361586295,5731.211143871068
|
||||
2023-08-10,-15.802261213704188,5715.408882657364
|
||||
2023-08-11,-19.434997227631737,5695.973885429733
|
||||
2023-08-12,-14.180480342977727,5681.793405086755
|
||||
2023-08-13,-25.33078616920967,5656.462618917545
|
||||
2023-08-14,-29.365151992789308,5627.097466924756
|
||||
2023-08-15,-1.25,5625.847466924756
|
||||
2023-08-16,90.00000000000014,5715.847466924756
|
||||
2023-08-17,181.8750000000003,5897.722466924756
|
||||
2023-08-18,20.625000000000128,5918.347466924756
|
||||
2023-08-19,-27.59032679226934,5890.757140132487
|
||||
2023-08-20,-23.87577257083145,5866.881367561656
|
||||
2023-08-21,-22.59314579170043,5844.288221769955
|
||||
2023-08-22,113.75000000000014,5958.038221769955
|
||||
2023-08-23,8.70637062854804,5966.744592398503
|
||||
2023-08-24,22.993336529216194,5989.73792892772
|
||||
2023-08-25,-41.837123197460336,5947.900805730259
|
||||
2023-08-26,-20.238929404490822,5927.661876325768
|
||||
2023-08-27,-2.006488273327664,5925.655388052441
|
||||
2023-08-28,14.024404963407886,5939.679793015848
|
||||
2023-08-29,143.13137132947674,6082.811164345325
|
||||
2023-08-30,-43.125000000000064,6039.686164345325
|
||||
2023-08-31,31.6249079218707,6071.311072267195
|
||||
2023-09-01,56.25000000000017,6127.561072267195
|
||||
2023-09-02,-27.62863635821808,6099.932435908977
|
||||
2023-09-03,-18.380622263138324,6081.551813645839
|
||||
2023-09-04,-4.629639415293694,6076.922174230545
|
||||
2023-09-05,24.14433818655366,6101.066512417099
|
||||
2023-09-06,-46.72867445132057,6054.337837965779
|
||||
2023-09-07,-3.6562754869909058,6050.681562478788
|
||||
2023-09-08,42.254582050520796,6092.936144529309
|
||||
2023-09-09,-30.94267544057865,6061.99346908873
|
||||
2023-09-10,53.2912479279699,6115.284717016701
|
||||
2023-09-11,146.25000000000028,6261.534717016701
|
||||
2023-09-12,-18.31728723379048,6243.21742978291
|
||||
2023-09-13,-2.141383984249483,6241.07604579866
|
||||
2023-09-14,56.24999999999978,6297.32604579866
|
||||
2023-09-15,-37.98094850138423,6259.345097297276
|
||||
2023-09-16,-33.38082020481237,6225.964277092464
|
||||
2023-09-17,-2.737757522168219,6223.226519570296
|
||||
2023-09-18,28.781772740126208,6252.008292310422
|
||||
2023-09-19,4.273043833846757,6256.281336144269
|
||||
2023-09-20,24.242189180030334,6280.523525324299
|
||||
2023-09-21,90.00000000000011,6370.523525324299
|
||||
2023-09-22,-30.115416338642312,6340.408108985656
|
||||
2023-09-23,-24.28225302122884,6316.1258559644275
|
||||
2023-09-24,-42.98193078708244,6273.143925177345
|
||||
2023-09-25,-5.561737200674414,6267.582187976671
|
||||
2023-09-26,19.48204133300013,6287.064229309671
|
||||
2023-09-27,56.24999999999976,6343.314229309671
|
||||
2023-09-28,109.05931606292351,6452.373545372594
|
||||
2023-09-29,-3.7500000000000906,6448.623545372594
|
||||
2023-09-30,34.11899846667325,6482.7425438392675
|
||||
2023-10-01,94.78119432198413,6577.5237381612515
|
||||
2023-10-02,-43.125,6534.3987381612515
|
||||
2023-10-03,-1.875,6532.5237381612515
|
||||
2023-10-04,60.137202072927415,6592.660940234179
|
||||
2023-10-05,-47.15508896159986,6545.505851272579
|
||||
2023-10-06,-41.50509357550347,6504.000757697076
|
||||
2023-10-07,-21.848785430736374,6482.151972266339
|
||||
2023-10-08,-2.133334555954726,6480.018637710384
|
||||
2023-10-09,120.94752554130996,6600.966163251694
|
||||
2023-10-10,-30.55517668632468,6570.410986565369
|
||||
2023-10-11,12.918899632245676,6583.3298861976145
|
||||
2023-10-12,86.41945469513863,6669.749340892753
|
||||
2023-10-13,-38.92743296812289,6630.82190792463
|
||||
2023-10-14,-9.664398308242207,6621.157509616388
|
||||
2023-10-15,0.32442084565507256,6621.481930462043
|
||||
2023-10-16,17.666860566236,6639.148791028279
|
||||
2023-10-17,71.96782243080129,6711.11661345908
|
||||
2023-10-18,-26.10871664471985,6685.007896814361
|
||||
2023-10-19,27.131717309356045,6712.1396141237165
|
||||
2023-10-20,104.9999999999995,6817.139614123716
|
||||
2023-10-21,95.53563465609497,6912.67524877981
|
||||
2023-10-22,-39.07986275419109,6873.5953860256195
|
||||
2023-10-23,159.37499999999892,7032.970386025619
|
||||
2023-10-24,125.89084826115247,7158.861234286771
|
||||
2023-10-25,-39.7457464430455,7119.1154878437255
|
||||
2023-10-26,76.84599913941024,7195.961486983136
|
||||
2023-10-27,-40.93958561285608,7155.02190137028
|
||||
2023-10-28,-0.12582720298443117,7154.896074167295
|
||||
2023-10-29,1.7653990903884869,7156.661473257684
|
||||
2023-10-30,14.80106712479257,7171.462540382477
|
||||
2023-10-31,-0.7859893532677678,7170.676551029209
|
||||
2023-11-01,45.63294697011628,7216.309497999325
|
||||
2023-11-02,66.38708795013648,7282.696585949461
|
||||
2023-11-03,7.818102574679843,7290.514688524141
|
||||
2023-11-04,78.74999999999962,7369.264688524141
|
||||
2023-11-05,93.530612820923,7462.795301345064
|
||||
2023-11-06,-8.841261133494985,7453.954040211569
|
||||
2023-11-07,13.587699262662081,7467.541739474231
|
||||
2023-11-08,-27.39298530178767,7440.148754172443
|
||||
2023-11-09,233.65340882150477,7673.802162993948
|
||||
2023-11-10,-43.1250000000002,7630.677162993948
|
||||
2023-11-11,65.04467136509504,7695.721834359043
|
||||
2023-11-12,-24.51389709666313,7671.20793726238
|
||||
2023-11-13,6.381878610566607,7677.589815872947
|
||||
2023-11-14,124.7302217309696,7802.320037603917
|
||||
2023-11-15,-15.4428344502457,7786.877203153671
|
||||
2023-11-16,22.788163027994152,7809.665366181665
|
||||
2023-11-17,-40.58878257444296,7769.076583607222
|
||||
2023-11-18,10.05941544996627,7779.135999057188
|
||||
2023-11-19,77.18072310694912,7856.316722164137
|
||||
2023-11-20,-33.719119790508586,7822.597602373628
|
||||
2023-11-21,-39.39362250328517,7783.203979870344
|
||||
2023-11-22,62.49999999999903,7845.703979870343
|
||||
2023-11-23,-43.750000000000135,7801.953979870343
|
||||
2023-11-24,43.12499999999979,7845.078979870343
|
||||
2023-11-25,2.7372815485791326,7847.816261418921
|
||||
2023-11-26,-19.434424922416646,7828.381836496505
|
||||
2023-11-27,74.22705085378658,7902.608887350291
|
||||
2023-11-28,-21.10900157778203,7881.4998857725095
|
||||
2023-11-29,1.584413397259107,7883.084299169768
|
||||
2023-11-30,-5.586662127245132,7877.497637042523
|
||||
2023-12-01,68.65652016602549,7946.154157208548
|
||||
2023-12-02,116.24999999999937,8062.404157208547
|
||||
2023-12-03,48.229742583832405,8110.633899792379
|
||||
2023-12-04,13.529045410407036,8124.162945202786
|
||||
2023-12-05,93.37552564770242,8217.538470850488
|
||||
2023-12-06,-39.37279199427863,8178.1656788562095
|
||||
2023-12-07,160.37637314576938,8338.54205200198
|
||||
2023-12-08,-32.94183697847613,8305.600215023504
|
||||
2023-12-09,-22.342388616671474,8283.257826406832
|
||||
2023-12-10,-29.00075720912898,8254.257069197703
|
||||
2023-12-11,112.22981231135489,8366.486881509058
|
||||
2023-12-12,-46.76135746492969,8319.725524044128
|
||||
2023-12-13,102.21323939340017,8421.938763437529
|
||||
2023-12-14,33.74999999999983,8455.688763437529
|
||||
2023-12-15,63.75916511664332,8519.447928554173
|
||||
2023-12-16,-32.300370998108704,8487.147557556063
|
||||
2023-12-17,17.066032222984127,8504.213589779047
|
||||
2023-12-18,168.68048765961714,8672.894077438665
|
||||
2023-12-19,25.118359089859197,8698.012436528525
|
||||
2023-12-20,-43.080721035673186,8654.931715492852
|
||||
2023-12-21,-31.737797271451193,8623.193918221401
|
||||
2023-12-22,47.49999999999983,8670.693918221401
|
||||
2023-12-23,20.47855147595199,8691.172469697352
|
||||
2023-12-24,108.453203178383,8799.625672875736
|
||||
2023-12-25,-34.74504529363933,8764.880627582097
|
||||
2023-12-26,104.99999999999984,8869.880627582097
|
||||
2023-12-27,204.66554953165667,9074.546177113754
|
||||
2023-12-28,-5.606769621811815,9068.939407491942
|
||||
2023-12-29,220.95172689013637,9289.891134382078
|
||||
2023-12-30,-15.105228436109885,9274.785905945968
|
||||
2023-12-31,-0.005881281931285898,9274.780024664036
|
||||
|
@@ -1,298 +0,0 @@
|
||||
"""
|
||||
回测引擎 - 完整模拟手续费、返佣延迟到账、每日回撤限制、持仓时间约束
|
||||
支持同时持有多单并发,严格控制每日最大回撤
|
||||
"""
|
||||
import datetime
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from dataclasses import dataclass
|
||||
from typing import List, Optional
|
||||
|
||||
|
||||
@dataclass
|
||||
class Trade:
|
||||
entry_time: pd.Timestamp
|
||||
exit_time: Optional[pd.Timestamp] = None
|
||||
direction: int = 0
|
||||
entry_price: float = 0.0
|
||||
exit_price: float = 0.0
|
||||
pnl: float = 0.0
|
||||
fee: float = 0.0
|
||||
rebate: float = 0.0
|
||||
holding_bars: int = 0
|
||||
|
||||
|
||||
@dataclass
|
||||
class OpenPosition:
|
||||
direction: int = 0
|
||||
entry_price: float = 0.0
|
||||
entry_time: pd.Timestamp = None
|
||||
hold_bars: int = 0
|
||||
|
||||
|
||||
class BacktestEngine:
|
||||
def __init__(
|
||||
self,
|
||||
initial_capital: float = 1000.0,
|
||||
margin_per_trade: float = 25.0,
|
||||
leverage: int = 50,
|
||||
fee_rate: float = 0.0005,
|
||||
rebate_ratio: float = 0.70,
|
||||
max_daily_drawdown: float = 50.0,
|
||||
min_hold_bars: int = 1,
|
||||
stop_loss_pct: float = 0.005,
|
||||
take_profit_pct: float = 0.01,
|
||||
max_positions: int = 3,
|
||||
):
|
||||
self.initial_capital = initial_capital
|
||||
self.margin = margin_per_trade
|
||||
self.leverage = leverage
|
||||
self.notional = margin_per_trade * leverage
|
||||
self.fee_rate = fee_rate
|
||||
self.rebate_ratio = rebate_ratio
|
||||
self.max_daily_dd = max_daily_drawdown
|
||||
self.min_hold_bars = min_hold_bars
|
||||
self.sl_pct = stop_loss_pct
|
||||
self.tp_pct = take_profit_pct
|
||||
self.max_positions = max_positions
|
||||
|
||||
def _close_position(self, pos, exit_price, t, today, trades, pending_rebates):
|
||||
"""平仓一个持仓,返回 net_pnl"""
|
||||
qty = self.notional / pos.entry_price
|
||||
if pos.direction == 1:
|
||||
raw_pnl = qty * (exit_price - pos.entry_price)
|
||||
else:
|
||||
raw_pnl = qty * (pos.entry_price - exit_price)
|
||||
|
||||
close_fee = self.notional * self.fee_rate
|
||||
net_pnl = raw_pnl - close_fee
|
||||
total_fee = self.notional * self.fee_rate * 2
|
||||
rebate = total_fee * self.rebate_ratio
|
||||
|
||||
rebate_date = today + datetime.timedelta(days=1)
|
||||
pending_rebates.append((rebate_date, rebate))
|
||||
|
||||
trades.append(Trade(
|
||||
entry_time=pos.entry_time, exit_time=t,
|
||||
direction=pos.direction, entry_price=pos.entry_price,
|
||||
exit_price=exit_price, pnl=net_pnl, fee=total_fee,
|
||||
rebate=rebate, holding_bars=pos.hold_bars,
|
||||
))
|
||||
return net_pnl
|
||||
|
||||
def _worst_unrealized(self, positions, h, lo):
|
||||
"""计算所有持仓在本K线内的最坏浮动亏损(用 high/low)"""
|
||||
worst = 0.0
|
||||
for pos in positions:
|
||||
qty = self.notional / pos.entry_price
|
||||
if pos.direction == 1:
|
||||
# 多单最坏情况: 价格跌到 low
|
||||
worst += qty * (lo - pos.entry_price)
|
||||
else:
|
||||
# 空单最坏情况: 价格涨到 high
|
||||
worst += qty * (pos.entry_price - h)
|
||||
return worst
|
||||
|
||||
def run(self, df: pd.DataFrame, score: pd.Series, open_threshold: float = 0.3) -> dict:
|
||||
capital = self.initial_capital
|
||||
trades: List[Trade] = []
|
||||
daily_pnl = {}
|
||||
pending_rebates = []
|
||||
positions: List[OpenPosition] = []
|
||||
used_margin = 0.0
|
||||
|
||||
current_date = None
|
||||
day_pnl = 0.0
|
||||
day_stopped = False
|
||||
|
||||
close_arr = df['close'].values
|
||||
high_arr = df['high'].values
|
||||
low_arr = df['low'].values
|
||||
times = df.index
|
||||
scores = score.values
|
||||
|
||||
for i in range(len(df)):
|
||||
t = times[i]
|
||||
c = close_arr[i]
|
||||
h = high_arr[i]
|
||||
lo = low_arr[i]
|
||||
s = scores[i]
|
||||
today = t.date()
|
||||
|
||||
# --- 日切换 ---
|
||||
if today != current_date:
|
||||
if current_date is not None:
|
||||
daily_pnl[current_date] = day_pnl
|
||||
current_date = today
|
||||
day_pnl = 0.0
|
||||
day_stopped = False
|
||||
|
||||
arrived = []
|
||||
remaining = []
|
||||
for rd, ra in pending_rebates:
|
||||
if today >= rd:
|
||||
arrived.append(ra)
|
||||
else:
|
||||
remaining.append((rd, ra))
|
||||
if arrived:
|
||||
capital += sum(arrived)
|
||||
pending_rebates = remaining
|
||||
|
||||
if day_stopped:
|
||||
for pos in positions:
|
||||
pos.hold_bars += 1
|
||||
continue
|
||||
|
||||
# --- 正常止损止盈逻辑 ---
|
||||
closed_indices = []
|
||||
for pi, pos in enumerate(positions):
|
||||
pos.hold_bars += 1
|
||||
qty = self.notional / pos.entry_price
|
||||
|
||||
if pos.direction == 1:
|
||||
sl_price = pos.entry_price * (1 - self.sl_pct)
|
||||
tp_price = pos.entry_price * (1 + self.tp_pct)
|
||||
hit_sl = lo <= sl_price
|
||||
hit_tp = h >= tp_price
|
||||
else:
|
||||
sl_price = pos.entry_price * (1 + self.sl_pct)
|
||||
tp_price = pos.entry_price * (1 - self.tp_pct)
|
||||
hit_sl = h >= sl_price
|
||||
hit_tp = lo <= tp_price
|
||||
|
||||
should_close = False
|
||||
exit_price = c
|
||||
|
||||
# 止损始终生效(不受持仓时间限制)
|
||||
if hit_sl:
|
||||
should_close = True
|
||||
exit_price = sl_price
|
||||
elif pos.hold_bars >= self.min_hold_bars:
|
||||
# 止盈和信号反转需要满足最小持仓时间
|
||||
if hit_tp:
|
||||
should_close = True
|
||||
exit_price = tp_price
|
||||
elif (pos.direction == 1 and s < -open_threshold) or \
|
||||
(pos.direction == -1 and s > open_threshold):
|
||||
should_close = True
|
||||
exit_price = c
|
||||
|
||||
if should_close:
|
||||
net = self._close_position(pos, exit_price, t, today, trades, pending_rebates)
|
||||
capital += net
|
||||
used_margin -= self.margin
|
||||
day_pnl += net
|
||||
closed_indices.append(pi)
|
||||
|
||||
# 每笔平仓后立即检查日回撤
|
||||
if day_pnl < -self.max_daily_dd:
|
||||
# 熔断剩余持仓
|
||||
for pj, pos2 in enumerate(positions):
|
||||
if pj not in closed_indices:
|
||||
pos2.hold_bars += 1
|
||||
net2 = self._close_position(pos2, c, t, today, trades, pending_rebates)
|
||||
capital += net2
|
||||
used_margin -= self.margin
|
||||
day_pnl += net2
|
||||
closed_indices.append(pj)
|
||||
day_stopped = True
|
||||
break
|
||||
|
||||
for pi in sorted(set(closed_indices), reverse=True):
|
||||
positions.pop(pi)
|
||||
|
||||
if day_stopped:
|
||||
continue
|
||||
|
||||
# --- 开仓 ---
|
||||
if len(positions) < self.max_positions:
|
||||
if np.isnan(s):
|
||||
continue
|
||||
|
||||
# 开仓前检查: 当前所有持仓 + 新仓同时止损的最大亏损
|
||||
n_after = len(positions) + 1
|
||||
worst_total_sl = n_after * (self.notional * self.sl_pct + self.notional * self.fee_rate * 2)
|
||||
if day_pnl - worst_total_sl < -self.max_daily_dd:
|
||||
continue # 风险敞口太大
|
||||
|
||||
open_fee = self.notional * self.fee_rate
|
||||
if capital - used_margin < self.margin + open_fee:
|
||||
continue
|
||||
|
||||
new_dir = 0
|
||||
if s > open_threshold:
|
||||
new_dir = 1
|
||||
elif s < -open_threshold:
|
||||
new_dir = -1
|
||||
|
||||
if new_dir != 0:
|
||||
positions.append(OpenPosition(
|
||||
direction=new_dir, entry_price=c,
|
||||
entry_time=t, hold_bars=0,
|
||||
))
|
||||
capital -= open_fee
|
||||
used_margin += self.margin
|
||||
day_pnl -= open_fee
|
||||
|
||||
# 最后一天
|
||||
if current_date is not None:
|
||||
daily_pnl[current_date] = day_pnl
|
||||
|
||||
# 强制平仓
|
||||
if positions and len(df) > 0:
|
||||
last_close = close_arr[-1]
|
||||
for pos in positions:
|
||||
qty = self.notional / pos.entry_price
|
||||
if pos.direction == 1:
|
||||
raw_pnl = qty * (last_close - pos.entry_price)
|
||||
else:
|
||||
raw_pnl = qty * (pos.entry_price - last_close)
|
||||
fee = self.notional * self.fee_rate
|
||||
net_pnl = raw_pnl - fee
|
||||
capital += net_pnl
|
||||
trades.append(Trade(
|
||||
entry_time=pos.entry_time, exit_time=times[-1],
|
||||
direction=pos.direction, entry_price=pos.entry_price,
|
||||
exit_price=last_close, pnl=net_pnl,
|
||||
fee=self.notional * self.fee_rate * 2,
|
||||
rebate=0, holding_bars=pos.hold_bars,
|
||||
))
|
||||
|
||||
remaining_rebate = sum(amt for _, amt in pending_rebates)
|
||||
capital += remaining_rebate
|
||||
|
||||
return self._build_result(trades, daily_pnl, capital)
|
||||
|
||||
def _build_result(self, trades, daily_pnl, final_capital):
|
||||
if not trades:
|
||||
return {
|
||||
'total_pnl': 0, 'final_capital': final_capital,
|
||||
'num_trades': 0, 'win_rate': 0, 'avg_pnl': 0,
|
||||
'max_daily_dd': 0, 'avg_daily_pnl': 0,
|
||||
'profit_factor': 0, 'trades': [], 'daily_pnl': daily_pnl,
|
||||
'total_fee': 0, 'total_rebate': 0,
|
||||
}
|
||||
|
||||
pnls = [t.pnl for t in trades]
|
||||
wins = [p for p in pnls if p > 0]
|
||||
losses = [p for p in pnls if p <= 0]
|
||||
daily_vals = list(daily_pnl.values())
|
||||
total_fee = sum(t.fee for t in trades)
|
||||
total_rebate = sum(t.rebate for t in trades)
|
||||
gross_profit = sum(wins) if wins else 0
|
||||
gross_loss = abs(sum(losses)) if losses else 1e-10
|
||||
|
||||
return {
|
||||
'total_pnl': sum(pnls) + total_rebate,
|
||||
'final_capital': final_capital,
|
||||
'num_trades': len(trades),
|
||||
'win_rate': len(wins) / len(trades) if trades else 0,
|
||||
'avg_pnl': np.mean(pnls),
|
||||
'max_daily_dd': min(daily_vals) if daily_vals else 0,
|
||||
'avg_daily_pnl': np.mean(daily_vals) if daily_vals else 0,
|
||||
'profit_factor': gross_profit / gross_loss,
|
||||
'total_fee': total_fee,
|
||||
'total_rebate': total_rebate,
|
||||
'trades': trades,
|
||||
'daily_pnl': daily_pnl,
|
||||
}
|
||||
@@ -1,485 +0,0 @@
|
||||
"""Bollinger Band mean-reversion strategy backtest.
|
||||
|
||||
Logic:
|
||||
- Price touches upper BB → close any long, open short
|
||||
- Price touches lower BB → close any short, open long
|
||||
- Always in position (flip between long and short)
|
||||
|
||||
Uses 5-minute OHLC data from the database.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timezone
|
||||
from typing import List, Optional
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
from .indicators import bollinger
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Config & result types
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@dataclass
|
||||
class BBConfig:
|
||||
# Bollinger Band parameters
|
||||
bb_period: int = 20 # SMA window
|
||||
bb_std: float = 2.0 # standard deviation multiplier
|
||||
|
||||
# Position sizing
|
||||
margin_per_trade: float = 80.0
|
||||
leverage: float = 100.0
|
||||
initial_capital: float = 1000.0
|
||||
|
||||
# Risk management
|
||||
max_daily_loss: float = 150.0 # stop trading after this daily loss
|
||||
max_daily_loss_pct: float = 0.0 # if >0, daily loss limit = equity * pct (overrides fixed)
|
||||
stop_loss_pct: float = 0.0 # 0 = disabled; e.g. 0.02 = 2% SL from entry
|
||||
|
||||
# Liquidation
|
||||
liq_enabled: bool = True # enable liquidation simulation
|
||||
cross_margin: bool = True # 全仓模式: 仅当 equity<=0 爆仓; False=逐仓: 按仓位保证金算强平价
|
||||
maint_margin_rate: float = 0.005 # 逐仓时用: 0.5% 维持保证金率
|
||||
|
||||
# Slippage: applied to each trade execution price
|
||||
slippage_pct: float = 0.0005 # 0.05% slippage per trade
|
||||
|
||||
# 成交价模式: False=理想(在触轨的极价成交), True=真实(在K线收盘价成交)
|
||||
# 实盘检测到触及布林带后以市价单成交,通常接近收盘价
|
||||
fill_at_close: bool = False
|
||||
|
||||
# Max single order notional (market capacity limit, USDT)
|
||||
max_notional: float = 0.0 # 0 = unlimited; e.g. 500000 = 50万U max per order
|
||||
|
||||
# Dynamic sizing: if > 0, margin = equity * margin_pct (overrides margin_per_trade)
|
||||
margin_pct: float = 0.0 # e.g. 0.01 = 1% of equity per trade
|
||||
|
||||
# Fee structure (taker)
|
||||
fee_rate: float = 0.0006 # 0.06%
|
||||
rebate_rate: float = 0.0 # instant maker rebate (if any)
|
||||
|
||||
# Delayed rebate: rebate_pct of daily fees returned next day at rebate_hour UTC
|
||||
rebate_pct: float = 0.0 # e.g. 0.70 = 70% rebate
|
||||
rebate_hour_utc: int = 0 # hour in UTC when rebate arrives (0 = 8am UTC+8)
|
||||
|
||||
# Pyramid (加仓): add to position on repeated same-direction BB touch
|
||||
pyramid_enabled: bool = False
|
||||
pyramid_decay: float = 0.99 # each add uses margin * decay^n (n = add count)
|
||||
pyramid_max: int = 10 # max number of adds (0 = unlimited)
|
||||
# Increment mode: each add uses equity * (margin_pct + pyramid_step * n)
|
||||
# e.g. step=0.01 → 1st open=1%, 1st add=2%, 2nd add=3% ...
|
||||
pyramid_step: float = 0.0 # 0 = use decay mode; >0 = use increment mode
|
||||
|
||||
|
||||
@dataclass
|
||||
class BBTrade:
|
||||
side: str # "long" or "short"
|
||||
entry_price: float
|
||||
exit_price: float
|
||||
entry_time: object # pd.Timestamp
|
||||
exit_time: object
|
||||
margin: float
|
||||
leverage: float
|
||||
qty: float
|
||||
gross_pnl: float
|
||||
fee: float
|
||||
net_pnl: float
|
||||
|
||||
|
||||
@dataclass
|
||||
class BBResult:
|
||||
equity_curve: pd.DataFrame # columns: equity, balance, price, position
|
||||
trades: List[BBTrade]
|
||||
daily_stats: pd.DataFrame # daily equity + pnl
|
||||
total_fee: float
|
||||
total_rebate: float
|
||||
config: BBConfig
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Backtest engine
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def run_bb_backtest(df: pd.DataFrame, cfg: BBConfig) -> BBResult:
|
||||
"""Run Bollinger Band mean-reversion backtest on 5m OHLC data."""
|
||||
|
||||
close = df["close"].astype(float)
|
||||
high = df["high"].astype(float)
|
||||
low = df["low"].astype(float)
|
||||
n = len(df)
|
||||
|
||||
# Compute Bollinger Bands
|
||||
bb_mid, bb_upper, bb_lower, bb_width = bollinger(close, cfg.bb_period, cfg.bb_std)
|
||||
|
||||
# Convert to numpy for speed
|
||||
arr_close = close.values
|
||||
arr_high = high.values
|
||||
arr_low = low.values
|
||||
arr_upper = bb_upper.values
|
||||
arr_lower = bb_lower.values
|
||||
ts_index = df.index
|
||||
|
||||
# State
|
||||
balance = cfg.initial_capital
|
||||
position = 0 # +1 = long, -1 = short, 0 = flat
|
||||
entry_price = 0.0
|
||||
entry_time = None
|
||||
entry_margin = 0.0
|
||||
entry_qty = 0.0
|
||||
pyramid_count = 0 # number of adds so far
|
||||
last_add_margin = 0.0 # margin used in last open/add
|
||||
|
||||
trades: List[BBTrade] = []
|
||||
total_fee = 0.0
|
||||
total_rebate = 0.0
|
||||
|
||||
# Daily tracking
|
||||
day_pnl = 0.0
|
||||
day_stopped = False
|
||||
current_day = None
|
||||
day_start_equity = cfg.initial_capital # equity at start of each day
|
||||
|
||||
# Delayed rebate tracking
|
||||
pending_rebate = 0.0 # fees from previous day to be rebated
|
||||
today_fees = 0.0 # fees accumulated today
|
||||
rebate_applied_today = False
|
||||
|
||||
# Output arrays
|
||||
out_equity = np.full(n, np.nan)
|
||||
out_balance = np.full(n, np.nan)
|
||||
out_position = np.zeros(n)
|
||||
|
||||
def unrealised(price):
|
||||
if position == 0:
|
||||
return 0.0
|
||||
if position == 1:
|
||||
return entry_qty * (price - entry_price)
|
||||
else:
|
||||
return entry_qty * (entry_price - price)
|
||||
|
||||
def close_position(exit_price, exit_idx):
|
||||
nonlocal balance, position, entry_price, entry_time, entry_margin, entry_qty
|
||||
nonlocal total_fee, total_rebate, day_pnl, today_fees
|
||||
nonlocal pyramid_count, last_add_margin
|
||||
|
||||
if position == 0:
|
||||
return
|
||||
|
||||
# Apply slippage: closing long sells lower, closing short buys higher
|
||||
if position == 1:
|
||||
exit_price = exit_price * (1 - cfg.slippage_pct)
|
||||
else:
|
||||
exit_price = exit_price * (1 + cfg.slippage_pct)
|
||||
|
||||
if position == 1:
|
||||
gross = entry_qty * (exit_price - entry_price)
|
||||
else:
|
||||
gross = entry_qty * (entry_price - exit_price)
|
||||
|
||||
exit_notional = entry_qty * exit_price
|
||||
fee = exit_notional * cfg.fee_rate
|
||||
rebate = exit_notional * cfg.rebate_rate # instant rebate only
|
||||
net = gross - fee + rebate
|
||||
|
||||
trades.append(BBTrade(
|
||||
side="long" if position == 1 else "short",
|
||||
entry_price=entry_price,
|
||||
exit_price=exit_price,
|
||||
entry_time=entry_time,
|
||||
exit_time=ts_index[exit_idx],
|
||||
margin=entry_margin,
|
||||
leverage=cfg.leverage,
|
||||
qty=entry_qty,
|
||||
gross_pnl=gross,
|
||||
fee=fee,
|
||||
net_pnl=net,
|
||||
))
|
||||
|
||||
balance += net
|
||||
total_fee += fee
|
||||
total_rebate += rebate
|
||||
today_fees += fee
|
||||
day_pnl += net
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_time = None
|
||||
entry_margin = 0.0
|
||||
entry_qty = 0.0
|
||||
pyramid_count = 0
|
||||
last_add_margin = 0.0
|
||||
|
||||
def open_position(side, price, idx, is_add=False):
|
||||
nonlocal position, entry_price, entry_time, entry_margin, entry_qty
|
||||
nonlocal balance, total_fee, day_pnl, today_fees
|
||||
nonlocal pyramid_count, last_add_margin
|
||||
|
||||
# Apply slippage: buy higher, sell lower
|
||||
if side == "long" or (is_add and position == 1):
|
||||
price = price * (1 + cfg.slippage_pct)
|
||||
else:
|
||||
price = price * (1 - cfg.slippage_pct)
|
||||
|
||||
if is_add and cfg.pyramid_step > 0:
|
||||
# 递增加仓: margin = equity * (margin_pct + step * (count+1))
|
||||
equity = balance + unrealised(price)
|
||||
pct = cfg.margin_pct + cfg.pyramid_step * (pyramid_count + 1)
|
||||
margin = equity * pct
|
||||
elif is_add:
|
||||
# 衰减加仓: margin = last_add_margin * decay
|
||||
margin = last_add_margin * cfg.pyramid_decay
|
||||
elif cfg.margin_pct > 0:
|
||||
equity = balance + unrealised(price) if position != 0 else balance
|
||||
margin = equity * cfg.margin_pct
|
||||
else:
|
||||
margin = cfg.margin_per_trade
|
||||
margin = min(margin, balance * 0.95)
|
||||
if margin <= 0:
|
||||
return
|
||||
notional = margin * cfg.leverage
|
||||
|
||||
# Cap notional to market capacity limit
|
||||
if cfg.max_notional > 0 and notional > cfg.max_notional:
|
||||
notional = cfg.max_notional
|
||||
margin = notional / cfg.leverage
|
||||
|
||||
qty = notional / price
|
||||
fee = notional * cfg.fee_rate
|
||||
|
||||
balance -= fee
|
||||
total_fee += fee
|
||||
today_fees += fee
|
||||
day_pnl -= fee
|
||||
|
||||
if is_add and position != 0:
|
||||
# 加仓: weighted average entry price
|
||||
old_notional = entry_qty * entry_price
|
||||
new_notional = qty * price
|
||||
entry_qty += qty
|
||||
entry_price = (old_notional + new_notional) / entry_qty
|
||||
entry_margin += margin
|
||||
pyramid_count += 1
|
||||
last_add_margin = margin
|
||||
else:
|
||||
# 新开仓
|
||||
position = 1 if side == "long" else -1
|
||||
entry_price = price
|
||||
entry_time = ts_index[idx]
|
||||
entry_margin = margin
|
||||
entry_qty = qty
|
||||
pyramid_count = 0
|
||||
last_add_margin = margin
|
||||
|
||||
# Main loop
|
||||
for i in range(n):
|
||||
# Daily reset + delayed rebate
|
||||
bar_day = ts_index[i].date() if hasattr(ts_index[i], 'date') else None
|
||||
bar_hour = ts_index[i].hour if hasattr(ts_index[i], 'hour') else 0
|
||||
if bar_day is not None and bar_day != current_day:
|
||||
# New day: move today's fees to pending, reset
|
||||
if cfg.rebate_pct > 0:
|
||||
pending_rebate += today_fees * cfg.rebate_pct
|
||||
today_fees = 0.0
|
||||
rebate_applied_today = False
|
||||
day_start_equity = balance + unrealised(arr_close[i])
|
||||
day_pnl = 0.0
|
||||
day_stopped = False
|
||||
current_day = bar_day
|
||||
|
||||
# Apply delayed rebate at specified hour
|
||||
if cfg.rebate_pct > 0 and not rebate_applied_today and bar_hour >= cfg.rebate_hour_utc and pending_rebate > 0:
|
||||
balance += pending_rebate
|
||||
total_rebate += pending_rebate
|
||||
pending_rebate = 0.0
|
||||
rebate_applied_today = True
|
||||
|
||||
# Skip if BB not ready
|
||||
if np.isnan(arr_upper[i]) or np.isnan(arr_lower[i]):
|
||||
out_equity[i] = balance + unrealised(arr_close[i])
|
||||
out_balance[i] = balance
|
||||
out_position[i] = position
|
||||
continue
|
||||
|
||||
# Daily loss check (percentage-based if configured, else fixed)
|
||||
if day_stopped:
|
||||
out_equity[i] = balance + unrealised(arr_close[i])
|
||||
out_balance[i] = balance
|
||||
out_position[i] = position
|
||||
continue
|
||||
|
||||
cur_equity = balance + unrealised(arr_close[i])
|
||||
if cfg.max_daily_loss_pct > 0:
|
||||
# percentage-based: use start-of-day equity
|
||||
daily_loss_limit = day_start_equity * cfg.max_daily_loss_pct
|
||||
else:
|
||||
daily_loss_limit = cfg.max_daily_loss
|
||||
if day_pnl + unrealised(arr_close[i]) <= -daily_loss_limit:
|
||||
close_position(arr_close[i], i)
|
||||
day_stopped = True
|
||||
out_equity[i] = balance
|
||||
out_balance[i] = balance
|
||||
out_position[i] = 0
|
||||
continue
|
||||
|
||||
# Stop loss check
|
||||
if position != 0 and cfg.stop_loss_pct > 0:
|
||||
if position == 1 and arr_low[i] <= entry_price * (1 - cfg.stop_loss_pct):
|
||||
sl_price = entry_price * (1 - cfg.stop_loss_pct)
|
||||
close_position(sl_price, i)
|
||||
elif position == -1 and arr_high[i] >= entry_price * (1 + cfg.stop_loss_pct):
|
||||
sl_price = entry_price * (1 + cfg.stop_loss_pct)
|
||||
close_position(sl_price, i)
|
||||
|
||||
# Liquidation check
|
||||
# 全仓(cross_margin): 仅当 账户权益<=0 时爆仓,整仓担保
|
||||
# 逐仓: 按仓位保证金算强平价
|
||||
if position != 0 and cfg.liq_enabled and entry_margin > 0:
|
||||
cur_equity = balance + unrealised(arr_close[i])
|
||||
upnl = unrealised(arr_close[i])
|
||||
if cfg.cross_margin:
|
||||
# 全仓: 只有权益归零才爆仓
|
||||
if cur_equity <= 0:
|
||||
balance += upnl # 实现亏损
|
||||
balance = max(0.0, balance)
|
||||
day_pnl += upnl
|
||||
trades.append(BBTrade(
|
||||
side="long" if position == 1 else "short",
|
||||
entry_price=entry_price, exit_price=arr_close[i],
|
||||
entry_time=entry_time, exit_time=ts_index[i],
|
||||
margin=entry_margin, leverage=cfg.leverage, qty=entry_qty,
|
||||
gross_pnl=upnl, fee=0.0, net_pnl=upnl,
|
||||
))
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_time = None
|
||||
entry_margin = 0.0
|
||||
entry_qty = 0.0
|
||||
pyramid_count = 0
|
||||
last_add_margin = 0.0
|
||||
out_equity[i] = balance
|
||||
out_balance[i] = balance
|
||||
out_position[i] = 0
|
||||
if balance <= 0:
|
||||
out_equity[i:] = 0.0
|
||||
out_balance[i:] = 0.0
|
||||
break
|
||||
else:
|
||||
# 逐仓: 按强平价
|
||||
liq_threshold = 1.0 / cfg.leverage * (1 - cfg.maint_margin_rate)
|
||||
if position == 1:
|
||||
liq_price = entry_price * (1 - liq_threshold)
|
||||
if arr_low[i] <= liq_price:
|
||||
balance -= entry_margin
|
||||
day_pnl -= entry_margin
|
||||
trades.append(BBTrade(
|
||||
side="long", entry_price=entry_price, exit_price=liq_price,
|
||||
entry_time=entry_time, exit_time=ts_index[i],
|
||||
margin=entry_margin, leverage=cfg.leverage, qty=entry_qty,
|
||||
gross_pnl=-entry_margin, fee=0.0, net_pnl=-entry_margin,
|
||||
))
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_time = None
|
||||
entry_margin = 0.0
|
||||
entry_qty = 0.0
|
||||
pyramid_count = 0
|
||||
last_add_margin = 0.0
|
||||
if balance <= 0:
|
||||
balance = 0.0
|
||||
out_equity[i] = 0.0
|
||||
out_balance[i] = 0.0
|
||||
out_position[i] = 0
|
||||
out_equity[i:] = 0.0
|
||||
out_balance[i:] = 0.0
|
||||
break
|
||||
elif position == -1:
|
||||
liq_price = entry_price * (1 + liq_threshold)
|
||||
if arr_high[i] >= liq_price:
|
||||
balance -= entry_margin
|
||||
day_pnl -= entry_margin
|
||||
trades.append(BBTrade(
|
||||
side="short", entry_price=entry_price, exit_price=liq_price,
|
||||
entry_time=entry_time, exit_time=ts_index[i],
|
||||
margin=entry_margin, leverage=cfg.leverage, qty=entry_qty,
|
||||
gross_pnl=-entry_margin, fee=0.0, net_pnl=-entry_margin,
|
||||
))
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_time = None
|
||||
entry_margin = 0.0
|
||||
entry_qty = 0.0
|
||||
pyramid_count = 0
|
||||
last_add_margin = 0.0
|
||||
if balance <= 0:
|
||||
balance = 0.0
|
||||
out_equity[i:] = 0.0
|
||||
out_balance[i:] = 0.0
|
||||
break
|
||||
|
||||
# Signal detection: use high/low to check if price touched BB
|
||||
touched_upper = arr_high[i] >= arr_upper[i]
|
||||
touched_lower = arr_low[i] <= arr_lower[i]
|
||||
|
||||
# 成交价: fill_at_close=True 时用收盘价(模拟实盘市价单),否则用触轨价(理想化)
|
||||
fill_price = arr_close[i] if cfg.fill_at_close else None
|
||||
|
||||
if touched_upper and touched_lower:
|
||||
# Both touched in same bar (wide bar) — skip, too volatile
|
||||
pass
|
||||
elif touched_upper:
|
||||
# Price touched upper BB → go short
|
||||
exec_price = fill_price if fill_price is not None else arr_upper[i]
|
||||
if position == 1:
|
||||
close_position(exec_price, i)
|
||||
if position == 0:
|
||||
open_position("short", exec_price, i)
|
||||
elif position == -1 and cfg.pyramid_enabled:
|
||||
can_add = cfg.pyramid_max <= 0 or pyramid_count < cfg.pyramid_max
|
||||
if can_add:
|
||||
open_position("short", exec_price, i, is_add=True)
|
||||
elif touched_lower:
|
||||
# Price touched lower BB → go long
|
||||
exec_price = fill_price if fill_price is not None else arr_lower[i]
|
||||
if position == -1:
|
||||
close_position(exec_price, i)
|
||||
if position == 0:
|
||||
open_position("long", exec_price, i)
|
||||
elif position == 1 and cfg.pyramid_enabled:
|
||||
can_add = cfg.pyramid_max <= 0 or pyramid_count < cfg.pyramid_max
|
||||
if can_add:
|
||||
open_position("long", exec_price, i, is_add=True)
|
||||
|
||||
# Record equity
|
||||
out_equity[i] = balance + unrealised(arr_close[i])
|
||||
out_balance[i] = balance
|
||||
out_position[i] = position
|
||||
|
||||
# Force close at end
|
||||
if position != 0:
|
||||
close_position(arr_close[n - 1], n - 1)
|
||||
out_equity[n - 1] = balance
|
||||
out_balance[n - 1] = balance
|
||||
out_position[n - 1] = 0
|
||||
|
||||
# Build equity DataFrame
|
||||
eq_df = pd.DataFrame({
|
||||
"equity": out_equity,
|
||||
"balance": out_balance,
|
||||
"price": arr_close,
|
||||
"position": out_position,
|
||||
}, index=ts_index)
|
||||
|
||||
# Daily stats
|
||||
daily_eq = eq_df["equity"].resample("1D").last().dropna().to_frame("equity")
|
||||
daily_eq["pnl"] = daily_eq["equity"].diff().fillna(0.0)
|
||||
|
||||
return BBResult(
|
||||
equity_curve=eq_df,
|
||||
trades=trades,
|
||||
daily_stats=daily_eq,
|
||||
total_fee=total_fee,
|
||||
total_rebate=total_rebate,
|
||||
config=cfg,
|
||||
)
|
||||
@@ -1,294 +0,0 @@
|
||||
"""布林带均线策略回测(优化版)
|
||||
|
||||
策略逻辑:
|
||||
- 阳线 + 碰到布林带均线 → 开多(可选 1m 线过滤:先涨碰到才开)
|
||||
- 持多: 碰到上轨 → 止盈(无下轨止损)
|
||||
- 阴线 + 碰到布林带均线 → 平多开空(可选 1m:先跌碰到才开)
|
||||
- 持空: 碰到下轨 → 止盈(无上轨止损)
|
||||
|
||||
全仓模式 | 200U | 1% 权益/单 | 万五手续费 | 90%返佣次日8点到账 | 100x杠杆
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from typing import List, Optional
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
from .indicators import bollinger
|
||||
|
||||
|
||||
@dataclass
|
||||
class BBMidlineConfig:
|
||||
bb_period: int = 20
|
||||
bb_std: float = 2.0
|
||||
initial_capital: float = 200.0
|
||||
margin_pct: float = 0.01
|
||||
leverage: float = 100.0
|
||||
cross_margin: bool = True
|
||||
fee_rate: float = 0.0005
|
||||
rebate_pct: float = 0.90
|
||||
rebate_hour_utc: int = 0
|
||||
slippage_pct: float = 0.0
|
||||
fill_at_close: bool = True
|
||||
# 是否用 1m 线判断「先涨碰到」/「先跌碰到」均线
|
||||
use_1m_touch_filter: bool = True
|
||||
# 主K线周期(分钟),用于 1m 触及方向时的桶对齐,5/15/30
|
||||
kline_step_min: int = 5
|
||||
|
||||
|
||||
@dataclass
|
||||
class BBTrade:
|
||||
side: str
|
||||
entry_price: float
|
||||
exit_price: float
|
||||
entry_time: object
|
||||
exit_time: object
|
||||
margin: float
|
||||
leverage: float
|
||||
qty: float
|
||||
gross_pnl: float
|
||||
fee: float
|
||||
net_pnl: float
|
||||
exit_reason: str
|
||||
|
||||
|
||||
@dataclass
|
||||
class BBMidlineResult:
|
||||
equity_curve: pd.DataFrame
|
||||
trades: List[BBTrade]
|
||||
daily_stats: pd.DataFrame
|
||||
total_fee: float
|
||||
total_rebate: float
|
||||
config: BBMidlineConfig
|
||||
|
||||
|
||||
def run_bb_midline_backtest(
|
||||
df: pd.DataFrame,
|
||||
cfg: BBMidlineConfig,
|
||||
df_1m: Optional[pd.DataFrame] = None,
|
||||
arr_touch_dir_override: Optional[np.ndarray] = None,
|
||||
) -> BBMidlineResult:
|
||||
close = df["close"].astype(float)
|
||||
high = df["high"].astype(float)
|
||||
low = df["low"].astype(float)
|
||||
open_ = df["open"].astype(float)
|
||||
n = len(df)
|
||||
|
||||
bb_mid, bb_upper, bb_lower, _ = bollinger(close, cfg.bb_period, cfg.bb_std)
|
||||
arr_mid = bb_mid.values
|
||||
|
||||
# 1m 触及方向:1=先涨碰到, -1=先跌碰到, 0=未碰到
|
||||
arr_touch_dir = None
|
||||
if arr_touch_dir_override is not None:
|
||||
arr_touch_dir = np.asarray(arr_touch_dir_override, dtype=np.int32)
|
||||
if len(arr_touch_dir) != n:
|
||||
raise ValueError(f"arr_touch_dir_override 长度不匹配: {len(arr_touch_dir)} != {n}")
|
||||
elif cfg.use_1m_touch_filter and df_1m is not None and len(df_1m) > 0:
|
||||
from .data_loader import get_1m_touch_direction
|
||||
arr_touch_dir = get_1m_touch_direction(df, df_1m, arr_mid, kline_step_min=cfg.kline_step_min)
|
||||
|
||||
arr_close = close.values
|
||||
arr_high = high.values
|
||||
arr_low = low.values
|
||||
arr_open = open_.values
|
||||
arr_upper = bb_upper.values
|
||||
arr_lower = bb_lower.values
|
||||
ts_index = df.index
|
||||
|
||||
balance = cfg.initial_capital
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_time = None
|
||||
entry_margin = 0.0
|
||||
entry_qty = 0.0
|
||||
|
||||
trades: List[BBTrade] = []
|
||||
total_fee = 0.0
|
||||
total_rebate = 0.0
|
||||
|
||||
day_pnl = 0.0
|
||||
current_day = None
|
||||
today_fees = 0.0
|
||||
pending_rebate = 0.0
|
||||
rebate_applied_today = False
|
||||
|
||||
out_equity = np.full(n, np.nan)
|
||||
out_balance = np.full(n, np.nan)
|
||||
out_position = np.zeros(n)
|
||||
|
||||
def unrealised(price):
|
||||
if position == 0:
|
||||
return 0.0
|
||||
if position == 1:
|
||||
return entry_qty * (price - entry_price)
|
||||
return entry_qty * (entry_price - price)
|
||||
|
||||
def close_position(exit_price, exit_idx, reason: str):
|
||||
nonlocal balance, position, entry_price, entry_time, entry_margin, entry_qty
|
||||
nonlocal total_fee, total_rebate, day_pnl, today_fees
|
||||
|
||||
if position == 0:
|
||||
return
|
||||
|
||||
if position == 1:
|
||||
exit_price = exit_price * (1 - cfg.slippage_pct)
|
||||
else:
|
||||
exit_price = exit_price * (1 + cfg.slippage_pct)
|
||||
|
||||
if position == 1:
|
||||
gross = entry_qty * (exit_price - entry_price)
|
||||
else:
|
||||
gross = entry_qty * (entry_price - exit_price)
|
||||
|
||||
exit_notional = entry_qty * exit_price
|
||||
fee = exit_notional * cfg.fee_rate
|
||||
net = gross - fee
|
||||
|
||||
trades.append(BBTrade(
|
||||
side="long" if position == 1 else "short",
|
||||
entry_price=entry_price,
|
||||
exit_price=exit_price,
|
||||
entry_time=entry_time,
|
||||
exit_time=ts_index[exit_idx],
|
||||
margin=entry_margin,
|
||||
leverage=cfg.leverage,
|
||||
qty=entry_qty,
|
||||
gross_pnl=gross,
|
||||
fee=fee,
|
||||
net_pnl=net,
|
||||
exit_reason=reason,
|
||||
))
|
||||
|
||||
balance += net
|
||||
total_fee += fee
|
||||
today_fees += fee
|
||||
day_pnl += net
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_time = None
|
||||
entry_margin = 0.0
|
||||
entry_qty = 0.0
|
||||
|
||||
def open_position(side, price, idx):
|
||||
nonlocal position, entry_price, entry_time, entry_margin, entry_qty
|
||||
nonlocal balance, total_fee, day_pnl, today_fees
|
||||
|
||||
if side == "long":
|
||||
price = price * (1 + cfg.slippage_pct)
|
||||
else:
|
||||
price = price * (1 - cfg.slippage_pct)
|
||||
|
||||
equity = balance + unrealised(price) if position != 0 else balance
|
||||
margin = equity * cfg.margin_pct
|
||||
margin = min(margin, balance * 0.95)
|
||||
if margin <= 0:
|
||||
return False
|
||||
|
||||
notional = margin * cfg.leverage
|
||||
qty = notional / price
|
||||
fee = notional * cfg.fee_rate
|
||||
|
||||
balance -= fee
|
||||
total_fee += fee
|
||||
today_fees += fee
|
||||
day_pnl -= fee
|
||||
|
||||
position = 1 if side == "long" else -1
|
||||
entry_price = price
|
||||
entry_time = ts_index[idx]
|
||||
entry_margin = margin
|
||||
entry_qty = qty
|
||||
return True
|
||||
|
||||
for i in range(n):
|
||||
bar_day = ts_index[i].date() if hasattr(ts_index[i], 'date') else None
|
||||
bar_hour = ts_index[i].hour if hasattr(ts_index[i], 'hour') else 0
|
||||
|
||||
if bar_day is not None and bar_day != current_day:
|
||||
pending_rebate += today_fees * cfg.rebate_pct
|
||||
today_fees = 0.0
|
||||
rebate_applied_today = False
|
||||
day_pnl = 0.0
|
||||
current_day = bar_day
|
||||
|
||||
if cfg.rebate_pct > 0 and not rebate_applied_today and bar_hour >= cfg.rebate_hour_utc and pending_rebate > 0:
|
||||
balance += pending_rebate
|
||||
total_rebate += pending_rebate
|
||||
pending_rebate = 0.0
|
||||
rebate_applied_today = True
|
||||
|
||||
if np.isnan(arr_upper[i]) or np.isnan(arr_lower[i]) or np.isnan(arr_mid[i]):
|
||||
out_equity[i] = balance + unrealised(arr_close[i])
|
||||
out_balance[i] = balance
|
||||
out_position[i] = position
|
||||
continue
|
||||
|
||||
fill_price = arr_close[i] if cfg.fill_at_close else None
|
||||
bullish = arr_close[i] > arr_open[i]
|
||||
bearish = arr_close[i] < arr_open[i]
|
||||
# 碰到均线:K 线贯穿或触及 mid
|
||||
touched_mid = arr_low[i] <= arr_mid[i] <= arr_high[i]
|
||||
touched_upper = arr_high[i] >= arr_upper[i]
|
||||
touched_lower = arr_low[i] <= arr_lower[i]
|
||||
|
||||
exec_upper = fill_price if fill_price is not None else arr_upper[i]
|
||||
exec_lower = fill_price if fill_price is not None else arr_lower[i]
|
||||
|
||||
# 1m 过滤:开多需先涨碰到,开空需先跌碰到
|
||||
touch_up_ok = True if arr_touch_dir is None else (arr_touch_dir[i] == 1)
|
||||
touch_down_ok = True if arr_touch_dir is None else (arr_touch_dir[i] == -1)
|
||||
|
||||
# 单根 K 线只允许一次操作
|
||||
if position == 1 and touched_upper:
|
||||
# 持多止盈
|
||||
close_position(exec_upper, i, "tp_upper")
|
||||
elif position == -1 and touched_lower:
|
||||
# 持空止盈
|
||||
close_position(exec_lower, i, "tp_lower")
|
||||
elif position == 1 and bearish and touched_mid and touch_down_ok:
|
||||
# 阴线触中轨: 平多并反手开空
|
||||
close_position(arr_close[i], i, "flip_to_short")
|
||||
if balance > 0:
|
||||
open_position("short", arr_close[i], i)
|
||||
elif position == -1 and bullish and touched_mid and touch_up_ok:
|
||||
# 阳线触中轨: 平空并反手开多
|
||||
close_position(arr_close[i], i, "flip_to_long")
|
||||
if balance > 0:
|
||||
open_position("long", arr_close[i], i)
|
||||
elif position == 0 and bullish and touched_mid and touch_up_ok:
|
||||
# 空仓开多
|
||||
open_position("long", arr_close[i], i)
|
||||
elif position == 0 and bearish and touched_mid and touch_down_ok:
|
||||
# 空仓开空
|
||||
open_position("short", arr_close[i], i)
|
||||
|
||||
out_equity[i] = balance + unrealised(arr_close[i])
|
||||
out_balance[i] = balance
|
||||
out_position[i] = position
|
||||
|
||||
if position != 0:
|
||||
close_position(arr_close[n - 1], n - 1, "end")
|
||||
out_equity[n - 1] = balance
|
||||
out_balance[n - 1] = balance
|
||||
out_position[n - 1] = 0
|
||||
|
||||
eq_df = pd.DataFrame({
|
||||
"equity": out_equity,
|
||||
"balance": out_balance,
|
||||
"price": arr_close,
|
||||
"position": out_position,
|
||||
}, index=ts_index)
|
||||
|
||||
daily_eq = eq_df["equity"].resample("1D").last().dropna().to_frame("equity")
|
||||
daily_eq["pnl"] = daily_eq["equity"].diff().fillna(0.0)
|
||||
|
||||
return BBMidlineResult(
|
||||
equity_curve=eq_df,
|
||||
trades=trades,
|
||||
daily_stats=daily_eq,
|
||||
total_fee=total_fee,
|
||||
total_rebate=total_rebate,
|
||||
config=cfg,
|
||||
)
|
||||
@@ -1,53 +0,0 @@
|
||||
{
|
||||
"bb_period": 36,
|
||||
"bb_std": 3.3000000000000003,
|
||||
"kc_period": 24,
|
||||
"kc_mult": 1.3,
|
||||
"dc_period": 41,
|
||||
"ema_fast": 3,
|
||||
"ema_slow": 15,
|
||||
"macd_fast": 9,
|
||||
"macd_slow": 34,
|
||||
"macd_signal": 15,
|
||||
"adx_period": 16,
|
||||
"st_period": 5,
|
||||
"st_mult": 1.4,
|
||||
"rsi_period": 7,
|
||||
"stoch_k": 18,
|
||||
"stoch_d": 6,
|
||||
"stoch_smooth": 3,
|
||||
"cci_period": 12,
|
||||
"wr_period": 9,
|
||||
"wma_period": 47,
|
||||
"bb_oversold": -0.19999999999999998,
|
||||
"bb_overbought": 1.3,
|
||||
"kc_oversold": 0.2,
|
||||
"kc_overbought": 0.75,
|
||||
"dc_oversold": 0.05,
|
||||
"dc_overbought": 0.75,
|
||||
"adx_threshold": 15.0,
|
||||
"rsi_overbought": 70.0,
|
||||
"rsi_oversold": 18.0,
|
||||
"stoch_overbought": 89.0,
|
||||
"stoch_oversold": 10.0,
|
||||
"cci_overbought": 80.0,
|
||||
"cci_oversold": -140.0,
|
||||
"wr_overbought": -28.0,
|
||||
"wr_oversold": -90.0,
|
||||
"w_bb": 0.15000000000000002,
|
||||
"w_kc": 0.4,
|
||||
"w_dc": 0.0,
|
||||
"w_ema": 0.8500000000000001,
|
||||
"w_macd": 0.35000000000000003,
|
||||
"w_adx": 0.0,
|
||||
"w_st": 0.15000000000000002,
|
||||
"w_rsi": 0.4,
|
||||
"w_stoch": 0.15000000000000002,
|
||||
"w_cci": 0.1,
|
||||
"w_wr": 0.0,
|
||||
"w_wma": 0.4,
|
||||
"open_threshold": 0.22,
|
||||
"max_positions": 3,
|
||||
"take_profit_pct": 0.024999999999999998,
|
||||
"stop_loss_pct": 0.008
|
||||
}
|
||||
@@ -1,125 +0,0 @@
|
||||
"""
|
||||
数据加载模块 - 从 SQLite 加载多周期K线数据为 DataFrame
|
||||
"""
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from peewee import SqliteDatabase
|
||||
from pathlib import Path
|
||||
|
||||
DB_PATH = Path(__file__).parent.parent / 'models' / 'database.db'
|
||||
|
||||
# 周期 -> 表名 (bitmart / binance)
|
||||
PERIOD_MAP = {
|
||||
'1s': 'bitmart_eth_1s',
|
||||
'1m': 'bitmart_eth_1m',
|
||||
'3m': 'bitmart_eth_3m',
|
||||
'5m': 'bitmart_eth_5m',
|
||||
'15m': 'bitmart_eth_15m',
|
||||
'30m': 'bitmart_eth_30m',
|
||||
'1h': 'bitmart_eth_1h',
|
||||
}
|
||||
|
||||
BINANCE_PERIOD_MAP = {
|
||||
'1s': 'binance_eth_1s',
|
||||
'1m': 'binance_eth_1m',
|
||||
'3m': 'binance_eth_3m',
|
||||
'5m': 'binance_eth_5m',
|
||||
'15m': 'binance_eth_15m',
|
||||
'30m': 'binance_eth_30m',
|
||||
'1h': 'binance_eth_1h',
|
||||
}
|
||||
|
||||
|
||||
def load_klines(period: str, start_date: str, end_date: str, tz: str | None = None,
|
||||
source: str = "bitmart") -> pd.DataFrame:
|
||||
"""
|
||||
加载指定周期、指定日期范围的K线数据
|
||||
:param period: '1s','1m','3m','5m','15m','30m','1h'
|
||||
:param start_date: 'YYYY-MM-DD'
|
||||
:param end_date: 'YYYY-MM-DD' (不包含该日)
|
||||
:param tz: 日期解释的时区,如 'Asia/Shanghai' 表示按北京时间;None 则用本地时区
|
||||
:return: DataFrame with columns: datetime, open, high, low, close
|
||||
"""
|
||||
period_map = BINANCE_PERIOD_MAP if source == "binance" else PERIOD_MAP
|
||||
table = period_map.get(period)
|
||||
if not table:
|
||||
raise ValueError(f"不支持的周期: {period}, 可选: {list(PERIOD_MAP.keys())}")
|
||||
|
||||
if tz:
|
||||
start_ts = int(pd.Timestamp(start_date, tz=tz).timestamp() * 1000)
|
||||
end_ts = int(pd.Timestamp(end_date, tz=tz).timestamp() * 1000)
|
||||
else:
|
||||
start_ts = int(pd.Timestamp(start_date).timestamp() * 1000)
|
||||
end_ts = int(pd.Timestamp(end_date).timestamp() * 1000)
|
||||
|
||||
db = SqliteDatabase(str(DB_PATH))
|
||||
db.connect()
|
||||
cursor = db.execute_sql(
|
||||
f'SELECT id, open, high, low, close FROM [{table}] '
|
||||
f'WHERE id >= ? AND id < ? ORDER BY id',
|
||||
(start_ts, end_ts)
|
||||
)
|
||||
rows = cursor.fetchall()
|
||||
db.close()
|
||||
|
||||
df = pd.DataFrame(rows, columns=['timestamp_ms', 'open', 'high', 'low', 'close'])
|
||||
df['datetime'] = pd.to_datetime(df['timestamp_ms'], unit='ms')
|
||||
df.set_index('datetime', inplace=True)
|
||||
df.drop(columns=['timestamp_ms'], inplace=True)
|
||||
df = df.astype(float)
|
||||
return df
|
||||
|
||||
|
||||
def load_multi_period(periods: list, start_date: str, end_date: str, source: str = "bitmart") -> dict:
|
||||
"""
|
||||
加载多个周期的数据
|
||||
:return: {period: DataFrame}
|
||||
"""
|
||||
result = {}
|
||||
for p in periods:
|
||||
result[p] = load_klines(p, start_date, end_date, source=source)
|
||||
print(f" 加载 {p}: {len(result[p])} 条 ({start_date} ~ {end_date})")
|
||||
return result
|
||||
|
||||
|
||||
def get_1m_touch_direction(df_5m: pd.DataFrame, df_1m: pd.DataFrame,
|
||||
arr_mid: np.ndarray, kline_step_min: int = 5) -> np.ndarray:
|
||||
"""
|
||||
根据 1 分钟线判断每根 5m K 线「先涨碰到均线」还是「先跌碰到均线」。
|
||||
返回: 1=先涨碰到(可开多), -1=先跌碰到(可开空), 0=未碰到或无法判断
|
||||
"""
|
||||
df_1m = df_1m.copy()
|
||||
df_1m["_bucket"] = df_1m.index.floor(f"{kline_step_min}min")
|
||||
|
||||
# 5m 索引与 mid 对齐
|
||||
mid_sr = pd.Series(arr_mid, index=df_5m.index)
|
||||
|
||||
touch_map: dict[pd.Timestamp, int] = {}
|
||||
for bucket, grp in df_1m.groupby("_bucket", sort=True):
|
||||
mid = mid_sr.get(bucket, np.nan)
|
||||
if pd.isna(mid):
|
||||
touch_map[bucket] = 0
|
||||
continue
|
||||
|
||||
o = grp["open"].to_numpy(dtype=float)
|
||||
h = grp["high"].to_numpy(dtype=float)
|
||||
l_ = grp["low"].to_numpy(dtype=float)
|
||||
|
||||
touch = 0
|
||||
for j in range(len(grp)):
|
||||
if l_[j] <= mid <= h[j]:
|
||||
touch = 1 if o[j] < mid else -1
|
||||
break
|
||||
touch_map[bucket] = touch
|
||||
|
||||
# 对齐到主周期 index
|
||||
out = np.zeros(len(df_5m), dtype=np.int32)
|
||||
for i, t in enumerate(df_5m.index):
|
||||
out[i] = touch_map.get(t, 0)
|
||||
return out
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
data = load_multi_period(['5m', '15m', '1h'], '2020-01-01', '2024-01-01')
|
||||
for k, v in data.items():
|
||||
print(f"{k}: {v.shape}, {v.index[0]} ~ {v.index[-1]}")
|
||||
@@ -1,104 +0,0 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def ema(s: pd.Series, span: int) -> pd.Series:
|
||||
return s.ewm(span=span, adjust=False).mean()
|
||||
|
||||
|
||||
def rsi(close: pd.Series, period: int) -> pd.Series:
|
||||
delta = close.diff()
|
||||
up = delta.clip(lower=0.0)
|
||||
down = (-delta).clip(lower=0.0)
|
||||
|
||||
roll_up = up.ewm(alpha=1 / period, adjust=False).mean()
|
||||
roll_down = down.ewm(alpha=1 / period, adjust=False).mean()
|
||||
|
||||
rs = roll_up / roll_down.replace(0.0, np.nan)
|
||||
return 100.0 - (100.0 / (1.0 + rs))
|
||||
|
||||
|
||||
def atr(high: pd.Series, low: pd.Series, close: pd.Series, period: int) -> pd.Series:
|
||||
prev_close = close.shift(1)
|
||||
tr = pd.concat(
|
||||
[
|
||||
(high - low).abs(),
|
||||
(high - prev_close).abs(),
|
||||
(low - prev_close).abs(),
|
||||
],
|
||||
axis=1,
|
||||
).max(axis=1)
|
||||
return tr.ewm(alpha=1 / period, adjust=False).mean()
|
||||
|
||||
|
||||
def bollinger(close: pd.Series, window: int, n_std: float):
|
||||
mid = close.rolling(window=window, min_periods=window).mean()
|
||||
std = close.rolling(window=window, min_periods=window).std(ddof=0)
|
||||
upper = mid + n_std * std
|
||||
lower = mid - n_std * std
|
||||
width = (upper - lower) / mid
|
||||
return mid, upper, lower, width
|
||||
|
||||
|
||||
def macd(close: pd.Series, fast: int, slow: int, signal: int):
|
||||
fast_ema = ema(close, fast)
|
||||
slow_ema = ema(close, slow)
|
||||
line = fast_ema - slow_ema
|
||||
sig = ema(line, signal)
|
||||
hist = line - sig
|
||||
return line, sig, hist
|
||||
|
||||
|
||||
def stochastic(high: pd.Series, low: pd.Series, close: pd.Series,
|
||||
k_period: int = 14, d_period: int = 3):
|
||||
"""Stochastic Oscillator (%K and %D)."""
|
||||
lowest = low.rolling(window=k_period, min_periods=k_period).min()
|
||||
highest = high.rolling(window=k_period, min_periods=k_period).max()
|
||||
denom = highest - lowest
|
||||
k = 100.0 * (close - lowest) / denom.replace(0.0, np.nan)
|
||||
d = k.rolling(window=d_period, min_periods=d_period).mean()
|
||||
return k, d
|
||||
|
||||
|
||||
def cci(high: pd.Series, low: pd.Series, close: pd.Series,
|
||||
period: int = 20) -> pd.Series:
|
||||
"""Commodity Channel Index."""
|
||||
tp = (high + low + close) / 3.0
|
||||
sma = tp.rolling(window=period, min_periods=period).mean()
|
||||
mad = tp.rolling(window=period, min_periods=period).apply(
|
||||
lambda x: np.mean(np.abs(x - np.mean(x))), raw=True
|
||||
)
|
||||
return (tp - sma) / (0.015 * mad.replace(0.0, np.nan))
|
||||
|
||||
|
||||
def adx(high: pd.Series, low: pd.Series, close: pd.Series,
|
||||
period: int = 14) -> pd.Series:
|
||||
"""Average Directional Index (returns ADX line only)."""
|
||||
up_move = high.diff()
|
||||
down_move = -low.diff()
|
||||
|
||||
plus_dm = pd.Series(np.where((up_move > down_move) & (up_move > 0), up_move, 0.0),
|
||||
index=high.index)
|
||||
minus_dm = pd.Series(np.where((down_move > up_move) & (down_move > 0), down_move, 0.0),
|
||||
index=high.index)
|
||||
|
||||
atr_val = atr(high, low, close, period)
|
||||
|
||||
plus_di = 100.0 * plus_dm.ewm(alpha=1 / period, adjust=False).mean() / atr_val.replace(0.0, np.nan)
|
||||
minus_di = 100.0 * minus_dm.ewm(alpha=1 / period, adjust=False).mean() / atr_val.replace(0.0, np.nan)
|
||||
|
||||
dx = 100.0 * (plus_di - minus_di).abs() / (plus_di + minus_di).replace(0.0, np.nan)
|
||||
adx_line = dx.ewm(alpha=1 / period, adjust=False).mean()
|
||||
return adx_line
|
||||
|
||||
|
||||
def keltner_channel(high: pd.Series, low: pd.Series, close: pd.Series,
|
||||
ema_period: int = 20, atr_period: int = 14, atr_mult: float = 1.5):
|
||||
"""Keltner Channel (mid, upper, lower)."""
|
||||
mid = ema(close, ema_period)
|
||||
atr_val = atr(high, low, close, atr_period)
|
||||
upper = mid + atr_mult * atr_val
|
||||
lower = mid - atr_mult * atr_val
|
||||
return mid, upper, lower
|
||||
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 217 KiB |
|
Before Width: | Height: | Size: 122 KiB |
@@ -1,289 +0,0 @@
|
||||
datetime,equity,balance,price,position
|
||||
2025-02-26 16:00:00,200.0,200.0,2422.73,0.0
|
||||
2025-02-26 16:05:00,200.0,200.0,2412.09,0.0
|
||||
2025-02-26 16:10:00,200.0,200.0,2409.01,0.0
|
||||
2025-02-26 16:15:00,200.0,200.0,2395.62,0.0
|
||||
2025-02-26 16:20:00,200.0,200.0,2393.83,0.0
|
||||
2025-02-26 16:25:00,200.0,200.0,2403.36,0.0
|
||||
2025-02-26 16:30:00,200.0,200.0,2405.05,0.0
|
||||
2025-02-26 16:35:00,200.0,200.0,2402.14,0.0
|
||||
2025-02-26 16:40:00,200.0,200.0,2404.26,0.0
|
||||
2025-02-26 16:45:00,200.0,200.0,2398.43,0.0
|
||||
2025-02-26 16:50:00,200.0,200.0,2397.62,0.0
|
||||
2025-02-26 16:55:00,200.0,200.0,2397.36,0.0
|
||||
2025-02-26 17:00:00,200.0,200.0,2399.93,0.0
|
||||
2025-02-26 17:05:00,200.0,200.0,2400.31,0.0
|
||||
2025-02-26 17:10:00,200.0,200.0,2402.77,0.0
|
||||
2025-02-26 17:15:00,199.88508727496452,199.9,2391.47,1.0
|
||||
2025-02-26 17:20:00,200.65485040922104,199.7001483159936,2395.07,1.0
|
||||
2025-02-26 17:25:00,201.151413340079,199.7001483159936,2397.05,1.0
|
||||
2025-02-26 17:30:00,196.72646880791046,199.40349503913342,2382.07,1.0
|
||||
2025-02-26 17:35:00,193.97309285581176,199.40349503913342,2376.56,1.0
|
||||
2025-02-26 17:40:00,197.5759677404998,199.40349503913342,2383.77,1.0
|
||||
2025-02-26 17:45:00,195.9269404007673,199.40349503913342,2380.47,1.0
|
||||
2025-02-26 17:50:00,187.90964596335377,187.37965912389114,2369.69,1.0
|
||||
2025-02-26 17:55:00,188.81182939334798,187.19274659378016,2365.89,1.0
|
||||
2025-02-26 18:00:00,190.53682597248493,187.19274659378016,2373.14,1.0
|
||||
2025-02-26 18:05:00,190.52730874997937,187.19274659378016,2373.1,1.0
|
||||
2025-02-26 18:10:00,189.9967235952931,187.19274659378016,2370.87,1.0
|
||||
2025-02-26 18:15:00,186.5538683538984,187.19274659378016,2356.4,1.0
|
||||
2025-02-26 18:20:00,186.30404126312678,187.19274659378016,2355.35,1.0
|
||||
2025-02-26 18:25:00,181.12463646239493,181.48897215232557,2312.77,1.0
|
||||
2025-02-26 18:30:00,181.26724125056887,181.48897215232557,2314.59,1.0
|
||||
2025-02-26 18:35:00,180.20272022123012,179.58333794472614,2275.37,1.0
|
||||
2025-02-26 18:40:00,183.64158817039387,179.58333794472614,2318.77,1.0
|
||||
2025-02-26 18:45:00,182.68520254490062,179.58333794472614,2306.7,1.0
|
||||
2025-02-26 18:50:00,181.186838652765,179.58333794472614,2287.79,1.0
|
||||
2025-02-26 18:55:00,181.52359415469925,179.58333794472614,2292.04,1.0
|
||||
2025-02-26 19:00:00,181.98712819853813,179.58333794472614,2297.89,1.0
|
||||
2025-02-26 19:05:00,181.6535421601515,179.58333794472614,2293.68,1.0
|
||||
2025-02-26 19:10:00,183.04097482812057,179.58333794472614,2311.19,1.0
|
||||
2025-02-26 19:15:00,182.62419037160902,179.58333794472614,2305.93,1.0
|
||||
2025-02-26 19:20:00,181.37145990441365,179.58333794472614,2290.12,1.0
|
||||
2025-02-26 19:25:00,180.45469257326565,179.58333794472614,2278.55,1.0
|
||||
2025-02-26 19:30:00,181.13295777245554,179.58333794472614,2287.11,1.0
|
||||
2025-02-26 19:35:00,181.36115914788388,179.58333794472614,2289.99,1.0
|
||||
2025-02-26 19:40:00,182.0172381022405,179.58333794472614,2298.27,1.0
|
||||
2025-02-26 19:45:00,181.59490708452063,179.58333794472614,2292.94,1.0
|
||||
2025-02-26 19:50:00,182.40074319150207,179.58333794472614,2303.11,1.0
|
||||
2025-02-26 19:55:00,181.77635887262164,179.58333794472614,2295.23,1.0
|
||||
2025-02-26 20:00:00,182.93559016516235,179.58333794472614,2309.86,1.0
|
||||
2025-02-26 20:05:00,184.0665561275799,183.3336108552589,2307.94,-1.0
|
||||
2025-02-26 20:10:00,185.60064206152194,183.3336108552589,2288.56,-1.0
|
||||
2025-02-26 20:15:00,187.50707671961734,187.57352406664992,2260.52,1.0
|
||||
2025-02-26 20:20:00,192.3379875808024,187.38611572438992,2279.89,1.0
|
||||
2025-02-26 20:25:00,198.0698646021626,187.38611572438992,2302.92,1.0
|
||||
2025-02-26 20:30:00,198.7368828573621,187.38611572438992,2305.6,1.0
|
||||
2025-02-26 20:35:00,202.43783862408483,187.38611572438992,2320.47,1.0
|
||||
2025-02-26 20:40:00,203.37365528063347,187.38611572438992,2324.23,1.0
|
||||
2025-02-26 20:45:00,204.07800664713147,187.38611572438992,2327.06,1.0
|
||||
2025-02-26 20:50:00,204.73506940598472,187.38611572438992,2329.7,1.0
|
||||
2025-02-26 20:55:00,207.09203316596222,187.38611572438992,2339.17,1.0
|
||||
2025-02-26 21:00:00,204.78733576180258,187.38611572438992,2329.91,1.0
|
||||
2025-02-26 21:05:00,205.57133109907073,187.38611572438992,2333.06,1.0
|
||||
2025-02-26 21:10:00,204.81222450266833,187.38611572438992,2330.01,1.0
|
||||
2025-02-26 21:15:00,202.65934841778923,187.38611572438992,2321.36,1.0
|
||||
2025-02-26 21:20:00,208.63949428267856,208.4148919992489,2343.55,-1.0
|
||||
2025-02-26 21:25:00,209.94247398979596,208.4148919992489,2328.89,-1.0
|
||||
2025-02-26 21:30:00,211.58497501213768,208.4148919992489,2310.41,-1.0
|
||||
2025-02-26 21:35:00,211.1592401692255,208.4148919992489,2315.2,-1.0
|
||||
2025-02-26 21:40:00,211.57964221661058,208.4148919992489,2310.47,-1.0
|
||||
2025-02-26 21:45:00,211.6969637182064,208.4148919992489,2309.15,-1.0
|
||||
2025-02-26 21:50:00,210.49264072834006,208.4148919992489,2322.7,-1.0
|
||||
2025-02-26 21:55:00,208.82969732314456,208.4148919992489,2341.41,-1.0
|
||||
2025-02-26 22:00:00,206.19514713538757,206.22653563325682,2378.33,-1.0
|
||||
2025-02-26 22:05:00,206.22638333559246,206.22653563325682,2377.97,-1.0
|
||||
2025-02-26 22:10:00,207.53136236637445,206.22653563325682,2362.93,-1.0
|
||||
2025-02-26 22:15:00,207.56433391103513,206.22653563325682,2362.55,-1.0
|
||||
2025-02-26 22:20:00,207.56346623880725,206.22653563325682,2362.56,-1.0
|
||||
2025-02-26 22:25:00,208.75738322441632,206.22653563325682,2348.8,-1.0
|
||||
2025-02-26 22:30:00,208.86410690844968,206.22653563325682,2347.57,-1.0
|
||||
2025-02-26 22:35:00,208.39643157760426,206.22653563325682,2352.96,-1.0
|
||||
2025-02-26 22:40:00,208.6975138406903,206.22653563325682,2349.49,-1.0
|
||||
2025-02-26 22:45:00,207.5678045999468,206.22653563325682,2362.51,-1.0
|
||||
2025-02-26 22:50:00,207.78559032915314,206.22653563325682,2360.0,-1.0
|
||||
2025-02-26 22:55:00,208.83720906938436,206.22653563325682,2347.88,-1.0
|
||||
2025-02-26 23:00:00,207.90966745774475,206.22653563325682,2358.57,-1.0
|
||||
2025-02-26 23:05:00,208.80684054140738,206.22653563325682,2348.23,-1.0
|
||||
2025-02-26 23:10:00,209.55911236300847,206.22653563325682,2339.56,-1.0
|
||||
2025-02-26 23:15:00,209.54522960736185,206.22653563325682,2339.72,-1.0
|
||||
2025-02-26 23:20:00,210.23936738969272,206.22653563325682,2331.72,-1.0
|
||||
2025-02-26 23:25:00,209.9131226319972,206.22653563325682,2335.48,-1.0
|
||||
2025-02-26 23:30:00,210.1569385280409,206.22653563325682,2332.67,-1.0
|
||||
2025-02-26 23:35:00,210.27147126212552,206.22653563325682,2331.35,-1.0
|
||||
2025-02-26 23:40:00,210.44413803548028,206.22653563325682,2329.36,-1.0
|
||||
2025-02-26 23:45:00,210.7261315095522,206.22653563325682,2326.11,-1.0
|
||||
2025-02-26 23:50:00,210.75997072644086,206.22653563325682,2325.72,-1.0
|
||||
2025-02-26 23:55:00,209.94522650443,206.22653563325682,2335.11,-1.0
|
||||
2025-02-27 00:00:00,211.85157713182133,208.12681255505274,2335.04,-1.0
|
||||
2025-02-27 00:05:00,210.987013668818,207.91569913605537,2343.23,-1.0
|
||||
2025-02-27 00:10:00,212.5779338664577,207.91569913605537,2337.27,-1.0
|
||||
2025-02-27 00:15:00,210.7013954454162,207.91569913605537,2344.3,-1.0
|
||||
2025-02-27 00:20:00,214.18753936843214,207.91569913605537,2331.24,-1.0
|
||||
2025-02-27 00:25:00,213.57092432538713,207.91569913605537,2333.55,-1.0
|
||||
2025-02-27 00:30:00,216.40575192587937,207.91569913605537,2322.93,-1.0
|
||||
2025-02-27 00:35:00,215.1484978770735,207.91569913605537,2327.64,-1.0
|
||||
2025-02-27 00:40:00,212.2335904008612,207.91569913605537,2338.56,-1.0
|
||||
2025-02-27 00:45:00,210.37306795496374,207.91569913605537,2345.53,-1.0
|
||||
2025-02-27 00:50:00,212.31367027658126,207.91569913605537,2338.26,-1.0
|
||||
2025-02-27 00:55:00,212.6793683757032,207.91569913605537,2336.89,-1.0
|
||||
2025-02-27 01:00:00,213.8672198655516,207.91569913605537,2332.44,-1.0
|
||||
2025-02-27 01:05:00,218.08554575327744,217.53047159662106,2323.06,1.0
|
||||
2025-02-27 01:10:00,219.07082331521494,217.53047159662106,2333.55,1.0
|
||||
2025-02-27 01:15:00,219.04640270834133,217.53047159662106,2333.29,1.0
|
||||
2025-02-27 01:20:00,221.06527437085106,220.77531580970233,2350.96,-1.0
|
||||
2025-02-27 01:25:00,221.08117298459132,220.55519728168767,2356.83,-1.0
|
||||
2025-02-27 01:30:00,222.67322249414767,220.55519728168767,2351.15,-1.0
|
||||
2025-02-27 01:35:00,224.45026367206805,220.55519728168767,2344.81,-1.0
|
||||
2025-02-27 01:40:00,224.22603134677837,220.55519728168767,2345.61,-1.0
|
||||
2025-02-27 01:45:00,224.07747743127408,220.55519728168767,2346.14,-1.0
|
||||
2025-02-27 01:50:00,222.16029105004765,220.55519728168767,2352.98,-1.0
|
||||
2025-02-27 01:55:00,224.84827604945718,220.55519728168767,2343.39,-1.0
|
||||
2025-02-27 02:00:00,224.79502087220087,220.55519728168767,2343.58,-1.0
|
||||
2025-02-27 02:05:00,225.64149790016924,220.55519728168767,2340.56,-1.0
|
||||
2025-02-27 02:10:00,224.12792970446418,220.55519728168767,2345.96,-1.0
|
||||
2025-02-27 02:15:00,221.56607538803016,220.55519728168767,2355.1,-1.0
|
||||
2025-02-27 02:20:00,221.377335210862,220.22465889199893,2357.0,-1.0
|
||||
2025-02-27 02:25:00,221.54902848696258,219.7886061074558,2358.72,-1.0
|
||||
2025-02-27 02:30:00,225.9364976128393,219.7886061074558,2354.0,-1.0
|
||||
2025-02-27 02:35:00,235.43648372861492,219.7886061074558,2343.78,-1.0
|
||||
2025-02-27 02:40:00,239.52649732053413,219.7886061074558,2339.38,-1.0
|
||||
2025-02-27 02:45:00,243.9604438735919,219.7886061074558,2334.61,-1.0
|
||||
2025-02-27 02:50:00,245.9124958151896,219.7886061074558,2332.51,-1.0
|
||||
2025-02-27 02:55:00,245.02012921331672,219.7886061074558,2333.47,-1.0
|
||||
2025-02-27 03:00:00,241.98050547568593,219.7886061074558,2336.74,-1.0
|
||||
2025-02-27 03:05:00,239.32199664093835,219.7886061074558,2339.6,-1.0
|
||||
2025-02-27 03:10:00,239.84254382536437,219.7886061074558,2339.04,-1.0
|
||||
2025-02-27 03:15:00,239.58227023315115,219.7886061074558,2339.32,-1.0
|
||||
2025-02-27 03:20:00,236.52405552464802,219.7886061074558,2342.61,-1.0
|
||||
2025-02-27 03:25:00,248.01624493662487,247.7974290683528,2331.24,1.0
|
||||
2025-02-27 03:30:00,248.56228878234202,247.7974290683528,2336.37,1.0
|
||||
2025-02-27 03:35:00,248.57719056370664,247.7974290683528,2336.51,1.0
|
||||
2025-02-27 03:40:00,247.35205125294556,247.7974290683528,2325.0,1.0
|
||||
2025-02-27 03:45:00,248.78003750377036,247.55018527505436,2329.57,1.0
|
||||
2025-02-27 03:50:00,249.55892748851295,247.55018527505436,2332.01,1.0
|
||||
2025-02-27 03:55:00,249.23971028165124,247.55018527505436,2331.01,1.0
|
||||
2025-02-27 04:00:00,251.60191761242777,247.55018527505436,2338.41,1.0
|
||||
2025-02-27 04:05:00,247.23183405049096,247.55018527505436,2324.72,1.0
|
||||
2025-02-27 04:10:00,244.66851987939154,247.55018527505436,2316.69,1.0
|
||||
2025-02-27 04:15:00,243.6661778498458,247.55018527505436,2313.55,1.0
|
||||
2025-02-27 04:20:00,243.9215516153351,247.55018527505436,2314.35,1.0
|
||||
2025-02-27 04:25:00,245.3165308093207,247.55018527505436,2318.72,1.0
|
||||
2025-02-27 04:30:00,244.7515163531755,247.55018527505436,2316.95,1.0
|
||||
2025-02-27 04:35:00,240.12609551145323,240.12609551145323,2308.78,0.0
|
||||
2025-02-27 04:40:00,240.12609551145323,240.12609551145323,2309.57,0.0
|
||||
2025-02-27 04:45:00,240.12609551145323,240.12609551145323,2310.06,0.0
|
||||
2025-02-27 04:50:00,240.12609551145323,240.12609551145323,2315.33,0.0
|
||||
2025-02-27 04:55:00,240.12609551145323,240.12609551145323,2310.61,0.0
|
||||
2025-02-27 05:00:00,240.12609551145323,240.12609551145323,2313.85,0.0
|
||||
2025-02-27 05:05:00,240.12609551145323,240.12609551145323,2321.23,0.0
|
||||
2025-02-27 05:10:00,240.12609551145323,240.12609551145323,2328.02,0.0
|
||||
2025-02-27 05:15:00,240.53707445530296,240.0060324636975,2326.42,-1.0
|
||||
2025-02-27 05:20:00,240.85942919671558,240.0060324636975,2323.29,-1.0
|
||||
2025-02-27 05:25:00,241.30228075840066,240.0060324636975,2318.99,-1.0
|
||||
2025-02-27 05:30:00,240.9655075940494,240.0060324636975,2322.26,-1.0
|
||||
2025-02-27 05:35:00,239.48349969343363,240.0060324636975,2336.65,-1.0
|
||||
2025-02-27 05:40:00,239.70801513633444,240.0060324636975,2334.47,-1.0
|
||||
2025-02-27 05:45:00,239.22602785524464,240.0060324636975,2339.15,-1.0
|
||||
2025-02-27 05:50:00,239.01696072263522,240.0060324636975,2341.18,-1.0
|
||||
2025-02-27 05:55:00,239.0591861040982,240.0060324636975,2340.77,-1.0
|
||||
2025-02-27 06:00:00,239.05712632939267,240.0060324636975,2340.79,-1.0
|
||||
2025-02-27 06:05:00,239.86455801395334,240.0060324636975,2332.95,-1.0
|
||||
2025-02-27 06:10:00,239.59575741488405,240.0060324636975,2335.56,-1.0
|
||||
2025-02-27 06:15:00,239.15290585319897,240.0060324636975,2339.86,-1.0
|
||||
2025-02-27 06:20:00,238.257107496202,239.76764820152863,2346.96,-1.0
|
||||
2025-02-27 06:25:00,238.3244495622458,239.76764820152863,2346.74,-1.0
|
||||
2025-02-27 06:30:00,237.84081108793163,239.76764820152863,2348.32,-1.0
|
||||
2025-02-27 06:35:00,234.50431781576518,239.76764820152863,2359.22,-1.0
|
||||
2025-02-27 06:40:00,236.04706332876694,239.76764820152863,2354.18,-1.0
|
||||
2025-02-27 06:45:00,237.21636647552614,239.76764820152863,2350.36,-1.0
|
||||
2025-02-27 06:50:00,237.99692224103308,239.76764820152863,2347.81,-1.0
|
||||
2025-02-27 06:55:00,238.009166253041,239.76764820152863,2347.77,-1.0
|
||||
2025-02-27 07:00:00,236.7327280012121,239.76764820152863,2351.94,-1.0
|
||||
2025-02-27 07:05:00,237.57756482976077,239.76764820152863,2349.18,-1.0
|
||||
2025-02-27 07:10:00,237.96019020500924,239.76764820152863,2347.93,-1.0
|
||||
2025-02-27 07:15:00,234.7063440138963,239.76764820152863,2358.56,-1.0
|
||||
2025-02-27 07:20:00,235.93686722069535,239.76764820152863,2354.54,-1.0
|
||||
2025-02-27 07:25:00,234.58084289081486,239.76764820152863,2358.97,-1.0
|
||||
2025-02-27 07:30:00,235.03999334111302,239.76764820152863,2357.47,-1.0
|
||||
2025-02-27 07:35:00,232.74599014704518,232.48240265203538,2363.15,-1.0
|
||||
2025-02-27 07:40:00,232.7273101344533,232.48240265203538,2363.34,-1.0
|
||||
2025-02-27 07:45:00,233.01439243323392,232.48240265203538,2360.42,-1.0
|
||||
2025-02-27 07:50:00,232.89149761355043,232.48240265203538,2361.67,-1.0
|
||||
2025-02-27 07:55:00,233.50892118764028,232.48240265203538,2355.39,-1.0
|
||||
2025-02-27 08:00:00,233.8575148630012,233.58028341518968,2355.09,1.0
|
||||
2025-02-27 08:05:00,233.97971336370293,233.58028341518968,2356.32,1.0
|
||||
2025-02-27 08:10:00,233.93301962766242,233.58028341518968,2355.85,1.0
|
||||
2025-02-27 08:15:00,233.74922513473703,233.58028341518968,2354.0,1.0
|
||||
2025-02-27 08:20:00,233.5614567068295,233.58028341518968,2352.11,1.0
|
||||
2025-02-27 08:25:00,232.95196372915564,233.34736526156178,2346.53,1.0
|
||||
2025-02-27 08:30:00,234.50842062674303,232.99871577515356,2348.86,1.0
|
||||
2025-02-27 08:35:00,235.56810445978994,232.99871577515356,2350.64,1.0
|
||||
2025-02-27 08:40:00,237.6934254058451,232.99871577515356,2354.21,1.0
|
||||
2025-02-27 08:45:00,235.56810445978994,232.99871577515356,2350.64,1.0
|
||||
2025-02-27 08:50:00,235.35378638119636,232.99871577515356,2350.28,1.0
|
||||
2025-02-27 08:55:00,236.00269389693847,232.99871577515356,2351.37,1.0
|
||||
2025-02-27 09:00:00,238.08038860330615,232.99871577515356,2354.86,1.0
|
||||
2025-02-27 09:05:00,239.43217796555433,239.41559917993223,2358.32,-1.0
|
||||
2025-02-27 09:10:00,239.67288301310697,239.41559917993223,2355.95,-1.0
|
||||
2025-02-27 09:15:00,240.1644494393325,239.41559917993223,2351.11,-1.0
|
||||
2025-02-27 09:20:00,240.4274984153499,239.41559917993223,2348.52,-1.0
|
||||
2025-02-27 09:25:00,239.5682728025672,239.41559917993223,2356.98,-1.0
|
||||
2025-02-27 09:30:00,239.06701039503062,239.17663149417038,2361.78,-1.0
|
||||
2025-02-27 09:35:00,239.4103386500838,239.17663149417038,2360.65,-1.0
|
||||
2025-02-27 09:40:00,239.6898625391536,239.17663149417038,2359.73,-1.0
|
||||
2025-02-27 09:45:00,239.27057670554888,239.17663149417038,2361.11,-1.0
|
||||
2025-02-27 09:50:00,240.1456080104631,239.17663149417038,2358.23,-1.0
|
||||
2025-02-27 09:55:00,240.19118255759406,239.17663149417038,2358.08,-1.0
|
||||
2025-02-27 10:00:00,239.38907052808943,239.17663149417038,2360.72,-1.0
|
||||
2025-02-27 10:05:00,238.05511374706333,238.82126228887873,2366.39,-1.0
|
||||
2025-02-27 10:10:00,240.01787034899527,238.34501168025773,2363.92,-1.0
|
||||
2025-02-27 10:15:00,235.78094697309464,238.34501168025773,2368.13,-1.0
|
||||
2025-02-27 10:20:00,236.13318525850198,238.34501168025773,2367.78,-1.0
|
||||
2025-02-27 10:25:00,235.90171438523424,238.34501168025773,2368.01,-1.0
|
||||
2025-02-27 10:30:00,235.8111388261298,238.34501168025773,2368.1,-1.0
|
||||
2025-02-27 10:35:00,231.5641514992173,238.34501168025773,2372.32,-1.0
|
||||
2025-02-27 10:40:00,234.43237753753516,238.34501168025773,2369.47,-1.0
|
||||
2025-02-27 10:45:00,239.38384143526181,238.34501168025773,2364.55,-1.0
|
||||
2025-02-27 10:50:00,233.3655987303009,238.34501168025773,2370.53,-1.0
|
||||
2025-02-27 10:55:00,227.0152456419559,238.34501168025773,2376.84,-1.0
|
||||
2025-02-27 11:00:00,233.12406390602175,238.34501168025773,2370.77,-1.0
|
||||
2025-02-27 11:05:00,234.43237753753516,238.34501168025773,2369.47,-1.0
|
||||
2025-02-27 11:10:00,231.77549447046178,238.34501168025773,2372.11,-1.0
|
||||
2025-02-27 11:15:00,225.69686805943107,238.34501168025773,2378.15,-1.0
|
||||
2025-02-27 11:20:00,231.11127370369368,238.34501168025773,2372.77,-1.0
|
||||
2025-02-27 11:25:00,240.10844590810018,238.34501168025773,2363.83,-1.0
|
||||
2025-02-27 11:30:00,245.59329920944398,238.34501168025773,2358.38,-1.0
|
||||
2025-02-27 11:35:00,246.3782873883521,238.34501168025773,2357.6,-1.0
|
||||
2025-02-27 11:40:00,252.698448623662,238.34501168025773,2351.32,-1.0
|
||||
2025-02-27 11:45:00,255.20437242556068,238.34501168025773,2348.83,-1.0
|
||||
2025-02-27 11:50:00,255.17418057252553,238.34501168025773,2348.86,-1.0
|
||||
2025-02-27 11:55:00,251.2492396779857,238.34501168025773,2352.76,-1.0
|
||||
2025-02-27 12:00:00,252.30595453420813,238.34501168025773,2351.71,-1.0
|
||||
2025-02-27 12:05:00,258.917970348856,238.34501168025773,2345.14,-1.0
|
||||
2025-02-27 12:10:00,262.10824281954604,238.34501168025773,2341.97,-1.0
|
||||
2025-02-27 12:15:00,257.6801043744242,238.34501168025773,2346.37,-1.0
|
||||
2025-02-27 12:20:00,254.52002375676884,238.34501168025773,2349.51,-1.0
|
||||
2025-02-27 12:25:00,252.9903032029995,238.34501168025773,2351.03,-1.0
|
||||
2025-02-27 12:30:00,249.22638552464625,238.34501168025773,2354.77,-1.0
|
||||
2025-02-27 12:35:00,249.33708898577441,238.34501168025773,2354.66,-1.0
|
||||
2025-02-27 12:40:00,244.8485668345828,238.34501168025773,2359.12,-1.0
|
||||
2025-02-27 12:45:00,248.48165314978462,238.34501168025773,2355.51,-1.0
|
||||
2025-02-27 12:50:00,256.8951161955161,238.34501168025773,2347.15,-1.0
|
||||
2025-02-27 12:55:00,258.03234265983156,238.34501168025773,2346.02,-1.0
|
||||
2025-02-27 13:00:00,258.03234265983156,238.34501168025773,2346.02,-1.0
|
||||
2025-02-27 13:05:00,252.81921603580201,238.34501168025773,2351.2,-1.0
|
||||
2025-02-27 13:10:00,249.8604144383797,238.34501168025773,2354.14,-1.0
|
||||
2025-02-27 13:15:00,251.40019894316043,238.34501168025773,2352.61,-1.0
|
||||
2025-02-27 13:20:00,254.9427096992578,238.34501168025773,2349.09,-1.0
|
||||
2025-02-27 13:25:00,254.49989585474557,238.34501168025773,2349.53,-1.0
|
||||
2025-02-27 13:30:00,262.26070406853376,262.1012105348726,2342.1,1.0
|
||||
2025-02-27 13:35:00,266.5600632295155,261.83908872922206,2354.85,1.0
|
||||
2025-02-27 13:40:00,265.98216710470956,261.83908872922206,2353.13,1.0
|
||||
2025-02-27 13:45:00,269.27509413972587,267.4613178857076,2343.12,-1.0
|
||||
2025-02-27 13:50:00,270.07747381436445,270.02467260606704,2334.61,1.0
|
||||
2025-02-27 13:55:00,270.1885861849715,270.02467260606704,2335.57,1.0
|
||||
2025-02-27 14:00:00,270.67701764743174,270.02467260606704,2339.79,1.0
|
||||
2025-02-27 14:05:00,270.4582651677991,270.02467260606704,2337.9,1.0
|
||||
2025-02-27 14:10:00,270.35641216140925,270.02467260606704,2337.02,1.0
|
||||
2025-02-27 14:15:00,269.24413103481135,270.02467260606704,2327.41,1.0
|
||||
2025-02-27 14:20:00,269.98372275166474,270.02467260606704,2333.8,1.0
|
||||
2025-02-27 14:25:00,271.18049557674505,270.02467260606704,2344.14,1.0
|
||||
2025-02-27 14:30:00,272.0414098259353,271.6227855132458,2346.69,-1.0
|
||||
2025-02-27 14:35:00,275.2635881993619,271.3510283556246,2338.26,-1.0
|
||||
2025-02-27 14:40:00,278.8619081286832,271.3510283556246,2327.89,-1.0
|
||||
2025-02-27 14:45:00,282.36352964098313,281.98891805994117,2320.39,1.0
|
||||
2025-02-27 14:50:00,280.88549974995675,281.98891805994117,2308.25,1.0
|
||||
2025-02-27 14:55:00,280.84167019799884,281.98891805994117,2307.89,1.0
|
||||
2025-02-27 15:00:00,279.1676182294265,279.1676182294265,2301.55,0.0
|
||||
2025-02-27 15:05:00,279.1676182294265,279.1676182294265,2310.24,0.0
|
||||
2025-02-27 15:10:00,279.1676182294265,279.1676182294265,2317.79,0.0
|
||||
2025-02-27 15:15:00,279.1676182294265,279.1676182294265,2319.9,0.0
|
||||
2025-02-27 15:20:00,279.1676182294265,279.1676182294265,2327.46,0.0
|
||||
2025-02-27 15:25:00,279.1676182294265,279.1676182294265,2326.61,0.0
|
||||
2025-02-27 15:30:00,279.1676182294265,279.1676182294265,2321.63,0.0
|
||||
2025-02-27 15:35:00,279.1676182294265,279.1676182294265,2331.37,0.0
|
||||
2025-02-27 15:40:00,279.1676182294265,279.1676182294265,2322.72,0.0
|
||||
2025-02-27 15:45:00,279.1676182294265,279.1676182294265,2326.39,0.0
|
||||
2025-02-27 15:50:00,279.1676182294265,279.1676182294265,2326.28,0.0
|
||||
2025-02-27 15:55:00,279.1676182294265,279.1676182294265,2322.37,0.0
|
||||
|
@@ -1,21 +0,0 @@
|
||||
entry_time,exit_time,side,entry_price,exit_price,qty,margin,gross_pnl,fee,net_pnl
|
||||
2025-02-26 17:15:00,2025-02-26 17:50:00,long,2387.43,2363.67,0.4997,11.93,-11.93,0.00,-11.93
|
||||
2025-02-26 17:50:00,2025-02-26 18:25:00,long,2359.09,2335.61,0.2379,5.61,-5.61,0.00,-5.61
|
||||
2025-02-26 18:25:00,2025-02-26 18:35:00,long,2317.42,2294.36,0.0784,1.82,-1.82,0.00,-1.82
|
||||
2025-02-26 18:35:00,2025-02-26 20:05:00,long,2267.55,2317.20,0.0792,1.80,3.93,0.09,3.84
|
||||
2025-02-26 20:05:00,2025-02-26 20:15:00,short,2317.20,2261.32,0.0792,1.83,4.42,0.09,4.33
|
||||
2025-02-26 20:15:00,2025-02-26 21:20:00,long,2259.99,2346.08,0.2489,5.62,21.42,0.29,21.13
|
||||
2025-02-26 21:20:00,2025-02-26 22:00:00,short,2346.08,2369.42,0.0889,2.09,-2.09,0.00,-2.09
|
||||
2025-02-26 22:00:00,2025-02-27 01:05:00,short,2354.74,2317.15,0.2669,6.29,10.03,0.31,9.72
|
||||
2025-02-27 01:05:00,2025-02-27 01:20:00,long,2317.15,2354.05,0.0939,2.18,3.47,0.11,3.36
|
||||
2025-02-27 01:20:00,2025-02-27 03:25:00,short,2360.61,2329.18,0.9295,21.94,29.22,1.08,28.13
|
||||
2025-02-27 03:25:00,2025-02-27 04:35:00,long,2325.72,2302.58,0.3192,7.42,-7.42,0.00,-7.42
|
||||
2025-02-27 05:15:00,2025-02-27 07:35:00,short,2342.03,2365.33,0.3061,7.17,-7.17,0.00,-7.17
|
||||
2025-02-27 07:35:00,2025-02-27 08:00:00,short,2365.83,2352.30,0.0983,2.33,1.33,0.12,1.21
|
||||
2025-02-27 08:00:00,2025-02-27 09:05:00,long,2346.32,2358.48,0.5953,13.97,7.24,0.70,6.54
|
||||
2025-02-27 09:05:00,2025-02-27 13:30:00,short,2365.58,2340.68,1.0064,23.81,25.07,1.18,23.89
|
||||
2025-02-27 13:30:00,2025-02-27 13:45:00,long,2340.80,2359.11,0.3360,7.86,6.15,0.40,5.76
|
||||
2025-02-27 13:45:00,2025-02-27 13:50:00,short,2359.11,2334.15,0.1134,2.68,2.83,0.13,2.70
|
||||
2025-02-27 13:50:00,2025-02-27 14:30:00,long,2334.15,2350.31,0.1157,2.70,1.87,0.14,1.73
|
||||
2025-02-27 14:30:00,2025-02-27 14:45:00,short,2349.54,2317.31,0.3470,8.15,11.18,0.40,10.78
|
||||
2025-02-27 14:45:00,2025-02-27 15:00:00,long,2317.31,2294.26,0.1217,2.82,-2.82,0.00,-2.82
|
||||
|
|
Before Width: | Height: | Size: 296 KiB |
@@ -1,315 +0,0 @@
|
||||
序号,方向,开仓时间,平仓时间,开仓价,平仓价,保证金,杠杆,数量,毛盈亏,手续费,净盈亏
|
||||
1,做多,2026-02-01 00:45:00,2026-02-01 04:20:00,2503.98,2377.2,2.0,50,0.0399,-5.06,0.05,-5.11
|
||||
2,做空,2026-02-01 04:20:00,2026-02-01 04:35:00,2377.2,2360.24,1.95,50,0.041,0.7,0.05,0.65
|
||||
3,做多,2026-02-01 04:35:00,2026-02-01 05:00:00,2360.24,2373.42,1.95,50,0.0414,0.55,0.05,0.5
|
||||
4,做空,2026-02-01 05:00:00,2026-02-01 09:05:00,2373.42,2433.28,1.96,50,0.0413,-2.47,0.05,-2.52
|
||||
5,做多,2026-02-01 09:05:00,2026-02-01 12:10:00,2433.28,2451.12,1.94,50,0.0398,0.71,0.05,0.66
|
||||
6,做空,2026-02-01 12:10:00,2026-02-01 13:00:00,2451.12,2439.68,1.94,50,0.0396,0.45,0.05,0.4
|
||||
7,做多,2026-02-01 13:00:00,2026-02-01 15:40:00,2439.68,2430.01,1.95,50,0.0399,-0.39,0.05,-0.43
|
||||
8,做空,2026-02-01 15:40:00,2026-02-01 18:30:00,2430.01,2406.59,1.94,50,0.0399,0.94,0.05,0.89
|
||||
9,做多,2026-02-01 18:30:00,2026-02-01 19:35:00,2406.59,2404.44,1.95,50,0.0405,-0.09,0.05,-0.14
|
||||
10,做空,2026-02-01 19:35:00,2026-02-01 20:20:00,2404.44,2387.44,1.95,50,0.0405,0.69,0.05,0.64
|
||||
11,做多,2026-02-01 20:20:00,2026-02-01 21:00:00,2387.44,2402.27,1.95,50,0.0409,0.61,0.05,0.56
|
||||
12,做空,2026-02-01 21:00:00,2026-02-01 21:40:00,2402.27,2392.0,1.96,50,0.0408,0.42,0.05,0.37
|
||||
13,做多,2026-02-01 21:40:00,2026-02-02 00:25:00,2392.0,2318.96,1.96,50,0.041,-3.0,0.05,-3.04
|
||||
14,做空,2026-02-02 00:25:00,2026-02-02 03:45:00,2318.96,2313.79,1.93,50,0.0416,0.22,0.05,0.17
|
||||
15,做多,2026-02-02 03:45:00,2026-02-02 04:35:00,2313.79,2342.69,1.93,50,0.0418,1.21,0.05,1.16
|
||||
16,做空,2026-02-02 04:35:00,2026-02-02 05:55:00,2342.69,2289.17,1.94,50,0.0415,2.22,0.05,2.17
|
||||
17,做多,2026-02-02 05:55:00,2026-02-02 06:10:00,2289.17,2323.39,1.96,50,0.0429,1.47,0.05,1.42
|
||||
18,做空,2026-02-02 06:10:00,2026-02-02 07:05:00,2323.39,2235.28,1.98,50,0.0426,3.75,0.05,3.7
|
||||
19,做多,2026-02-02 07:05:00,2026-02-02 08:15:00,2235.28,2307.06,2.01,50,0.0451,3.23,0.05,3.18
|
||||
20,做空,2026-02-02 08:15:00,2026-02-02 09:00:00,2307.06,2302.75,2.06,50,0.0446,0.19,0.05,0.14
|
||||
21,做多,2026-02-02 09:00:00,2026-02-02 14:15:00,2302.75,2211.45,2.06,50,0.0447,-4.08,0.05,-4.13
|
||||
22,做空,2026-02-02 14:15:00,2026-02-02 14:35:00,2211.45,2166.31,2.02,50,0.0456,2.06,0.05,2.01
|
||||
23,做多,2026-02-02 14:35:00,2026-02-02 14:40:00,2166.31,2219.94,2.04,50,0.047,2.52,0.05,2.47
|
||||
24,做空,2026-02-02 14:40:00,2026-02-02 17:15:00,2219.94,2250.82,2.06,50,0.0464,-1.43,0.05,-1.49
|
||||
25,做多,2026-02-02 17:15:00,2026-02-02 17:25:00,2250.82,2277.79,2.05,50,0.0455,1.23,0.05,1.17
|
||||
26,做空,2026-02-02 17:25:00,2026-02-02 22:10:00,2277.79,2305.44,2.06,50,0.0452,-1.25,0.05,-1.3
|
||||
27,做多,2026-02-02 22:10:00,2026-02-02 22:35:00,2305.44,2350.92,2.04,50,0.0443,2.02,0.05,1.96
|
||||
28,做空,2026-02-02 22:35:00,2026-02-03 00:50:00,2350.92,2357.15,2.06,50,0.0439,-0.27,0.05,-0.33
|
||||
29,做多,2026-02-03 00:50:00,2026-02-03 09:00:00,2357.15,2349.37,2.06,50,0.0437,-0.34,0.05,-0.39
|
||||
30,做空,2026-02-03 09:00:00,2026-02-03 10:10:00,2349.37,2327.51,2.06,50,0.0439,0.96,0.05,0.91
|
||||
31,做多,2026-02-03 10:10:00,2026-02-03 15:10:00,2327.51,2322.01,2.07,50,0.0445,-0.24,0.05,-0.3
|
||||
32,做空,2026-02-03 15:10:00,2026-02-03 16:10:00,2322.01,2311.05,2.07,50,0.0446,0.49,0.05,0.44
|
||||
33,做多,2026-02-03 16:10:00,2026-02-03 20:10:00,2311.05,2290.92,2.07,50,0.0449,-0.9,0.05,-0.95
|
||||
34,做空,2026-02-03 20:10:00,2026-02-03 22:15:00,2290.92,2299.99,2.06,50,0.045,-0.41,0.05,-0.46
|
||||
35,做多,2026-02-03 22:15:00,2026-02-03 23:25:00,2299.99,2292.96,2.06,50,0.0447,-0.31,0.05,-0.37
|
||||
36,做空,2026-02-03 23:25:00,2026-02-04 00:15:00,2292.96,2265.27,2.05,50,0.0448,1.24,0.05,1.19
|
||||
37,做多,2026-02-04 00:15:00,2026-02-04 03:10:00,2265.27,2178.1,2.07,50,0.0456,-3.97,0.05,-4.02
|
||||
38,做空,2026-02-04 03:10:00,2026-02-04 06:05:00,2178.1,2259.5,2.02,50,0.0465,-3.78,0.05,-3.84
|
||||
39,做多,2026-02-04 06:05:00,2026-02-04 09:00:00,2259.5,2264.51,1.99,50,0.0439,0.22,0.05,0.17
|
||||
40,做空,2026-02-04 09:00:00,2026-02-04 10:30:00,2264.51,2254.5,2.0,50,0.0441,0.44,0.05,0.39
|
||||
41,做多,2026-02-04 10:30:00,2026-02-04 11:10:00,2254.5,2275.54,2.0,50,0.0443,0.93,0.05,0.88
|
||||
42,做空,2026-02-04 11:10:00,2026-02-04 12:25:00,2275.54,2274.79,2.01,50,0.0441,0.03,0.05,-0.02
|
||||
43,做多,2026-02-04 12:25:00,2026-02-04 20:20:00,2274.79,2253.17,2.01,50,0.0441,-0.95,0.05,-1.0
|
||||
44,做空,2026-02-04 20:20:00,2026-02-04 20:25:00,2253.17,2234.15,2.0,50,0.0443,0.84,0.05,0.79
|
||||
45,做多,2026-02-04 20:25:00,2026-02-05 01:00:00,2234.15,2141.81,2.0,50,0.0449,-4.14,0.05,-4.19
|
||||
46,做空,2026-02-05 01:00:00,2026-02-05 01:35:00,2141.81,2100.23,1.96,50,0.0458,1.9,0.05,1.86
|
||||
47,做多,2026-02-05 01:35:00,2026-02-05 02:25:00,2100.23,2122.35,1.98,50,0.0471,1.04,0.05,0.99
|
||||
48,做空,2026-02-05 02:25:00,2026-02-05 03:20:00,2122.35,2138.64,1.99,50,0.0469,-0.76,0.05,-0.81
|
||||
49,做多,2026-02-05 03:20:00,2026-02-05 03:45:00,2138.64,2159.36,1.98,50,0.0463,0.96,0.05,0.91
|
||||
50,做空,2026-02-05 03:45:00,2026-02-05 05:05:00,2159.36,2158.46,1.99,50,0.0461,0.04,0.05,-0.01
|
||||
51,做多,2026-02-05 05:05:00,2026-02-05 10:35:00,2158.46,2153.58,1.99,50,0.0461,-0.22,0.05,-0.27
|
||||
52,做空,2026-02-05 10:35:00,2026-02-05 11:15:00,2153.58,2113.19,2.0,50,0.0463,1.87,0.05,1.82
|
||||
53,做多,2026-02-05 11:15:00,2026-02-05 12:40:00,2113.19,2121.89,2.01,50,0.0477,0.41,0.05,0.36
|
||||
54,做空,2026-02-05 12:40:00,2026-02-05 13:20:00,2121.89,2085.5,2.02,50,0.0475,1.73,0.05,1.68
|
||||
55,做多,2026-02-05 13:20:00,2026-02-05 15:00:00,2085.5,2115.39,2.03,50,0.0488,1.46,0.05,1.41
|
||||
56,做空,2026-02-05 15:00:00,2026-02-05 15:55:00,2115.39,2089.53,2.05,50,0.0484,1.25,0.05,1.2
|
||||
57,做多,2026-02-05 15:55:00,2026-02-05 16:25:00,2089.53,2110.34,2.06,50,0.0493,1.03,0.05,0.97
|
||||
58,做空,2026-02-05 16:25:00,2026-02-05 18:55:00,2110.34,2096.48,2.07,50,0.049,0.68,0.05,0.63
|
||||
59,做多,2026-02-05 18:55:00,2026-02-05 21:05:00,2096.48,2071.86,2.07,50,0.0495,-1.22,0.05,-1.27
|
||||
60,做空,2026-02-05 21:05:00,2026-02-06 01:20:00,2071.86,1987.12,2.06,50,0.0497,4.21,0.05,4.16
|
||||
61,做多,2026-02-06 01:20:00,2026-02-06 06:25:00,1987.12,1871.41,2.1,50,0.0529,-6.12,0.05,-6.17
|
||||
62,做空,2026-02-06 06:25:00,2026-02-06 08:10:00,1871.41,1766.83,2.04,50,0.0545,5.7,0.05,5.65
|
||||
63,做多,2026-02-06 08:10:00,2026-02-06 09:35:00,1766.83,1909.28,2.11,50,0.0596,8.49,0.06,8.43
|
||||
64,做空,2026-02-06 09:35:00,2026-02-06 11:50:00,1909.28,1885.62,2.19,50,0.0573,1.36,0.05,1.3
|
||||
65,做多,2026-02-06 11:50:00,2026-02-06 13:05:00,1885.62,1911.81,2.2,50,0.0584,1.53,0.06,1.47
|
||||
66,做空,2026-02-06 13:05:00,2026-02-06 16:15:00,1911.81,1879.3,2.22,50,0.0579,1.88,0.05,1.83
|
||||
67,做多,2026-02-06 16:15:00,2026-02-06 17:10:00,1879.3,1885.97,2.23,50,0.0594,0.4,0.06,0.34
|
||||
68,做空,2026-02-06 17:10:00,2026-02-06 19:00:00,1885.97,1924.17,2.24,50,0.0593,-2.26,0.06,-2.32
|
||||
69,做多,2026-02-06 19:00:00,2026-02-06 19:15:00,1924.17,1924.74,2.21,50,0.0575,0.03,0.06,-0.02
|
||||
70,做空,2026-02-06 19:15:00,2026-02-06 20:05:00,1924.74,1922.87,2.21,50,0.0575,0.11,0.06,0.05
|
||||
71,做多,2026-02-06 20:05:00,2026-02-06 21:00:00,1922.87,1932.91,2.21,50,0.0575,0.58,0.06,0.52
|
||||
72,做空,2026-02-06 21:00:00,2026-02-06 23:15:00,1932.91,1971.8,2.22,50,0.0573,-2.23,0.06,-2.29
|
||||
73,做多,2026-02-06 23:15:00,2026-02-06 23:45:00,1971.8,1990.88,2.19,50,0.0556,1.06,0.06,1.01
|
||||
74,做空,2026-02-06 23:45:00,2026-02-07 02:05:00,1990.88,2032.15,2.2,50,0.0553,-2.28,0.06,-2.34
|
||||
75,做多,2026-02-07 02:05:00,2026-02-07 04:35:00,2032.15,2073.09,2.18,50,0.0536,2.19,0.06,2.14
|
||||
76,做空,2026-02-07 04:35:00,2026-02-07 07:15:00,2073.09,2053.48,2.2,50,0.053,1.04,0.05,0.99
|
||||
77,做多,2026-02-07 07:15:00,2026-02-07 11:00:00,2053.48,2064.11,2.21,50,0.0538,0.57,0.06,0.52
|
||||
78,做空,2026-02-07 11:00:00,2026-02-07 14:15:00,2064.11,2073.13,2.23,50,0.054,-0.49,0.06,-0.54
|
||||
79,做多,2026-02-07 14:15:00,2026-02-07 19:55:00,2073.13,2017.76,2.22,50,0.0536,-2.97,0.05,-3.02
|
||||
80,做空,2026-02-07 19:55:00,2026-02-07 21:35:00,2017.76,2027.6,2.19,50,0.0543,-0.53,0.06,-0.59
|
||||
81,做多,2026-02-07 21:35:00,2026-02-08 02:15:00,2027.6,2076.87,2.18,50,0.0539,2.65,0.06,2.6
|
||||
82,做空,2026-02-08 02:15:00,2026-02-08 06:10:00,2076.87,2099.58,2.21,50,0.0532,-1.21,0.06,-1.26
|
||||
83,做多,2026-02-08 06:10:00,2026-02-08 10:20:00,2099.58,2102.05,2.2,50,0.0523,0.13,0.05,0.07
|
||||
84,做空,2026-02-08 10:20:00,2026-02-08 12:15:00,2102.05,2074.69,2.2,50,0.0524,1.43,0.05,1.38
|
||||
85,做多,2026-02-08 12:15:00,2026-02-08 12:55:00,2074.69,2086.46,2.22,50,0.0534,0.63,0.06,0.57
|
||||
86,做空,2026-02-08 12:55:00,2026-02-08 14:05:00,2086.46,2079.62,2.22,50,0.0532,0.36,0.06,0.31
|
||||
87,做多,2026-02-08 14:05:00,2026-02-08 16:20:00,2079.62,2096.67,2.22,50,0.0535,0.91,0.06,0.86
|
||||
88,做空,2026-02-08 16:20:00,2026-02-08 17:35:00,2096.67,2103.15,2.23,50,0.0532,-0.34,0.06,-0.4
|
||||
89,做多,2026-02-08 17:35:00,2026-02-08 18:05:00,2103.15,2107.65,2.23,50,0.053,0.24,0.06,0.18
|
||||
90,做空,2026-02-08 18:05:00,2026-02-08 18:20:00,2107.65,2087.85,2.23,50,0.0529,1.05,0.06,0.99
|
||||
91,做多,2026-02-08 18:20:00,2026-02-08 19:15:00,2087.85,2110.36,2.24,50,0.0536,1.21,0.06,1.15
|
||||
92,做空,2026-02-08 19:15:00,2026-02-08 21:05:00,2110.36,2123.28,2.25,50,0.0533,-0.69,0.06,-0.75
|
||||
93,做多,2026-02-08 21:05:00,2026-02-09 02:15:00,2123.28,2094.55,2.24,50,0.0528,-1.52,0.06,-1.57
|
||||
94,做空,2026-02-09 02:15:00,2026-02-09 04:45:00,2094.55,2104.6,2.22,50,0.0531,-0.53,0.06,-0.59
|
||||
95,做多,2026-02-09 04:45:00,2026-02-09 06:55:00,2104.6,2107.44,2.22,50,0.0527,0.15,0.06,0.09
|
||||
96,做空,2026-02-09 06:55:00,2026-02-09 08:25:00,2107.44,2081.4,2.22,50,0.0526,1.37,0.05,1.32
|
||||
97,做多,2026-02-09 08:25:00,2026-02-09 09:20:00,2081.4,2098.76,2.24,50,0.0539,0.94,0.06,0.88
|
||||
98,做空,2026-02-09 09:20:00,2026-02-09 09:40:00,2098.76,2063.62,2.25,50,0.0537,1.89,0.06,1.83
|
||||
99,做多,2026-02-09 09:40:00,2026-02-09 10:35:00,2063.62,2079.96,2.27,50,0.055,0.9,0.06,0.84
|
||||
100,做空,2026-02-09 10:35:00,2026-02-09 14:15:00,2079.96,2075.79,2.28,50,0.0548,0.23,0.06,0.17
|
||||
101,做多,2026-02-09 14:15:00,2026-02-09 15:10:00,2075.79,2084.33,2.28,50,0.0549,0.47,0.06,0.41
|
||||
102,做空,2026-02-09 15:10:00,2026-02-09 15:35:00,2084.33,2067.23,2.28,50,0.0548,0.94,0.06,0.88
|
||||
103,做多,2026-02-09 15:35:00,2026-02-09 20:00:00,2067.23,2031.57,2.29,50,0.0554,-1.98,0.06,-2.03
|
||||
104,做空,2026-02-09 20:00:00,2026-02-10 02:20:00,2031.57,2115.84,2.27,50,0.0559,-4.71,0.06,-4.77
|
||||
105,做多,2026-02-10 02:20:00,2026-02-10 03:30:00,2115.84,2131.85,2.22,50,0.0525,0.84,0.06,0.78
|
||||
106,做空,2026-02-10 03:30:00,2026-02-10 04:00:00,2131.85,2130.8,2.23,50,0.0523,0.05,0.06,-0.0
|
||||
107,做多,2026-02-10 04:00:00,2026-02-10 04:05:00,2130.8,2135.34,2.23,50,0.0523,0.24,0.06,0.18
|
||||
108,做空,2026-02-10 04:05:00,2026-02-10 04:15:00,2135.34,2122.59,2.23,50,0.0522,0.67,0.06,0.61
|
||||
109,做多,2026-02-10 04:15:00,2026-02-10 16:20:00,2122.59,2011.91,2.24,50,0.0527,-5.83,0.05,-5.88
|
||||
110,做空,2026-02-10 16:20:00,2026-02-10 17:50:00,2011.91,2015.22,2.19,50,0.0544,-0.18,0.05,-0.23
|
||||
111,做多,2026-02-10 17:50:00,2026-02-10 19:30:00,2015.22,2019.66,2.19,50,0.0543,0.24,0.05,0.19
|
||||
112,做空,2026-02-10 19:30:00,2026-02-10 19:40:00,2019.66,2007.94,2.19,50,0.0542,0.63,0.05,0.58
|
||||
113,做多,2026-02-10 19:40:00,2026-02-10 21:15:00,2007.94,2012.02,2.19,50,0.0546,0.22,0.05,0.17
|
||||
114,做空,2026-02-10 21:15:00,2026-02-10 22:35:00,2012.02,2012.47,2.19,50,0.0545,-0.02,0.05,-0.08
|
||||
115,做多,2026-02-10 22:35:00,2026-02-11 00:10:00,2012.47,2032.87,2.19,50,0.0545,1.11,0.06,1.06
|
||||
116,做空,2026-02-11 00:10:00,2026-02-11 02:20:00,2032.87,2013.69,2.2,50,0.0542,1.04,0.05,0.98
|
||||
117,做多,2026-02-11 02:20:00,2026-02-11 03:30:00,2013.69,2013.39,2.21,50,0.0549,-0.02,0.06,-0.07
|
||||
118,做空,2026-02-11 03:30:00,2026-02-11 05:30:00,2013.39,2001.89,2.21,50,0.0549,0.63,0.05,0.58
|
||||
119,做多,2026-02-11 05:30:00,2026-02-11 07:35:00,2001.89,2018.01,2.22,50,0.0554,0.89,0.06,0.84
|
||||
120,做空,2026-02-11 07:35:00,2026-02-11 09:20:00,2018.01,2018.06,2.22,50,0.0551,-0.0,0.06,-0.06
|
||||
121,做多,2026-02-11 09:20:00,2026-02-11 10:20:00,2018.06,2027.05,2.23,50,0.0553,0.5,0.06,0.44
|
||||
122,做空,2026-02-11 10:20:00,2026-02-11 10:45:00,2027.05,2014.32,2.24,50,0.0552,0.7,0.06,0.65
|
||||
123,做多,2026-02-11 10:45:00,2026-02-11 15:35:00,2014.32,1951.85,2.24,50,0.0557,-3.48,0.05,-3.53
|
||||
124,做空,2026-02-11 15:35:00,2026-02-11 16:05:00,1951.85,1939.79,2.21,50,0.0566,0.68,0.05,0.63
|
||||
125,做多,2026-02-11 16:05:00,2026-02-11 17:00:00,1939.79,1949.26,2.21,50,0.057,0.54,0.06,0.48
|
||||
126,做空,2026-02-11 17:00:00,2026-02-11 17:45:00,1949.26,1944.0,2.22,50,0.0569,0.3,0.06,0.24
|
||||
127,做多,2026-02-11 17:45:00,2026-02-11 20:05:00,1944.0,1961.67,2.22,50,0.0571,1.01,0.06,0.95
|
||||
128,做空,2026-02-11 20:05:00,2026-02-11 21:25:00,1961.67,1948.28,2.23,50,0.0568,0.76,0.06,0.71
|
||||
129,做多,2026-02-11 21:25:00,2026-02-11 21:30:00,1948.28,1963.0,2.23,50,0.0574,0.84,0.06,0.79
|
||||
130,做空,2026-02-11 21:30:00,2026-02-12 03:30:00,1963.0,1943.01,2.24,50,0.0571,1.14,0.06,1.09
|
||||
131,做多,2026-02-12 03:30:00,2026-02-12 03:45:00,1943.01,1952.12,2.25,50,0.058,0.53,0.06,0.47
|
||||
132,做空,2026-02-12 03:45:00,2026-02-12 04:25:00,1952.12,1941.02,2.26,50,0.0578,0.64,0.06,0.59
|
||||
133,做多,2026-02-12 04:25:00,2026-02-12 05:20:00,1941.02,1968.22,2.26,50,0.0583,1.58,0.06,1.53
|
||||
134,做空,2026-02-12 05:20:00,2026-02-12 06:10:00,1968.22,1960.92,2.28,50,0.0578,0.42,0.06,0.37
|
||||
135,做多,2026-02-12 06:10:00,2026-02-12 08:05:00,1960.92,1951.09,2.28,50,0.0581,-0.57,0.06,-0.63
|
||||
136,做空,2026-02-12 08:05:00,2026-02-12 12:30:00,1951.09,1967.55,2.29,50,0.0586,-0.97,0.06,-1.02
|
||||
137,做多,2026-02-12 12:30:00,2026-02-12 14:10:00,1967.55,1970.2,2.28,50,0.0579,0.15,0.06,0.1
|
||||
138,做空,2026-02-12 14:10:00,2026-02-12 16:25:00,1970.2,1958.73,2.28,50,0.0578,0.66,0.06,0.61
|
||||
139,做多,2026-02-12 16:25:00,2026-02-12 17:10:00,1958.73,1968.27,2.28,50,0.0583,0.56,0.06,0.5
|
||||
140,做空,2026-02-12 17:10:00,2026-02-12 20:50:00,1968.27,1976.76,2.29,50,0.0581,-0.49,0.06,-0.55
|
||||
141,做多,2026-02-12 20:50:00,2026-02-12 21:30:00,1976.76,1985.8,2.28,50,0.0577,0.52,0.06,0.46
|
||||
142,做空,2026-02-12 21:30:00,2026-02-12 22:45:00,1985.8,1978.53,2.29,50,0.0575,0.42,0.06,0.36
|
||||
143,做多,2026-02-12 22:45:00,2026-02-13 01:35:00,1978.53,1920.11,2.29,50,0.0578,-3.38,0.06,-3.43
|
||||
144,做空,2026-02-13 01:35:00,2026-02-13 04:10:00,1920.11,1920.22,2.25,50,0.0587,-0.01,0.06,-0.06
|
||||
145,做多,2026-02-13 04:10:00,2026-02-13 06:30:00,1920.22,1927.46,2.25,50,0.0587,0.42,0.06,0.37
|
||||
146,做空,2026-02-13 06:30:00,2026-02-13 08:15:00,1927.46,1940.1,2.26,50,0.0585,-0.74,0.06,-0.8
|
||||
147,做多,2026-02-13 08:15:00,2026-02-13 09:05:00,1940.1,1941.5,2.26,50,0.0582,0.08,0.06,0.02
|
||||
148,做空,2026-02-13 09:05:00,2026-02-13 10:20:00,1941.5,1946.1,2.26,50,0.0582,-0.27,0.06,-0.32
|
||||
149,做多,2026-02-13 10:20:00,2026-02-13 10:50:00,1946.1,1947.9,2.25,50,0.0579,0.1,0.06,0.05
|
||||
150,做空,2026-02-13 10:50:00,2026-02-13 12:10:00,1947.9,1950.84,2.25,50,0.0579,-0.17,0.06,-0.23
|
||||
151,做多,2026-02-13 12:10:00,2026-02-13 12:25:00,1950.84,1949.6,2.25,50,0.0577,-0.07,0.06,-0.13
|
||||
152,做空,2026-02-13 12:25:00,2026-02-13 12:30:00,1949.6,1950.08,2.25,50,0.0577,-0.03,0.06,-0.08
|
||||
153,做多,2026-02-13 12:30:00,2026-02-13 16:20:00,1950.08,1939.99,2.25,50,0.0576,-0.58,0.06,-0.64
|
||||
154,做空,2026-02-13 16:20:00,2026-02-13 19:05:00,1939.99,1955.6,2.24,50,0.0578,-0.9,0.06,-0.96
|
||||
155,做多,2026-02-13 19:05:00,2026-02-13 20:25:00,1955.6,1961.63,2.23,50,0.057,0.34,0.06,0.29
|
||||
156,做空,2026-02-13 20:25:00,2026-02-13 21:05:00,1961.63,1957.39,2.23,50,0.0569,0.24,0.06,0.19
|
||||
157,做多,2026-02-13 21:05:00,2026-02-13 21:20:00,1957.39,1967.19,2.23,50,0.0571,0.56,0.06,0.5
|
||||
158,做空,2026-02-13 21:20:00,2026-02-14 02:00:00,1967.19,2056.73,2.24,50,0.0569,-5.1,0.06,-5.15
|
||||
159,做多,2026-02-14 02:00:00,2026-02-14 02:35:00,2056.73,2061.34,2.19,50,0.0532,0.25,0.05,0.19
|
||||
160,做空,2026-02-14 02:35:00,2026-02-14 04:15:00,2061.34,2049.81,2.19,50,0.0531,0.61,0.05,0.56
|
||||
161,做多,2026-02-14 04:15:00,2026-02-14 05:00:00,2049.81,2054.62,2.19,50,0.0535,0.26,0.05,0.2
|
||||
162,做空,2026-02-14 05:00:00,2026-02-14 07:35:00,2054.62,2047.52,2.19,50,0.0534,0.38,0.05,0.32
|
||||
163,做多,2026-02-14 07:35:00,2026-02-14 09:50:00,2047.52,2053.35,2.2,50,0.0537,0.31,0.06,0.26
|
||||
164,做空,2026-02-14 09:50:00,2026-02-14 09:55:00,2053.35,2053.37,2.22,50,0.054,-0.0,0.06,-0.06
|
||||
165,做多,2026-02-14 09:55:00,2026-02-14 11:25:00,2053.37,2050.56,2.22,50,0.0539,-0.15,0.06,-0.21
|
||||
166,做空,2026-02-14 11:25:00,2026-02-14 13:00:00,2050.56,2052.1,2.21,50,0.054,-0.08,0.06,-0.14
|
||||
167,做多,2026-02-14 13:00:00,2026-02-14 15:30:00,2052.1,2052.31,2.21,50,0.0539,0.01,0.06,-0.04
|
||||
168,做空,2026-02-14 15:30:00,2026-02-14 15:35:00,2052.31,2050.7,2.21,50,0.0538,0.09,0.06,0.03
|
||||
169,做多,2026-02-14 15:35:00,2026-02-14 15:50:00,2050.7,2057.65,2.21,50,0.0539,0.37,0.06,0.32
|
||||
170,做空,2026-02-14 15:50:00,2026-02-14 20:15:00,2057.65,2094.01,2.21,50,0.0538,-1.95,0.06,-2.01
|
||||
171,做多,2026-02-14 20:15:00,2026-02-14 22:20:00,2094.01,2069.5,2.19,50,0.0523,-1.28,0.05,-1.34
|
||||
172,做空,2026-02-14 22:20:00,2026-02-15 00:00:00,2069.5,2086.28,2.18,50,0.0526,-0.88,0.05,-0.94
|
||||
173,做多,2026-02-15 00:00:00,2026-02-15 02:20:00,2086.28,2082.08,2.17,50,0.052,-0.22,0.05,-0.27
|
||||
174,做空,2026-02-15 02:20:00,2026-02-15 03:15:00,2082.08,2084.26,2.16,50,0.052,-0.11,0.05,-0.17
|
||||
175,做多,2026-02-15 03:15:00,2026-02-15 03:30:00,2084.26,2085.58,2.16,50,0.0519,0.07,0.05,0.01
|
||||
176,做空,2026-02-15 03:30:00,2026-02-15 07:15:00,2085.58,2087.12,2.16,50,0.0518,-0.08,0.05,-0.13
|
||||
177,做多,2026-02-15 07:15:00,2026-02-15 10:05:00,2087.12,2058.92,2.16,50,0.0517,-1.46,0.05,-1.51
|
||||
178,做空,2026-02-15 10:05:00,2026-02-15 10:20:00,2058.92,2054.96,2.16,50,0.0524,0.21,0.05,0.15
|
||||
179,做多,2026-02-15 10:20:00,2026-02-15 12:05:00,2054.96,2072.91,2.16,50,0.0525,0.94,0.05,0.89
|
||||
180,做空,2026-02-15 12:05:00,2026-02-15 14:00:00,2072.91,2086.85,2.17,50,0.0523,-0.73,0.05,-0.78
|
||||
181,做多,2026-02-15 14:00:00,2026-02-15 14:35:00,2086.85,2090.16,2.16,50,0.0517,0.17,0.05,0.12
|
||||
182,做空,2026-02-15 14:35:00,2026-02-15 16:25:00,2090.16,2075.54,2.16,50,0.0517,0.76,0.05,0.7
|
||||
183,做多,2026-02-15 16:25:00,2026-02-15 20:20:00,2075.54,2062.81,2.17,50,0.0522,-0.66,0.05,-0.72
|
||||
184,做空,2026-02-15 20:20:00,2026-02-15 20:45:00,2062.81,2046.45,2.16,50,0.0523,0.86,0.05,0.8
|
||||
185,做多,2026-02-15 20:45:00,2026-02-15 22:30:00,2046.45,1999.25,2.17,50,0.0529,-2.5,0.05,-2.55
|
||||
186,做空,2026-02-15 22:30:00,2026-02-16 00:05:00,1999.25,1999.62,2.14,50,0.0535,-0.02,0.05,-0.07
|
||||
187,做多,2026-02-16 00:05:00,2026-02-16 05:30:00,1999.62,1959.09,2.14,50,0.0535,-2.17,0.05,-2.22
|
||||
188,做空,2026-02-16 05:30:00,2026-02-16 07:00:00,1959.09,1956.8,2.12,50,0.054,0.12,0.05,0.07
|
||||
189,做多,2026-02-16 07:00:00,2026-02-16 08:05:00,1956.8,1973.71,2.12,50,0.0541,0.91,0.05,0.86
|
||||
190,做空,2026-02-16 08:05:00,2026-02-16 10:20:00,1973.71,1958.9,2.14,50,0.0541,0.8,0.05,0.75
|
||||
191,做多,2026-02-16 10:20:00,2026-02-16 12:00:00,1958.9,1963.67,2.14,50,0.0547,0.26,0.05,0.21
|
||||
192,做空,2026-02-16 12:00:00,2026-02-16 19:05:00,1963.67,1973.75,2.14,50,0.0546,-0.55,0.05,-0.6
|
||||
193,做多,2026-02-16 19:05:00,2026-02-16 20:25:00,1973.75,1991.31,2.14,50,0.0542,0.95,0.05,0.9
|
||||
194,做空,2026-02-16 20:25:00,2026-02-16 21:25:00,1991.31,1976.1,2.15,50,0.0539,0.82,0.05,0.77
|
||||
195,做多,2026-02-16 21:25:00,2026-02-16 22:50:00,1976.1,1969.72,2.15,50,0.0545,-0.35,0.05,-0.4
|
||||
196,做空,2026-02-16 22:50:00,2026-02-16 23:30:00,1969.72,1940.59,2.15,50,0.0545,1.59,0.05,1.54
|
||||
197,做多,2026-02-16 23:30:00,2026-02-17 01:30:00,1940.59,1983.81,2.16,50,0.0557,2.41,0.06,2.35
|
||||
198,做空,2026-02-17 01:30:00,2026-02-17 02:35:00,1983.81,1974.99,2.19,50,0.0551,0.49,0.05,0.43
|
||||
199,做多,2026-02-17 02:35:00,2026-02-17 03:35:00,1974.99,1977.15,2.19,50,0.0555,0.12,0.05,0.06
|
||||
200,做空,2026-02-17 03:35:00,2026-02-17 06:45:00,1977.15,1991.2,2.19,50,0.0554,-0.78,0.06,-0.83
|
||||
201,做多,2026-02-17 06:45:00,2026-02-17 07:05:00,1991.2,1993.01,2.18,50,0.0548,0.1,0.05,0.04
|
||||
202,做空,2026-02-17 07:05:00,2026-02-17 10:00:00,1993.01,1986.61,2.18,50,0.0547,0.35,0.05,0.3
|
||||
203,做多,2026-02-17 10:00:00,2026-02-17 12:20:00,1986.61,1996.22,2.2,50,0.0553,0.53,0.06,0.48
|
||||
204,做空,2026-02-17 12:20:00,2026-02-17 13:15:00,1996.22,1975.63,2.2,50,0.0551,1.14,0.05,1.08
|
||||
205,做多,2026-02-17 13:15:00,2026-02-17 14:25:00,1975.63,1981.79,2.21,50,0.056,0.34,0.06,0.29
|
||||
206,做空,2026-02-17 14:25:00,2026-02-17 15:05:00,1981.79,1975.75,2.21,50,0.0558,0.34,0.06,0.28
|
||||
207,做多,2026-02-17 15:05:00,2026-02-17 18:00:00,1975.75,1974.07,2.22,50,0.0561,-0.09,0.06,-0.15
|
||||
208,做空,2026-02-17 18:00:00,2026-02-17 18:15:00,1974.07,1963.99,2.21,50,0.0561,0.57,0.06,0.51
|
||||
209,做多,2026-02-17 18:15:00,2026-02-17 19:00:00,1963.99,1966.66,2.22,50,0.0565,0.15,0.06,0.1
|
||||
210,做空,2026-02-17 19:00:00,2026-02-17 19:45:00,1966.66,1966.75,2.22,50,0.0564,-0.01,0.06,-0.06
|
||||
211,做多,2026-02-17 19:45:00,2026-02-17 20:05:00,1966.75,1973.21,2.22,50,0.0564,0.36,0.06,0.31
|
||||
212,做空,2026-02-17 20:05:00,2026-02-17 20:50:00,1973.21,1970.9,2.22,50,0.0563,0.13,0.06,0.07
|
||||
213,做多,2026-02-17 20:50:00,2026-02-17 21:10:00,1970.9,1979.05,2.22,50,0.0563,0.46,0.06,0.4
|
||||
214,做空,2026-02-17 21:10:00,2026-02-17 22:35:00,1979.05,1978.92,2.22,50,0.0562,0.01,0.06,-0.05
|
||||
215,做多,2026-02-17 22:35:00,2026-02-18 00:00:00,1978.92,1986.74,2.22,50,0.0562,0.44,0.06,0.38
|
||||
216,做空,2026-02-18 00:00:00,2026-02-18 01:10:00,1986.74,1964.67,2.23,50,0.056,1.24,0.06,1.18
|
||||
217,做多,2026-02-18 01:10:00,2026-02-18 02:20:00,1964.67,1986.33,2.24,50,0.0569,1.23,0.06,1.18
|
||||
218,做空,2026-02-18 02:20:00,2026-02-18 04:30:00,1986.33,1993.32,2.25,50,0.0566,-0.4,0.06,-0.45
|
||||
219,做多,2026-02-18 04:30:00,2026-02-18 04:40:00,1993.32,1997.94,2.24,50,0.0563,0.26,0.06,0.2
|
||||
220,做空,2026-02-18 04:40:00,2026-02-18 06:50:00,1997.94,1993.94,2.24,50,0.0562,0.22,0.06,0.17
|
||||
221,做多,2026-02-18 06:50:00,2026-02-18 11:25:00,1993.94,1993.01,2.25,50,0.0563,-0.05,0.06,-0.11
|
||||
222,做空,2026-02-18 11:25:00,2026-02-18 12:35:00,1993.01,1994.19,2.26,50,0.0568,-0.07,0.06,-0.12
|
||||
223,做多,2026-02-18 12:35:00,2026-02-18 14:20:00,1994.19,2001.76,2.26,50,0.0567,0.43,0.06,0.37
|
||||
224,做空,2026-02-18 14:20:00,2026-02-18 17:50:00,2001.76,2017.24,2.26,50,0.0566,-0.88,0.06,-0.93
|
||||
225,做多,2026-02-18 17:50:00,2026-02-18 22:30:00,2017.24,1967.63,2.25,50,0.0559,-2.77,0.05,-2.83
|
||||
226,做空,2026-02-18 22:30:00,2026-02-18 22:45:00,1967.63,1955.53,2.23,50,0.0566,0.68,0.06,0.63
|
||||
227,做多,2026-02-18 22:45:00,2026-02-18 23:05:00,1955.53,1983.75,2.23,50,0.0571,1.61,0.06,1.55
|
||||
228,做空,2026-02-18 23:05:00,2026-02-19 02:15:00,1983.75,1963.63,2.25,50,0.0566,1.14,0.06,1.08
|
||||
229,做多,2026-02-19 02:15:00,2026-02-19 04:30:00,1963.63,1947.9,2.26,50,0.0575,-0.9,0.06,-0.96
|
||||
230,做空,2026-02-19 04:30:00,2026-02-19 07:15:00,1947.9,1946.27,2.25,50,0.0577,0.09,0.06,0.04
|
||||
231,做多,2026-02-19 07:15:00,2026-02-19 07:25:00,1946.27,1947.6,2.25,50,0.0577,0.08,0.06,0.02
|
||||
232,做空,2026-02-19 07:25:00,2026-02-19 08:25:00,1947.6,1952.44,2.25,50,0.0577,-0.28,0.06,-0.34
|
||||
233,做多,2026-02-19 08:25:00,2026-02-19 09:10:00,1952.44,1969.01,2.25,50,0.0577,0.96,0.06,0.9
|
||||
234,做空,2026-02-19 09:10:00,2026-02-19 12:45:00,1969.01,1971.59,2.26,50,0.0574,-0.15,0.06,-0.2
|
||||
235,做多,2026-02-19 12:45:00,2026-02-19 14:05:00,1971.59,1971.53,2.26,50,0.0573,-0.0,0.06,-0.06
|
||||
236,做空,2026-02-19 14:05:00,2026-02-19 15:40:00,1971.53,1981.57,2.26,50,0.0573,-0.57,0.06,-0.63
|
||||
237,做多,2026-02-19 15:40:00,2026-02-19 17:20:00,1981.57,1977.7,2.25,50,0.0568,-0.22,0.06,-0.28
|
||||
238,做空,2026-02-19 17:20:00,2026-02-19 17:45:00,1977.7,1961.93,2.25,50,0.0568,0.9,0.06,0.84
|
||||
239,做多,2026-02-19 17:45:00,2026-02-19 22:50:00,1961.93,1939.99,2.26,50,0.0575,-1.26,0.06,-1.32
|
||||
240,做空,2026-02-19 22:50:00,2026-02-20 00:05:00,1939.99,1915.04,2.24,50,0.0578,1.44,0.06,1.39
|
||||
241,做多,2026-02-20 00:05:00,2026-02-20 01:15:00,1915.04,1941.03,2.26,50,0.0589,1.53,0.06,1.47
|
||||
242,做空,2026-02-20 01:15:00,2026-02-20 03:25:00,1941.03,1935.82,2.27,50,0.0585,0.3,0.06,0.25
|
||||
243,做多,2026-02-20 03:25:00,2026-02-20 04:45:00,1935.82,1947.16,2.27,50,0.0587,0.67,0.06,0.61
|
||||
244,做空,2026-02-20 04:45:00,2026-02-20 05:55:00,1947.16,1947.67,2.28,50,0.0585,-0.03,0.06,-0.09
|
||||
245,做多,2026-02-20 05:55:00,2026-02-20 07:00:00,1947.67,1943.15,2.28,50,0.0584,-0.26,0.06,-0.32
|
||||
246,做空,2026-02-20 07:00:00,2026-02-20 12:00:00,1943.15,1948.02,2.27,50,0.0585,-0.28,0.06,-0.34
|
||||
247,做多,2026-02-20 12:00:00,2026-02-20 13:30:00,1948.02,1960.28,2.28,50,0.0586,0.72,0.06,0.66
|
||||
248,做空,2026-02-20 13:30:00,2026-02-20 14:30:00,1960.28,1954.43,2.29,50,0.0584,0.34,0.06,0.28
|
||||
249,做多,2026-02-20 14:30:00,2026-02-20 15:15:00,1954.43,1959.51,2.29,50,0.0586,0.3,0.06,0.24
|
||||
250,做空,2026-02-20 15:15:00,2026-02-20 18:40:00,1959.51,1961.18,2.29,50,0.0585,-0.1,0.06,-0.16
|
||||
251,做多,2026-02-20 18:40:00,2026-02-20 20:50:00,1961.18,1946.59,2.29,50,0.0584,-0.85,0.06,-0.91
|
||||
252,做空,2026-02-20 20:50:00,2026-02-20 21:00:00,1946.59,1943.99,2.28,50,0.0586,0.15,0.06,0.1
|
||||
253,做多,2026-02-20 21:00:00,2026-02-20 22:30:00,1943.99,1944.3,2.28,50,0.0587,0.02,0.06,-0.04
|
||||
254,做空,2026-02-20 22:30:00,2026-02-21 06:10:00,1944.3,1964.49,2.28,50,0.0586,-1.18,0.06,-1.24
|
||||
255,做多,2026-02-21 06:10:00,2026-02-21 07:05:00,1964.49,1968.92,2.27,50,0.0577,0.26,0.06,0.2
|
||||
256,做空,2026-02-21 07:05:00,2026-02-21 08:45:00,1968.92,1963.92,2.27,50,0.0576,0.29,0.06,0.23
|
||||
257,做多,2026-02-21 08:45:00,2026-02-21 12:25:00,1963.92,1959.01,2.28,50,0.058,-0.29,0.06,-0.34
|
||||
258,做空,2026-02-21 12:25:00,2026-02-21 20:25:00,1959.01,1969.99,2.28,50,0.0581,-0.64,0.06,-0.7
|
||||
259,做多,2026-02-21 20:25:00,2026-02-21 22:05:00,1969.99,1981.03,2.27,50,0.0576,0.64,0.06,0.58
|
||||
260,做空,2026-02-21 22:05:00,2026-02-21 23:30:00,1981.03,1988.19,2.27,50,0.0574,-0.41,0.06,-0.47
|
||||
261,做多,2026-02-21 23:30:00,2026-02-21 23:40:00,1988.19,1989.55,2.27,50,0.057,0.08,0.06,0.02
|
||||
262,做空,2026-02-21 23:40:00,2026-02-22 00:00:00,1989.55,1979.46,2.27,50,0.057,0.58,0.06,0.52
|
||||
263,做多,2026-02-22 00:00:00,2026-02-22 01:40:00,1979.46,1988.74,2.27,50,0.0574,0.53,0.06,0.48
|
||||
264,做空,2026-02-22 01:40:00,2026-02-22 03:50:00,1988.74,1987.85,2.28,50,0.0572,0.05,0.06,-0.01
|
||||
265,做多,2026-02-22 03:50:00,2026-02-22 09:00:00,1987.85,1973.58,2.28,50,0.0573,-0.82,0.06,-0.87
|
||||
266,做空,2026-02-22 09:00:00,2026-02-22 11:15:00,1973.58,1968.26,2.28,50,0.0577,0.31,0.06,0.25
|
||||
267,做多,2026-02-22 11:15:00,2026-02-22 15:25:00,1968.26,1975.34,2.28,50,0.0579,0.41,0.06,0.35
|
||||
268,做空,2026-02-22 15:25:00,2026-02-22 16:20:00,1975.34,1973.39,2.28,50,0.0577,0.11,0.06,0.06
|
||||
269,做多,2026-02-22 16:20:00,2026-02-22 17:15:00,1973.39,1973.0,2.28,50,0.0578,-0.02,0.06,-0.08
|
||||
270,做空,2026-02-22 17:15:00,2026-02-22 20:00:00,1973.0,1976.79,2.28,50,0.0578,-0.22,0.06,-0.28
|
||||
271,做多,2026-02-22 20:00:00,2026-02-22 22:30:00,1976.79,1951.75,2.28,50,0.0576,-1.44,0.06,-1.5
|
||||
272,做空,2026-02-22 22:30:00,2026-02-23 01:30:00,1951.75,1935.57,2.26,50,0.0579,0.94,0.06,0.88
|
||||
273,做多,2026-02-23 01:30:00,2026-02-23 02:15:00,1935.57,1941.0,2.27,50,0.0586,0.32,0.06,0.26
|
||||
274,做空,2026-02-23 02:15:00,2026-02-23 02:35:00,1941.0,1940.45,2.27,50,0.0585,0.03,0.06,-0.02
|
||||
275,做多,2026-02-23 02:35:00,2026-02-23 02:50:00,1940.45,1942.01,2.27,50,0.0585,0.09,0.06,0.03
|
||||
276,做空,2026-02-23 02:50:00,2026-02-23 04:50:00,1942.01,1939.47,2.27,50,0.0584,0.15,0.06,0.09
|
||||
277,做多,2026-02-23 04:50:00,2026-02-23 05:35:00,1939.47,1949.72,2.27,50,0.0585,0.6,0.06,0.54
|
||||
278,做空,2026-02-23 05:35:00,2026-02-23 07:20:00,1949.72,1951.6,2.28,50,0.0584,-0.11,0.06,-0.17
|
||||
279,做多,2026-02-23 07:20:00,2026-02-23 07:55:00,1951.6,1957.01,2.27,50,0.0582,0.32,0.06,0.26
|
||||
280,做空,2026-02-23 07:55:00,2026-02-23 08:25:00,1957.01,1947.41,2.28,50,0.0581,0.56,0.06,0.5
|
||||
281,做多,2026-02-23 08:25:00,2026-02-23 11:05:00,1947.41,1866.1,2.29,50,0.0589,-4.79,0.05,-4.85
|
||||
282,做空,2026-02-23 11:05:00,2026-02-23 11:15:00,1866.1,1858.39,2.25,50,0.0602,0.46,0.06,0.41
|
||||
283,做多,2026-02-23 11:15:00,2026-02-23 13:15:00,1858.39,1866.46,2.25,50,0.0605,0.49,0.06,0.43
|
||||
284,做空,2026-02-23 13:15:00,2026-02-23 16:35:00,1866.46,1877.82,2.25,50,0.0604,-0.69,0.06,-0.74
|
||||
285,做多,2026-02-23 16:35:00,2026-02-23 17:10:00,1877.82,1884.54,2.25,50,0.0598,0.4,0.06,0.35
|
||||
286,做空,2026-02-23 17:10:00,2026-02-23 20:30:00,1884.54,1907.37,2.25,50,0.0596,-1.36,0.06,-1.42
|
||||
287,做多,2026-02-23 20:30:00,2026-02-23 20:35:00,1907.37,1919.57,2.23,50,0.0585,0.71,0.06,0.66
|
||||
288,做空,2026-02-23 20:35:00,2026-02-23 22:35:00,1919.57,1906.62,2.24,50,0.0583,0.76,0.06,0.7
|
||||
289,做多,2026-02-23 22:35:00,2026-02-24 10:30:00,1906.62,1849.89,2.25,50,0.0589,-3.34,0.05,-3.4
|
||||
290,做空,2026-02-24 10:30:00,2026-02-24 11:00:00,1849.89,1836.02,2.22,50,0.06,0.83,0.06,0.78
|
||||
291,做多,2026-02-24 11:00:00,2026-02-24 13:05:00,1836.02,1836.44,2.23,50,0.0607,0.03,0.06,-0.03
|
||||
292,做空,2026-02-24 13:05:00,2026-02-24 13:20:00,1836.44,1815.44,2.23,50,0.0606,1.27,0.06,1.22
|
||||
293,做多,2026-02-24 13:20:00,2026-02-24 16:30:00,1815.44,1832.52,2.24,50,0.0616,1.05,0.06,1.0
|
||||
294,做空,2026-02-24 16:30:00,2026-02-24 17:05:00,1832.52,1824.3,2.25,50,0.0613,0.5,0.06,0.45
|
||||
295,做多,2026-02-24 17:05:00,2026-02-24 20:10:00,1824.3,1826.47,2.25,50,0.0617,0.13,0.06,0.08
|
||||
296,做空,2026-02-24 20:10:00,2026-02-24 21:20:00,1826.47,1819.72,2.25,50,0.0616,0.42,0.06,0.36
|
||||
297,做多,2026-02-24 21:20:00,2026-02-24 22:35:00,1819.72,1821.38,2.25,50,0.062,0.1,0.06,0.05
|
||||
298,做空,2026-02-24 22:35:00,2026-02-25 02:10:00,1821.38,1846.04,2.25,50,0.0619,-1.53,0.06,-1.58
|
||||
299,做多,2026-02-25 02:10:00,2026-02-25 03:05:00,1846.04,1853.79,2.24,50,0.0606,0.47,0.06,0.41
|
||||
300,做空,2026-02-25 03:05:00,2026-02-25 05:00:00,1853.79,1850.16,2.24,50,0.0605,0.22,0.06,0.16
|
||||
301,做多,2026-02-25 05:00:00,2026-02-25 09:05:00,1850.16,1864.09,2.24,50,0.0606,0.84,0.06,0.79
|
||||
302,做空,2026-02-25 09:05:00,2026-02-25 12:00:00,1864.09,1900.0,2.26,50,0.0607,-2.18,0.06,-2.24
|
||||
303,做多,2026-02-25 12:00:00,2026-02-25 14:20:00,1900.0,1892.77,2.24,50,0.0589,-0.43,0.06,-0.48
|
||||
304,做空,2026-02-25 14:20:00,2026-02-25 14:50:00,1892.77,1885.31,2.23,50,0.059,0.44,0.06,0.38
|
||||
305,做多,2026-02-25 14:50:00,2026-02-25 16:20:00,1885.31,1896.51,2.24,50,0.0593,0.66,0.06,0.61
|
||||
306,做空,2026-02-25 16:20:00,2026-02-25 19:05:00,1896.51,1914.28,2.24,50,0.0591,-1.05,0.06,-1.11
|
||||
307,做多,2026-02-25 19:05:00,2026-02-25 19:10:00,1914.28,1914.26,2.23,50,0.0583,-0.0,0.06,-0.06
|
||||
308,做空,2026-02-25 19:10:00,2026-02-26 03:10:00,1914.26,2065.7,2.23,50,0.0583,-8.82,0.06,-8.88
|
||||
309,做多,2026-02-26 03:10:00,2026-02-26 04:50:00,2065.7,2077.16,2.14,50,0.0518,0.59,0.05,0.54
|
||||
310,做空,2026-02-26 04:50:00,2026-02-26 06:40:00,2077.16,2088.92,2.15,50,0.0516,-0.61,0.05,-0.66
|
||||
311,做多,2026-02-26 06:40:00,2026-02-26 10:45:00,2088.92,2048.37,2.14,50,0.0512,-2.08,0.05,-2.13
|
||||
312,做空,2026-02-26 10:45:00,2026-02-26 13:15:00,2048.37,2059.76,2.13,50,0.0519,-0.59,0.05,-0.64
|
||||
313,做多,2026-02-26 13:15:00,2026-02-26 14:05:00,2059.76,2070.3,2.12,50,0.0515,0.54,0.05,0.49
|
||||
314,做空,2026-02-26 14:05:00,2026-02-26 14:45:00,2070.3,2061.26,2.12,50,0.0513,0.46,0.05,0.41
|
||||
|
@@ -1,37 +0,0 @@
|
||||
period,std,train_final,train_ret_pct,train_trades,train_liq,test_final,test_ret_pct,test_trades,test_liq,score
|
||||
30,3.0,6.461292242669117e-12,-99.99999999999677,6251,2111,1.5236368612973373e-11,-99.99999999999238,5324,1148,1.5236368612973373e-11
|
||||
20,3.0,1.8100835126072174e-13,-99.99999999999991,8303,2213,2.004484456301478e-13,-99.9999999999999,7119,1125,2.004484456301478e-13
|
||||
30,2.8,2.4311483078671436e-12,-99.99999999999878,7043,2250,1.7667468163728375e-13,-99.99999999999991,6027,1207,1.7667468163728375e-13
|
||||
20,2.8,7.846644590273088e-17,-100.0,9405,2411,1.373663083431439e-15,-100.0,8162,1200,1.373663083431439e-15
|
||||
15,3.0,4.000972689149238e-14,-99.99999999999999,10176,2274,1.334121125924488e-15,-100.0,9020,1127,1.334121125924488e-15
|
||||
12,3.0,1.3648909498077833e-16,-100.0,12248,2312,3.221031658827695e-16,-100.0,10961,1111,3.221031658827695e-16
|
||||
30,2.5,3.5612711817081846e-19,-100.0,8364,2548,2.6039428085637916e-16,-100.0,7169,1309,2.6039428085637916e-16
|
||||
10,3.0,1.0851271143245777e-19,-100.0,14554,2331,1.5973234572926277e-17,-100.0,12954,1056,1.5973234572926277e-17
|
||||
15,2.8,1.0867209668553655e-17,-100.0,11611,2443,2.8298588113655214e-18,-100.0,10334,1169,2.8298588113655214e-18
|
||||
8,3.0,5.306932488644652e-21,-100.0,17958,2357,1.2736252312876604e-19,-100.0,16166,1010,1.2736252312876604e-19
|
||||
12,2.8,1.4286513547325967e-19,-100.0,13966,2448,1.0033977462584242e-19,-100.0,12480,1164,1.0033977462584242e-19
|
||||
20,2.5,2.2403774532126082e-23,-100.0,11128,2662,7.765130502770661e-20,-100.0,9730,1294,7.765130502770661e-20
|
||||
30,2.2,7.112452348296382e-24,-100.0,9746,2837,2.178522685356585e-20,-100.0,8376,1404,2.178522685356585e-20
|
||||
10,2.8,1.14378568397889e-22,-100.0,16467,2419,1.7504767423183517e-20,-100.0,14860,1099,1.7504767423183517e-20
|
||||
15,2.5,1.2889707168075324e-24,-100.0,13904,2665,7.701898585592486e-22,-100.0,12376,1244,7.701898585592486e-22
|
||||
30,2.0,3.3954467452863534e-30,-100.0,10737,3038,3.006982280285153e-23,-100.0,9277,1476,3.006982280285153e-23
|
||||
8,2.8,2.3911268173585217e-25,-100.0,20200,2424,2.6239693580748698e-23,-100.0,18347,1047,2.6239693580748698e-23
|
||||
12,2.5,1.5959390099076778e-26,-100.0,16840,2666,2.5122374088172532e-24,-100.0,15097,1197,2.5122374088172532e-24
|
||||
20,2.2,4.075155061653048e-30,-100.0,13056,2898,1.6217540014835198e-24,-100.0,11509,1387,1.6217540014835198e-24
|
||||
10,2.5,1.5239252240418153e-27,-100.0,19776,2602,3.478054992553642e-26,-100.0,17847,1143,3.478054992553642e-26
|
||||
30,1.8,2.905397760666862e-35,-100.0,11783,3196,1.4643221654306065e-26,-100.0,10238,1510,1.4643221654306065e-26
|
||||
20,2.0,4.5258883799074187e-35,-100.0,14558,3084,6.0778437333199835e-28,-100.0,12766,1425,6.0778437333199835e-28
|
||||
15,2.2,1.0473150457667376e-34,-100.0,16471,2949,4.616747557539696e-28,-100.0,14639,1329,4.616747557539696e-28
|
||||
8,2.5,3.728422330048161e-32,-100.0,24241,2572,8.443947733942594e-30,-100.0,22035,1088,8.443947733942594e-30
|
||||
12,2.2,4.023491430830127e-34,-100.0,19939,2849,2.0103723058079613e-31,-100.0,17925,1278,2.0103723058079613e-31
|
||||
15,2.0,1.5077333275255206e-39,-100.0,18290,3047,4.5852539168192905e-32,-100.0,16384,1379,4.5852539168192905e-32
|
||||
20,1.8,3.1358668307895184e-40,-100.0,16081,3234,3.528256253001935e-32,-100.0,14238,1477,3.528256253001935e-32
|
||||
10,2.2,9.818937063199508e-37,-100.0,23289,2808,8.301596164191992e-34,-100.0,21116,1192,8.301596164191992e-34
|
||||
12,2.0,2.89871510624932e-41,-100.0,22108,2997,5.7249833676044525e-36,-100.0,19972,1312,5.7249833676044525e-36
|
||||
15,1.8,1.9646377910410098e-43,-100.0,20241,3165,1.887622828901651e-36,-100.0,18203,1403,1.887622828901651e-36
|
||||
8,2.2,3.137207043844276e-39,-100.0,28429,2715,3.907836948794964e-37,-100.0,26080,1123,3.907836948794964e-37
|
||||
10,2.0,3.772919321721765e-43,-100.0,25796,2936,3.0387903785706536e-39,-100.0,23573,1242,3.0387903785706536e-39
|
||||
12,1.8,2.2809761615524126e-47,-100.0,24375,3136,2.3011372195381717e-40,-100.0,22137,1322,2.3011372195381717e-40
|
||||
8,2.0,1.0509234742751481e-45,-100.0,31437,2841,8.788965059420589e-44,-100.0,28899,1160,8.788965059420589e-44
|
||||
10,1.8,5.805887390677206e-50,-100.0,28616,3081,2.7972542140757193e-44,-100.0,26107,1254,2.7972542140757193e-44
|
||||
8,1.8,2.081454986276226e-52,-100.0,34477,2948,9.722792700824057e-50,-100.0,31739,1170,9.722792700824057e-50
|
||||
|
@@ -1,37 +0,0 @@
|
||||
period,std,train_final,train_ret_pct,train_trades,train_liq,test_final,test_ret_pct,test_trades,test_liq
|
||||
30,3.0,10.33503463017524,-94.83248268491238,6729,2627,9.105543803335324,-95.44722809833233,5622,1452
|
||||
30,2.8,5.776936552726516,-97.11153172363674,7595,2844,5.8310318500270775,-97.08448407498646,6321,1513
|
||||
20,3.0,2.8530376604538237,-98.57348116977309,8932,2894,3.117142538047551,-98.44142873097623,7487,1533
|
||||
30,2.5,3.3090997870703003,-98.34545010646485,8894,3101,2.9901743436510984,-98.50491282817445,7453,1604
|
||||
20,2.8,0.859787066661548,-99.57010646666923,10085,3122,1.9227920948602537,-99.03860395256987,8513,1595
|
||||
30,2.2,0.6281222070732229,-99.68593889646338,10267,3369,1.236067041291377,-99.38196647935432,8634,1668
|
||||
20,2.5,0.25278361222515633,-99.87360819388742,11847,3394,1.049877999265477,-99.47506100036726,10073,1644
|
||||
15,3.0,1.466920389212773,-99.26653980539362,10948,3115,0.9504725191291745,-99.52476374043542,9444,1587
|
||||
15,2.8,0.40768152859129914,-99.79615923570435,12417,3310,0.7301936713745412,-99.63490316431273,10761,1640
|
||||
30,2.0,0.27389542637526637,-99.86305228681236,11185,3489,0.5860341454411505,-99.70698292727943,9512,1716
|
||||
12,3.0,0.4596628661296959,-99.77016856693515,13093,3243,0.4599583255360801,-99.77002083723195,11385,1580
|
||||
15,2.5,0.07101870013743423,-99.96449064993128,14756,3554,0.27989601683829196,-99.86005199158086,12771,1662
|
||||
20,2.2,0.068694671965183,-99.96565266401741,13743,3599,0.2447384990957471,-99.87763075045213,11824,1712
|
||||
30,1.8,0.07356202139088691,-99.96321898930455,12192,3609,0.23106787386920916,-99.88446606306539,10474,1746
|
||||
12,2.8,0.20911756492338415,-99.8954412175383,14849,3399,0.2173258061277338,-99.89133709693613,12877,1605
|
||||
10,3.0,0.1284276762723427,-99.93578616186383,15455,3345,0.1658833559115693,-99.91705832204421,13421,1582
|
||||
20,2.0,0.027822496858016875,-99.98608875157099,15185,3723,0.10850768549118871,-99.9457461572544,13061,1728
|
||||
10,2.8,0.062411539565720396,-99.96879423021714,17473,3515,0.0858355994398584,-99.95708220028007,15299,1600
|
||||
12,2.5,0.0635800161079057,-99.96820999194605,17762,3624,0.07595434907945135,-99.96202282546028,15517,1641
|
||||
15,2.2,0.011211866028193341,-99.9943940669859,17256,3759,0.07346375074383373,-99.96326812462809,14996,1687
|
||||
20,1.8,0.010177972068216252,-99.99491101396589,16657,3813,0.041379392242463335,-99.97931030387876,14523,1765
|
||||
8,3.0,0.037529843697168386,-99.98123507815141,18948,3467,0.030619960044026544,-99.98469001997799,16661,1580
|
||||
15,2.0,0.004790098785046004,-99.99760495060748,19085,3851,0.0250058198917987,-99.9874970900541,16699,1703
|
||||
10,2.5,0.020080566762398937,-99.9899597166188,20810,3675,0.02154161161844521,-99.98922919419078,18304,1622
|
||||
12,2.2,0.006198215965126392,-99.99690089201744,20863,3802,0.01569234833017946,-99.9921538258349,18304,1675
|
||||
8,2.8,0.00916331137620061,-99.9954183443119,21278,3593,0.013446224481937236,-99.99327688775904,18831,1590
|
||||
15,1.8,0.00195636598029706,-99.99902181700985,20986,3912,0.007973883235858103,-99.99601305838208,18506,1711
|
||||
12,2.0,0.0012611903383017201,-99.99936940483084,22983,3884,0.0049442565518793904,-99.99752787172406,20318,1667
|
||||
10,2.2,0.0015631498325544685,-99.99921842508373,24294,3843,0.004016982771284942,-99.99799150861436,21533,1619
|
||||
8,2.5,0.0015805889869186715,-99.99920970550654,25383,3778,0.00222758185497439,-99.99888620907251,22550,1619
|
||||
12,1.8,0.0003285760597477184,-99.99983571197012,25197,3969,0.0014253657508011418,-99.9992873171246,22474,1670
|
||||
10,2.0,0.00030181924086439277,-99.99984909037957,26744,3905,0.0007558609511890611,-99.9996220695244,23966,1645
|
||||
8,2.2,0.00022388168465948394,-99.99988805915767,29572,3888,0.000283647480462369,-99.99985817625976,26546,1608
|
||||
10,1.8,0.00010484354042229784,-99.9999475782298,29476,3949,0.00015541841539480644,-99.9999222907923,26481,1640
|
||||
8,2.0,3.0427493228289115e-05,-99.99998478625339,32549,3962,3.787843338427551e-05,-99.99998106078331,29334,1613
|
||||
8,1.8,5.318861339787151e-06,-99.99999734056934,35502,3981,6.1348022466747185e-06,-99.99999693259888,32157,1599
|
||||
|
@@ -1,49 +0,0 @@
|
||||
bb_period,bb_std,cooldown,min_bw,final,ret,trades,liq,win,dd,sharpe,fee,rebate
|
||||
30,3.2,6,0.01,202.98777028457513,1.4938851422875672,2208,0,64.4927536231884,-2.2659000933991535,0.5747142550615898,4.492191078113778,4.042051704177064
|
||||
30,3.2,6,0.008,202.88007457111019,1.4400372855550927,2497,0,63.99679615538646,-2.3593132155964156,0.5474772340529435,5.077568757707738,4.568895760736814
|
||||
30,3.2,12,0.01,202.58279532236259,1.2913976611812927,2176,0,63.60294117647059,-2.590578505705281,0.49034397612249453,4.425821502882915,3.9823209224653042
|
||||
30,3.2,12,0.008,202.43724464440305,1.2186223222015258,2453,0,63.06563391765185,-2.6964621320131528,0.45661035313826664,4.984364752542757,4.4850138457153115
|
||||
30,3.2,6,0.005,202.2604553875168,1.1302276937583997,2848,0,63.55337078651685,-3.5097750900355322,0.4233881729734044,5.800483411417114,5.2195225693696905
|
||||
30,3.2,6,0.0,201.9035397473293,0.9517698736646452,2983,0,62.45390546429769,-3.6901419995414244,0.3554736578132862,6.071731305514356,5.463647284287156
|
||||
30,3.2,12,0.005,201.87948930618595,0.9397446530929727,2788,0,62.51793400286944,-3.7314549188814397,0.3459557408534809,5.673598716356395,5.1053271761221275
|
||||
30,3.2,24,0.008,201.81718023856013,0.9085901192800634,2321,0,60.83584661783714,-3.1850135601426643,0.3332848294762347,4.711163723354367,4.239135720345717
|
||||
40,3.2,24,0.008,201.7362421481199,0.8681210740599568,1762,0,61.80476730987514,-1.9330254703131686,0.33009880295284993,3.5617733962125127,3.2028717014335406
|
||||
30,3.2,24,0.01,201.69506662016363,0.8475333100818148,2071,0,61.41960405601159,-3.0289149936820934,0.31756756837299815,4.202969916048575,3.7817585189246183
|
||||
30,3.2,12,0.0,201.60362661159775,0.8018133057988733,2922,0,61.327857631759066,-3.88911319759859,0.2941026586132461,5.943783104874334,5.348494371558028
|
||||
30,3.0,6,0.01,201.5881617500534,0.7940808750266939,2543,0,63.429020841525755,-2.368575342977323,0.2998262616505584,5.151884495340698,4.633970942969105
|
||||
40,3.2,24,0.01,201.53527397642122,0.7676369882106115,1605,0,62.55451713395639,-1.9504615008019073,0.2907552932707512,3.2424316070919357,2.91546508291806
|
||||
30,3.0,6,0.008,201.359992187183,0.6799960935914982,2918,0,63.19396847155586,-2.027912276846223,0.2610014112678299,5.899172349883858,5.306536721796989
|
||||
30,3.0,12,0.01,201.3241380805589,0.662069040279448,2506,0,62.729449321628096,-2.8976334001800694,0.24838320050757742,5.080944389695803,4.570128417005312
|
||||
30,3.0,12,0.008,201.31165446949683,0.6558272347484149,2866,0,62.35170969993021,-2.494460658608773,0.24878271250544268,5.80043717869557,5.217675411997363
|
||||
30,3.0,24,0.01,201.26991592259085,0.6349579612954273,2368,0,61.02195945945946,-3.348407035056823,0.23124334375082511,4.807697212750294,4.324206690738638
|
||||
30,3.0,24,0.008,201.25444575369687,0.6272228768484354,2688,0,60.56547619047619,-3.1621600662850256,0.22981479221382087,5.449274512519768,4.901629784853851
|
||||
30,3.2,24,0.005,201.17465506334136,0.587327531670681,2627,0,60.22078416444614,-4.2867277356414775,0.21102822502134555,5.338402308340532,4.803653591872367
|
||||
40,3.2,6,0.008,201.0778775233752,0.5389387616876036,1853,0,63.680518078791145,-1.545875090009332,0.21018483710385255,3.730990845759943,3.3551758773915945
|
||||
40,3.2,24,0.005,201.05984222600543,0.5299211130027146,1924,0,61.018711018711016,-2.175922708147283,0.19495371215945767,3.885764208269912,3.494473381060668
|
||||
40,3.2,24,0.0,200.85259022124131,0.4262951106206571,1977,0,60.59686393525544,-2.2131317121589404,0.15572489459076294,3.9910079187965377,3.589195518538243
|
||||
40,3.2,6,0.01,200.74117229778386,0.3705861488919311,1680,0,63.988095238095234,-1.788489097899884,0.14388428114556331,3.3801026625472996,3.039379763592075
|
||||
40,3.2,6,0.005,200.6975214875542,0.3487607437771061,2038,0,63.297350343473994,-1.8348344987913379,0.1307282485158805,4.1020755008586685,3.689158017516957
|
||||
30,3.2,24,0.0,200.6742618681597,0.33713093407985184,2748,0,58.806404657933044,-4.526694095829043,0.12031876886338758,5.578810922296089,5.020023604160509
|
||||
40,3.2,12,0.008,200.65656048664087,0.32828024332043526,1824,0,62.88377192982456,-1.7544366504391178,0.12833478287726025,3.6720632612140545,3.3021471605391497
|
||||
30,3.0,6,0.005,200.51551216591736,0.2577560829586787,3377,0,62.51110453064851,-2.9778328420115088,0.09497684815116508,6.823545946251757,6.138485174444638
|
||||
40,3.2,6,0.0,200.44496962075274,0.2224848103763719,2097,0,62.994754411063425,-2.042148146654995,0.08158240969215196,4.218333320816779,3.79379346557969
|
||||
40,3.0,24,0.008,200.41889346236763,0.2094467311838173,2057,0,61.93485658726301,-2.473425069100074,0.07868630999290598,4.146171354749355,3.72884910922223
|
||||
30,3.0,12,0.005,200.35022974683667,0.17511487341833742,3300,0,61.36363636363637,-3.584345639913721,0.06306984952787358,6.672617704418062,6.002651107710117
|
||||
40,3.2,12,0.01,200.24642098781575,0.12321049390787665,1659,0,63.29113924050633,-2.2088172045713748,0.047913641900456855,3.3367725501172822,3.000389348021997
|
||||
40,3.2,12,0.005,200.22091496566105,0.11045748283052605,2002,0,62.38761238761239,-2.0783640787319086,0.03817994892546192,4.027940397396305,3.6224432772034887
|
||||
40,3.0,24,0.01,200.12568455038564,0.06284227519282126,1879,0,62.16072378924961,-2.6329610918170374,0.023564976494820568,3.787542396891309,3.4060828242510723
|
||||
40,3.0,6,0.008,200.0678037808892,0.03390189044459646,2194,0,63.947128532360985,-2.2038606611252476,0.01294800862092224,4.410398919734593,3.966658239689972
|
||||
30,3.0,6,0.0,200.00414940285927,0.002074701429634729,3569,0,61.58587839731017,-3.4138707553280483,-0.0006647490253754809,7.204083538326778,6.4809759087145915
|
||||
40,3.2,12,0.0,199.9609691102816,-0.019515444859194986,2060,0,61.99029126213592,-2.293284464503728,-0.012281258667209633,4.142089182262913,3.725180692979831
|
||||
30,3.0,12,0.0,199.86477350989745,-0.06761324505127675,3488,0,60.321100917431195,-3.9479783254082292,-0.026217988255613115,7.044972103443261,6.337776620729888
|
||||
30,3.0,24,0.005,199.8322173667805,-0.08389131660975124,3078,0,59.25925925925925,-4.517336088935309,-0.031095706303734948,6.227919385867038,5.602429614435114
|
||||
40,3.0,24,0.005,199.5939851399495,-0.20300743002525223,2287,0,60.690861390467866,-3.1641220863467083,-0.07962941557219835,4.605201690819581,4.141987512861499
|
||||
40,3.0,12,0.008,199.5739264063975,-0.21303679680124785,2148,0,63.17504655493482,-2.615052284973501,-0.08139777980329083,4.316235063292179,3.8819178516682813
|
||||
40,3.0,6,0.01,199.4783021660671,-0.2608489169664523,1988,0,63.581488933601605,-2.6165649578562693,-0.09950203972642017,3.991524078241081,3.5896750888907443
|
||||
40,3.0,24,0.0,199.34357556785355,-0.3282122160732257,2360,0,60.21186440677966,-3.3377613611040715,-0.1256995824626251,4.74929125388248,4.271670892552751
|
||||
30,3.0,24,0.0,199.30001953765344,-0.34999023117327965,3243,0,58.125192722787546,-4.896971344439777,-0.12506755033132605,6.553042403347132,5.89504751509868
|
||||
40,3.0,12,0.01,199.12086527405495,-0.4395673629725252,1956,0,62.985685071574636,-2.934702029502688,-0.16766517034426934,3.9282781540179963,3.532758588982499
|
||||
40,3.0,6,0.005,199.01319225044602,-0.49340387477698755,2458,0,62.9780309194467,-3.206770049240731,-0.19188065769564314,4.932566481122759,4.436623248761567
|
||||
40,3.0,6,0.0,198.65444873410513,-0.6727756329474346,2539,0,62.46553761323356,-3.483785802636902,-0.25943426479073867,5.091061673108702,4.579273159284268
|
||||
40,3.0,12,0.005,198.53430497909721,-0.7328475104513927,2400,0,62.041666666666664,-3.6063962830445178,-0.2822792363382157,4.814513695479092,4.33038262002996
|
||||
40,3.0,12,0.0,198.16460271518014,-0.9176986424099312,2480,0,61.41129032258065,-3.8946055152910333,-0.35154409034010436,4.970878228218944,4.47111508616677
|
||||
|
@@ -1,9 +0,0 @@
|
||||
name,bb_period,bb_std,lev,trend_ema,cooldown_bars,stop_loss,take_profit,final,ret,trades,liq,win,dd,sharpe,fee,rebate
|
||||
D_trend288_cd12,30,3.0,1,288.0,12,0.0,0.0,199.86477350989745,-0.06761324505127675,3488,0,60.321100917431195,-3.9479783254082292,-0.026217988255613115,7.044972103443261,6.337776620729888
|
||||
B_trend288,30,3.0,1,288.0,0,0.0,0.0,199.7540264365565,-0.1229867817217496,3668,0,62.05016357688113,-3.996173585769327,-0.046036770219455056,7.41289979748533,6.668913917641575
|
||||
C_trend576,30,3.0,1,576.0,0,0.0,0.0,199.20628338025136,-0.39685830987431814,4143,0,61.18754525706011,-4.6188391069942725,-0.14008705265439372,8.355454097286774,7.515422312937967
|
||||
E_trend288_cd12_sl12_tp15,30,3.0,1,288.0,12,0.012,0.015,195.3494628170402,-2.3252685914798974,3710,0,52.129380053908356,-4.882606479135802,-1.4756369432482566,7.362551062011999,6.62365864234843
|
||||
F_trend288_cd6_sl10_tp20,30,3.0,1,288.0,6,0.01,0.02,195.3050328845755,-2.347483557712252,3796,0,48.840885142255004,-5.078860622065719,-1.5321092835282057,7.536365316666955,6.7800929289619924
|
||||
H_bb20_30_trend576_cd12,20,3.0,1,576.0,12,0.01,0.015,189.48915432155357,-5.255422839223215,6395,0,49.1164972634871,-10.60519250897687,-2.8074280977201473,12.531119081963354,11.272889176910006
|
||||
G_bb20_28_trend288_cd12,20,2.8,1,288.0,12,0.012,0.015,189.04763867132164,-5.476180664339182,6479,0,52.106806605957715,-11.116408258934996,-2.9900816266006194,12.667135948143327,11.395318795619543
|
||||
A_base_no_filter,30,3.0,1,,0,0.0,0.0,187.87751952363539,-6.061240238182307,8669,0,61.62187103472142,-12.334791284875877,-1.4020222751730407,16.98060303079724,15.274934432023217
|
||||
|
@@ -1,3 +0,0 @@
|
||||
label,final_equity,return_pct,trade_count,win_rate_pct,liq_count,max_drawdown,total_fee,total_rebate,sharpe
|
||||
"Baseline (BB30/3.0, no filters)",187.87751952363539,-6.061240238182307,8669,61.62187103472142,0,-12.334791284875877,16.98060303079724,15.274934432023217,-1.4020222751730407
|
||||
Practical (BB30/3.2 + EMA + BW + cooldown),202.98777028457513,1.4938851422875672,2208,64.4927536231884,0,-2.2659000933991535,4.492191078113778,4.042051704177064,0.5747142550615898
|
||||
|
|
Before Width: | Height: | Size: 231 KiB |
@@ -1,30 +0,0 @@
|
||||
datetime,equity,pnl
|
||||
2025-01-31,200.61200795007642,0.0
|
||||
2025-02-01,171.90057309729912,-28.711434852777302
|
||||
2025-02-02,128.95415766898418,-42.946415428314936
|
||||
2025-02-03,125.57720361282368,-3.3769540561605
|
||||
2025-02-04,205.81457179504082,80.23736818221714
|
||||
2025-02-05,263.5266635751208,57.71209178007996
|
||||
2025-02-06,313.4609154424834,49.934251867362605
|
||||
2025-02-07,269.76261120078874,-43.69830424169464
|
||||
2025-02-08,409.60795899114123,139.8453477903525
|
||||
2025-02-09,359.82531489433495,-49.78264409680628
|
||||
2025-02-10,472.7027689877503,112.87745409341534
|
||||
2025-02-11,407.0815536146114,-65.62121537313891
|
||||
2025-02-12,655.3670520430319,248.2854984284205
|
||||
2025-02-13,619.0898255604814,-36.27722648255053
|
||||
2025-02-14,575.3115910800449,-43.77823448043648
|
||||
2025-02-15,576.7473792992255,1.4357882191806084
|
||||
2025-02-16,625.4928812555371,48.745501956311614
|
||||
2025-02-17,620.6351423585791,-4.85773889695804
|
||||
2025-02-18,593.2745197106462,-27.360622647932814
|
||||
2025-02-19,618.1151654923001,24.840645781653848
|
||||
2025-02-20,788.2927136416205,170.1775481493204
|
||||
2025-02-21,842.7610928461016,54.46837920448115
|
||||
2025-02-22,820.589661113476,-22.171431732625592
|
||||
2025-02-23,883.3327944501593,62.743133336683286
|
||||
2025-02-24,844.8847328879968,-38.44806156216248
|
||||
2025-02-25,704.0864911962235,-140.79824169177334
|
||||
2025-02-26,646.8147129944842,-57.27177820173927
|
||||
2025-02-27,1027.487595519961,380.67288252547667
|
||||
2025-02-28,986.1656934699068,-41.321902050054064
|
||||
|
@@ -1,307 +0,0 @@
|
||||
entry_time,exit_time,side,entry_price,exit_price,qty,margin,gross_pnl,fee,net_pnl
|
||||
2025-01-31 17:40:00,2025-01-31 18:30:00,long,3366.19,3332.70,0.3525,11.86,-11.86,0.00,-11.86
|
||||
2025-01-31 18:35:00,2025-01-31 19:30:00,long,3309.95,3337.23,0.0567,1.88,1.55,0.09,1.45
|
||||
2025-01-31 19:30:00,2025-01-31 20:20:00,short,3339.55,3296.01,0.1695,5.66,7.38,0.28,7.10
|
||||
2025-01-31 20:20:00,2025-02-01 01:35:00,long,3284.13,3328.63,0.3561,11.70,15.85,0.59,15.26
|
||||
2025-02-01 01:35:00,2025-02-01 02:30:00,short,3328.63,3312.28,0.0637,2.12,1.04,0.11,0.94
|
||||
2025-02-01 02:30:00,2025-02-01 06:05:00,long,3304.11,3302.18,0.6364,21.03,-1.23,1.05,-2.28
|
||||
2025-02-01 06:05:00,2025-02-01 06:20:00,short,3302.18,3292.25,0.0635,2.10,0.63,0.10,0.53
|
||||
2025-02-01 06:20:00,2025-02-01 09:35:00,long,3272.61,3240.05,0.6331,20.72,-20.72,0.00,-20.72
|
||||
2025-02-01 09:35:00,2025-02-01 11:50:00,long,3229.77,3248.51,0.3492,11.28,6.54,0.57,5.98
|
||||
2025-02-01 11:50:00,2025-02-01 13:45:00,short,3252.37,3250.41,0.3560,11.58,0.70,0.58,0.12
|
||||
2025-02-01 13:45:00,2025-02-01 19:25:00,long,3243.14,3210.87,0.5975,19.38,-19.38,0.00,-19.38
|
||||
2025-02-01 22:30:00,2025-02-02 03:10:00,long,3134.76,3103.57,0.3413,10.70,-10.70,0.00,-10.70
|
||||
2025-02-02 03:10:00,2025-02-02 04:20:00,long,3081.33,3105.39,0.3247,10.00,7.81,0.50,7.31
|
||||
2025-02-02 04:20:00,2025-02-02 06:20:00,short,3104.64,3135.53,0.1694,5.26,-5.26,0.00,-5.26
|
||||
2025-02-02 06:20:00,2025-02-02 06:45:00,short,3134.11,3111.66,0.0542,1.70,1.22,0.08,1.13
|
||||
2025-02-02 06:45:00,2025-02-02 11:35:00,long,3089.90,3059.16,0.3280,10.14,-10.14,0.00,-10.14
|
||||
2025-02-02 13:10:00,2025-02-02 14:45:00,short,3076.73,3088.50,0.1559,4.80,-1.84,0.24,-2.08
|
||||
2025-02-02 14:45:00,2025-02-02 16:35:00,long,3074.19,3043.60,0.5035,15.48,-15.48,0.00,-15.48
|
||||
2025-02-02 16:35:00,2025-02-02 16:55:00,long,3034.41,3004.22,0.0467,1.42,-1.42,0.00,-1.42
|
||||
2025-02-02 17:35:00,2025-02-02 17:55:00,long,2987.55,2957.82,0.0469,1.40,-1.40,0.00,-1.40
|
||||
2025-02-02 17:55:00,2025-02-02 18:35:00,long,2957.58,2928.15,0.2819,8.34,-8.34,0.00,-8.34
|
||||
2025-02-02 18:35:00,2025-02-02 18:40:00,long,2945.76,2925.60,0.0441,1.30,-0.89,0.06,-0.95
|
||||
2025-02-03 00:40:00,2025-02-03 01:40:00,long,2769.76,2742.20,0.0479,1.33,-1.33,0.00,-1.33
|
||||
2025-02-03 01:40:00,2025-02-03 01:45:00,long,2740.19,2712.93,0.0479,1.31,-1.31,0.00,-1.31
|
||||
2025-02-03 01:45:00,2025-02-03 01:50:00,long,2662.45,2635.96,0.0488,1.30,-1.30,0.00,-1.30
|
||||
2025-02-03 01:50:00,2025-02-03 01:55:00,long,2562.77,2537.27,0.0502,1.29,-1.29,0.00,-1.29
|
||||
2025-02-03 01:55:00,2025-02-03 02:05:00,long,2454.95,2430.53,0.0518,1.27,-1.27,0.00,-1.27
|
||||
2025-02-03 02:05:00,2025-02-03 03:05:00,long,2249.82,2516.19,0.0559,1.26,14.90,0.07,14.83
|
||||
2025-02-03 03:05:00,2025-02-03 03:15:00,short,2516.19,2541.22,0.0559,1.41,-1.41,0.00,-1.41
|
||||
2025-02-03 03:15:00,2025-02-03 07:15:00,short,2522.28,2547.38,0.3411,8.60,-8.60,0.00,-8.60
|
||||
2025-02-03 09:55:00,2025-02-03 10:35:00,long,2562.28,2602.32,0.0508,1.30,2.03,0.07,1.97
|
||||
2025-02-03 10:35:00,2025-02-03 15:20:00,short,2620.62,2646.70,0.4918,12.89,-12.89,0.00,-12.89
|
||||
2025-02-03 15:20:00,2025-02-03 15:40:00,short,2686.08,2712.80,0.1318,3.54,-3.54,0.00,-3.54
|
||||
2025-02-03 16:50:00,2025-02-03 17:00:00,short,2728.16,2686.09,0.0421,1.15,1.77,0.06,1.71
|
||||
2025-02-03 17:00:00,2025-02-03 18:35:00,long,2686.09,2732.11,0.0434,1.16,1.99,0.06,1.94
|
||||
2025-02-03 18:35:00,2025-02-03 20:05:00,short,2748.14,2712.90,0.4241,11.65,14.94,0.58,14.37
|
||||
2025-02-03 20:05:00,2025-02-03 21:25:00,long,2712.90,2722.03,0.0487,1.32,0.44,0.07,0.38
|
||||
2025-02-03 21:25:00,2025-02-03 21:35:00,short,2724.90,2752.02,0.1456,3.97,-3.97,0.00,-3.97
|
||||
2025-02-03 21:35:00,2025-02-03 21:50:00,short,2742.51,2769.79,0.0468,1.28,-1.28,0.00,-1.28
|
||||
2025-02-03 21:50:00,2025-02-03 21:55:00,short,2787.57,2815.31,0.0455,1.27,-1.27,0.00,-1.27
|
||||
2025-02-04 00:25:00,2025-02-04 01:35:00,long,2855.42,2857.98,0.1353,3.86,0.35,0.19,0.15
|
||||
2025-02-04 01:35:00,2025-02-04 02:15:00,short,2857.98,2838.59,0.0451,1.29,0.87,0.06,0.81
|
||||
2025-02-04 02:15:00,2025-02-04 02:55:00,long,2836.40,2808.18,0.1370,3.89,-3.89,0.00,-3.89
|
||||
2025-02-04 04:00:00,2025-02-04 05:00:00,short,2817.83,2770.62,0.0446,1.26,2.10,0.06,2.04
|
||||
2025-02-04 05:00:00,2025-02-04 05:05:00,long,2770.62,2743.05,0.0460,1.28,-1.28,0.00,-1.28
|
||||
2025-02-04 05:05:00,2025-02-04 05:10:00,long,2743.16,2715.87,0.0460,1.26,-1.26,0.00,-1.26
|
||||
2025-02-04 05:15:00,2025-02-04 12:30:00,long,2693.84,2809.54,0.4642,12.50,53.71,0.65,53.05
|
||||
2025-02-04 12:30:00,2025-02-04 13:50:00,short,2809.54,2807.58,0.0631,1.77,0.12,0.09,0.04
|
||||
2025-02-04 13:50:00,2025-02-04 14:30:00,long,2799.27,2834.88,0.1894,5.30,6.74,0.27,6.47
|
||||
2025-02-04 14:30:00,2025-02-04 15:10:00,short,2839.49,2775.91,0.1935,5.49,12.30,0.27,12.03
|
||||
2025-02-04 15:10:00,2025-02-04 15:15:00,long,2775.91,2748.28,0.0703,1.95,-1.95,0.00,-1.95
|
||||
2025-02-04 15:15:00,2025-02-04 17:00:00,long,2751.30,2805.60,0.0702,1.93,3.81,0.10,3.71
|
||||
2025-02-04 17:00:00,2025-02-04 17:10:00,short,2808.59,2836.54,0.2099,5.90,-5.90,0.00,-5.90
|
||||
2025-02-04 17:10:00,2025-02-04 19:45:00,short,2846.44,2801.21,0.3969,11.30,17.95,0.56,17.40
|
||||
2025-02-04 19:45:00,2025-02-04 19:55:00,long,2801.21,2773.33,0.0741,2.07,-2.07,0.00,-2.07
|
||||
2025-02-04 21:00:00,2025-02-04 21:35:00,long,2703.76,2676.86,0.2272,6.14,-6.14,0.00,-6.14
|
||||
2025-02-04 21:40:00,2025-02-04 23:10:00,long,2654.59,2727.16,0.0749,1.99,5.44,0.10,5.33
|
||||
2025-02-04 23:10:00,2025-02-05 01:00:00,short,2738.14,2765.38,0.4522,12.38,-12.38,0.00,-12.38
|
||||
2025-02-05 01:00:00,2025-02-05 01:55:00,short,2756.72,2720.88,0.0713,1.97,2.56,0.10,2.46
|
||||
2025-02-05 01:55:00,2025-02-05 02:45:00,long,2720.88,2741.10,0.0731,1.99,1.48,0.10,1.38
|
||||
2025-02-05 02:45:00,2025-02-05 05:20:00,short,2743.59,2709.41,0.2186,6.00,7.47,0.30,7.18
|
||||
2025-02-05 05:20:00,2025-02-05 05:50:00,long,2709.41,2756.42,0.0764,2.07,3.59,0.11,3.49
|
||||
2025-02-05 05:50:00,2025-02-05 05:55:00,short,2756.42,2783.85,0.0764,2.10,-2.10,0.00,-2.10
|
||||
2025-02-05 05:55:00,2025-02-05 06:35:00,short,2784.74,2739.99,0.0748,2.08,3.35,0.10,3.24
|
||||
2025-02-05 06:35:00,2025-02-05 07:25:00,long,2739.99,2757.79,0.0772,2.11,1.37,0.11,1.27
|
||||
2025-02-05 07:25:00,2025-02-05 08:30:00,short,2764.87,2756.66,0.2300,6.36,1.89,0.32,1.57
|
||||
2025-02-05 08:30:00,2025-02-05 08:45:00,long,2756.66,2771.74,0.0776,2.14,1.17,0.11,1.06
|
||||
2025-02-05 08:45:00,2025-02-05 09:30:00,short,2778.61,2755.62,0.4598,12.78,10.57,0.63,9.94
|
||||
2025-02-05 09:30:00,2025-02-05 11:00:00,long,2755.62,2786.77,0.0813,2.24,2.53,0.11,2.42
|
||||
2025-02-05 11:00:00,2025-02-05 14:30:00,short,2800.55,2802.87,0.8044,22.53,-1.86,1.13,-2.99
|
||||
2025-02-05 14:30:00,2025-02-05 15:05:00,long,2790.88,2763.11,0.7836,21.87,-21.87,0.00,-21.87
|
||||
2025-02-05 15:05:00,2025-02-05 16:50:00,long,2744.10,2775.99,0.2167,5.95,6.91,0.30,6.61
|
||||
2025-02-05 16:50:00,2025-02-05 18:10:00,short,2775.99,2725.69,0.0741,2.06,3.73,0.10,3.62
|
||||
2025-02-05 18:10:00,2025-02-05 19:30:00,long,2720.49,2766.71,0.2301,6.26,10.64,0.32,10.32
|
||||
2025-02-05 19:30:00,2025-02-05 20:30:00,short,2766.71,2768.49,0.0792,2.19,-0.14,0.11,-0.25
|
||||
2025-02-05 20:30:00,2025-02-05 21:30:00,long,2756.09,2783.38,0.4706,12.97,12.84,0.65,12.19
|
||||
2025-02-05 21:30:00,2025-02-05 22:20:00,short,2795.25,2753.68,0.8149,22.78,33.88,1.12,32.76
|
||||
2025-02-05 22:20:00,2025-02-05 23:05:00,long,2753.68,2780.84,0.0951,2.62,2.58,0.13,2.45
|
||||
2025-02-05 23:05:00,2025-02-06 00:30:00,short,2780.84,2775.45,0.0950,2.64,0.51,0.13,0.38
|
||||
2025-02-06 00:30:00,2025-02-06 01:20:00,long,2775.45,2805.21,0.0996,2.77,2.97,0.14,2.83
|
||||
2025-02-06 01:20:00,2025-02-06 03:00:00,short,2805.21,2804.21,0.0995,2.79,0.10,0.14,-0.04
|
||||
2025-02-06 03:00:00,2025-02-06 04:20:00,long,2796.38,2826.26,0.5946,16.63,17.77,0.84,16.93
|
||||
2025-02-06 04:20:00,2025-02-06 07:50:00,short,2839.60,2829.19,1.0242,29.08,10.66,1.45,9.21
|
||||
2025-02-06 07:50:00,2025-02-06 09:10:00,long,2829.19,2845.31,0.1071,3.03,1.73,0.15,1.57
|
||||
2025-02-06 09:10:00,2025-02-06 10:35:00,short,2849.15,2825.90,0.6379,18.17,14.83,0.90,13.93
|
||||
2025-02-06 10:35:00,2025-02-06 11:30:00,long,2825.90,2797.78,0.1123,3.17,-3.17,0.00,-3.17
|
||||
2025-02-06 13:25:00,2025-02-06 14:15:00,short,2785.98,2758.89,0.3373,9.40,9.14,0.47,8.67
|
||||
2025-02-06 14:15:00,2025-02-06 15:40:00,long,2738.42,2711.17,1.1623,31.83,-31.83,0.00,-31.83
|
||||
2025-02-06 15:40:00,2025-02-06 18:00:00,long,2707.99,2681.04,0.1066,2.89,-2.89,0.00,-2.89
|
||||
2025-02-06 18:00:00,2025-02-06 18:35:00,long,2690.59,2705.89,0.3183,8.56,4.87,0.43,4.44
|
||||
2025-02-06 18:35:00,2025-02-06 18:50:00,short,2705.89,2693.34,0.1071,2.90,1.34,0.14,1.20
|
||||
2025-02-06 18:50:00,2025-02-06 19:10:00,long,2689.95,2709.26,0.6468,17.40,12.49,0.88,11.61
|
||||
2025-02-06 19:10:00,2025-02-06 21:15:00,short,2711.61,2694.02,1.1198,30.36,19.70,1.51,18.19
|
||||
2025-02-06 21:15:00,2025-02-06 22:10:00,long,2682.78,2656.08,0.3542,9.50,-9.50,0.00,-9.50
|
||||
2025-02-06 22:10:00,2025-02-07 01:50:00,long,2668.85,2726.99,0.3471,9.26,20.18,0.47,19.71
|
||||
2025-02-07 01:50:00,2025-02-07 03:30:00,short,2729.26,2710.94,1.2531,34.20,22.96,1.70,21.26
|
||||
2025-02-07 03:30:00,2025-02-07 06:25:00,long,2706.54,2679.61,1.3297,35.99,-35.99,0.00,-35.99
|
||||
2025-02-07 06:25:00,2025-02-07 07:15:00,long,2673.26,2726.92,0.3628,9.70,19.46,0.49,18.97
|
||||
2025-02-07 07:15:00,2025-02-07 08:00:00,short,2726.92,2707.93,0.1258,3.43,2.39,0.17,2.22
|
||||
2025-02-07 08:00:00,2025-02-07 08:30:00,long,2707.93,2725.89,0.1274,3.45,2.29,0.17,2.11
|
||||
2025-02-07 08:30:00,2025-02-07 11:50:00,short,2733.17,2760.36,1.2605,34.45,-34.45,0.00,-34.45
|
||||
2025-02-07 11:50:00,2025-02-07 13:30:00,short,2761.05,2729.62,0.6733,18.59,21.16,0.92,20.24
|
||||
2025-02-07 13:30:00,2025-02-07 13:40:00,long,2729.62,2765.55,0.1210,3.30,4.35,0.17,4.18
|
||||
2025-02-07 13:40:00,2025-02-07 15:00:00,short,2781.45,2761.31,0.7106,19.76,14.31,0.98,13.33
|
||||
2025-02-07 15:00:00,2025-02-07 15:20:00,long,2746.10,2718.77,0.7475,20.53,-20.53,0.00,-20.53
|
||||
2025-02-07 15:55:00,2025-02-07 17:15:00,long,2701.65,2674.77,1.1946,32.27,-32.27,0.00,-32.27
|
||||
2025-02-07 17:15:00,2025-02-07 18:05:00,long,2666.13,2693.25,0.1092,2.91,2.96,0.15,2.81
|
||||
2025-02-07 18:05:00,2025-02-07 18:50:00,short,2693.25,2678.83,0.1091,2.94,1.57,0.15,1.43
|
||||
2025-02-07 18:50:00,2025-02-07 20:00:00,long,2667.70,2641.16,0.6583,17.56,-17.56,0.00,-17.56
|
||||
2025-02-07 20:00:00,2025-02-07 20:25:00,long,2638.14,2618.87,0.3136,8.27,-6.04,0.41,-6.45
|
||||
2025-02-08 00:20:00,2025-02-08 01:00:00,short,2659.12,2634.34,0.3218,8.56,7.97,0.42,7.55
|
||||
2025-02-08 01:00:00,2025-02-08 03:00:00,long,2628.99,2646.02,0.3338,8.78,5.68,0.44,5.24
|
||||
2025-02-08 03:00:00,2025-02-08 05:20:00,short,2647.28,2620.52,0.6764,17.91,18.10,0.89,17.21
|
||||
2025-02-08 05:20:00,2025-02-08 06:25:00,long,2617.45,2629.40,0.3597,9.42,4.30,0.47,3.83
|
||||
2025-02-08 06:25:00,2025-02-08 06:55:00,short,2629.40,2613.76,0.1208,3.18,1.89,0.16,1.73
|
||||
2025-02-08 06:55:00,2025-02-08 07:45:00,long,2601.17,2633.06,0.7309,19.01,23.31,0.96,22.35
|
||||
2025-02-08 07:45:00,2025-02-08 08:50:00,short,2633.06,2606.67,0.1294,3.41,3.41,0.17,3.25
|
||||
2025-02-08 08:50:00,2025-02-08 10:20:00,long,2606.67,2626.76,0.1319,3.44,2.65,0.17,2.48
|
||||
2025-02-08 10:20:00,2025-02-08 12:50:00,short,2622.21,2599.41,0.7957,20.87,18.14,1.03,17.11
|
||||
2025-02-08 12:50:00,2025-02-08 13:35:00,long,2599.41,2624.48,0.1393,3.62,3.49,0.18,3.31
|
||||
2025-02-08 13:35:00,2025-02-08 15:30:00,short,2624.48,2598.21,0.1392,3.65,3.66,0.18,3.48
|
||||
2025-02-08 15:30:00,2025-02-08 18:25:00,long,2603.81,2632.47,1.4512,37.79,41.59,1.91,39.68
|
||||
2025-02-08 18:25:00,2025-02-09 02:20:00,short,2634.47,2636.97,1.5320,40.36,-3.83,2.02,-5.85
|
||||
2025-02-09 02:20:00,2025-02-09 03:20:00,long,2636.14,2646.89,0.4695,12.38,5.05,0.62,4.43
|
||||
2025-02-09 03:20:00,2025-02-09 03:40:00,short,2646.89,2673.23,0.1574,4.17,-4.17,0.00,-4.17
|
||||
2025-02-09 03:40:00,2025-02-09 06:05:00,short,2671.40,2652.55,0.9271,24.77,17.47,1.23,16.24
|
||||
2025-02-09 06:05:00,2025-02-09 08:00:00,long,2652.55,2664.00,0.1611,4.27,1.84,0.21,1.63
|
||||
2025-02-09 08:00:00,2025-02-09 09:05:00,short,2666.15,2656.54,0.4818,12.85,4.63,0.64,3.99
|
||||
2025-02-09 09:05:00,2025-02-09 13:45:00,long,2654.90,2613.25,1.6309,43.30,-67.93,2.13,-70.06
|
||||
2025-02-10 00:05:00,2025-02-10 01:00:00,short,2652.29,2635.88,0.1397,3.71,2.29,0.18,2.11
|
||||
2025-02-10 01:00:00,2025-02-10 01:20:00,long,2635.88,2609.65,0.1413,3.72,-3.72,0.00,-3.72
|
||||
2025-02-10 01:40:00,2025-02-10 02:40:00,long,2564.36,2587.75,0.4298,11.02,10.05,0.56,9.50
|
||||
2025-02-10 02:40:00,2025-02-10 03:25:00,short,2588.86,2614.61,0.4372,11.32,-11.32,0.00,-11.32
|
||||
2025-02-10 03:25:00,2025-02-10 03:30:00,short,2614.68,2640.69,0.1398,3.66,-3.66,0.00,-3.66
|
||||
2025-02-10 03:30:00,2025-02-10 04:45:00,short,2636.16,2622.80,0.4117,10.85,5.50,0.54,4.96
|
||||
2025-02-10 04:45:00,2025-02-10 05:45:00,long,2622.80,2646.46,0.1396,3.66,3.30,0.18,3.12
|
||||
2025-02-10 05:45:00,2025-02-10 07:30:00,short,2645.39,2629.08,0.8401,22.22,13.70,1.10,12.59
|
||||
2025-02-10 07:30:00,2025-02-10 08:05:00,long,2630.07,2644.13,0.4342,11.42,6.10,0.57,5.53
|
||||
2025-02-10 08:05:00,2025-02-10 09:35:00,short,2647.45,2639.48,0.8720,23.09,6.95,1.15,5.80
|
||||
2025-02-10 09:35:00,2025-02-10 09:55:00,long,2639.48,2650.07,0.1478,3.90,1.56,0.20,1.37
|
||||
2025-02-10 09:55:00,2025-02-10 10:40:00,short,2655.49,2644.54,0.4411,11.71,4.83,0.58,4.25
|
||||
2025-02-10 10:40:00,2025-02-10 11:35:00,long,2642.87,2652.34,0.4480,11.84,4.24,0.59,3.65
|
||||
2025-02-10 11:35:00,2025-02-10 12:45:00,short,2657.30,2633.02,0.8958,23.80,21.75,1.18,20.57
|
||||
2025-02-10 12:45:00,2025-02-10 13:15:00,long,2633.02,2650.03,0.1586,4.18,2.70,0.21,2.49
|
||||
2025-02-10 13:15:00,2025-02-10 14:35:00,short,2671.82,2646.19,1.5391,41.12,39.46,2.04,37.42
|
||||
2025-02-10 14:35:00,2025-02-10 15:35:00,long,2646.19,2658.15,0.1720,4.55,2.06,0.23,1.83
|
||||
2025-02-10 15:35:00,2025-02-11 00:35:00,short,2670.79,2709.24,1.6854,45.01,-64.81,2.28,-67.10
|
||||
2025-02-12 00:15:00,2025-02-12 00:40:00,short,2611.68,2592.98,0.1567,4.09,2.93,0.20,2.73
|
||||
2025-02-12 00:40:00,2025-02-12 01:45:00,long,2592.98,2619.60,0.1588,4.12,4.23,0.21,4.02
|
||||
2025-02-12 01:45:00,2025-02-12 02:45:00,short,2619.60,2603.26,0.1586,4.15,2.59,0.21,2.39
|
||||
2025-02-12 02:45:00,2025-02-12 03:05:00,long,2598.85,2573.00,0.4811,12.50,-12.50,0.00,-12.50
|
||||
2025-02-12 03:05:00,2025-02-12 05:55:00,long,2581.44,2607.92,0.9400,24.27,24.89,1.23,23.67
|
||||
2025-02-12 05:55:00,2025-02-12 06:30:00,short,2609.15,2599.27,0.9799,25.57,9.68,1.27,8.41
|
||||
2025-02-12 06:30:00,2025-02-12 07:15:00,long,2599.20,2614.10,0.5009,13.02,7.46,0.65,6.81
|
||||
2025-02-12 07:15:00,2025-02-12 08:55:00,short,2628.75,2626.85,0.9991,26.26,1.90,1.31,0.59
|
||||
2025-02-12 08:55:00,2025-02-12 09:50:00,long,2618.62,2625.17,1.6518,43.26,10.83,2.17,8.66
|
||||
2025-02-12 09:50:00,2025-02-12 10:45:00,short,2627.75,2617.02,0.5085,13.36,5.46,0.67,4.79
|
||||
2025-02-12 10:45:00,2025-02-12 11:45:00,long,2615.02,2633.86,0.5159,13.49,9.72,0.68,9.04
|
||||
2025-02-12 11:45:00,2025-02-12 13:30:00,short,2645.19,2587.95,1.7023,45.03,97.44,2.20,95.23
|
||||
2025-02-12 13:30:00,2025-02-12 13:35:00,long,2587.95,2562.20,0.2131,5.52,-5.52,0.00,-5.52
|
||||
2025-02-12 13:35:00,2025-02-12 15:25:00,long,2566.68,2609.81,1.2760,32.75,55.03,1.66,53.37
|
||||
2025-02-12 15:25:00,2025-02-12 16:05:00,short,2609.81,2594.26,0.2289,5.97,3.56,0.30,3.26
|
||||
2025-02-12 16:05:00,2025-02-12 19:00:00,long,2587.48,2666.76,1.3842,35.82,109.74,1.85,107.89
|
||||
2025-02-12 19:00:00,2025-02-12 20:10:00,short,2666.76,2693.30,0.2649,7.07,-7.07,0.00,-7.07
|
||||
2025-02-12 20:10:00,2025-02-12 22:20:00,short,2694.91,2721.73,1.5423,41.56,-41.56,0.00,-41.56
|
||||
2025-02-12 22:20:00,2025-02-12 22:25:00,short,2726.17,2753.30,0.2404,6.55,-6.55,0.00,-6.55
|
||||
2025-02-12 22:25:00,2025-02-13 02:45:00,short,2758.15,2732.83,0.7292,20.11,18.47,1.00,17.47
|
||||
2025-02-13 02:45:00,2025-02-13 03:05:00,long,2732.89,2740.00,0.7625,20.84,5.42,1.04,4.38
|
||||
2025-02-13 03:05:00,2025-02-13 04:15:00,short,2742.19,2738.73,1.5238,41.78,5.28,2.09,3.19
|
||||
2025-02-13 04:15:00,2025-02-13 05:05:00,long,2734.53,2705.60,2.5344,69.30,-73.32,3.43,-76.75
|
||||
2025-02-14 00:10:00,2025-02-14 00:30:00,long,2664.50,2679.49,0.2374,6.32,3.56,0.32,3.24
|
||||
2025-02-14 00:30:00,2025-02-14 03:45:00,short,2694.22,2717.47,2.3138,62.34,-53.79,3.14,-56.94
|
||||
2025-02-15 00:20:00,2025-02-15 01:35:00,long,2709.90,2722.22,0.6420,17.40,7.90,0.87,7.03
|
||||
2025-02-15 01:35:00,2025-02-15 05:15:00,short,2728.37,2717.24,1.2866,35.10,14.32,1.75,12.58
|
||||
2025-02-15 05:15:00,2025-02-15 09:05:00,long,2697.87,2709.66,2.1924,59.15,25.84,2.97,22.87
|
||||
2025-02-15 09:05:00,2025-02-15 09:25:00,short,2709.66,2699.68,0.2282,6.18,2.28,0.31,1.97
|
||||
2025-02-15 09:25:00,2025-02-15 10:35:00,long,2697.64,2703.29,2.2899,61.77,12.93,3.10,9.84
|
||||
2025-02-15 10:35:00,2025-02-15 12:35:00,short,2703.29,2705.52,0.2319,6.27,-0.52,0.31,-0.83
|
||||
2025-02-15 12:35:00,2025-02-15 14:35:00,long,2702.54,2675.65,2.3027,62.23,-62.23,0.00,-62.23
|
||||
2025-02-15 14:35:00,2025-02-15 18:05:00,long,2681.28,2691.49,1.2538,33.62,12.81,1.69,11.12
|
||||
2025-02-15 18:05:00,2025-02-15 19:40:00,short,2699.63,2696.01,1.2593,34.00,4.56,1.70,2.86
|
||||
2025-02-15 19:40:00,2025-02-15 21:45:00,long,2696.01,2697.70,0.2118,5.71,0.36,0.29,0.07
|
||||
2025-02-15 21:45:00,2025-02-15 22:25:00,short,2699.29,2689.26,0.6337,17.11,6.36,0.85,5.51
|
||||
2025-02-15 22:25:00,2025-02-16 00:15:00,long,2689.30,2699.21,1.2834,34.51,12.72,1.73,10.99
|
||||
2025-02-16 00:15:00,2025-02-16 01:00:00,short,2699.21,2697.19,0.2274,6.14,0.46,0.31,0.15
|
||||
2025-02-16 01:00:00,2025-02-16 01:55:00,long,2693.58,2699.28,2.2701,61.15,12.94,3.06,9.88
|
||||
2025-02-16 01:55:00,2025-02-16 02:50:00,short,2699.28,2687.86,0.2299,6.21,2.63,0.31,2.32
|
||||
2025-02-16 02:50:00,2025-02-16 03:40:00,long,2687.86,2692.43,0.2316,6.23,1.06,0.31,0.75
|
||||
2025-02-16 03:40:00,2025-02-16 07:00:00,short,2705.72,2705.51,2.2597,61.14,0.48,3.06,-2.58
|
||||
2025-02-16 07:00:00,2025-02-16 11:20:00,long,2697.91,2709.10,1.3719,37.01,15.34,1.86,13.48
|
||||
2025-02-16 11:20:00,2025-02-16 13:05:00,short,2709.10,2701.20,0.2322,6.29,1.83,0.31,1.52
|
||||
2025-02-16 13:05:00,2025-02-16 14:45:00,long,2692.37,2694.97,2.2958,61.81,5.97,3.09,2.87
|
||||
2025-02-16 14:45:00,2025-02-16 16:05:00,short,2694.97,2691.43,0.2338,6.30,0.83,0.31,0.51
|
||||
2025-02-16 16:05:00,2025-02-16 17:10:00,long,2691.43,2700.23,0.2341,6.30,2.06,0.32,1.74
|
||||
2025-02-16 17:10:00,2025-02-16 17:35:00,short,2700.23,2690.21,0.2339,6.32,2.34,0.31,2.03
|
||||
2025-02-16 17:35:00,2025-02-16 18:30:00,long,2690.21,2663.44,0.2354,6.33,-6.33,0.00,-6.33
|
||||
2025-02-16 18:30:00,2025-02-16 21:35:00,long,2671.06,2683.42,1.4152,37.80,17.50,1.90,15.60
|
||||
2025-02-16 21:35:00,2025-02-16 22:25:00,short,2683.42,2676.54,0.2386,6.40,1.64,0.32,1.32
|
||||
2025-02-16 22:25:00,2025-02-17 01:10:00,long,2665.35,2672.11,2.3805,63.45,16.10,3.18,12.92
|
||||
2025-02-17 01:10:00,2025-02-17 01:25:00,short,2672.11,2662.19,0.7673,20.50,7.61,1.02,6.59
|
||||
2025-02-17 01:25:00,2025-02-17 01:35:00,long,2662.19,2673.50,0.2589,6.89,2.93,0.35,2.58
|
||||
2025-02-17 01:35:00,2025-02-17 02:45:00,short,2673.50,2671.64,0.2586,6.91,0.48,0.35,0.14
|
||||
2025-02-17 02:45:00,2025-02-17 05:00:00,long,2671.64,2645.05,0.2587,6.91,-6.91,0.00,-6.91
|
||||
2025-02-17 05:00:00,2025-02-17 07:05:00,long,2651.53,2689.24,0.7736,20.51,29.18,1.04,28.14
|
||||
2025-02-17 07:05:00,2025-02-17 07:40:00,short,2690.56,2676.20,0.7922,21.32,11.37,1.06,10.31
|
||||
2025-02-17 07:40:00,2025-02-17 08:10:00,long,2676.20,2695.94,0.2692,7.20,5.31,0.36,4.95
|
||||
2025-02-17 08:10:00,2025-02-17 09:10:00,short,2695.94,2722.76,0.2689,7.25,-7.25,0.00,-7.25
|
||||
2025-02-17 09:40:00,2025-02-17 10:05:00,short,2736.34,2763.57,0.7857,21.50,-21.50,0.00,-21.50
|
||||
2025-02-17 10:05:00,2025-02-17 13:05:00,short,2761.76,2760.91,2.4755,68.37,2.11,3.42,-1.31
|
||||
2025-02-17 13:05:00,2025-02-17 13:20:00,long,2760.91,2776.41,0.2499,6.90,3.87,0.35,3.53
|
||||
2025-02-17 13:20:00,2025-02-17 14:10:00,short,2776.41,2804.03,0.2497,6.93,-6.93,0.00,-6.93
|
||||
2025-02-17 14:10:00,2025-02-17 15:00:00,short,2811.25,2839.22,0.2440,6.86,-6.86,0.00,-6.86
|
||||
2025-02-17 15:00:00,2025-02-17 15:30:00,short,2832.87,2798.40,0.2396,6.79,8.26,0.34,7.93
|
||||
2025-02-17 15:30:00,2025-02-17 15:45:00,long,2792.30,2764.52,0.7355,20.54,-20.54,0.00,-20.54
|
||||
2025-02-17 15:45:00,2025-02-17 16:25:00,long,2757.54,2730.10,0.2411,6.65,-6.65,0.00,-6.65
|
||||
2025-02-17 17:15:00,2025-02-17 18:00:00,short,2743.01,2721.78,0.2398,6.58,5.09,0.33,4.76
|
||||
2025-02-17 18:00:00,2025-02-17 19:00:00,long,2715.50,2688.48,1.4578,39.59,-39.59,0.00,-39.59
|
||||
2025-02-18 00:05:00,2025-02-18 00:20:00,short,2752.15,2724.25,0.2341,6.44,6.53,0.32,6.21
|
||||
2025-02-18 00:20:00,2025-02-18 01:10:00,long,2724.25,2729.53,0.2386,6.50,1.26,0.33,0.93
|
||||
2025-02-18 01:10:00,2025-02-18 02:35:00,short,2734.60,2716.91,0.7123,19.48,12.60,0.97,11.63
|
||||
2025-02-18 02:35:00,2025-02-18 05:20:00,long,2711.82,2684.84,2.4188,65.59,-65.59,0.00,-65.59
|
||||
2025-02-18 05:20:00,2025-02-18 05:25:00,long,2685.58,2691.82,0.2206,5.92,1.38,0.30,1.08
|
||||
2025-02-19 00:05:00,2025-02-19 01:15:00,short,2674.68,2656.68,0.6723,17.98,12.11,0.89,11.21
|
||||
2025-02-19 01:15:00,2025-02-19 02:10:00,long,2656.68,2683.92,0.2296,6.10,6.26,0.31,5.95
|
||||
2025-02-19 02:10:00,2025-02-19 08:25:00,short,2692.69,2719.48,2.2807,61.41,-61.41,0.00,-61.41
|
||||
2025-02-19 08:25:00,2025-02-19 08:55:00,short,2718.72,2705.06,0.6077,16.52,8.30,0.82,7.48
|
||||
2025-02-19 08:55:00,2025-02-19 09:50:00,long,2705.06,2727.55,0.2062,5.58,4.64,0.28,4.36
|
||||
2025-02-19 09:50:00,2025-02-19 12:05:00,short,2730.39,2722.46,2.0483,55.93,16.25,2.79,13.46
|
||||
2025-02-19 12:05:00,2025-02-19 13:35:00,long,2719.24,2717.61,1.2605,34.28,-2.06,1.71,-3.77
|
||||
2025-02-19 13:35:00,2025-02-19 14:15:00,short,2717.61,2708.98,0.2087,5.67,1.80,0.28,1.52
|
||||
2025-02-19 14:15:00,2025-02-19 14:30:00,long,2708.98,2724.34,0.2098,5.68,3.22,0.29,2.94
|
||||
2025-02-19 14:30:00,2025-02-19 14:40:00,short,2724.39,2697.44,0.6285,17.12,16.94,0.85,16.09
|
||||
2025-02-19 14:40:00,2025-02-19 16:15:00,long,2697.44,2717.43,0.2173,5.86,4.35,0.30,4.05
|
||||
2025-02-19 16:15:00,2025-02-19 19:00:00,short,2717.43,2698.14,0.2171,5.90,4.19,0.29,3.90
|
||||
2025-02-19 19:00:00,2025-02-19 19:20:00,long,2698.14,2721.11,0.2200,5.94,5.05,0.30,4.75
|
||||
2025-02-19 19:20:00,2025-02-19 21:50:00,short,2720.31,2712.24,2.1896,59.56,17.68,2.97,14.71
|
||||
2025-02-19 21:50:00,2025-02-19 22:45:00,long,2708.93,2721.91,0.6742,18.26,8.75,0.92,7.83
|
||||
2025-02-19 22:45:00,2025-02-20 00:15:00,short,2721.91,2710.13,0.2265,6.17,2.67,0.31,2.36
|
||||
2025-02-20 00:15:00,2025-02-20 00:50:00,long,2710.13,2730.17,0.2381,6.45,4.77,0.32,4.45
|
||||
2025-02-20 00:50:00,2025-02-20 07:05:00,short,2745.50,2726.14,2.3358,64.13,45.21,3.18,42.03
|
||||
2025-02-20 07:05:00,2025-02-20 07:30:00,long,2724.21,2732.73,1.5121,41.19,12.89,2.07,10.82
|
||||
2025-02-20 07:30:00,2025-02-20 08:20:00,short,2732.73,2728.47,0.2550,6.97,1.09,0.35,0.74
|
||||
2025-02-20 08:20:00,2025-02-20 10:30:00,long,2728.06,2739.32,0.7664,20.91,8.63,1.05,7.58
|
||||
2025-02-20 10:30:00,2025-02-20 13:20:00,short,2739.32,2733.94,0.2569,7.04,1.38,0.35,1.03
|
||||
2025-02-20 13:20:00,2025-02-20 13:30:00,long,2733.94,2742.63,0.2577,7.04,2.24,0.35,1.89
|
||||
2025-02-20 13:30:00,2025-02-20 14:45:00,short,2753.10,2742.37,2.5215,69.42,27.04,3.46,23.58
|
||||
2025-02-20 14:45:00,2025-02-20 18:00:00,long,2719.86,2739.70,2.6135,71.08,51.85,3.58,48.27
|
||||
2025-02-20 18:00:00,2025-02-20 21:10:00,short,2751.70,2740.43,2.7671,76.14,31.18,3.79,27.39
|
||||
2025-02-20 21:10:00,2025-02-20 22:35:00,long,2740.43,2731.73,0.2899,7.94,-2.52,0.40,-2.92
|
||||
2025-02-20 22:35:00,2025-02-21 01:25:00,short,2735.00,2725.79,0.8664,23.70,7.99,1.18,6.81
|
||||
2025-02-21 01:25:00,2025-02-21 03:10:00,long,2734.60,2739.68,3.0438,83.24,15.45,4.17,11.28
|
||||
2025-02-21 03:10:00,2025-02-21 05:20:00,short,2743.79,2746.43,0.9159,25.13,-2.42,1.26,-3.68
|
||||
2025-02-21 05:20:00,2025-02-21 05:45:00,long,2746.43,2755.37,0.3038,8.34,2.72,0.42,2.30
|
||||
2025-02-21 05:45:00,2025-02-21 06:25:00,short,2755.37,2754.18,0.3035,8.36,0.36,0.42,-0.06
|
||||
2025-02-21 06:25:00,2025-02-21 06:35:00,long,2754.18,2758.21,0.9100,25.06,3.67,1.25,2.42
|
||||
2025-02-21 06:35:00,2025-02-21 08:15:00,short,2763.46,2751.08,0.9064,25.05,11.22,1.25,9.97
|
||||
2025-02-21 08:15:00,2025-02-21 09:10:00,long,2750.85,2757.07,0.9217,25.36,5.74,1.27,4.47
|
||||
2025-02-21 09:10:00,2025-02-21 09:15:00,short,2757.07,2784.50,0.3078,8.49,-8.49,0.00,-8.49
|
||||
2025-02-21 09:15:00,2025-02-21 11:05:00,short,2821.82,2794.33,0.8890,25.08,24.44,1.24,23.20
|
||||
2025-02-21 11:05:00,2025-02-21 13:05:00,long,2789.32,2822.14,0.9249,25.80,30.36,1.31,29.06
|
||||
2025-02-21 13:05:00,2025-02-21 14:30:00,short,2831.74,2792.99,0.9389,26.59,36.38,1.31,35.07
|
||||
2025-02-21 14:30:00,2025-02-21 15:25:00,long,2792.99,2765.20,0.3306,9.23,-9.23,0.00,-9.23
|
||||
2025-02-21 15:25:00,2025-02-21 15:30:00,long,2771.48,2743.91,0.3296,9.14,-9.14,0.00,-9.14
|
||||
2025-02-21 15:30:00,2025-02-21 15:40:00,long,2748.04,2720.70,0.3290,9.04,-9.04,0.00,-9.04
|
||||
2025-02-21 15:40:00,2025-02-21 17:35:00,long,2682.67,2655.98,0.9964,26.73,-26.73,0.00,-26.73
|
||||
2025-02-21 19:00:00,2025-02-21 19:25:00,long,2667.07,2640.53,1.9283,51.43,-51.43,0.00,-51.43
|
||||
2025-02-21 21:25:00,2025-02-21 22:25:00,long,2618.21,2659.02,0.9301,24.35,37.96,1.24,36.73
|
||||
2025-02-21 22:25:00,2025-02-22 01:05:00,short,2665.74,2682.29,3.2220,85.89,-53.31,4.32,-57.63
|
||||
2025-02-23 02:35:00,2025-02-23 06:15:00,long,2754.54,2791.39,0.3003,8.27,11.07,0.42,10.65
|
||||
2025-02-23 06:15:00,2025-02-23 08:55:00,short,2808.69,2802.39,1.7714,49.75,11.15,2.48,8.67
|
||||
2025-02-23 08:55:00,2025-02-23 13:00:00,long,2801.31,2798.34,3.0108,84.34,-8.94,4.21,-13.16
|
||||
2025-02-23 13:00:00,2025-02-23 14:25:00,short,2810.25,2805.27,0.8780,24.67,4.37,1.23,3.14
|
||||
2025-02-23 14:25:00,2025-02-23 17:35:00,long,2797.18,2817.68,2.9617,82.84,60.71,4.17,56.53
|
||||
2025-02-23 17:35:00,2025-02-23 18:30:00,short,2819.26,2810.50,1.8691,52.69,16.38,2.63,13.75
|
||||
2025-02-23 18:30:00,2025-02-23 20:55:00,long,2801.61,2804.82,1.8971,53.15,6.10,2.66,3.43
|
||||
2025-02-23 20:55:00,2025-02-23 23:10:00,short,2806.87,2834.79,0.9528,26.74,-26.74,0.00,-26.74
|
||||
2025-02-23 23:10:00,2025-02-24 00:40:00,short,2838.39,2802.76,1.8652,52.94,66.46,2.61,63.85
|
||||
2025-02-24 00:40:00,2025-02-24 02:20:00,long,2802.76,2774.87,0.3425,9.60,-9.60,0.00,-9.60
|
||||
2025-02-24 02:20:00,2025-02-24 03:25:00,long,2764.41,2736.90,2.0441,56.51,-56.51,0.00,-56.51
|
||||
2025-02-24 03:30:00,2025-02-24 05:30:00,long,2704.01,2723.00,0.9828,26.57,18.66,1.34,17.32
|
||||
2025-02-24 05:30:00,2025-02-24 07:20:00,short,2723.00,2720.30,0.3329,9.07,0.90,0.45,0.45
|
||||
2025-02-24 07:20:00,2025-02-24 08:20:00,long,2717.35,2690.31,1.9946,54.20,-54.20,0.00,-54.20
|
||||
2025-02-24 08:20:00,2025-02-24 08:25:00,long,2690.91,2678.65,0.3157,8.50,-3.87,0.42,-4.29
|
||||
2025-02-25 00:10:00,2025-02-25 07:05:00,long,2474.53,2432.73,3.4747,85.98,-145.23,4.23,-149.46
|
||||
2025-02-26 01:15:00,2025-02-26 03:15:00,short,2485.63,2505.94,2.8479,70.79,-57.84,3.57,-61.41
|
||||
2025-02-27 00:05:00,2025-02-27 01:05:00,short,2343.55,2317.15,0.2787,6.53,7.36,0.32,7.03
|
||||
2025-02-27 01:05:00,2025-02-27 01:20:00,long,2317.15,2354.05,0.2848,6.60,10.51,0.34,10.17
|
||||
2025-02-27 01:20:00,2025-02-27 03:25:00,short,2360.61,2329.18,2.8186,66.54,88.59,3.28,85.30
|
||||
2025-02-27 03:25:00,2025-02-27 04:35:00,long,2325.72,2302.58,0.9679,22.51,-22.51,0.00,-22.51
|
||||
2025-02-27 05:15:00,2025-02-27 07:35:00,short,2342.03,2365.33,0.9281,21.74,-21.74,0.00,-21.74
|
||||
2025-02-27 07:35:00,2025-02-27 08:00:00,short,2365.83,2352.30,0.2981,7.05,4.03,0.35,3.68
|
||||
2025-02-27 08:00:00,2025-02-27 09:05:00,long,2346.32,2358.48,1.8051,42.35,21.95,2.13,19.82
|
||||
2025-02-27 09:05:00,2025-02-27 13:30:00,short,2365.58,2340.68,3.0516,72.19,76.00,3.57,72.43
|
||||
2025-02-27 13:30:00,2025-02-27 13:45:00,long,2340.80,2359.11,1.0188,23.85,18.65,1.20,17.45
|
||||
2025-02-27 13:45:00,2025-02-27 13:50:00,short,2359.11,2334.15,0.3439,8.11,8.58,0.40,8.18
|
||||
2025-02-27 13:50:00,2025-02-27 14:30:00,long,2334.15,2350.31,0.3509,8.19,5.67,0.41,5.26
|
||||
2025-02-27 14:30:00,2025-02-27 14:45:00,short,2349.54,2317.31,1.0521,24.72,33.90,1.22,32.68
|
||||
2025-02-27 14:45:00,2025-02-27 15:00:00,long,2317.31,2294.26,0.3692,8.55,-8.55,0.00,-8.55
|
||||
2025-02-27 16:15:00,2025-02-27 16:25:00,short,2334.15,2315.18,0.3627,8.46,6.88,0.42,6.46
|
||||
2025-02-27 16:25:00,2025-02-27 18:00:00,long,2307.12,2324.01,2.2016,50.79,37.19,2.56,34.63
|
||||
2025-02-27 18:00:00,2025-02-27 19:05:00,short,2328.70,2320.04,3.7833,88.10,32.76,4.39,28.37
|
||||
2025-02-27 19:05:00,2025-02-27 19:30:00,long,2313.75,2290.73,2.3443,54.24,-54.24,0.00,-54.24
|
||||
2025-02-27 19:30:00,2025-02-27 20:45:00,long,2271.11,2248.51,1.1205,25.45,-25.45,0.00,-25.45
|
||||
2025-02-27 20:45:00,2025-02-27 23:35:00,long,2250.80,2307.13,3.7528,84.47,211.42,4.33,207.09
|
||||
2025-02-27 23:35:00,2025-02-28 00:30:00,short,2307.13,2299.32,0.4455,10.28,3.48,0.51,2.97
|
||||
2025-02-28 00:30:00,2025-02-28 01:25:00,long,2291.71,2259.98,2.8031,64.24,-88.93,3.17,-92.10
|
||||
|
@@ -1,26 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,max_dd_u,max_dd_pct,stable_score
|
||||
801,0.5,10.34628311811287,-94.82685844094357,11410,31.0692375109553,-0.8073996538916506,-208.98636227084955,104.49318113542478,-188.1101991959832
|
||||
401,400.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,800.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,600.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,200.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,0.5,3.0098224997841756,-98.49508875010791,17114,34.983054808928365,-1.24562923011871,-197.42490102080006,98.71245051040003,-192.41259991985248
|
||||
201,200.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,400.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,600.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,800.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,0.5,0.8960823320970013,-99.5519588339515,24082,38.36060127896354,-1.1894204188425357,-201.2616833266314,100.6308416633157,-194.3296771907145
|
||||
1,200.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,0.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,800.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,600.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,400.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
601,0.5,3.1473924625026317,-98.42630376874868,13683,32.53672440254331,-0.749362829772547,-247.87957672599615,123.93978836299809,-206.57048841641773
|
||||
601,200.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,400.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,600.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,800.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
801,200.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,400.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,600.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,800.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
|
@@ -1,26 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,max_dd_u,max_dd_pct,stable_score
|
||||
801,0.5,181.43296931677935,-9.283515341610325,4050,30.0,-0.09570947529404288,-101.50183051832926,50.75091525916463,-51.03276125247054
|
||||
601,0.5,93.62899070862777,-53.18550464568612,4692,31.60699062233589,-0.5815001553833595,-197.11225415652723,98.55612707826361,-139.00840817289733
|
||||
401,0.5,62.32779858408545,-68.83610070795727,5759,33.79058864386178,-1.4213594190051202,-161.96245274664543,80.98122637332271,-150.67739483467687
|
||||
201,0.5,89.02955479967403,-55.485222600162984,8469,35.48234738457906,-0.5773758988733515,-241.43620122699747,120.71810061349872,-158.98821387744218
|
||||
401,400.5,44.38579511338957,-77.80710244330521,5793,17.262213015708614,-0.6994195729006223,-253.93642559214132,126.96821279607067,-187.7747075549692
|
||||
401,200.5,44.38579511338957,-77.80710244330521,5793,17.262213015708614,-0.6994195729006223,-253.93642559214132,126.96821279607067,-187.7747075549692
|
||||
401,800.5,44.38579511338957,-77.80710244330521,5793,17.262213015708614,-0.6994195729006223,-253.93642559214132,126.96821279607067,-187.7747075549692
|
||||
401,600.5,44.38579511338957,-77.80710244330521,5793,17.262213015708614,-0.6994195729006223,-253.93642559214132,126.96821279607067,-187.7747075549692
|
||||
801,600.5,218.96542562281235,9.482712811406174,4053,17.66592647421663,0.03389213813921764,-506.2632850511136,253.1316425255568,-192.61589555136865
|
||||
801,400.5,218.96542562281235,9.482712811406174,4053,17.66592647421663,0.03389213813921764,-506.2632850511136,253.1316425255568,-192.61589555136865
|
||||
801,200.5,218.96542562281235,9.482712811406174,4053,17.66592647421663,0.03389213813921764,-506.2632850511136,253.1316425255568,-192.61589555136865
|
||||
801,800.5,218.96542562281235,9.482712811406174,4053,17.66592647421663,0.03389213813921764,-506.2632850511136,253.1316425255568,-192.61589555136865
|
||||
1,200.5,0.0006825550434322981,-99.99965872247829,104946,30.22220951727555,-2.7404631170214495,-228.6355754207877,114.31778771039384,-224.33944629505078
|
||||
1,800.5,0.0006825550434322981,-99.99965872247829,104946,30.22220951727555,-2.7404631170214495,-228.6355754207877,114.31778771039384,-224.33944629505078
|
||||
1,600.5,0.0006825550434322981,-99.99965872247829,104946,30.22220951727555,-2.7404631170214495,-228.6355754207877,114.31778771039384,-224.33944629505078
|
||||
1,400.5,0.0006825550434322981,-99.99965872247829,104946,30.22220951727555,-2.7404631170214495,-228.6355754207877,114.31778771039384,-224.33944629505078
|
||||
1,0.5,0.0006825550434322981,-99.99965872247829,104946,30.22220951727555,-2.7404631170214495,-228.6355754207877,114.31778771039384,-224.33944629505078
|
||||
601,200.5,37.28309984246756,-81.35845007876623,4691,17.11788531230015,-0.5168501866457095,-401.54175143780486,200.77087571890243,-248.1773528936367
|
||||
601,400.5,37.28309984246756,-81.35845007876623,4691,17.11788531230015,-0.5168501866457095,-401.54175143780486,200.77087571890243,-248.1773528936367
|
||||
601,600.5,37.28309984246756,-81.35845007876623,4691,17.11788531230015,-0.5168501866457095,-401.54175143780486,200.77087571890243,-248.1773528936367
|
||||
601,800.5,37.28309984246756,-81.35845007876623,4691,17.11788531230015,-0.5168501866457095,-401.54175143780486,200.77087571890243,-248.1773528936367
|
||||
201,800.5,199.9590164846017,-0.020491757699147684,8549,18.306234647327173,-5.261669526742126e-05,-683.826528940572,341.913264470286,-273.5517347342712
|
||||
201,600.5,199.9590164846017,-0.020491757699147684,8549,18.306234647327173,-5.261669526742126e-05,-683.826528940572,341.913264470286,-273.5517347342712
|
||||
201,400.5,199.9590164846017,-0.020491757699147684,8549,18.306234647327173,-5.261669526742126e-05,-683.826528940572,341.913264470286,-273.5517347342712
|
||||
201,200.5,199.9590164846017,-0.020491757699147684,8549,18.306234647327173,-5.261669526742126e-05,-683.826528940572,341.913264470286,-273.5517347342712
|
||||
|
@@ -1,101 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,max_dd_u,max_dd_pct,stable_score
|
||||
301,800.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,900.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,400.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,300.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,200.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,100.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,700.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,600.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,500.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
901,0.5,13.45175555605595,-93.27412222197202,10264,30.670303975058456,-0.8952537525217249,-189.5983790965677,94.79918954828385,-179.8565188908598
|
||||
801,0.5,10.34628311811287,-94.82685844094357,11410,31.0692375109553,-0.8073996538916506,-208.98636227084955,104.49318113542478,-188.1101991959832
|
||||
501,0.5,1.8986708832397656,-99.05066455838012,15372,33.36586000520427,-0.8822266044169348,-198.31333975387093,99.15666987693547,-188.96271971293172
|
||||
701,0.5,1.6035402845204254,-99.19822985773979,12485,31.229475370444533,-0.8874406539711374,-198.89129268300212,99.44564634150106,-189.40403477859428
|
||||
101,0.5,2.9344181713149435,-98.53279091434253,35484,40.70003381805884,-1.0207595955600905,-200.5343407319586,100.2671703659793,-190.99564235384705
|
||||
401,700.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,900.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,800.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,600.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,100.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,500.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,400.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,200.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,300.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,0.5,3.0098224997841756,-98.49508875010791,17114,34.983054808928365,-1.24562923011871,-197.42490102080006,98.71245051040003,-192.41259991985248
|
||||
201,900.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,800.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,700.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,600.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,500.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,400.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,300.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,100.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,200.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
301,0.5,3.288758436016597,-98.3556207819917,18999,36.78614663929681,-0.9796482828217248,-210.34848032205863,105.17424016102932,-194.25079230467585
|
||||
201,0.5,0.8960823320970013,-99.5519588339515,24082,38.36060127896354,-1.1894204188425357,-201.2616833266314,100.6308416633157,-194.3296771907145
|
||||
1,100.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,0.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,900.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,600.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,400.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,300.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,200.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,500.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,800.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,700.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
601,0.5,3.1473924625026317,-98.42630376874868,13683,32.53672440254331,-0.749362829772547,-247.87957672599615,123.93978836299809,-206.57048841641773
|
||||
501,300.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,200.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,600.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,100.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,500.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,700.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,800.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,900.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,400.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
101,900.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,100.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,200.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,300.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,400.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,500.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,600.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,700.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,800.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
601,700.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,900.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,800.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,600.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,400.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,300.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,500.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,100.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,200.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
701,700.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,900.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,800.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,600.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,500.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,400.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,300.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,200.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,100.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
801,600.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,900.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,800.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,700.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,300.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,500.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,400.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,200.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,100.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
901,100.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,200.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,300.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,400.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,500.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,600.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,700.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,800.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,900.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
|
@@ -1,17 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,max_dd_u,max_dd_pct,stable_score
|
||||
751,250.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,500.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,750.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
501,0.5,1.8986708832397656,-99.05066455838012,15372,33.36586000520427,-0.8822266044169348,-198.31333975387093,99.15666987693547,-188.96271971293172
|
||||
751,0.5,6.787536497792063,-96.60623175110396,11769,31.701928795989463,-0.8973785204314527,-208.02359739762167,104.01179869881084,-190.58421295533006
|
||||
251,0.5,1.2582263129595197,-99.37088684352024,21094,37.47985209064189,-1.1405413234039807,-199.63192120071835,99.81596060035918,-192.91015120465536
|
||||
251,250.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,500.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,750.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
1,0.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,250.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,500.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,750.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
501,250.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,500.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,750.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
|
@@ -1,401 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,max_dd_u,max_dd_pct,stable_score
|
||||
301,100.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,600.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,300.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,350.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,400.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,450.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,500.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,550.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,650.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,200.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,750.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,800.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,850.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,900.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,950.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,50.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,250.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,700.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
301,150.5,52.83984459402632,-73.58007770298684,19058,20.495330045125407,-0.3757296908035501,-226.550345134987,113.27517256749351,-168.70897204662427
|
||||
751,350.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,800.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,300.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,150.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,100.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,50.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,950.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,900.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,250.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,850.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,750.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,700.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,650.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,600.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,550.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,500.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,450.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,400.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
751,200.5,127.53055242971492,-36.23472378514254,11780,19.898132427843805,-0.1076378009333422,-345.62059572323346,172.81029786161673,-175.77461568563604
|
||||
901,0.5,13.45175555605595,-93.27412222197202,10264,30.670303975058456,-0.8952537525217249,-189.5983790965677,94.79918954828385,-179.8565188908598
|
||||
851,0.5,13.139093314987317,-93.43045334250634,10724,31.90041029466617,-0.8457807204487175,-197.00597073746417,98.50298536873208,-182.38221028287663
|
||||
351,550.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,800.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,600.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,650.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,700.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,750.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,450.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,850.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,500.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,200.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,400.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,950.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,350.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,300.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,250.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,150.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,100.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,50.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
351,900.5,9.606531110456654,-95.19673444477168,17857,19.476955815646523,-0.6356682943106791,-200.96548233515287,100.48274116757642,-183.21094691056095
|
||||
801,0.5,10.34628311811287,-94.82685844094357,11410,31.0692375109553,-0.8073996538916506,-208.98636227084955,104.49318113542478,-188.1101991959832
|
||||
551,0.5,4.519023184638675,-97.74048840768066,14150,33.36395759717314,-0.9378467165440548,-198.0691055074856,99.0345527537428,-188.22229120920355
|
||||
501,0.5,1.8986708832397656,-99.05066455838012,15372,33.36586000520427,-0.8822266044169348,-198.31333975387093,99.15666987693547,-188.96271971293172
|
||||
701,0.5,1.6035402845204254,-99.19822985773979,12485,31.229475370444533,-0.8874406539711374,-198.89129268300212,99.44564634150106,-189.40403477859428
|
||||
551,350.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,600.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,300.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,950.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,900.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,850.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,800.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,700.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,650.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,750.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,550.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,450.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,400.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,50.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,100.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,150.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,200.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,250.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
551,500.5,11.436749188725278,-94.28162540563736,14159,19.6200296631118,-0.5181379138095433,-224.62755043239733,112.31377521619868,-190.3503005443108
|
||||
751,0.5,6.787536497792063,-96.60623175110396,11769,31.701928795989463,-0.8973785204314527,-208.02359739762167,104.01179869881084,-190.58421295533006
|
||||
101,0.5,2.9344181713149435,-98.53279091434253,35484,40.70003381805884,-1.0207595955600905,-200.5343407319586,100.2671703659793,-190.99564235384705
|
||||
401,750.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,600.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,650.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,700.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,950.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,800.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,850.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,900.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,500.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,550.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,300.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,450.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,400.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,350.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,250.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,200.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,150.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,100.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
401,50.5,6.006954718238241,-96.99652264088088,17153,19.413513671077943,-0.554621338370883,-218.38418033295903,109.19209016647953,-191.0056508345151
|
||||
351,0.5,3.361096585733224,-98.31945170713338,17810,36.27175743964065,-1.2209929603510115,-197.10747569782964,98.55373784891482,-191.8143575104774
|
||||
451,0.5,2.329711769566727,-98.83514411521664,16156,34.27209705372617,-1.1239876151275339,-199.45433646360712,99.72716823180356,-192.1047300821899
|
||||
401,0.5,3.0098224997841756,-98.49508875010791,17114,34.983054808928365,-1.24562923011871,-197.42490102080006,98.71245051040003,-192.41259991985248
|
||||
251,0.5,1.2582263129595197,-99.37088684352024,21094,37.47985209064189,-1.1405413234039807,-199.63192120071835,99.81596060035918,-192.91015120465536
|
||||
201,750.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,250.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,500.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,850.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,800.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,700.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,650.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,600.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,550.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,450.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,950.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,400.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,350.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,300.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,200.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,150.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,100.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,900.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
201,50.5,9.7202672056566,-95.1398663971717,24243,20.735882522790085,-0.805097998664356,-220.7396343409598,110.3698171704799,-193.0968961175279
|
||||
301,0.5,3.288758436016597,-98.3556207819917,18999,36.78614663929681,-0.9796482828217248,-210.34848032205863,105.17424016102932,-194.25079230467585
|
||||
201,0.5,0.8960823320970013,-99.5519588339515,24082,38.36060127896354,-1.1894204188425357,-201.2616833266314,100.6308416633157,-194.3296771907145
|
||||
151,0.5,0.447147524480946,-99.77642623775952,28965,38.933195235629206,-1.118503991656886,-203.0492986206653,101.52464931033265,-194.41819358590828
|
||||
51,0.5,0.2647932025146436,-99.86760339874267,50009,41.39054970105381,-1.3185573829105623,-200.91043500058367,100.45521750029182,-196.05446599390288
|
||||
51,550.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,250.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,300.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,350.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,400.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,450.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,500.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,100.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,600.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,700.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,750.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,50.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,800.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,850.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,900.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,950.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,650.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,200.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
51,150.5,0.09593023554493305,-99.95203488222754,51874,22.130547094883756,-0.8993527953523606,-213.73348855456487,106.86674427728245,-196.23766384828184
|
||||
251,250.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,300.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,500.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,550.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,600.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,650.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,700.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,750.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,800.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,850.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,900.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,950.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,350.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,400.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,450.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,200.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,150.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,100.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
251,50.5,11.523950753177985,-94.23802462341101,21200,20.42924528301887,-0.4469101538511351,-243.2936639641133,121.64683198205665,-196.91841205526995
|
||||
451,400.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,50.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,100.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,150.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,200.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,250.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,300.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,350.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,600.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,950.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,900.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,850.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,800.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,750.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,700.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,650.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,550.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,500.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
451,450.5,3.181286343448621,-98.40935682827569,16171,19.460763094428298,-0.5248448670999485,-231.19737050648752,115.59868525324374,-197.18644343607008
|
||||
651,0.5,8.018313005737676,-95.99084349713117,13136,32.14068209500609,-0.8122633291075041,-232.77203302005913,116.38601651002955,-198.84681665444486
|
||||
951,0.5,2.5894181323552834,-98.70529093382235,9665,30.17071908949819,-0.8040188151074918,-230.08606629610864,115.04303314805433,-200.38794323355572
|
||||
1,50.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,0.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,800.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,300.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,100.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,750.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,700.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,650.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,600.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,550.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,500.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,400.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,450.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,250.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,850.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,900.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,950.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,200.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,150.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,350.5,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
601,0.5,3.1473924625026317,-98.42630376874868,13683,32.53672440254331,-0.749362829772547,-247.87957672599615,123.93978836299809,-206.57048841641773
|
||||
501,750.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,950.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,900.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,850.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,800.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,650.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,700.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,350.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,50.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,100.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,150.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,200.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,300.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,250.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,400.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,450.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,500.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,550.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
501,600.5,2.0680528205830533,-98.96597358970847,15381,19.29003315779208,-0.5182752037530948,-256.6618012939444,128.3309006469722,-207.84999655232338
|
||||
101,600.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,350.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,100.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,450.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,500.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,550.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,150.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,650.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,700.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,750.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,800.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,850.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,900.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,950.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,50.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,300.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,250.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,200.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,400.5,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
151,900.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,950.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,100.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,500.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,400.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,50.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,350.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,300.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,250.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,200.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,450.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,150.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,550.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,600.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,650.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,700.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,750.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,800.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
151,850.5,1.0319157374744798,-99.48404213126275,29301,20.337189857001466,-0.5489473920483456,-298.0937314350697,149.04686571753484,-225.30890340987077
|
||||
651,650.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,950.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,900.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,800.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,750.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,700.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,850.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,600.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,550.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,500.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,450.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,350.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,300.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,250.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,200.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,150.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,100.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,50.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
651,400.5,48.797350560727956,-75.60132471963603,13142,19.532795617105464,-0.14105832822928308,-535.6929638418737,267.84648192093687,-291.5712101951369
|
||||
951,450.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,900.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,50.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,350.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,300.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,250.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,200.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,150.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,100.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,500.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,850.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,550.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,400.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,650.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,700.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,750.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,800.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,600.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
951,950.5,79.30891953823279,-60.34554023088361,9672,19.24110835401158,-0.1026005452270189,-623.5131955721574,311.7565977860787,-310.98202500247083
|
||||
601,500.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,950.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,850.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,800.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,750.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,700.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,650.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,600.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,550.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,450.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,400.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,350.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,300.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,250.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,200.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,150.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,100.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,50.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
601,900.5,3.0597660326602996,-98.47011698366985,13680,19.1812865497076,-0.18459283577348395,-553.0425949461219,276.52129747306094,-321.90226899140043
|
||||
701,50.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,950.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,100.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,900.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,750.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,600.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,400.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,500.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,550.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,350.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,650.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,700.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,800.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,850.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,300.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,450.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,250.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,200.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
701,150.5,14.503672746728883,-92.74816362663556,12501,19.598432125429966,-0.15690585751773198,-643.6658567532712,321.8329283766356,-352.0973766181569
|
||||
801,50.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,100.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,150.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,200.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,300.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,350.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,450.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,500.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,400.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,950.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,900.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,850.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,800.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,750.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,700.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,650.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,600.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,550.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
801,250.5,118.75268396562913,-40.623658017185434,11418,19.451742862147487,-0.04049557086835689,-1080.0440346768748,540.0220173384374,-473.1272187383557
|
||||
851,600.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,950.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,900.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,800.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,750.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,700.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,650.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,550.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,500.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,450.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,400.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,350.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,300.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,250.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,200.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,150.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,100.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,50.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
851,850.5,316.5964254122197,58.298212706109844,10734,20.18818706912614,0.06259789806970045,-1385.5342422406081,692.7671211203041,-495.164309413297
|
||||
901,150.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,100.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,50.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,250.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,300.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,350.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,400.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,450.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,500.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,550.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,600.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,650.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,700.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,750.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,800.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,850.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,900.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,950.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
901,200.5,563.7908687274055,181.89543436370275,10270,19.561830574488802,0.09336862353854584,-1726.9726968393975,863.4863484196987,-507.77322088959374
|
||||
|
@@ -1,226 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,max_dd_u,max_dd_pct,stable_score
|
||||
275,800.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,750.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,150.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,200.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,250.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,300.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,350.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,400.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,450.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,500.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,550.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,600.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,650.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,700.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
275,100.0,63.55924228204109,-68.22037885897946,20470,20.058622374206156,-0.3140671553821636,-228.29076347059168,114.14538173529584,-163.3054901118021
|
||||
300,150.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,800.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,750.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,700.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,650.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,600.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,550.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,100.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,450.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,400.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,350.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,300.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,250.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,500.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,200.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
350,100.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,550.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,200.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,800.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,750.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,700.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,650.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,600.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,150.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,500.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,400.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,350.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,300.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,250.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
350,450.0,13.8291982163463,-93.08540089182685,17935,19.643155840535268,-0.5586854218498274,-197.30541575157045,98.65270787578523,-178.71179225465298
|
||||
225,350.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,100.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,150.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,200.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,250.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,300.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,550.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,400.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,500.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,600.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,650.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,700.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,750.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,800.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
225,450.0,17.642989940727276,-91.17850502963637,22436,20.61864860046354,-0.5167117069353269,-219.0165143940866,109.5082571970433,-184.98565127049494
|
||||
200,800.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,100.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,700.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,650.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,600.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,550.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,500.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,450.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,400.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,350.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,300.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,250.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,200.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,150.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
200,750.0,14.212906844859912,-92.89354657757005,24289,20.783070525752397,-0.795587271880617,-220.04371571904193,110.02185785952096,-190.45808012775422
|
||||
325,800.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,750.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,150.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,200.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,250.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,300.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,350.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,100.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,400.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,450.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,500.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,550.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,600.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,650.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
325,700.0,33.78902220405962,-83.10548889797019,18507,19.570973145296374,-0.3316849452234392,-262.39266677359524,131.19633338679762,-192.04277495008955
|
||||
400,750.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,100.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,700.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,650.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,600.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,550.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,500.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,450.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,350.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,300.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,250.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,200.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,150.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,400.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
400,800.0,3.336676356690486,-98.33166182165476,17187,19.369290743003432,-0.5990111734201886,-220.44329138515295,110.22164569257646,-193.6971124567582
|
||||
75,750.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,400.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,800.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,100.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,150.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,200.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,300.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,350.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,250.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,450.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,500.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,550.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,600.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,650.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
75,700.0,0.6511222814515799,-99.6744388592742,42066,21.69923453620501,-0.6722580565842263,-217.13993724528302,108.56996862264153,-194.59751043639815
|
||||
250,500.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,800.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,750.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,700.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,650.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,600.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,550.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,450.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,350.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,300.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,250.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,200.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,150.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,100.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
250,400.0,18.30016848529524,-90.84991575735238,21226,20.36653161217375,-0.35818251935373785,-255.28266600918914,127.64133300459457,-197.2611723932729
|
||||
375,150.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,500.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,250.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,300.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,350.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,400.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,450.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,700.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,550.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,600.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,650.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,750.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,800.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,100.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
375,200.0,5.937868901039763,-97.03106554948012,17595,19.30093776641091,-1.0463498951646035,-219.2851323144315,109.64256615721575,-197.30131721722796
|
||||
50,100.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,750.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,700.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,650.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,600.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,550.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,500.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,450.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,150.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,400.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,350.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,300.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,250.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,200.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
50,800.0,0.20229758805618503,-99.89885120597191,52558,22.158377411621448,-0.977563863811585,-230.59754074358267,115.29877037179132,-203.868633869144
|
||||
125,100.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,800.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,150.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,700.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,650.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,600.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,550.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,500.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,450.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,400.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,350.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,300.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,250.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,200.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
125,750.0,1.334577627395088,-99.33271118630246,32325,21.11987625676721,-0.4820672247830791,-256.24427480478045,128.12213740239022,-207.6152278056116
|
||||
150,100.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,150.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,250.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,300.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,350.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,400.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,450.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,500.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,550.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,600.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,650.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,700.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,750.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,800.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
150,200.0,0.7433418443261947,-99.62832907783691,29333,20.301367060989328,-0.5789198728571853,-271.1227462874435,135.56137314372174,-215.02446606710055
|
||||
100,800.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,750.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,400.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,650.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,600.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,550.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,500.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,450.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,700.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,350.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,250.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,200.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,150.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,100.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
100,300.0,6.102892798816175,-96.94855360059191,36266,21.471902057023108,-0.4248636518486794,-301.4147033407358,150.7073516703679,-222.6127987590704
|
||||
175,400.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,700.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,650.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,600.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,550.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,500.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,450.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,250.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,350.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,300.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,200.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,150.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,100.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,750.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
175,800.0,12.4581987388331,-93.77090063058345,26341,20.64462245169128,-0.43133451172875364,-347.90454143788213,173.95227071894107,-238.10873134648136
|
||||
|
@@ -1,177 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,max_dd_u,max_dd_pct,stable_score
|
||||
290,496.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,510.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,482.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,484.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,486.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,488.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,490.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,492.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,494.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,498.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,500.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,502.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,504.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,506.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,508.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
290,480.0,243.61657139606652,21.80828569803326,19616,20.39661500815661,0.053326400551732156,-206.99839245306777,103.49919622653387,-60.35115447657306
|
||||
294,510.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,492.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,508.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,482.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,484.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,486.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,488.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,490.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,480.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,494.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,506.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,498.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,500.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,502.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,504.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
294,496.0,199.68691854748374,-0.15654072625812887,19426,20.369607742201172,-0.00044065189971063414,-202.09482205003653,101.04741102501826,-80.99975736906927
|
||||
292,480.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,482.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,484.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,488.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,490.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,492.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,494.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,486.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,498.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,508.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,500.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,510.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,496.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,506.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,502.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
292,504.0,162.04741012047063,-18.976294939764685,19532,20.243702641818555,-0.06641787769617029,-211.29322924484535,105.64661462242269,-104.29060117005689
|
||||
296,494.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,506.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,504.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,502.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,500.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,498.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,496.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,492.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,490.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,488.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,484.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,482.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,480.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,510.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,486.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
296,508.0,75.00472410848523,-62.497637945757376,19304,20.33257355988396,-0.2675450843656243,-202.54566627473156,101.27283313736577,-146.72644546803747
|
||||
288,480.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,498.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,482.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,510.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,508.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,506.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,504.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,502.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,500.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,494.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,496.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,484.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,492.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,490.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,488.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
288,486.0,52.63249387410759,-73.68375306294621,19698,20.200020306630115,-0.2855012237698626,-205.4509978409444,102.7254989204722,-159.29016688456232
|
||||
298,486.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,488.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,490.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,492.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,494.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,502.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,498.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,500.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,482.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,504.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,508.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,510.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,484.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,506.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,496.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
298,480.0,62.78231086856529,-68.60884456571736,19222,20.46613255644574,-0.30377677070676196,-223.80979478207846,111.90489739103924,-161.7780837270299
|
||||
282,492.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,506.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,504.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,502.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,500.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,496.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,494.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,490.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,510.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,488.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,486.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,484.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,482.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,480.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,508.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
282,498.0,27.64626455726074,-86.17686772136963,19974,19.71563031941524,-0.3474516454590287,-198.63022266628306,99.31511133314153,-169.7983765333912
|
||||
286,484.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,496.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,508.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,486.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,488.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,490.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,492.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,494.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,482.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,498.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,480.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,502.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,504.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,510.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,506.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
286,500.0,27.843751242968498,-86.07812437851575,19814,19.854648228525285,-0.3933356352754516,-209.18363814803257,104.59181907401629,-174.4716072610342
|
||||
300,496.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,508.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,506.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,504.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,502.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,500.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,498.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,490.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,494.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,492.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,488.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,486.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,484.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,482.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,480.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
300,510.0,45.636613027184836,-77.18169348640758,19146,20.531703750130575,-0.4725797195498165,-233.02158222956754,116.51079111478377,-176.0612830128324
|
||||
280,482.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,510.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,484.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,486.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,488.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,490.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,492.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,494.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,496.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,498.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,500.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,502.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,504.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,506.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,508.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
280,480.0,65.63691589272076,-67.18154205363962,20060,20.004985044865403,-0.1793386285305311,-276.8334911466567,138.41674557332834,-180.06700205466868
|
||||
284,510.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,482.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,484.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,486.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,488.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,490.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,492.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,494.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,496.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,498.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,500.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,502.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,504.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,506.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,508.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
284,480.0,4.392776873192187,-97.8036115634039,19958,19.646257139993985,-0.6921390391247239,-215.20797390381568,107.60398695190784,-192.19246959442688
|
||||
|
@@ -1,85 +0,0 @@
|
||||
period,std,period_step,std_step,final_eq,ret_pct,n_trades,win_rate,sharpe,dd
|
||||
15,1.5,10,0.5,48.48092814523593,-75.75953592738203,39080,37.35926305015353,-0.13119006344299677,-697.4004561224623
|
||||
15,2.0,10,0.5,36.80358364077569,-81.59820817961216,40087,34.42263077805772,-0.1511470195866686,-639.962755073432
|
||||
15,2.5,10,0.5,15.801154047365497,-92.09942297631726,41183,31.27746885850958,-0.2043489750410225,-608.2984283591458
|
||||
15,3.0,10,0.5,10.259192622590602,-94.8704036887047,42341,28.449965754233485,-0.2628767129294784,-456.8505810537002
|
||||
15,3.5,10,0.5,10.780007201280425,-94.60999639935979,43317,26.490754207355078,-0.3519748652128244,-315.69577713194894
|
||||
15,4.0,10,0.5,6.762275289834179,-96.61886235508291,43780,25.48423937871174,-0.44416507239126524,-220.0935343290423
|
||||
25,1.5,10,0.5,15.185351901530389,-92.4073240492348,29514,35.12909127871519,-0.4186681901048435,-273.0478151000914
|
||||
25,2.0,10,0.5,11.75114974910751,-94.12442512544625,30273,31.972384633171476,-0.4746326737292537,-221.26735265117904
|
||||
25,2.5,10,0.5,22.991590869749515,-88.50420456512524,30921,29.355454222049737,-0.48801085648391873,-209.49673224901383
|
||||
25,3.0,10,0.5,32.34220252441412,-83.82889873779294,31558,27.05177767919387,-0.3753596284992899,-198.35054814330795
|
||||
25,3.5,10,0.5,21.650159567897365,-89.17492021605132,32117,25.503627362456022,-0.39733883257515135,-218.6979255650799
|
||||
25,4.0,10,0.5,31.860026972198018,-84.06998651390099,32563,24.432638270429628,-0.29302419118789713,-239.82444497645355
|
||||
35,1.5,10,0.5,4.101201077511393,-97.9493994612443,24993,33.06525827231625,-0.8217792504548787,-245.46414083107442
|
||||
35,2.0,10,0.5,5.823800486102119,-97.08809975694894,25587,29.866729198421073,-0.7426470214087769,-286.4406699983145
|
||||
35,2.5,10,0.5,5.192863521634847,-97.40356823918258,26051,27.265747955932596,-0.7730880094730899,-266.1512752758687
|
||||
35,3.0,10,0.5,3.4579745963381434,-98.27101270183093,26599,25.33553893003496,-0.4636391572882053,-387.52773267113974
|
||||
35,3.5,10,0.5,3.5341183807460554,-98.23294080962697,27034,24.058592883036177,-0.5140569048308203,-362.5140804337234
|
||||
35,4.0,10,0.5,5.611416981128725,-97.19429150943564,27353,23.255218805981063,-0.3312688921086745,-564.2468214116803
|
||||
45,1.5,10,0.5,14.632970646405713,-92.68351467679715,21687,32.23590169225803,-0.6509354804642926,-235.74612368411292
|
||||
45,2.0,10,0.5,31.77948296599959,-84.1102585170002,22150,29.16027088036117,-0.4284165792843191,-269.6776110433831
|
||||
45,2.5,10,0.5,172.40643379727345,-13.796783101363275,22525,26.81908990011099,-0.043299240462867164,-256.7844732672258
|
||||
45,3.0,10,0.5,41.377840288991365,-79.31107985550432,22953,25.077331939180063,-0.34899879597984057,-296.6696402361111
|
||||
45,3.5,10,0.5,74.54221936958507,-62.728890315207465,23241,24.052321328686375,-0.2535287445141998,-305.77109805667635
|
||||
45,4.0,10,0.5,197.09642100514674,-1.4517894974266312,23514,23.394573445606873,-0.003849297905947261,-346.25462265446606
|
||||
55,1.5,10,0.5,16.079473075595672,-91.96026346220216,19596,31.02163706878955,-0.6486187784866569,-231.27610776888795
|
||||
55,2.0,10,0.5,66.87668346352854,-66.56165826823573,19950,28.25062656641604,-0.33475319699218586,-252.4384445697346
|
||||
55,2.5,10,0.5,103.71180081815875,-48.144099590920625,20315,26.059561900073835,-0.23234055949460508,-230.74049378986336
|
||||
55,3.0,10,0.5,30.706542292630328,-84.64672885368483,20620,24.539282250242483,-0.5332739163457259,-280.4316033186037
|
||||
55,3.5,10,0.5,19.94144489188811,-90.02927755405594,20900,23.535885167464116,-0.4556365722046084,-337.09291756128977
|
||||
55,4.0,10,0.5,35.10054549461695,-82.44972725269153,21094,22.88802503081445,-0.41982398626910356,-291.17676700223814
|
||||
65,1.5,10,0.5,40.332952988339386,-79.8335235058303,17772,30.31172631105109,-0.37260054288227523,-282.40115704942934
|
||||
65,2.0,10,0.5,50.70752436109092,-74.64623781945454,18112,27.49006183745583,-0.4263815652152113,-215.11807270889656
|
||||
65,2.5,10,0.5,208.09642220895924,4.04821110447962,18381,25.55356074207062,0.013052853027704602,-225.3544321606581
|
||||
65,3.0,10,0.5,69.17941178529537,-65.41029410735231,18603,24.27565446433371,-0.3475091632420777,-267.8026072891796
|
||||
65,3.5,10,0.5,205.87085569261697,2.9354278463084853,18841,23.459476673212677,0.007794090142701672,-365.7703099142676
|
||||
65,4.0,10,0.5,295.45309206039354,47.72654603019677,19007,22.812647971799862,0.07753257373956958,-359.300057037728
|
||||
75,1.5,10,0.5,10.983713106190567,-94.50814344690471,16303,29.761393608538306,-0.7512444028811992,-213.15198872906865
|
||||
75,2.0,10,0.5,13.482406589107267,-93.25879670544637,16620,27.081829121540313,-0.9839660957936669,-208.4588882425938
|
||||
75,2.5,10,0.5,89.942884051582,-55.028557974209,16868,25.43277211287645,-0.36375113759430683,-211.31503916370698
|
||||
75,3.0,10,0.5,52.241254269813616,-73.87937286509319,17087,24.28747000643764,-0.5981765475484465,-226.7492413952581
|
||||
75,3.5,10,0.5,83.14852160988522,-58.42573919505739,17305,23.449869979774633,-0.3267893523857235,-230.606510358243
|
||||
75,4.0,10,0.5,119.23474995074422,-40.38262502462789,17460,22.82359679266896,-0.20534903490050124,-207.9658889220549
|
||||
85,1.5,10,0.5,7.349676583985419,-96.32516170800729,15179,28.89518413597734,-0.8318675275223718,-239.72913883031944
|
||||
85,2.0,10,0.5,18.984025431376047,-90.50798728431198,15430,26.629941672067403,-0.7833690422200502,-235.6042347672767
|
||||
85,2.5,10,0.5,57.167618532561264,-71.41619073371936,15664,24.86593462717058,-0.506936066912954,-235.03840225356828
|
||||
85,3.0,10,0.5,35.58954831791428,-82.20522584104286,15844,23.54834637717748,-0.6040070996108049,-234.6785523683346
|
||||
85,3.5,10,0.5,63.4069876968914,-68.2965061515543,16023,22.72982587530425,-0.3382080473039228,-295.9762241559409
|
||||
85,4.0,10,0.5,88.47696456769705,-55.761517716151474,16178,22.147360613178392,-0.20193042953347687,-316.4817254821683
|
||||
95,1.5,10,0.5,10.405821375357965,-94.79708931232102,14416,28.24639289678135,-0.7837973560897118,-270.90798093738533
|
||||
95,2.0,10,0.5,13.815903557653941,-93.09204822117303,14665,25.741561541084213,-0.8765580107174691,-263.12113920477657
|
||||
95,2.5,10,0.5,25.71688278154052,-87.14155860922975,14858,23.832278906986133,-0.6723450672405393,-274.7658311337973
|
||||
95,3.0,10,0.5,19.356147709815595,-90.3219261450922,15049,22.652667951358893,-0.726365789425801,-269.1728308007388
|
||||
95,3.5,10,0.5,25.893289102448367,-87.05335544877582,15185,22.081000987816925,-0.6885792508968731,-278.83350717325703
|
||||
95,4.0,10,0.5,34.075610133322904,-82.96219493333855,15310,21.606792945787067,-0.541211763961438,-255.9863145165913
|
||||
105,1.5,10,0.5,11.125302869126308,-94.43734856543685,13778,27.340688053418493,-0.6600706399042071,-269.35929952511646
|
||||
105,2.0,10,0.5,10.200827786542048,-94.89958610672898,14010,24.753747323340473,-0.6866326886722063,-258.9303568592826
|
||||
105,2.5,10,0.5,9.579821710127378,-95.2100891449363,14163,23.151874602838383,-0.5987791032180315,-274.5676511660392
|
||||
105,3.0,10,0.5,4.3087765598937855,-97.84561172005311,14346,21.971281193364003,-0.6400093736324544,-278.89884430849224
|
||||
105,3.5,10,0.5,13.027667066344636,-93.48616646682768,14469,21.528785679729076,-0.5524535568435962,-284.41705640185387
|
||||
105,4.0,10,0.5,13.547757879797267,-93.22612106010136,14605,21.027045532351934,-0.3485713143577096,-412.93208491456176
|
||||
115,1.5,10,0.5,29.66121970936215,-85.16939014531893,13296,27.030685920577618,-0.45172471596332026,-235.02860926589415
|
||||
115,2.0,10,0.5,14.293240724692515,-92.85337963765375,13517,24.4432936302434,-0.568103750659441,-232.03742432596695
|
||||
115,2.5,10,0.5,11.574164514147391,-94.21291774292631,13681,22.87113515093926,-0.4778439718297106,-259.1164560473074
|
||||
115,3.0,10,0.5,9.287076704988312,-95.35646164750584,13830,21.800433839479393,-0.44032821158432417,-275.63595981438704
|
||||
115,3.5,10,0.5,21.398944760292235,-89.30052761985388,13960,21.181948424068768,-0.287420801784064,-317.14370796930467
|
||||
115,4.0,10,0.5,60.40509496475816,-69.79745251762091,14063,20.75659532105525,-0.09411868706769629,-829.2395563032217
|
||||
15,1.5,20,1.0,48.48092814523593,-75.75953592738203,39080,37.35926305015353,-0.13119006344299677,-697.4004561224623
|
||||
15,2.5,20,1.0,15.801154047365497,-92.09942297631726,41183,31.27746885850958,-0.2043489750410225,-608.2984283591458
|
||||
15,3.5,20,1.0,10.780007201280425,-94.60999639935979,43317,26.490754207355078,-0.3519748652128244,-315.69577713194894
|
||||
35,1.5,20,1.0,4.101201077511393,-97.9493994612443,24993,33.06525827231625,-0.8217792504548787,-245.46414083107442
|
||||
35,2.5,20,1.0,5.192863521634847,-97.40356823918258,26051,27.265747955932596,-0.7730880094730899,-266.1512752758687
|
||||
35,3.5,20,1.0,3.5341183807460554,-98.23294080962697,27034,24.058592883036177,-0.5140569048308203,-362.5140804337234
|
||||
55,1.5,20,1.0,16.079473075595672,-91.96026346220216,19596,31.02163706878955,-0.6486187784866569,-231.27610776888795
|
||||
55,2.5,20,1.0,103.71180081815875,-48.144099590920625,20315,26.059561900073835,-0.23234055949460508,-230.74049378986336
|
||||
55,3.5,20,1.0,19.94144489188811,-90.02927755405594,20900,23.535885167464116,-0.4556365722046084,-337.09291756128977
|
||||
75,1.5,20,1.0,10.983713106190567,-94.50814344690471,16303,29.761393608538306,-0.7512444028811992,-213.15198872906865
|
||||
75,2.5,20,1.0,89.942884051582,-55.028557974209,16868,25.43277211287645,-0.36375113759430683,-211.31503916370698
|
||||
75,3.5,20,1.0,83.14852160988522,-58.42573919505739,17305,23.449869979774633,-0.3267893523857235,-230.606510358243
|
||||
95,1.5,20,1.0,10.405821375357965,-94.79708931232102,14416,28.24639289678135,-0.7837973560897118,-270.90798093738533
|
||||
95,2.5,20,1.0,25.71688278154052,-87.14155860922975,14858,23.832278906986133,-0.6723450672405393,-274.7658311337973
|
||||
95,3.5,20,1.0,25.893289102448367,-87.05335544877582,15185,22.081000987816925,-0.6885792508968731,-278.83350717325703
|
||||
115,1.5,20,1.0,29.66121970936215,-85.16939014531893,13296,27.030685920577618,-0.45172471596332026,-235.02860926589415
|
||||
115,2.5,20,1.0,11.574164514147391,-94.21291774292631,13681,22.87113515093926,-0.4778439718297106,-259.1164560473074
|
||||
115,3.5,20,1.0,21.398944760292235,-89.30052761985388,13960,21.181948424068768,-0.287420801784064,-317.14370796930467
|
||||
|
@@ -1,85 +0,0 @@
|
||||
period,std,period_step,std_step,final_eq,ret_pct,n_trades,win_rate,sharpe,dd
|
||||
15,1.5,10,0.5,11.855192165034223,-94.07240391748289,19708,37.77146336513091,-0.6235222422995786,-284.85443596149724
|
||||
15,2.0,10,0.5,8.753359275898845,-95.62332036205058,20195,35.246348105966824,-0.7569673183718936,-263.2971212724792
|
||||
15,2.5,10,0.5,9.803525418208569,-95.09823729089571,20708,32.639559590496425,-0.4752350103234552,-277.4245022765702
|
||||
15,3.0,10,0.5,3.412780495824038,-98.29360975208797,21275,29.83783783783784,-0.511480053076418,-338.8119559579532
|
||||
15,3.5,10,0.5,6.198174773117584,-96.9009126134412,21716,27.73531037023393,-0.5128705717437164,-313.48715997416474
|
||||
15,4.0,10,0.5,20.69226809284817,-89.65386595357592,21948,26.571897211591033,-0.32674764882357116,-403.7400501883454
|
||||
25,1.5,10,0.5,5.836491805389524,-97.08175409730524,15020,35.22636484687084,-1.2249549689127937,-204.09205005290724
|
||||
25,2.0,10,0.5,12.081211963616443,-93.95939401819177,15311,32.577885180589114,-0.8898463515682434,-222.54350054966164
|
||||
25,2.5,10,0.5,19.914003433039493,-90.04299828348026,15659,30.161568427102626,-0.7895621638697325,-209.1994100018314
|
||||
25,3.0,10,0.5,9.425303324148096,-95.28734833792595,15976,28.067100650976464,-0.7300825335867858,-243.96197406916642
|
||||
25,3.5,10,0.5,5.855289614688857,-97.07235519265558,16253,26.55509752045776,-0.7085359518779542,-278.87154684168763
|
||||
25,4.0,10,0.5,19.200810578463244,-90.39959471076838,16495,25.407699302819037,-0.5772741076812997,-259.23352233813335
|
||||
35,1.5,10,0.5,28.21206634200495,-85.89396682899752,12085,34.73727761688043,-0.647009511262925,-223.61914840751774
|
||||
35,2.0,10,0.5,55.70970922376068,-72.14514538811966,12306,31.569965870307165,-0.39673167475158405,-248.8668646132019
|
||||
35,2.5,10,0.5,104.49489503334085,-47.75255248332957,12520,29.249201277955272,-0.235045001015176,-230.00122971261297
|
||||
35,3.0,10,0.5,56.342667499287515,-71.82866625035624,12752,27.40746549560853,-0.3682997075298054,-252.50663799518358
|
||||
35,3.5,10,0.5,107.45577769881035,-46.272111150594824,12984,26.070548367221196,-0.11749439894681797,-338.48701280893147
|
||||
35,4.0,10,0.5,247.34481984104798,23.67240992052399,13141,25.34053724982878,0.056546089336753404,-264.63887018550304
|
||||
45,1.5,10,0.5,13.15646879250955,-93.42176560374523,10385,34.10688493018777,-0.8149857539481573,-271.2863404459294
|
||||
45,2.0,10,0.5,11.80829464190141,-94.0958526790493,10598,31.307793923381773,-0.8912043997401211,-297.47872205043245
|
||||
45,2.5,10,0.5,19.14157030465441,-90.4292148476728,10763,28.96032704636254,-0.6910660598831703,-311.4102276700665
|
||||
45,3.0,10,0.5,8.655841919185013,-95.6720790404075,10963,27.091124692146312,-0.7225121606690603,-326.33298667933167
|
||||
45,3.5,10,0.5,11.91144901552033,-94.04427549223983,11138,26.08188184593284,-0.4970305469345722,-405.3189086446707
|
||||
45,4.0,10,0.5,9.249110224038603,-95.3754448879807,11280,25.407801418439718,-0.41890741502953877,-461.95310334212525
|
||||
55,1.5,10,0.5,18.500960550013694,-90.74951972499315,9480,32.07805907172996,-0.8630311046085801,-217.10439532674513
|
||||
55,2.0,10,0.5,17.84513535296389,-91.07743232351805,9674,29.0262559437668,-0.8346686137946728,-233.79233332465478
|
||||
55,2.5,10,0.5,11.28795717324628,-94.35602141337687,9829,26.899989826025028,-0.7157999288001704,-250.0470782402587
|
||||
55,3.0,10,0.5,6.758810067617017,-96.62059496619149,9991,25.3628265438895,-0.7901176121561565,-250.49463359988766
|
||||
55,3.5,10,0.5,25.48546333282715,-87.25726833358642,10108,24.39651760981401,-0.4341398096630764,-238.0657728760076
|
||||
55,4.0,10,0.5,29.947033814854976,-85.0264830925725,10226,23.714062194406416,-0.22621028615725514,-308.2508768025071
|
||||
65,1.5,10,0.5,70.01498211022908,-64.99250894488546,8797,31.41980220529726,-0.2472823034078909,-360.22920891906733
|
||||
65,2.0,10,0.5,43.99985728425265,-78.00007135787368,8982,28.635047873524826,-0.31226067485305287,-344.43297562483747
|
||||
65,2.5,10,0.5,11.141230088157057,-94.42938495592148,9139,26.326731589889484,-0.5877699195318181,-211.49453353955298
|
||||
65,3.0,10,0.5,23.243485816159232,-88.37825709192039,9249,25.14866472051033,-0.4199885865099326,-225.22292758760577
|
||||
65,3.5,10,0.5,30.046303723946345,-84.97684813802682,9351,24.371724949203294,-0.19507372955886226,-583.9077968841493
|
||||
65,4.0,10,0.5,72.17368768595833,-63.913156157020836,9438,23.924560288196652,-0.1043229443150086,-677.8833873149147
|
||||
75,1.5,10,0.5,28.878912457463993,-85.560543771268,8286,30.762732319575186,-0.712313061605688,-183.61532124127612
|
||||
75,2.0,10,0.5,14.421291378727464,-92.78935431063627,8483,27.77319344571496,-0.8044560280829893,-201.50595876109264
|
||||
75,2.5,10,0.5,4.806399583771505,-97.59680020811425,8610,26.10917537746806,-0.9313204289980628,-210.20790025893479
|
||||
75,3.0,10,0.5,25.508786019142804,-87.2456069904286,8727,24.876819067262517,-0.49409805140782975,-215.2630427100224
|
||||
75,3.5,10,0.5,16.653002578165868,-91.67349871091707,8830,23.997734994337485,-0.38357581879982244,-240.9197266621369
|
||||
75,4.0,10,0.5,66.21022764054645,-66.89488617972677,8918,23.716079838528817,-0.1250596640250747,-698.6447378168509
|
||||
85,1.5,10,0.5,14.951030134591296,-92.52448493270435,7845,29.547482472912684,-0.8953650772108298,-197.64150282305923
|
||||
85,2.0,10,0.5,3.498277467815169,-98.25086126609241,8019,26.66167851353037,-1.0458276339206454,-214.15579835858927
|
||||
85,2.5,10,0.5,1.7737078631867869,-99.1131460684066,8156,25.0,-1.0282285179369723,-213.61753481478925
|
||||
85,3.0,10,0.5,8.719403599603398,-95.6402982001983,8248,24.114936954413192,-0.8211787209745792,-211.61074718573
|
||||
85,3.5,10,0.5,8.943987615516464,-95.52800619224176,8328,23.499039385206533,-0.7549418677035037,-215.98611912681693
|
||||
85,4.0,10,0.5,23.1770265836258,-88.4114867081871,8401,23.021068920366623,-0.3729888932052693,-212.96678953288284
|
||||
95,1.5,10,0.5,24.927710059813517,-87.53614497009325,7408,29.306155507559396,-0.9520827117838521,-190.41061079110813
|
||||
95,2.0,10,0.5,16.06239432079733,-91.96880283960134,7527,26.69058057659094,-0.9398549359933428,-198.34239467123092
|
||||
95,2.5,10,0.5,21.973918801798945,-89.01304059910052,7633,25.153936853137694,-0.7146688539676412,-194.44238080585185
|
||||
95,3.0,10,0.5,45.828446580797696,-77.08577670960115,7709,24.361136334154885,-0.43326307968690586,-186.11539161963253
|
||||
95,3.5,10,0.5,60.57066438340541,-69.71466780829729,7806,23.7253394824494,-0.27195008259729253,-247.0975110088031
|
||||
95,4.0,10,0.5,143.79458015304226,-28.10270992347887,7872,23.310467479674795,-0.05263662190109353,-598.1389379467043
|
||||
105,1.5,10,0.5,16.454388894063115,-91.77280555296844,6991,28.92290087255042,-0.8170686782691946,-199.83483128223048
|
||||
105,2.0,10,0.5,17.491042243515682,-91.25447887824215,7107,26.72013507809202,-0.6527938090965348,-198.51731255242447
|
||||
105,2.5,10,0.5,13.7537652656679,-93.12311736716605,7193,25.079938829417493,-0.5618187399818152,-219.0288186814003
|
||||
105,3.0,10,0.5,26.65257798217648,-86.67371100891177,7272,24.284928492849282,-0.31235378013631904,-405.153180534651
|
||||
105,3.5,10,0.5,22.934969797555294,-88.53251510122236,7337,23.72904456862478,-0.3120317109901497,-344.1527116262127
|
||||
105,4.0,10,0.5,52.74918908477296,-73.62540545761352,7389,23.318446339152796,-0.13089661662245716,-768.1307536755826
|
||||
115,1.5,10,0.5,6.321018890365941,-96.83949055481703,6643,28.631642330272467,-1.0099053237536952,-206.58136634538567
|
||||
115,2.0,10,0.5,8.586175448038853,-95.70691227598057,6751,26.307213746111685,-0.7835254269427628,-220.54728033133756
|
||||
115,2.5,10,0.5,10.376641254511714,-94.81167937274414,6839,24.681971048398886,-0.6364432358639216,-218.41178219528035
|
||||
115,3.0,10,0.5,9.20546544012515,-95.39726727993742,6921,23.81158792082069,-0.594131818951341,-207.12155382705376
|
||||
115,3.5,10,0.5,7.630256305421915,-96.18487184728905,6966,23.16968130921619,-0.5844894984911244,-221.95436668671815
|
||||
115,4.0,10,0.5,7.8321546288246875,-96.08392268558765,7019,22.838011112694115,-0.44419049676595773,-229.18136807602502
|
||||
15,1.5,20,1.0,11.855192165034223,-94.07240391748289,19708,37.77146336513091,-0.6235222422995786,-284.85443596149724
|
||||
15,2.5,20,1.0,9.803525418208569,-95.09823729089571,20708,32.639559590496425,-0.4752350103234552,-277.4245022765702
|
||||
15,3.5,20,1.0,6.198174773117584,-96.9009126134412,21716,27.73531037023393,-0.5128705717437164,-313.48715997416474
|
||||
35,1.5,20,1.0,28.21206634200495,-85.89396682899752,12085,34.73727761688043,-0.647009511262925,-223.61914840751774
|
||||
35,2.5,20,1.0,104.49489503334085,-47.75255248332957,12520,29.249201277955272,-0.235045001015176,-230.00122971261297
|
||||
35,3.5,20,1.0,107.45577769881035,-46.272111150594824,12984,26.070548367221196,-0.11749439894681797,-338.48701280893147
|
||||
55,1.5,20,1.0,18.500960550013694,-90.74951972499315,9480,32.07805907172996,-0.8630311046085801,-217.10439532674513
|
||||
55,2.5,20,1.0,11.28795717324628,-94.35602141337687,9829,26.899989826025028,-0.7157999288001704,-250.0470782402587
|
||||
55,3.5,20,1.0,25.48546333282715,-87.25726833358642,10108,24.39651760981401,-0.4341398096630764,-238.0657728760076
|
||||
75,1.5,20,1.0,28.878912457463993,-85.560543771268,8286,30.762732319575186,-0.712313061605688,-183.61532124127612
|
||||
75,2.5,20,1.0,4.806399583771505,-97.59680020811425,8610,26.10917537746806,-0.9313204289980628,-210.20790025893479
|
||||
75,3.5,20,1.0,16.653002578165868,-91.67349871091707,8830,23.997734994337485,-0.38357581879982244,-240.9197266621369
|
||||
95,1.5,20,1.0,24.927710059813517,-87.53614497009325,7408,29.306155507559396,-0.9520827117838521,-190.41061079110813
|
||||
95,2.5,20,1.0,21.973918801798945,-89.01304059910052,7633,25.153936853137694,-0.7146688539676412,-194.44238080585185
|
||||
95,3.5,20,1.0,60.57066438340541,-69.71466780829729,7806,23.7253394824494,-0.27195008259729253,-247.0975110088031
|
||||
115,1.5,20,1.0,6.321018890365941,-96.83949055481703,6643,28.631642330272467,-1.0099053237536952,-206.58136634538567
|
||||
115,2.5,20,1.0,10.376641254511714,-94.81167937274414,6839,24.681971048398886,-0.6364432358639216,-218.41178219528035
|
||||
115,3.5,20,1.0,7.630256305421915,-96.18487184728905,6966,23.16968130921619,-0.5844894984911244,-221.95436668671815
|
||||
|
@@ -1,85 +0,0 @@
|
||||
period,std,period_step,std_step,final_eq,ret_pct,n_trades,win_rate,sharpe,dd
|
||||
15,1.5,10,0.5,0.00047035550350871735,-99.99976482224825,111588,34.390794709108505,-1.0318566813340773,-202.38278172487549
|
||||
15,2.0,10,0.5,0.0003682458531207367,-99.99981587707344,114983,31.99951297148274,-1.0517447664263284,-207.00926699542296
|
||||
15,2.5,10,0.5,0.00013517790996149244,-99.99993241104502,118944,28.41841538875437,-1.066843300280861,-202.97365018191613
|
||||
15,3.0,10,0.5,2.7372158257389396e-05,-99.99998631392087,123018,25.341819896275343,-1.0375855233149691,-203.97454793219083
|
||||
15,3.5,10,0.5,7.669217720507588e-06,-99.99999616539114,125514,23.555141259142406,-1.0295116405913771,-199.9999926321606
|
||||
15,4.0,10,0.5,1.3373229853368135e-06,-99.9999993313385,126581,22.765659933165324,-1.0295288560138371,-199.99999869386636
|
||||
25,1.5,10,0.5,0.0017630495668879283,-99.99911847521656,84946,32.794952087208344,-1.293729889070109,-207.35144513711467
|
||||
25,2.0,10,0.5,0.0021262699573547064,-99.99893686502132,87416,29.61471584149355,-1.0769254917914826,-207.3230697431621
|
||||
25,2.5,10,0.5,0.019232972624929533,-99.99038351368753,89753,26.640892226443686,-0.7661744780665724,-282.9426200919278
|
||||
25,3.0,10,0.5,0.008324747423078871,-99.99583762628846,92114,24.08537247323968,-0.7701299195822682,-299.3619517674745
|
||||
25,3.5,10,0.5,0.0021990833038556443,-99.99890045834807,93887,22.321514160639918,-0.8594065630854474,-249.20948309430867
|
||||
25,4.0,10,0.5,0.0006738628522136209,-99.9996630685739,95030,21.376407450278858,-0.7576562230433436,-291.98051861072224
|
||||
35,1.5,10,0.5,0.02089403178818467,-99.98955298410591,72581,31.327757953183337,-1.3309409260309297,-202.064386268866
|
||||
35,2.0,10,0.5,0.04911133191480452,-99.97544433404259,74592,27.870280995280993,-1.1788018107980864,-208.19318228650735
|
||||
35,2.5,10,0.5,0.11339157723591194,-99.94330421138204,76304,25.05897462780457,-0.9891952503585197,-207.81448051914438
|
||||
35,3.0,10,0.5,0.11968128814263472,-99.94015935592869,77841,22.939068100358423,-0.8139159656385352,-221.5376495451823
|
||||
35,3.5,10,0.5,0.01984485951274019,-99.99007757024363,79196,21.3861811202586,-1.060687386107305,-230.0395662353739
|
||||
35,4.0,10,0.5,0.012363126554740892,-99.99381843672263,80118,20.540952095658906,-0.9081750231226203,-210.33305195479676
|
||||
45,1.5,10,0.5,0.06804612639104632,-99.96597693680448,63854,30.02474394712939,-1.129416637835604,-199.9327591253644
|
||||
45,2.0,10,0.5,0.08115056060726777,-99.95942471969637,65616,26.502682272616436,-0.9579345891598869,-236.4862054858405
|
||||
45,2.5,10,0.5,0.13538296683662002,-99.93230851658168,66915,23.782410520809982,-0.7075702450197628,-271.08910187835227
|
||||
45,3.0,10,0.5,0.09969712703152057,-99.95015143648423,68156,21.86307881917953,-0.6451318177267918,-295.9747288571139
|
||||
45,3.5,10,0.5,0.09210686086215344,-99.95394656956893,69136,20.51174496644295,-0.45887396866107066,-429.20953221378915
|
||||
45,4.0,10,0.5,0.08145389297753457,-99.95927305351124,69869,19.75554251527859,-0.5082958377978372,-369.88002808773837
|
||||
55,1.5,10,0.5,0.055918483619185166,-99.9720407581904,57008,29.073112545607632,-1.135641198208353,-205.86923282780617
|
||||
55,2.0,10,0.5,0.09137017136829197,-99.95431491431586,58485,25.582628024279728,-1.0618048081366185,-210.73187077440718
|
||||
55,2.5,10,0.5,0.15140570229310388,-99.92429714885346,59613,23.10402093503095,-0.9409011616127569,-214.74837340120598
|
||||
55,3.0,10,0.5,0.19074157711726422,-99.90462921144137,60601,21.458391775713274,-0.7210538774678307,-228.38551279326268
|
||||
55,3.5,10,0.5,0.266445127868473,-99.86677743606576,61404,20.28043775649795,-0.564524044727798,-243.9096107161547
|
||||
55,4.0,10,0.5,0.26774779880824356,-99.86612610059588,62052,19.62064075291691,-0.48626128008345376,-293.3629257317168
|
||||
65,1.5,10,0.5,0.04907015568532271,-99.97546492215734,52899,28.14230892833513,-1.1576453239098663,-199.95103322806455
|
||||
65,2.0,10,0.5,0.09845537769869178,-99.95077231115066,54133,24.896089261633385,-0.9612794470061556,-201.98589389095932
|
||||
65,2.5,10,0.5,0.14242537277814582,-99.92878731361093,55056,22.54068584713746,-1.0481822765622575,-217.92289691106637
|
||||
65,3.0,10,0.5,0.21445168112609417,-99.89277415943695,55869,20.963324920796865,-0.9157350431731428,-217.07298744964024
|
||||
65,3.5,10,0.5,0.11086043832824247,-99.94456978083588,56546,19.916528136384535,-0.889029811935134,-208.98004563743567
|
||||
65,4.0,10,0.5,0.13368760731622228,-99.93315619634188,57073,19.287579065407463,-0.6873579796541707,-224.09354725742426
|
||||
75,1.5,10,0.5,0.4210843943579031,-99.78945780282105,49258,27.441227820861585,-0.8547303664345759,-251.85239328153438
|
||||
75,2.0,10,0.5,0.4517921443623139,-99.77410392781884,50455,24.164106629670005,-0.6584921622071749,-294.1643492057131
|
||||
75,2.5,10,0.5,0.6840327479120798,-99.65798362604396,51222,22.05302409121081,-0.8751293718771636,-251.58583670556357
|
||||
75,3.0,10,0.5,1.0493683175491069,-99.47531584122545,51928,20.643968571868744,-0.8506313317219855,-240.16427918824203
|
||||
75,3.5,10,0.5,0.3002907430136643,-99.84985462849316,52522,19.66604470507597,-0.9150694199211542,-228.47263285477916
|
||||
75,4.0,10,0.5,0.5645103894047913,-99.7177448052976,52944,19.082426715019643,-0.5813832054508865,-339.28451518453875
|
||||
85,1.5,10,0.5,0.02561939348725843,-99.98719030325637,46669,26.347254065868135,-1.3394559452187687,-199.97440286154722
|
||||
85,2.0,10,0.5,0.027562363422181876,-99.9862188182889,47656,23.30871243914722,-1.6035376159684314,-199.97246157942988
|
||||
85,2.5,10,0.5,0.06710236812371269,-99.96644881593815,48349,21.363420132784547,-1.3159475743389093,-200.5606978611736
|
||||
85,3.0,10,0.5,0.06029185809930138,-99.96985407095035,48950,20.036772216547497,-1.1509308662867805,-202.6717296280356
|
||||
85,3.5,10,0.5,0.054195810082062756,-99.97290209495897,49451,19.18869183636327,-0.9659646629970992,-203.09667435496505
|
||||
85,4.0,10,0.5,0.0936191651022354,-99.95319041744888,49870,18.600360938439945,-0.6387572048825219,-267.1308034697755
|
||||
95,1.5,10,0.5,0.0978095706248613,-99.95109521468757,44232,26.064839934888766,-1.6362452282909372,-203.01129606801078
|
||||
95,2.0,10,0.5,0.09155064140685701,-99.95422467929657,45102,22.967939337501665,-1.4580521919101679,-199.97896885909833
|
||||
95,2.5,10,0.5,0.13353975402701052,-99.9332301229865,45683,21.053783683208195,-1.2834053444224973,-205.97722633464866
|
||||
95,3.0,10,0.5,0.11922415974801172,-99.940387920126,46243,19.793266007828212,-1.3127594636083004,-209.93002471500728
|
||||
95,3.5,10,0.5,0.08490721133074189,-99.95754639433463,46731,19.066572510753033,-0.9476179854957475,-209.6450016389805
|
||||
95,4.0,10,0.5,0.12790328947294202,-99.93604835526352,47067,18.550151911105445,-0.751921932535252,-215.34297603401436
|
||||
105,1.5,10,0.5,0.3107871173165156,-99.84460644134174,42457,25.289116046823846,-1.4384875040917713,-207.99320092200065
|
||||
105,2.0,10,0.5,0.4348322314181436,-99.78258388429093,43239,22.33862947801753,-1.3783320940275678,-207.42263371527645
|
||||
105,2.5,10,0.5,0.6519741878688033,-99.6740129060656,43819,20.49111116182478,-1.3838762571726289,-211.58787241883724
|
||||
105,3.0,10,0.5,0.6272088870954825,-99.68639555645225,44317,19.258975111131168,-1.1669183306576214,-214.76037206815255
|
||||
105,3.5,10,0.5,0.48414610299791855,-99.75792694850104,44756,18.587451961748144,-1.097312680815389,-218.08694275448883
|
||||
105,4.0,10,0.5,0.9238007100788466,-99.53809964496058,45088,18.071327182398864,-0.766833644617431,-228.08378402449856
|
||||
115,1.5,10,0.5,0.2519762013578816,-99.87401189932106,40603,24.907026574391054,-1.2068532641982856,-203.55972685901094
|
||||
115,2.0,10,0.5,0.24640178809971616,-99.87679910595014,41362,21.938010734490597,-1.1265561819825711,-205.1211003357915
|
||||
115,2.5,10,0.5,0.5104894066647994,-99.7447552966676,41895,20.179018976011456,-1.2283831092133597,-207.03468168503625
|
||||
115,3.0,10,0.5,0.3267094948301192,-99.83664525258494,42350,19.053128689492326,-0.9353309323210536,-214.927636848525
|
||||
115,3.5,10,0.5,0.4562186733246713,-99.77189066333766,42727,18.37713857748028,-0.8387344659201758,-212.4165991865744
|
||||
115,4.0,10,0.5,0.804703304477972,-99.59764834776101,42999,17.967859717667853,-0.6328910463396727,-230.00767242563782
|
||||
15,1.5,20,1.0,0.00047035550350871735,-99.99976482224825,111588,34.390794709108505,-1.0318566813340773,-202.38278172487549
|
||||
15,2.5,20,1.0,0.00013517790996149244,-99.99993241104502,118944,28.41841538875437,-1.066843300280861,-202.97365018191613
|
||||
15,3.5,20,1.0,7.669217720507588e-06,-99.99999616539114,125514,23.555141259142406,-1.0295116405913771,-199.9999926321606
|
||||
35,1.5,20,1.0,0.02089403178818467,-99.98955298410591,72581,31.327757953183337,-1.3309409260309297,-202.064386268866
|
||||
35,2.5,20,1.0,0.11339157723591194,-99.94330421138204,76304,25.05897462780457,-0.9891952503585197,-207.81448051914438
|
||||
35,3.5,20,1.0,0.01984485951274019,-99.99007757024363,79196,21.3861811202586,-1.060687386107305,-230.0395662353739
|
||||
55,1.5,20,1.0,0.055918483619185166,-99.9720407581904,57008,29.073112545607632,-1.135641198208353,-205.86923282780617
|
||||
55,2.5,20,1.0,0.15140570229310388,-99.92429714885346,59613,23.10402093503095,-0.9409011616127569,-214.74837340120598
|
||||
55,3.5,20,1.0,0.266445127868473,-99.86677743606576,61404,20.28043775649795,-0.564524044727798,-243.9096107161547
|
||||
75,1.5,20,1.0,0.4210843943579031,-99.78945780282105,49258,27.441227820861585,-0.8547303664345759,-251.85239328153438
|
||||
75,2.5,20,1.0,0.6840327479120798,-99.65798362604396,51222,22.05302409121081,-0.8751293718771636,-251.58583670556357
|
||||
75,3.5,20,1.0,0.3002907430136643,-99.84985462849316,52522,19.66604470507597,-0.9150694199211542,-228.47263285477916
|
||||
95,1.5,20,1.0,0.0978095706248613,-99.95109521468757,44232,26.064839934888766,-1.6362452282909372,-203.01129606801078
|
||||
95,2.5,20,1.0,0.13353975402701052,-99.9332301229865,45683,21.053783683208195,-1.2834053444224973,-205.97722633464866
|
||||
95,3.5,20,1.0,0.08490721133074189,-99.95754639433463,46731,19.066572510753033,-0.9476179854957475,-209.6450016389805
|
||||
115,1.5,20,1.0,0.2519762013578816,-99.87401189932106,40603,24.907026574391054,-1.2068532641982856,-203.55972685901094
|
||||
115,2.5,20,1.0,0.5104894066647994,-99.7447552966676,41895,20.179018976011456,-1.2283831092133597,-207.03468168503625
|
||||
115,3.5,20,1.0,0.4562186733246713,-99.77189066333766,42727,18.37713857748028,-0.8387344659201758,-212.4165991865744
|
||||
|
@@ -1,2 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,max_dd_u,max_dd_pct,stable_score
|
||||
20,2.0,0.0042263950973378305,-99.99788680245133,87701,33.69858952577508,-0.8399134626089371,-265.2264490104231,132.61322450521155,-216.16742795792783
|
||||
|
@@ -1,101 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,max_dd_u,max_dd_pct,stable_score
|
||||
141,1.0,0.3725631525960213,-99.81371842370199,30049,32.88628573330227,-1.1419908723322958,-239.4883338177086,119.7441669088543,-209.312942418773
|
||||
141,3.0,0.8935583586833639,-99.55322082065832,30102,22.692844329280444,-1.0449970179309893,-226.953389102229,113.4766945511145,-202.8745406767218
|
||||
141,5.0,2.5724707153438344,-98.71376464232809,30090,21.06679960119641,-0.5885453783225604,-297.2986371543968,148.6493185771984,-224.69576404395752
|
||||
141,7.0,3.4685697259990484,-98.26571513700047,30092,20.72643892064336,-0.48007699971208917,-328.79731669397,164.398658346985,-235.54556581113354
|
||||
141,9.0,3.580904571423253,-98.20954771428838,30091,20.66730916220797,-0.49161721726796526,-306.39410158641846,153.19705079320923,-226.66659495607135
|
||||
141,11.0,3.9783828811208326,-98.01080855943958,30091,20.657339403808447,-0.48652196781648543,-307.6960797832785,153.84803989163925,-226.92750408654882
|
||||
141,13.0,3.9305433487109616,-98.03472832564452,30091,20.65401615100861,-0.48196282506779964,-311.2585673086382,155.6292836543191,-228.3217091499134
|
||||
141,15.0,4.237395487302333,-97.88130225634883,30091,20.65401615100861,-0.48117309142726505,-311.1693851846781,155.58469259233905,-228.12313342734726
|
||||
141,17.0,4.1877548957065605,-97.90612255214673,30091,20.65401615100861,-0.4813053584937705,-311.19057123284057,155.59528561642028,-228.15801534720822
|
||||
141,19.0,4.1489686043404,-97.9255156978298,30091,20.65401615100861,-0.4814041115675331,-311.207124787311,155.6035623936555,-228.1852149515646
|
||||
181,1.0,1.54541089852939,-99.22729455073531,25902,31.850822330321982,-1.199437232610771,-208.37766382491262,104.18883191245631,-196.9716068720296
|
||||
181,3.0,1.9965918755290404,-99.00170406223548,25928,22.39663684048133,-1.0619028735115128,-233.36576433437043,116.68288216718521,-205.0908442781218
|
||||
181,5.0,8.071401651585806,-95.9642991742071,25919,20.965315019869593,-0.6710765949697802,-240.5263670750946,120.2631835375473,-200.22776514388232
|
||||
181,7.0,13.682622486061769,-93.15868875696911,25914,20.71853052404106,-0.4523005061492697,-325.41220228547587,162.70610114273794,-228.7511757449507
|
||||
181,9.0,13.060274116014678,-93.46986294199266,25913,20.66144406282561,-0.45908377193167316,-323.2236062913858,161.6118031456929,-228.26831072172706
|
||||
181,11.0,13.68249600732716,-93.15875199633642,25913,20.646007795315093,-0.4571038290855216,-324.09815757538547,162.04907878769274,-228.28326097551687
|
||||
181,13.0,13.695219818316474,-93.15239009084176,25913,20.646007795315093,-0.455292429728791,-325.93245317752525,162.96622658876262,-228.98888051859734
|
||||
181,15.0,13.67098609342226,-93.16450695328886,25913,20.646007795315093,-0.4553571498005006,-325.93961655899017,162.96980827949508,-229.00463937449092
|
||||
181,17.0,13.426859791565604,-93.28657010421719,25913,20.646007795315093,-0.45602310778001637,-326.0117792097359,163.00588960486795,-229.16355908147176
|
||||
181,19.0,13.426859791565604,-93.28657010421719,25913,20.646007795315093,-0.45602310778001637,-326.0117792097359,163.00588960486795,-229.16355908147176
|
||||
121,1.0,0.6316466226049364,-99.68417668869753,33004,33.78378378378378,-1.052222338701853,-206.42730524680505,103.21365262340252,-194.8817668518418
|
||||
121,3.0,0.6213813515500181,-99.689309324225,33066,23.099256033387768,-0.9034975192511878,-214.48595875045243,107.24297937522623,-196.32566305542025
|
||||
121,5.0,1.9136436948828712,-99.04317815255857,33056,21.484753146176185,-0.5982068102544683,-211.51121036008402,105.75560518004201,-190.82614401964582
|
||||
121,7.0,1.0735613492988372,-99.46321932535058,33046,21.103915753797736,-0.4968590955505304,-244.79461181542908,122.39730590771454,-203.34337319812857
|
||||
121,9.0,1.1663959453321875,-99.4168020273339,33046,21.040367971917934,-0.491645833390951,-247.9707541823954,123.9853770911977,-204.5048537009835
|
||||
121,11.0,1.2183278724323423,-99.39083606378382,33046,21.031289717363673,-0.4933546135117468,-247.94934993910346,123.97467496955173,-204.49083140156617
|
||||
121,13.0,1.2425260804680303,-99.37873695976599,33046,21.028263632512257,-0.4874890223174935,-251.45344300781414,125.72672150390707,-205.80998243070158
|
||||
121,15.0,1.2856620112079782,-99.357168994396,33046,21.028263632512257,-0.4873534021489805,-251.41190743169045,125.70595371584523,-205.77017279285997
|
||||
121,17.0,1.2515397754677258,-99.37423011226613,33046,21.028263632512257,-0.4874574412622979,-251.4447637233199,125.72238186165995,-205.80162489674169
|
||||
121,19.0,1.2605473760065111,-99.36972631199674,33046,21.028263632512257,-0.4868456824111407,-251.43609030718045,125.71804515359023,-205.78631062380262
|
||||
101,1.0,1.3812151149048713,-99.30939244254756,36046,34.84436553293014,-1.0513559683073899,-211.596726954287,105.79836347714348,-196.56435484395104
|
||||
101,3.0,1.3107125459371607,-99.34464372703142,36135,23.616991836169916,-0.8487417539167138,-219.7768214710855,109.88841073554273,-197.4402733624662
|
||||
101,5.0,6.3255050108003585,-96.83724749459982,36121,21.726973228869635,-0.4279048943481762,-310.0263705615421,155.01318528077104,-225.98265445139478
|
||||
101,7.0,2.898681370453997,-98.550659314773,36119,21.346105927628116,-0.5105396352220445,-266.04726570364727,133.02363285182363,-211.09604121889646
|
||||
101,9.0,2.337590220963109,-98.83120488951845,36119,21.276890279354358,-0.4946838636498477,-266.9034571984829,133.45172859924145,-211.52879413270978
|
||||
101,11.0,2.248555784854723,-98.87572210757264,36119,21.257509897837704,-0.49917680860743774,-266.9359298883164,133.4679649441582,-211.64021576618848
|
||||
101,13.0,2.498694325239585,-98.7506528373802,36119,21.254741271906752,-0.49039344526005274,-271.61493372988264,135.80746686494132,-213.28134767245388
|
||||
101,15.0,2.4446207313192856,-98.77768963434036,36119,21.254741271906752,-0.49053481242017677,-271.6323210497848,135.8161605248924,-213.31703580329642
|
||||
101,17.0,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
101,19.0,2.46021630053702,-98.7698918497315,36119,21.254741271906752,-0.4895899161479696,-271.6273063072573,135.81365315362865,-213.29589336641004
|
||||
81,1.0,0.38789258931728443,-99.80605370534136,40428,35.93054318788958,-1.3592208304573201,-203.78168899414376,101.89084449707188,-197.6293792684867
|
||||
81,3.0,2.35707122036968,-98.82146438981516,40594,24.326255111592847,-1.0223276542135724,-209.41404598106254,104.70702299053127,-194.85501463280306
|
||||
81,5.0,2.738798055863725,-98.63060097206814,40574,22.06092571597575,-0.612968955468472,-226.175262272745,113.08763113637251,-196.4563333467878
|
||||
81,7.0,1.6379035690835946,-99.1810482154582,40564,21.721230647865102,-0.6189674329263939,-232.6156018912471,116.30780094562357,-199.65489816707378
|
||||
81,9.0,1.5795652645096294,-99.21021736774519,40559,21.664735323849207,-0.6049640177737161,-233.1884392554897,116.59421962774485,-199.74516128322568
|
||||
81,11.0,1.4844472673119984,-99.257776366344,40559,21.652407603737764,-0.6068398317520862,-233.2567175159563,116.62835875797815,-199.84254135375159
|
||||
81,13.0,1.6060637766271089,-99.19696811168645,40558,21.650475861728882,-0.598769408587746,-233.1961706190891,116.59808530954454,-199.66066926237505
|
||||
81,15.0,1.5941017930091896,-99.2029491034954,40558,21.650475861728882,-0.5978375540333052,-233.20318933464523,116.6015946673226,-199.65827548575314
|
||||
81,17.0,1.5919727231579546,-99.20401363842102,40558,21.650475861728882,-0.597844544661025,-233.20443857023713,116.60221928511857,-199.65992360244817
|
||||
81,19.0,1.5919727231579546,-99.20401363842102,40558,21.650475861728882,-0.597844544661025,-233.20443857023713,116.60221928511857,-199.65992360244817
|
||||
61,1.0,0.18588972434247641,-99.90705513782876,46603,37.351672639100485,-1.271435744311454,-199.8161496463976,99.9080748231988,-195.09074392812525
|
||||
61,3.0,1.2411584337304506,-99.37942078313478,46919,25.1049681365758,-1.002261040309346,-198.90841062139575,99.45420531069787,-190.96991751540523
|
||||
61,5.0,1.2648197669081618,-99.36759011654591,46875,22.5664,-0.7628705030782208,-199.20933748136585,99.60466874068292,-188.2057711460309
|
||||
61,7.0,0.5589298789988087,-99.7205350605006,46863,22.19448178733756,-0.7542253286061638,-199.61902667123155,99.80951333561578,-188.61884967226717
|
||||
61,9.0,0.6392894290548907,-99.68035528547256,46855,22.149183651691388,-0.7325411704462591,-202.84398590545504,101.4219929527275,-189.6084436930097
|
||||
61,11.0,0.6976965475421673,-99.65115172622892,46853,22.137323116982905,-0.7221597770072495,-205.6043321758009,102.80216608790045,-190.55880192063626
|
||||
61,13.0,0.6606675247637739,-99.66966623761812,46852,22.131392469905233,-0.7288789587814761,-205.63860970568084,102.8193048528404,-190.67165762526815
|
||||
61,15.0,0.6921328687861904,-99.6539335656069,46852,22.131392469905233,-0.7250593802377309,-205.60948243768982,102.80474121884491,-190.5984391035356
|
||||
61,17.0,0.6711409318082459,-99.66442953409587,46852,22.131392469905233,-0.7467447191672053,-201.21777452725777,100.60888726362889,-189.11247597500545
|
||||
61,19.0,0.6711409318082459,-99.66442953409587,46852,22.131392469905233,-0.7467447191672053,-201.21777452725777,100.60888726362889,-189.11247597500545
|
||||
41,1.0,0.015212549931630836,-99.99239372503419,58232,38.022049732106055,-0.9675643564696258,-201.18916338481642,100.5945816924082,-192.07883135659625
|
||||
41,3.0,0.05802476361942974,-99.97098761819028,58921,25.78367644812546,-0.8141023181668979,-221.8357360102845,110.91786800514225,-198.47450984030687
|
||||
41,5.0,0.018204245993222193,-99.99089787700339,58828,22.76806962670837,-0.7747373783069786,-220.02688832306336,110.01344416153167,-197.29850174591246
|
||||
41,7.0,0.018803260658613055,-99.99059836967069,58800,22.43877551020408,-0.7516083628047471,-213.19677775293198,106.598388876466,-194.28860982450044
|
||||
41,9.0,0.019308294015552056,-99.99034585299222,58793,22.393822393822393,-0.7274306410639146,-220.4007030959921,110.20035154799605,-196.87979478415605
|
||||
41,11.0,0.01806066289798151,-99.990969668551,58793,22.387018862789787,-0.728322811635155,-220.38697020477568,110.19348510238784,-196.88563149008314
|
||||
41,13.0,0.01727499608890596,-99.99136250195555,58794,22.378133823179237,-0.7291549517475395,-220.38774928750541,110.1938746437527,-196.8963216379282
|
||||
41,15.0,0.017696144371817355,-99.99115192781409,58794,22.378133823179237,-0.7285582364048866,-220.38733166854774,110.19366583427387,-196.88878343209183
|
||||
41,17.0,0.017696144371817355,-99.99115192781409,58794,22.378133823179237,-0.7285582364048866,-220.38733166854774,110.19366583427387,-196.88878343209183
|
||||
41,19.0,0.017696144371817355,-99.99115192781409,58794,22.378133823179237,-0.7285582364048866,-220.38733166854774,110.19366583427387,-196.88878343209183
|
||||
161,1.0,0.18507916598399116,-99.90746041700801,27807,32.272449383248826,-1.3626921206535092,-208.8205005280496,104.4102502640248,-199.78796607606995
|
||||
161,3.0,0.23998103803793114,-99.88000948098103,27834,22.53359200977222,-1.3100826718988585,-210.56993164514623,105.28496582257311,-199.82897420182582
|
||||
161,5.0,0.5855126564436772,-99.70724367177816,27825,21.02785265049416,-0.92014274909802,-209.8497421239102,104.92487106195509,-194.68885351051847
|
||||
161,7.0,0.47603821222660997,-99.7619808938867,27824,20.741086831512366,-0.8540499785557677,-222.3354842636233,111.16774213181164,-198.94477434200525
|
||||
161,9.0,0.5528348080519955,-99.72358259597401,27824,20.68717653824037,-0.8742066357356877,-222.36440030194234,111.18220015097118,-199.15982234557922
|
||||
161,11.0,0.5547483846886698,-99.72262580765566,27823,20.677137619954713,-0.8745006016030721,-222.3500000989885,111.17500004949426,-199.15663306648793
|
||||
161,13.0,0.5642197176946141,-99.7178901411527,27823,20.67354347122884,-0.8685846686060622,-222.34258574695468,111.17129287347734,-199.0779404632073
|
||||
161,15.0,0.5973160858428005,-99.7013419570786,27823,20.67354347122884,-0.8684350979936863,-222.3166772371032,111.1583386185516,-199.0492340278441
|
||||
161,17.0,0.5931270699461915,-99.70343646502691,27823,20.67354347122884,-0.8684544122038876,-222.31995648391177,111.1599782419559,-199.0528720050383
|
||||
161,19.0,0.5869955515964692,-99.70650222420177,27823,20.67354347122884,-0.8684828298480397,-222.32475636113264,111.16237818056631,-199.0581987268313
|
||||
21,1.0,0.0012545307129279897,-99.99937273464353,83039,38.97686629174243,-1.2206218969570914,-214.4358469291487,107.21792346457435,-200.4211742697881
|
||||
21,3.0,0.003141325327724193,-99.99842933733613,85276,27.505980580702662,-0.611161009432778,-288.68540178116535,144.34270089058268,-222.80652216299563
|
||||
21,5.0,0.0004631489929338503,-99.99976842550353,84980,24.166862791245,-0.5990293997070005,-257.5217756663234,128.7608878331617,-210.19683148851692
|
||||
21,7.0,0.0005214659574309736,-99.99973926702128,84944,23.981682049350162,-0.5113764484639733,-295.2633541495073,147.63167707475364,-224.24159830839187
|
||||
21,9.0,0.0004554326656295686,-99.99977228366718,84945,23.968450173641767,-0.5117181252434727,-295.0636443124399,147.53182215621996,-224.16584751156483
|
||||
21,11.0,0.0004365337751968878,-99.9997817331124,84945,23.960209547354168,-0.512010867309432,-295.0636628918621,147.53183144593106,-224.16937729757046
|
||||
21,13.0,0.0004331898842896685,-99.99978340505785,84946,23.95757304640595,-0.5120799195015522,-295.06366617922765,147.53183308961383,-224.17020891076754
|
||||
21,15.0,0.0004331388233741457,-99.99978343058831,84946,23.95757304640595,-0.512079919638494,-295.06366622942545,147.53183311471273,-224.17020895802042
|
||||
21,17.0,0.0004331388233741457,-99.99978343058831,84946,23.95757304640595,-0.512079919638494,-295.06366622942545,147.53183311471273,-224.17020895802042
|
||||
21,19.0,0.00043289925579133006,-99.9997835503721,84947,23.957291016751622,-0.5120799202809959,-295.06366646494337,147.53183323247168,-224.1702091797214
|
||||
1,1.0,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,3.0,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,5.0,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,7.0,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,9.0,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,11.0,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,13.0,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,15.0,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,17.0,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
1,19.0,7.332091932035972e-15,-100.0,314852,34.19479628523877,-1.9254884054263868,-199.9,99.95,-203.06586086511663
|
||||
|
@@ -1,7 +0,0 @@
|
||||
year,year_end_equity,year_return_pct
|
||||
2020,54.050106322289274,-72.97494683885536
|
||||
2021,94.65774624824195,75.12962080743739
|
||||
2022,200.96942517386574,112.31165238903867
|
||||
2023,141.40095297115792,-29.64056455412212
|
||||
2024,192.12283166096822,35.87095958268133
|
||||
2025,243.61657139606652,26.802509254062695
|
||||
|
@@ -1,33 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,dd
|
||||
10,1.5,0.05342370290338611,-99.9732881485483,65278,36.77808756395723,-1.5827730890254355,-200.11090187995964
|
||||
10,2.0,0.01988664648055615,-99.99005667675972,69456,37.21348767565077,-1.375492398950596,-200.74729198772366
|
||||
10,2.5,0.004545923852164151,-99.99772703807392,74138,37.50033720898864,-1.2284719936927497,-201.33569201183727
|
||||
10,3.0,0.0009123838658130715,-99.99954380806709,76146,37.615895779161086,-1.6590563717126823,-202.30746831252432
|
||||
20,1.5,0.3782564097262717,-99.81087179513686,47456,37.41992582602832,-1.773963308419704,-204.25419944748978
|
||||
20,2.0,0.10116775050634881,-99.94941612474683,49854,37.58374453403939,-1.6215139967794863,-207.24649370462032
|
||||
20,2.5,0.0420847966759596,-99.97895760166202,51496,38.30588783594842,-1.8732479488082094,-202.88341805372127
|
||||
20,3.0,0.03714319731018452,-99.98142840134491,52399,39.06563102349281,-1.7117920644966065,-201.30652434882285
|
||||
30,1.5,1.4879534896660909,-99.25602325516695,39618,37.46529355343531,-1.0597237275155744,-241.7741860257891
|
||||
30,2.0,0.5206306817787774,-99.73968465911061,41418,37.77343184122845,-1.2705250571479818,-204.3989052518405
|
||||
30,2.5,0.08578933249176414,-99.95710533375411,42437,38.86938284987158,-1.4392780573843966,-208.66548353770028
|
||||
30,3.0,0.06761980742073989,-99.96619009628964,42819,39.68331815315631,-1.24928580482028,-216.1250835959552
|
||||
50,1.5,1.8088706722788732,-99.09556466386056,31443,37.334223833603666,-1.4000644569639418,-202.32460954374
|
||||
50,2.0,1.028036476208118,-99.48598176189594,32460,38.44423906346272,-1.2716921237889525,-200.83851685504973
|
||||
50,2.5,0.11541810526712795,-99.94229094736643,32939,39.5306475606424,-1.203251914380095,-200.27701570363715
|
||||
50,3.0,0.1351670804614327,-99.93241645976929,33085,40.54405319631253,-1.0704484513755306,-200.26052595255356
|
||||
80,1.5,4.150889743129027,-97.92455512843549,25302,38.02861433878745,-1.6665676083991399,-202.37237995021502
|
||||
80,2.0,5.992075618322869,-97.00396219083856,25933,39.2704276404581,-1.2873048988895401,-222.45880619181088
|
||||
80,2.5,2.3099195066108917,-98.84504024669455,26064,40.29696132596685,-1.2180479656844296,-242.45465429040132
|
||||
80,3.0,2.334754168161419,-98.83262291591929,26050,41.051823416506714,-1.0505864510447513,-269.054135429288
|
||||
100,1.5,6.04121936461079,-96.97939031769461,22786,38.181339418941455,-1.4175370742512177,-196.92102711681954
|
||||
100,2.0,5.423127145984888,-97.28843642700755,23191,39.51101720495019,-1.2153007501059072,-231.1710791247756
|
||||
100,2.5,2.610862380586256,-98.69456880970687,23301,40.483241062615335,-1.1094891363618633,-259.30276840213105
|
||||
100,3.0,5.716308119598341,-97.14184594020082,23299,41.37945834585175,-0.7610979701772258,-288.02851880803166
|
||||
150,1.5,6.121437150276749,-96.93928142486162,18407,38.88194708534797,-1.002800854613305,-241.71726284052002
|
||||
150,2.0,1.1970630383174046,-99.4014684808413,18595,40.112933584296854,-1.1681812761761492,-224.23744764512085
|
||||
150,2.5,0.5963506942019386,-99.70182465289903,18625,41.261744966442954,-0.8184845317905666,-263.25717616484644
|
||||
150,3.0,0.6302294940489122,-99.68488525297555,18578,42.00129185057595,-0.8539049301221916,-284.17449718087295
|
||||
200,1.5,11.879732518914734,-94.06013374054264,15536,39.624098867147275,-0.966813276208611,-190.0398595048643
|
||||
200,2.0,7.102255587565593,-96.4488722062172,15612,40.949269792467334,-1.0272918700545648,-195.52766791647502
|
||||
200,2.5,7.996108371386221,-96.0019458143069,15618,42.00281726213343,-0.8066524896070545,-212.59859294532936
|
||||
200,3.0,12.272570900469248,-93.86371454976538,15593,42.57038414673251,-0.6873433542160784,-197.05958687744663
|
||||
|
|
Before Width: | Height: | Size: 115 KiB |
@@ -1,401 +0,0 @@
|
||||
period,std,final_eq,ret_pct,n_trades,win_rate,sharpe,max_dd_u,max_dd_pct,stable_score
|
||||
251,0.5,1.26,-99.37,21094,37.48,-1.1405,-199.63,99.82,-192.91
|
||||
251,50.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,100.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,150.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,200.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,250.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,300.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,350.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,400.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,450.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,500.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,550.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,600.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,650.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,700.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,750.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,800.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,850.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,900.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
251,950.5,11.52,-94.24,21200,20.43,-0.4469,-243.29,121.65,-196.92
|
||||
201,0.5,0.9,-99.55,24082,38.36,-1.1894,-201.26,100.63,-194.33
|
||||
201,50.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,100.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,150.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,200.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,250.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,300.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,350.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,400.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,450.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,500.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,550.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,600.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,650.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,700.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,750.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,800.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,850.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,900.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
201,950.5,9.72,-95.14,24243,20.74,-0.8051,-220.74,110.37,-193.1
|
||||
101,0.5,2.93,-98.53,35484,40.7,-1.0208,-200.53,100.27,-191.0
|
||||
101,50.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,100.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,150.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,200.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,250.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,300.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,350.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,400.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,450.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,500.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,550.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,600.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,650.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,700.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,750.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,800.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,850.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,900.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
101,950.5,2.46,-98.77,36119,21.25,-0.4896,-271.63,135.81,-213.3
|
||||
151,0.5,0.45,-99.78,28965,38.93,-1.1185,-203.05,101.52,-194.42
|
||||
151,50.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,100.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,150.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,200.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,250.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,300.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,350.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,400.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,450.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,500.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,550.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,600.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,650.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,700.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,750.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,800.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,850.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,900.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
151,950.5,1.03,-99.48,29301,20.34,-0.5489,-298.09,149.05,-225.31
|
||||
51,0.5,0.26,-99.87,50009,41.39,-1.3186,-200.91,100.46,-196.05
|
||||
51,50.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,100.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,150.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,200.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,250.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,300.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,350.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,400.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,450.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,500.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,550.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,600.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,650.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,700.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,750.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,800.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,850.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,900.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
51,950.5,0.1,-99.95,51874,22.13,-0.8994,-213.73,106.87,-196.24
|
||||
1,0.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,50.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,100.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,150.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,200.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,250.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,300.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,350.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,400.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,450.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,500.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,550.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,600.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,650.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,700.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,750.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,800.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,850.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,900.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
1,950.5,0.0,-100.0,314852,34.19,-1.9255,-199.9,99.95,-203.07
|
||||
301,0.5,3.29,-98.36,18999,36.79,-0.9796,-210.35,105.17,-194.25
|
||||
301,50.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,100.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,150.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,200.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,250.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,300.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,350.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,400.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,450.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,500.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,550.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,600.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,650.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,700.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,750.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,800.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,850.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,900.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
301,950.5,52.84,-73.58,19058,20.5,-0.3757,-226.55,113.28,-168.71
|
||||
351,0.5,3.36,-98.32,17810,36.27,-1.221,-197.11,98.55,-191.81
|
||||
351,50.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,100.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,150.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,200.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,250.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,300.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,350.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,400.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,450.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,500.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,550.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,600.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,650.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,700.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,750.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,800.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,850.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,900.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
351,950.5,9.61,-95.2,17857,19.48,-0.6357,-200.97,100.48,-183.21
|
||||
401,0.5,3.01,-98.5,17114,34.98,-1.2456,-197.42,98.71,-192.41
|
||||
401,50.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,100.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,150.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,200.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,250.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,300.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,350.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,400.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,450.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,500.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,550.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,600.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,650.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,700.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,750.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,800.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,850.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,900.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
401,950.5,6.01,-97.0,17153,19.41,-0.5546,-218.38,109.19,-191.01
|
||||
451,0.5,2.33,-98.84,16156,34.27,-1.124,-199.45,99.73,-192.1
|
||||
451,50.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,100.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,150.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,200.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,250.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,300.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,350.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,400.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,450.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,500.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,550.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,600.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,650.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,700.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,750.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,800.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,850.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,900.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
451,950.5,3.18,-98.41,16171,19.46,-0.5248,-231.2,115.6,-197.19
|
||||
501,0.5,1.9,-99.05,15372,33.37,-0.8822,-198.31,99.16,-188.96
|
||||
501,50.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,100.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,150.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,200.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,250.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,300.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,350.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,400.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,450.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,500.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,550.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,600.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,650.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,700.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,750.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,800.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,850.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,900.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
501,950.5,2.07,-98.97,15381,19.29,-0.5183,-256.66,128.33,-207.85
|
||||
551,0.5,4.52,-97.74,14150,33.36,-0.9378,-198.07,99.03,-188.22
|
||||
551,50.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,100.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,150.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,200.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,250.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,300.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,350.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,400.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,450.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,500.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,550.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,600.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,650.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,700.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,750.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,800.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,850.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,900.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
551,950.5,11.44,-94.28,14159,19.62,-0.5181,-224.63,112.31,-190.35
|
||||
601,0.5,3.15,-98.43,13683,32.54,-0.7494,-247.88,123.94,-206.57
|
||||
601,50.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,100.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,150.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,200.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,250.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,300.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,350.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,400.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,450.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,500.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,550.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,600.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,650.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,700.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,750.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,800.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,850.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,900.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
601,950.5,3.06,-98.47,13680,19.18,-0.1846,-553.04,276.52,-321.9
|
||||
651,0.5,8.02,-95.99,13136,32.14,-0.8123,-232.77,116.39,-198.85
|
||||
651,50.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,100.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,150.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,200.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,250.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,300.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,350.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,400.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,450.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,500.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,550.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,600.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,650.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,700.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,750.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,800.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,850.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,900.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
651,950.5,48.8,-75.6,13142,19.53,-0.1411,-535.69,267.85,-291.57
|
||||
701,0.5,1.6,-99.2,12485,31.23,-0.8874,-198.89,99.45,-189.4
|
||||
701,50.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,100.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,150.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,200.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,250.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,300.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,350.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,400.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,450.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,500.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,550.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,600.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,650.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,700.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,750.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,800.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,850.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,900.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
701,950.5,14.5,-92.75,12501,19.6,-0.1569,-643.67,321.83,-352.1
|
||||
801,0.5,10.35,-94.83,11410,31.07,-0.8074,-208.99,104.49,-188.11
|
||||
801,50.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,100.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,150.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,200.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,250.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,300.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,350.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,400.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,450.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,500.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,550.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,600.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,650.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,700.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,750.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,800.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,850.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,900.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
801,950.5,118.75,-40.62,11418,19.45,-0.0405,-1080.04,540.02,-473.13
|
||||
751,0.5,6.79,-96.61,11769,31.7,-0.8974,-208.02,104.01,-190.58
|
||||
751,50.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,100.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,150.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,200.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,250.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,300.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,350.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,400.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,450.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,500.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,550.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,600.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,650.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,700.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,750.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,800.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,850.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,900.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
751,950.5,127.53,-36.23,11780,19.9,-0.1076,-345.62,172.81,-175.77
|
||||
851,0.5,13.14,-93.43,10724,31.9,-0.8458,-197.01,98.5,-182.38
|
||||
851,50.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,100.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,150.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,200.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,250.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,300.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,350.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,400.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,450.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,500.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,550.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,600.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,650.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,700.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,750.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,800.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,850.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,900.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
851,950.5,316.6,58.3,10734,20.19,0.0626,-1385.53,692.77,-495.16
|
||||
951,0.5,2.59,-98.71,9665,30.17,-0.804,-230.09,115.04,-200.39
|
||||
951,50.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,100.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,150.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,200.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,250.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,300.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,350.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,400.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,450.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,500.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,550.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,600.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,650.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,700.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,750.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,800.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,850.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,900.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
951,950.5,79.31,-60.35,9672,19.24,-0.1026,-623.51,311.76,-310.98
|
||||
901,0.5,13.45,-93.27,10264,30.67,-0.8953,-189.6,94.8,-179.86
|
||||
901,50.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,100.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,150.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,200.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,250.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,300.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,350.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,400.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,450.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,500.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,550.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,600.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,650.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,700.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,750.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,800.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,850.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,900.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
901,950.5,563.79,181.9,10270,19.56,0.0934,-1726.97,863.49,-507.77
|
||||
|
|
Before Width: | Height: | Size: 624 KiB |
|
Before Width: | Height: | Size: 174 KiB |
@@ -1,111 +0,0 @@
|
||||
"""
|
||||
BB(10, 2.5) 均值回归策略回测 — 15分钟K线 | 2020-2025 | 200U | 万五手续费 | 90%返佣次日8点到账
|
||||
"""
|
||||
import sys, time
|
||||
sys.stdout.reconfigure(line_buffering=True)
|
||||
sys.path.insert(0, str(__import__("pathlib").Path(__file__).resolve().parents[1]))
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import matplotlib
|
||||
matplotlib.use("Agg")
|
||||
import matplotlib.pyplot as plt
|
||||
from pathlib import Path
|
||||
|
||||
from strategy.bb_backtest import BBConfig, run_bb_backtest
|
||||
from strategy.data_loader import load_klines
|
||||
|
||||
out_dir = Path(__file__).resolve().parent / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# ============================================================
|
||||
# 加载 15 分钟 K 线数据 (2020-2025)
|
||||
# ============================================================
|
||||
YEARS = list(range(2020, 2026))
|
||||
data = {}
|
||||
|
||||
print("加载 15 分钟 K 线数据 (2020-2025)...")
|
||||
t0 = time.time()
|
||||
for y in YEARS:
|
||||
end_year = y + 1 if y < 2025 else 2026 # 2025 数据到 2026-01-01 前
|
||||
df = load_klines('15m', f'{y}-01-01', f'{end_year}-01-01')
|
||||
data[y] = df
|
||||
print(f" {y}: {len(df):>7,} 条 ({df.index[0]} ~ {df.index[-1]})")
|
||||
print(f"数据加载完成 ({time.time()-t0:.1f}s)\n")
|
||||
|
||||
# ============================================================
|
||||
# 配置: 200U | 万五手续费 | 90%返佣次日8点到账
|
||||
# ============================================================
|
||||
cfg = BBConfig(
|
||||
bb_period=10,
|
||||
bb_std=2.5,
|
||||
leverage=50,
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01, # 1% 权益/单
|
||||
max_daily_loss=50.0, # 固定值备用
|
||||
max_daily_loss_pct=0.05, # 日亏损上限 = 当日起始权益的 5%
|
||||
fee_rate=0.0005, # 万五 (0.05%) 开平仓各万五
|
||||
rebate_rate=0.0,
|
||||
rebate_pct=0.90, # 90% 手续费返佣
|
||||
rebate_hour_utc=0, # UTC 0点 = 北京时间早上8点到账
|
||||
# 强平
|
||||
liq_enabled=True,
|
||||
maint_margin_rate=0.005, # 0.5% 维持保证金率
|
||||
# 滑点
|
||||
slippage_pct=0.0005, # 0.05% 滑点
|
||||
# 市场容量限制
|
||||
max_notional=500000.0, # 单笔最大名义价值 50万U
|
||||
# 加仓
|
||||
pyramid_enabled=True,
|
||||
pyramid_step=0.01, # 递增加仓
|
||||
pyramid_max=3,
|
||||
)
|
||||
|
||||
# ============================================================
|
||||
# 运行回测 (滚仓: 200U 起,逐年累加不复位)
|
||||
# ============================================================
|
||||
df_full = pd.concat([data[y] for y in YEARS])
|
||||
r_full = run_bb_backtest(df_full, cfg)
|
||||
d_full = r_full.daily_stats
|
||||
eq_full = d_full["equity"].astype(float)
|
||||
pnl_full = d_full["pnl"].astype(float)
|
||||
eq_curve = r_full.equity_curve["equity"].dropna()
|
||||
|
||||
final_eq = float(eq_full.iloc[-1])
|
||||
ret_pct = (final_eq - 200) / 200 * 100
|
||||
dd_full = float((eq_full - eq_full.cummax()).min())
|
||||
sharpe_full = float(pnl_full.mean() / pnl_full.std()) * np.sqrt(365) if pnl_full.std() > 0 else 0
|
||||
win_full = sum(1 for t in r_full.trades if t.net_pnl > 0) / max(len(r_full.trades), 1) * 100
|
||||
|
||||
print("=" * 100)
|
||||
print(" BB(10, 2.5) 15分钟K线 | 200U 起滚仓 | 万五 fee | 90% 返佣 | 含强平+滑点+容量限制")
|
||||
print("=" * 100)
|
||||
liq_count = sum(1 for t in r_full.trades if t.fee == 0.0 and t.net_pnl < 0)
|
||||
print(f" 初始本金: 200U | 最终权益: {final_eq:,.0f}U | 收益率: {ret_pct:+,.1f}%")
|
||||
print(f" 交易次数: {len(r_full.trades)} | 胜率: {win_full:.1f}% | 强平次数: {liq_count} | 最大回撤: {dd_full:+,.0f}U")
|
||||
print(f" 总手续费: {r_full.total_fee:,.0f} | 总返佣: {r_full.total_rebate:,.0f} | Sharpe: {sharpe_full:.2f}")
|
||||
print("-" * 100)
|
||||
print(" 年末权益:")
|
||||
for y in YEARS:
|
||||
mask = eq_curve.index.year == y
|
||||
if mask.any():
|
||||
yr_eq = float(eq_curve.loc[mask].iloc[-1])
|
||||
print(f" {y} 年末: {yr_eq:,.0f}U")
|
||||
print("=" * 100)
|
||||
|
||||
# ============================================================
|
||||
# 生成权益曲线图 (对数坐标,滚仓复利)
|
||||
# ============================================================
|
||||
fig, ax = plt.subplots(1, 1, figsize=(14, 6), dpi=120)
|
||||
eq_ser = eq_curve
|
||||
days = (eq_ser.index - eq_ser.index[0]).total_seconds() / 86400
|
||||
ax.semilogy(days, eq_ser.values.clip(min=1), color="#2563eb", linewidth=1.2)
|
||||
ax.axhline(y=200, color="gray", linestyle="--", alpha=0.6)
|
||||
ax.set_title("BB(10, 2.5) 15min | 200U | 0.05% fee 90% rebate | 2020-2025", fontsize=12, fontweight="bold")
|
||||
ax.set_xlabel("Days")
|
||||
ax.set_ylabel("Equity (USDT, log scale)")
|
||||
ax.grid(True, alpha=0.3)
|
||||
|
||||
chart_path = out_dir / "bb_15m_200u_2020_2025.png"
|
||||
plt.savefig(chart_path, bbox_inches="tight")
|
||||
print(f"\n图表已保存: {chart_path}")
|
||||
@@ -1,323 +0,0 @@
|
||||
"""
|
||||
Conservative BB backtest for bb_trade-style logic.
|
||||
|
||||
Assumptions:
|
||||
1) Use 15m OHLC from 2020-01-01 to 2026-01-01 (exclusive).
|
||||
2) Bollinger band is computed from CLOSED bars (shifted by 1 bar).
|
||||
3) If bar i touches band, execute on bar i+1 open (no same-bar fill).
|
||||
4) Fee: 0.05% each side; rebate: 90% of daily fee, credited next day at 08:00 UTC+8 (UTC 00:00).
|
||||
5) Position sizing: 1% equity open, then +1%/+2%/+3% add ladder (max 3 adds).
|
||||
6) Leverage 50x; optional liquidation model enabled.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from strategy.data_loader import load_klines
|
||||
|
||||
|
||||
@dataclass
|
||||
class ConservativeConfig:
|
||||
bb_period: int = 10
|
||||
bb_std: float = 2.5
|
||||
leverage: float = 50.0
|
||||
initial_capital: float = 200.0
|
||||
margin_pct: float = 0.01
|
||||
pyramid_step: float = 0.01
|
||||
pyramid_max: int = 3
|
||||
fee_rate: float = 0.0005
|
||||
rebate_pct: float = 0.90
|
||||
rebate_hour_utc: int = 0
|
||||
slippage_pct: float = 0.0005
|
||||
liq_enabled: bool = True
|
||||
maint_margin_rate: float = 0.005
|
||||
max_daily_loss: float = 50.0
|
||||
|
||||
|
||||
def bollinger_prev_close(close: pd.Series, period: int, n_std: float) -> tuple[np.ndarray, np.ndarray]:
|
||||
mid = close.rolling(period).mean().shift(1)
|
||||
std = close.rolling(period).std(ddof=0).shift(1)
|
||||
upper = (mid + n_std * std).to_numpy(dtype=float)
|
||||
lower = (mid - n_std * std).to_numpy(dtype=float)
|
||||
return upper, lower
|
||||
|
||||
|
||||
def run_conservative(df: pd.DataFrame, cfg: ConservativeConfig):
|
||||
arr_open = df["open"].to_numpy(dtype=float)
|
||||
arr_high = df["high"].to_numpy(dtype=float)
|
||||
arr_low = df["low"].to_numpy(dtype=float)
|
||||
arr_close = df["close"].to_numpy(dtype=float)
|
||||
idx = df.index
|
||||
n = len(df)
|
||||
|
||||
upper, lower = bollinger_prev_close(df["close"].astype(float), cfg.bb_period, cfg.bb_std)
|
||||
|
||||
balance = cfg.initial_capital
|
||||
position = 0 # +1 long, -1 short
|
||||
entry_price = 0.0
|
||||
entry_qty = 0.0
|
||||
entry_margin = 0.0
|
||||
pyramid_count = 0
|
||||
|
||||
total_fee = 0.0
|
||||
total_rebate = 0.0
|
||||
trades = 0
|
||||
win_trades = 0
|
||||
liq_count = 0
|
||||
|
||||
day_fees = {}
|
||||
current_day = None
|
||||
day_start_equity = cfg.initial_capital
|
||||
day_pnl = 0.0
|
||||
day_stopped = False
|
||||
rebate_applied_today = False
|
||||
|
||||
equity_arr = np.full(n, np.nan)
|
||||
position_arr = np.zeros(n)
|
||||
|
||||
def unrealised(price: float) -> float:
|
||||
if position == 0:
|
||||
return 0.0
|
||||
if position == 1:
|
||||
return entry_qty * (price - entry_price)
|
||||
return entry_qty * (entry_price - price)
|
||||
|
||||
def apply_open_slippage(side: int, price: float) -> float:
|
||||
# Buy higher, sell lower
|
||||
return price * (1 + cfg.slippage_pct) if side == 1 else price * (1 - cfg.slippage_pct)
|
||||
|
||||
def apply_close_slippage(side: int, price: float) -> float:
|
||||
# Close long = sell lower; close short = buy higher
|
||||
return price * (1 - cfg.slippage_pct) if side == 1 else price * (1 + cfg.slippage_pct)
|
||||
|
||||
def add_fee(ts: pd.Timestamp, fee: float):
|
||||
nonlocal total_fee
|
||||
total_fee += fee
|
||||
d = ts.date()
|
||||
day_fees[d] = day_fees.get(d, 0.0) + fee
|
||||
|
||||
def close_position(exec_price: float, exec_idx: int):
|
||||
nonlocal balance, position, entry_price, entry_qty, entry_margin, pyramid_count
|
||||
nonlocal trades, win_trades, day_pnl
|
||||
if position == 0:
|
||||
return
|
||||
|
||||
px = apply_close_slippage(position, exec_price)
|
||||
gross = entry_qty * (px - entry_price) if position == 1 else entry_qty * (entry_price - px)
|
||||
notional = entry_qty * px
|
||||
fee = notional * cfg.fee_rate
|
||||
net = gross - fee
|
||||
|
||||
balance += net
|
||||
add_fee(idx[exec_idx], fee)
|
||||
day_pnl += net
|
||||
trades += 1
|
||||
if net > 0:
|
||||
win_trades += 1
|
||||
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_qty = 0.0
|
||||
entry_margin = 0.0
|
||||
pyramid_count = 0
|
||||
|
||||
def open_position(side: int, exec_price: float, exec_idx: int, is_add: bool = False):
|
||||
nonlocal balance, position, entry_price, entry_qty, entry_margin, pyramid_count
|
||||
nonlocal day_pnl
|
||||
px = apply_open_slippage(side, exec_price)
|
||||
eq = balance + unrealised(px)
|
||||
|
||||
if is_add:
|
||||
margin = eq * (cfg.margin_pct + cfg.pyramid_step * (pyramid_count + 1))
|
||||
else:
|
||||
margin = eq * cfg.margin_pct
|
||||
|
||||
margin = min(margin, balance * 0.95)
|
||||
if margin <= 0:
|
||||
return
|
||||
|
||||
notional = margin * cfg.leverage
|
||||
qty = notional / px
|
||||
fee = notional * cfg.fee_rate
|
||||
|
||||
balance -= fee
|
||||
add_fee(idx[exec_idx], fee)
|
||||
day_pnl -= fee
|
||||
|
||||
if is_add and position != 0:
|
||||
old_notional = entry_qty * entry_price
|
||||
new_notional = qty * px
|
||||
entry_qty += qty
|
||||
entry_price = (old_notional + new_notional) / entry_qty
|
||||
entry_margin += margin
|
||||
pyramid_count += 1
|
||||
else:
|
||||
position = side
|
||||
entry_price = px
|
||||
entry_qty = qty
|
||||
entry_margin = margin
|
||||
pyramid_count = 0
|
||||
|
||||
for i in range(n - 1):
|
||||
ts = idx[i]
|
||||
bar_day = ts.date()
|
||||
|
||||
if bar_day != current_day:
|
||||
current_day = bar_day
|
||||
day_start_equity = balance + unrealised(arr_close[i])
|
||||
day_pnl = 0.0
|
||||
day_stopped = False
|
||||
rebate_applied_today = False
|
||||
|
||||
if (not rebate_applied_today) and ts.hour >= cfg.rebate_hour_utc:
|
||||
prev_day = bar_day - pd.Timedelta(days=1)
|
||||
prev_fee = day_fees.get(prev_day, 0.0)
|
||||
if prev_fee > 0:
|
||||
rebate = prev_fee * cfg.rebate_pct
|
||||
balance += rebate
|
||||
total_rebate += rebate
|
||||
rebate_applied_today = True
|
||||
|
||||
if not day_stopped:
|
||||
if day_pnl + unrealised(arr_close[i]) <= -cfg.max_daily_loss:
|
||||
close_position(arr_open[i + 1], i + 1)
|
||||
day_stopped = True
|
||||
|
||||
if cfg.liq_enabled and position != 0 and entry_margin > 0:
|
||||
liq_threshold = 1.0 / cfg.leverage * (1 - cfg.maint_margin_rate)
|
||||
if position == 1:
|
||||
liq_price = entry_price * (1 - liq_threshold)
|
||||
if arr_low[i] <= liq_price:
|
||||
balance -= entry_margin
|
||||
day_pnl -= entry_margin
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_qty = 0.0
|
||||
entry_margin = 0.0
|
||||
pyramid_count = 0
|
||||
trades += 1
|
||||
liq_count += 1
|
||||
elif position == -1:
|
||||
liq_price = entry_price * (1 + liq_threshold)
|
||||
if arr_high[i] >= liq_price:
|
||||
balance -= entry_margin
|
||||
day_pnl -= entry_margin
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_qty = 0.0
|
||||
entry_margin = 0.0
|
||||
pyramid_count = 0
|
||||
trades += 1
|
||||
liq_count += 1
|
||||
|
||||
if day_stopped or np.isnan(upper[i]) or np.isnan(lower[i]):
|
||||
equity_arr[i] = balance + unrealised(arr_close[i])
|
||||
position_arr[i] = position
|
||||
if balance <= 0:
|
||||
balance = 0.0
|
||||
equity_arr[i:] = 0.0
|
||||
position_arr[i:] = 0
|
||||
break
|
||||
continue
|
||||
|
||||
touched_upper = arr_high[i] >= upper[i]
|
||||
touched_lower = arr_low[i] <= lower[i]
|
||||
exec_px = arr_open[i + 1]
|
||||
|
||||
if touched_upper and touched_lower:
|
||||
pass
|
||||
elif touched_upper:
|
||||
if position == 1:
|
||||
close_position(exec_px, i + 1)
|
||||
if position == 0:
|
||||
open_position(-1, exec_px, i + 1, is_add=False)
|
||||
elif position == -1 and pyramid_count < cfg.pyramid_max:
|
||||
open_position(-1, exec_px, i + 1, is_add=True)
|
||||
elif touched_lower:
|
||||
if position == -1:
|
||||
close_position(exec_px, i + 1)
|
||||
if position == 0:
|
||||
open_position(1, exec_px, i + 1, is_add=False)
|
||||
elif position == 1 and pyramid_count < cfg.pyramid_max:
|
||||
open_position(1, exec_px, i + 1, is_add=True)
|
||||
|
||||
equity_arr[i] = balance + unrealised(arr_close[i])
|
||||
position_arr[i] = position
|
||||
|
||||
if balance <= 0:
|
||||
balance = 0.0
|
||||
equity_arr[i:] = 0.0
|
||||
position_arr[i:] = 0
|
||||
break
|
||||
|
||||
if position != 0 and balance > 0:
|
||||
close_position(arr_close[-1], n - 1)
|
||||
|
||||
equity_arr[-1] = balance
|
||||
position_arr[-1] = 0
|
||||
|
||||
eq_df = pd.DataFrame({"equity": equity_arr, "position": position_arr}, index=idx)
|
||||
daily = eq_df["equity"].resample("1D").last().dropna().to_frame("equity")
|
||||
daily["pnl"] = daily["equity"].diff().fillna(0.0)
|
||||
|
||||
return {
|
||||
"equity_curve": eq_df,
|
||||
"daily": daily,
|
||||
"final_equity": float(daily["equity"].iloc[-1]),
|
||||
"trade_count": int(trades),
|
||||
"win_rate": float(win_trades / max(trades, 1)),
|
||||
"liq_count": int(liq_count),
|
||||
"total_fee": float(total_fee),
|
||||
"total_rebate": float(total_rebate),
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
df = load_klines("15m", "2020-01-01", "2026-01-01")
|
||||
cfg = ConservativeConfig()
|
||||
result = run_conservative(df, cfg)
|
||||
|
||||
daily = result["daily"]
|
||||
eq = daily["equity"].astype(float)
|
||||
pnl = daily["pnl"].astype(float)
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - cfg.initial_capital) / cfg.initial_capital * 100
|
||||
max_dd = float((eq - eq.cummax()).min()) if len(eq) else 0.0
|
||||
sharpe = float(pnl.mean() / pnl.std() * np.sqrt(365)) if pnl.std() > 0 else 0.0
|
||||
|
||||
print("=" * 110)
|
||||
print("Conservative BB(10,2.5) | 15m | 2020-2025 | 200U | fee 0.05% each side | 90% rebate next day 08:00")
|
||||
print("=" * 110)
|
||||
print(f"Final equity: {final_eq:.8f} U")
|
||||
print(f"Return: {ret_pct:+.2f}%")
|
||||
print(f"Trades: {result['trade_count']}")
|
||||
print(f"Win rate: {result['win_rate']*100:.2f}%")
|
||||
print(f"Liquidations: {result['liq_count']}")
|
||||
print(f"Max drawdown: {max_dd:.2f} U")
|
||||
print(f"Total fee: {result['total_fee']:.8f}")
|
||||
print(f"Total rebate: {result['total_rebate']:.8f}")
|
||||
print(f"Sharpe: {sharpe:.4f}")
|
||||
print("-" * 110)
|
||||
for year in range(2020, 2026):
|
||||
m = daily.index.year == year
|
||||
if m.any():
|
||||
print(f"{year} year-end equity: {float(daily.loc[m, 'equity'].iloc[-1]):.8f} U")
|
||||
print("=" * 110)
|
||||
|
||||
out_dir = Path(__file__).resolve().parent / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
out_csv = out_dir / "bb_15m_2020_2025_conservative_daily.csv"
|
||||
daily.to_csv(out_csv)
|
||||
print(f"Saved daily equity: {out_csv}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,147 +0,0 @@
|
||||
"""
|
||||
BB(10, 2.5) 均值回归策略回测 — 2020-2025 逐年
|
||||
完全复现 bb_trade.py 的参数: BB(10,2.5) | 50x | 1%权益/单 | 1000U初始资金
|
||||
|
||||
测试两种手续费场景:
|
||||
A) 0.06% taker (无返佣)
|
||||
B) 0.025% maker + 返佣 (模拟浏览器下单)
|
||||
"""
|
||||
import sys, time
|
||||
sys.stdout.reconfigure(line_buffering=True)
|
||||
sys.path.insert(0, str(__import__("pathlib").Path(__file__).resolve().parents[1]))
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import matplotlib
|
||||
matplotlib.use("Agg")
|
||||
import matplotlib.pyplot as plt
|
||||
from pathlib import Path
|
||||
|
||||
from strategy.bb_backtest import BBConfig, run_bb_backtest
|
||||
from strategy.data_loader import load_klines
|
||||
|
||||
out_dir = Path(__file__).resolve().parent / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# ============================================================
|
||||
# 加载数据
|
||||
# ============================================================
|
||||
YEARS = list(range(2020, 2027))
|
||||
data = {}
|
||||
|
||||
print("加载 5 分钟 K 线数据...")
|
||||
t0 = time.time()
|
||||
for y in YEARS:
|
||||
df = load_klines('5m', f'{y}-01-01', f'{y+1}-01-01')
|
||||
data[y] = df
|
||||
print(f" {y}: {len(df):>7,} 条 ({df.index[0]} ~ {df.index[-1]})")
|
||||
print(f"数据加载完成 ({time.time()-t0:.1f}s)\n")
|
||||
|
||||
# ============================================================
|
||||
# 配置 (完全匹配 bb_trade.py)
|
||||
# ============================================================
|
||||
BASE_KWARGS = dict(
|
||||
bb_period=10,
|
||||
bb_std=2.5,
|
||||
leverage=50,
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01, # 1% 权益/单
|
||||
max_daily_loss=50.0,
|
||||
fee_rate=0.0005, # 万五 (0.05%) 每侧
|
||||
rebate_rate=0.0,
|
||||
rebate_pct=0.90, # 90% 手续费次日返还
|
||||
rebate_hour_utc=0, # UTC 0点 = 北京时间早上8点
|
||||
)
|
||||
|
||||
configs = {
|
||||
"A) 原版(不加仓)": BBConfig(**BASE_KWARGS, pyramid_enabled=False),
|
||||
"B) 衰减加仓 decay=0.99 max=10": BBConfig(**BASE_KWARGS, pyramid_enabled=True, pyramid_decay=0.99, pyramid_max=10),
|
||||
"C) 衰减加仓 decay=0.99 max=3": BBConfig(**BASE_KWARGS, pyramid_enabled=True, pyramid_decay=0.99, pyramid_max=3),
|
||||
"D) 递增加仓 +1%/次 max=3": BBConfig(**BASE_KWARGS, pyramid_enabled=True, pyramid_step=0.01, pyramid_max=3),
|
||||
"E) 递增加仓 +1%/次 max=10": BBConfig(**BASE_KWARGS, pyramid_enabled=True, pyramid_step=0.01, pyramid_max=10),
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# 运行回测
|
||||
# ============================================================
|
||||
all_results = {}
|
||||
|
||||
for label, cfg in configs.items():
|
||||
print("=" * 100)
|
||||
print(f" {label}")
|
||||
print(f" BB({cfg.bb_period}, {cfg.bb_std}) | {cfg.leverage}x | margin_pct={cfg.margin_pct:.0%} | fee={cfg.fee_rate:.4%}")
|
||||
print("=" * 100)
|
||||
print(f" {'年份':>6s} {'最终权益':>10s} {'收益率':>8s} {'日均PnL':>8s} {'交易次数':>8s} {'胜率':>6s} "
|
||||
f"{'最大回撤':>10s} {'总手续费':>10s} {'总返佣':>10s} {'Sharpe':>7s}")
|
||||
print("-" * 100)
|
||||
|
||||
year_results = {}
|
||||
for y in YEARS:
|
||||
r = run_bb_backtest(data[y], cfg)
|
||||
d = r.daily_stats
|
||||
pnl = d["pnl"].astype(float)
|
||||
eq = d["equity"].astype(float)
|
||||
dd = float((eq - eq.cummax()).min())
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - cfg.initial_capital) / cfg.initial_capital * 100
|
||||
n_trades = len(r.trades)
|
||||
win_rate = sum(1 for t in r.trades if t.net_pnl > 0) / max(n_trades, 1) * 100
|
||||
avg_daily = float(pnl.mean())
|
||||
sharpe = float(pnl.mean() / pnl.std()) * np.sqrt(365) if pnl.std() > 0 else 0
|
||||
|
||||
year_results[y] = r
|
||||
|
||||
print(f" {y:>6d} {final_eq:>10.1f} {ret_pct:>+7.1f}% {avg_daily:>+7.2f}U "
|
||||
f"{n_trades:>8d} {win_rate:>5.1f}% {dd:>+10.1f} "
|
||||
f"{r.total_fee:>10.1f} {r.total_rebate:>10.1f} {sharpe:>7.2f}")
|
||||
|
||||
all_results[label] = year_results
|
||||
print()
|
||||
|
||||
# ============================================================
|
||||
# 生成图表
|
||||
# ============================================================
|
||||
fig, axes = plt.subplots(len(configs), 1, figsize=(18, 6 * len(configs)), dpi=120)
|
||||
if len(configs) == 1:
|
||||
axes = [axes]
|
||||
|
||||
colors = plt.cm.tab10(np.linspace(0, 1, len(YEARS)))
|
||||
|
||||
for ax, (label, year_results) in zip(axes, all_results.items()):
|
||||
for i, y in enumerate(YEARS):
|
||||
r = year_results[y]
|
||||
eq = r.equity_curve["equity"].dropna()
|
||||
# 归一化到天数 (x轴)
|
||||
days = (eq.index - eq.index[0]).total_seconds() / 86400
|
||||
ax.plot(days, eq.values, label=f"{y}", color=colors[i], linewidth=0.8)
|
||||
|
||||
ax.set_title(f"BB(10, 2.5) 50x 1%权益 — {label}", fontsize=13, fontweight="bold")
|
||||
ax.set_xlabel("天数")
|
||||
ax.set_ylabel("权益 (USDT)")
|
||||
ax.axhline(y=1000, color="gray", linestyle="--", alpha=0.5)
|
||||
ax.legend(loc="upper left", fontsize=9)
|
||||
ax.grid(True, alpha=0.3)
|
||||
|
||||
plt.tight_layout()
|
||||
chart_path = out_dir / "bb_trade_2020_2025_report.png"
|
||||
plt.savefig(chart_path, bbox_inches="tight")
|
||||
print(f"\n图表已保存: {chart_path}")
|
||||
|
||||
# ============================================================
|
||||
# 汇总表
|
||||
# ============================================================
|
||||
print("\n" + "=" * 80)
|
||||
print(" 汇总: 各场景各年度日均 PnL (U/day)")
|
||||
print("=" * 80)
|
||||
header = f" {'场景':<35s}" + "".join(f"{y:>10d}" for y in YEARS)
|
||||
print(header)
|
||||
print("-" * 80)
|
||||
for label, year_results in all_results.items():
|
||||
vals = []
|
||||
for y in YEARS:
|
||||
r = year_results[y]
|
||||
avg = float(r.daily_stats["pnl"].astype(float).mean())
|
||||
vals.append(avg)
|
||||
row = f" {label:<35s}" + "".join(f"{v:>+10.2f}" for v in vals)
|
||||
print(row)
|
||||
print("=" * 80)
|
||||
@@ -1,69 +0,0 @@
|
||||
"""
|
||||
BB(10, 2.5) 均值回归策略回测 — 2026/02/23 ~ 现在,本金 100U
|
||||
完全复现 bb_trade.py 的参数: BB(10,2.5) | 50x | 1%权益/单 | 递增加仓 +1%/次 max=3
|
||||
"""
|
||||
import sys
|
||||
sys.path.insert(0, str(__import__("pathlib").Path(__file__).resolve().parents[1]))
|
||||
|
||||
import numpy as np
|
||||
from pathlib import Path
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from strategy.bb_backtest import BBConfig, run_bb_backtest
|
||||
from strategy.data_loader import load_klines
|
||||
|
||||
# 加载 2026-02-23 至今天的数据 (end_date 不包含,用明天确保含今天)
|
||||
today = datetime.now().strftime("%Y-%m-%d")
|
||||
END_DATE = (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%d")
|
||||
df = load_klines('5m', '2026-02-23', END_DATE)
|
||||
print(f"数据: 2026-02-23 ~ {today}, 共 {len(df):,} 根 5 分钟 K 线")
|
||||
|
||||
# 配置:完全匹配 bb_trade.py D方案
|
||||
cfg = BBConfig(
|
||||
bb_period=10,
|
||||
bb_std=2.5,
|
||||
leverage=50,
|
||||
initial_capital=100.0, # 本金 100U
|
||||
margin_pct=0.01, # 1% 权益/单
|
||||
pyramid_enabled=True,
|
||||
pyramid_step=0.01, # 递增加仓 +1%/次
|
||||
pyramid_max=3,
|
||||
max_daily_loss=50.0,
|
||||
fee_rate=0.0005,
|
||||
rebate_rate=0.0,
|
||||
rebate_pct=0.90,
|
||||
rebate_hour_utc=0,
|
||||
)
|
||||
|
||||
r = run_bb_backtest(df, cfg)
|
||||
|
||||
# 结果
|
||||
d = r.daily_stats
|
||||
pnl = d["pnl"].astype(float)
|
||||
eq = d["equity"].astype(float)
|
||||
final = float(eq.iloc[-1])
|
||||
dd = float((eq - eq.cummax()).min())
|
||||
ret_pct = (final - cfg.initial_capital) / cfg.initial_capital * 100
|
||||
nt = len(r.trades)
|
||||
wr = sum(1 for t in r.trades if t.net_pnl > 0) / max(nt, 1) * 100
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print(" 回测结果 (BB 均值回归 | 2026/02/23 ~ 现在 | 本金 100U)")
|
||||
print("=" * 60)
|
||||
print(f" 最终权益: {final:,.2f} U")
|
||||
print(f" 收益: {final - cfg.initial_capital:+,.2f} U ({ret_pct:+.1f}%)")
|
||||
print(f" 最大回撤: {dd:+,.2f} U")
|
||||
print(f" 交易次数: {nt}")
|
||||
print(f" 胜率: {wr:.1f}%")
|
||||
print(f" 总手续费: {r.total_fee:.2f} U")
|
||||
print(f" 总返佣: {r.total_rebate:.2f} U")
|
||||
print("=" * 60)
|
||||
|
||||
# 打印每日收益
|
||||
if len(d) > 1:
|
||||
print("\n每日收益:")
|
||||
for idx, row in d.iterrows():
|
||||
day_str = idx.strftime("%Y-%m-%d") if hasattr(idx, 'strftime') else str(idx)[:10]
|
||||
p = row["pnl"]
|
||||
e = row["equity"]
|
||||
print(f" {day_str}: PnL {p:+.2f} U, 权益 {e:.2f} U")
|
||||
@@ -1,67 +0,0 @@
|
||||
"""
|
||||
bb_trade.py 策略回测 — 2026年2月,输出详细交易明细
|
||||
200U 本金 | 1% 仓位/单 | 万五手续费 | 90% 返佣次日8点到账
|
||||
按北京时间加载数据 (与交易所/网页显示一致)
|
||||
"""
|
||||
import sys
|
||||
sys.path.insert(0, str(__import__("pathlib").Path(__file__).resolve().parents[1]))
|
||||
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
|
||||
from strategy.bb_backtest import BBConfig, run_bb_backtest
|
||||
from strategy.data_loader import load_klines
|
||||
|
||||
out_dir = Path(__file__).resolve().parent / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# 按北京时间加载 2026-02-01 00:00 ~ 2026-03-01 00:00
|
||||
df = load_klines('5m', '2026-02-01', '2026-03-01', tz='Asia/Shanghai')
|
||||
|
||||
cfg = BBConfig(
|
||||
bb_period=10, bb_std=2.5, leverage=50, initial_capital=200.0,
|
||||
margin_pct=0.01, max_daily_loss=50.0, fee_rate=0.0005,
|
||||
rebate_pct=0.90, rebate_hour_utc=0, pyramid_enabled=False, # 不加仓
|
||||
pyramid_step=0.01, pyramid_max=3, slippage_pct=0.0, liq_enabled=True,
|
||||
cross_margin=True, # 全仓:仅权益<=0 时爆仓
|
||||
fill_at_close=True, # 真实成交:检测到信号后在 K 线收盘价成交
|
||||
)
|
||||
|
||||
r = run_bb_backtest(df, cfg)
|
||||
|
||||
# 数据库/回测使用 UTC,转为北京时间输出
|
||||
def to_beijing(ts):
|
||||
if hasattr(ts, 'tz_localize'):
|
||||
return ts.tz_localize('UTC').tz_convert('Asia/Shanghai').strftime('%Y-%m-%d %H:%M:%S')
|
||||
return str(ts)[:19]
|
||||
|
||||
# 构建交易明细 DataFrame
|
||||
rows = []
|
||||
for i, t in enumerate(r.trades, 1):
|
||||
rows.append({
|
||||
"序号": i,
|
||||
"方向": "做多" if t.side == "long" else "做空",
|
||||
"开仓时间": to_beijing(t.entry_time),
|
||||
"平仓时间": to_beijing(t.exit_time),
|
||||
"开仓价": round(t.entry_price, 2),
|
||||
"平仓价": round(t.exit_price, 2),
|
||||
"保证金": round(t.margin, 2),
|
||||
"杠杆": t.leverage,
|
||||
"数量": round(t.qty, 4),
|
||||
"毛盈亏": round(t.gross_pnl, 2),
|
||||
"手续费": round(t.fee, 2),
|
||||
"净盈亏": round(t.net_pnl, 2),
|
||||
})
|
||||
|
||||
trade_df = pd.DataFrame(rows)
|
||||
|
||||
# 保存 CSV
|
||||
csv_path = out_dir / "bb_202602_trade_detail.csv"
|
||||
trade_df.to_csv(csv_path, index=False, encoding="utf-8-sig")
|
||||
print(f"交易明细已保存: {csv_path}")
|
||||
|
||||
# 打印到控制台
|
||||
print("\n" + "=" * 150)
|
||||
print(f" 交易明细 (共 {len(r.trades)} 笔)")
|
||||
print("=" * 150)
|
||||
print(trade_df.to_string(index=False))
|
||||
@@ -1,381 +0,0 @@
|
||||
"""
|
||||
Practical upgraded BB backtest on 5m ETH data (2020-2025).
|
||||
|
||||
Execution model (conservative):
|
||||
1) BB uses closed bars only (shift by 1 bar).
|
||||
2) Signal on bar i, execution at bar i+1 open.
|
||||
3) Fee = 0.05% each side, rebate = 90% next day at UTC 00:00 (UTC+8 08:00).
|
||||
4) Daily loss stop, liquidation, and slippage are enabled.
|
||||
|
||||
Compares:
|
||||
- Baseline: BB(30, 3.0), 1x, no trend filter.
|
||||
- Practical: BB(30, 3.2), 1x, EMA trend filter, BB width filter, cooldown.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from strategy.data_loader import load_klines
|
||||
|
||||
|
||||
@dataclass
|
||||
class PracticalConfig:
|
||||
bb_period: int = 30
|
||||
bb_std: float = 3.2
|
||||
leverage: float = 1.0
|
||||
initial_capital: float = 200.0
|
||||
margin_pct: float = 0.01
|
||||
fee_rate: float = 0.0005
|
||||
rebate_pct: float = 0.90
|
||||
rebate_hour_utc: int = 0
|
||||
slippage_pct: float = 0.0005
|
||||
liq_enabled: bool = True
|
||||
maint_margin_rate: float = 0.005
|
||||
max_daily_loss: float = 50.0
|
||||
|
||||
# Practical risk controls
|
||||
trend_ema_period: int = 288 # 288 * 5m = 24h EMA
|
||||
min_bandwidth: float = 0.01 # (upper-lower)/mid minimum
|
||||
cooldown_bars: int = 6 # 6 * 5m = 30 minutes
|
||||
|
||||
|
||||
def run_practical_backtest(df: pd.DataFrame, cfg: PracticalConfig):
|
||||
arr_open = df["open"].to_numpy(dtype=float)
|
||||
arr_high = df["high"].to_numpy(dtype=float)
|
||||
arr_low = df["low"].to_numpy(dtype=float)
|
||||
arr_close = df["close"].to_numpy(dtype=float)
|
||||
idx = df.index
|
||||
n = len(df)
|
||||
|
||||
close_s = df["close"].astype(float)
|
||||
mid = close_s.rolling(cfg.bb_period).mean().shift(1)
|
||||
std = close_s.rolling(cfg.bb_period).std(ddof=0).shift(1)
|
||||
upper_s = mid + cfg.bb_std * std
|
||||
lower_s = mid - cfg.bb_std * std
|
||||
bandwidth_s = (upper_s - lower_s) / mid
|
||||
|
||||
upper = upper_s.to_numpy(dtype=float)
|
||||
lower = lower_s.to_numpy(dtype=float)
|
||||
bandwidth = bandwidth_s.to_numpy(dtype=float)
|
||||
|
||||
if cfg.trend_ema_period > 0:
|
||||
trend_ema = close_s.ewm(span=cfg.trend_ema_period, adjust=False).mean().shift(1).to_numpy(dtype=float)
|
||||
else:
|
||||
trend_ema = np.full(n, np.nan)
|
||||
|
||||
balance = cfg.initial_capital
|
||||
position = 0 # +1 long, -1 short
|
||||
entry_price = 0.0
|
||||
entry_qty = 0.0
|
||||
entry_margin = 0.0
|
||||
|
||||
trades = 0
|
||||
win_trades = 0
|
||||
liq_count = 0
|
||||
total_fee = 0.0
|
||||
total_rebate = 0.0
|
||||
|
||||
current_day = None
|
||||
day_pnl = 0.0
|
||||
day_stopped = False
|
||||
rebate_applied_today = False
|
||||
next_trade_bar = 0
|
||||
day_fees = {}
|
||||
|
||||
equity_arr = np.full(n, np.nan)
|
||||
position_arr = np.zeros(n)
|
||||
|
||||
def unrealised(price: float) -> float:
|
||||
if position == 0:
|
||||
return 0.0
|
||||
if position == 1:
|
||||
return entry_qty * (price - entry_price)
|
||||
return entry_qty * (entry_price - price)
|
||||
|
||||
def apply_open_slippage(side: int, price: float) -> float:
|
||||
return price * (1 + cfg.slippage_pct) if side == 1 else price * (1 - cfg.slippage_pct)
|
||||
|
||||
def apply_close_slippage(side: int, price: float) -> float:
|
||||
return price * (1 - cfg.slippage_pct) if side == 1 else price * (1 + cfg.slippage_pct)
|
||||
|
||||
def add_fee(ts: pd.Timestamp, fee: float):
|
||||
nonlocal total_fee
|
||||
total_fee += fee
|
||||
d = ts.date()
|
||||
day_fees[d] = day_fees.get(d, 0.0) + fee
|
||||
|
||||
def close_position(exec_price: float, exec_idx: int):
|
||||
nonlocal balance, position, entry_price, entry_qty, entry_margin
|
||||
nonlocal trades, win_trades, day_pnl
|
||||
if position == 0:
|
||||
return
|
||||
|
||||
px = apply_close_slippage(position, exec_price)
|
||||
gross = entry_qty * (px - entry_price) if position == 1 else entry_qty * (entry_price - px)
|
||||
notional = entry_qty * px
|
||||
fee = notional * cfg.fee_rate
|
||||
net = gross - fee
|
||||
|
||||
balance += net
|
||||
add_fee(idx[exec_idx], fee)
|
||||
day_pnl += net
|
||||
trades += 1
|
||||
if net > 0:
|
||||
win_trades += 1
|
||||
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_qty = 0.0
|
||||
entry_margin = 0.0
|
||||
|
||||
def open_position(side: int, exec_price: float, exec_idx: int):
|
||||
nonlocal balance, position, entry_price, entry_qty, entry_margin
|
||||
nonlocal day_pnl
|
||||
px = apply_open_slippage(side, exec_price)
|
||||
eq = balance + unrealised(px)
|
||||
margin = min(eq * cfg.margin_pct, balance * 0.95)
|
||||
if margin <= 0:
|
||||
return
|
||||
|
||||
notional = margin * cfg.leverage
|
||||
qty = notional / px
|
||||
fee = notional * cfg.fee_rate
|
||||
|
||||
balance -= fee
|
||||
add_fee(idx[exec_idx], fee)
|
||||
day_pnl -= fee
|
||||
|
||||
position = side
|
||||
entry_price = px
|
||||
entry_qty = qty
|
||||
entry_margin = margin
|
||||
|
||||
for i in range(n - 1):
|
||||
ts = idx[i]
|
||||
bar_day = ts.date()
|
||||
|
||||
if bar_day != current_day:
|
||||
current_day = bar_day
|
||||
day_pnl = 0.0
|
||||
day_stopped = False
|
||||
rebate_applied_today = False
|
||||
|
||||
# Fee rebate settlement (next day 08:00 UTC+8 = UTC 00:00)
|
||||
if (not rebate_applied_today) and ts.hour >= cfg.rebate_hour_utc:
|
||||
prev_day = bar_day - pd.Timedelta(days=1)
|
||||
prev_fee = day_fees.get(prev_day, 0.0)
|
||||
if prev_fee > 0:
|
||||
rebate = prev_fee * cfg.rebate_pct
|
||||
balance += rebate
|
||||
total_rebate += rebate
|
||||
rebate_applied_today = True
|
||||
|
||||
# Daily loss stop
|
||||
if not day_stopped and (day_pnl + unrealised(arr_close[i]) <= -cfg.max_daily_loss):
|
||||
close_position(arr_open[i + 1], i + 1)
|
||||
day_stopped = True
|
||||
|
||||
# Liquidation check
|
||||
if cfg.liq_enabled and position != 0 and entry_margin > 0:
|
||||
liq_threshold = 1.0 / cfg.leverage * (1 - cfg.maint_margin_rate)
|
||||
if position == 1:
|
||||
liq_price = entry_price * (1 - liq_threshold)
|
||||
if arr_low[i] <= liq_price:
|
||||
balance -= entry_margin
|
||||
day_pnl -= entry_margin
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_qty = 0.0
|
||||
entry_margin = 0.0
|
||||
trades += 1
|
||||
liq_count += 1
|
||||
else:
|
||||
liq_price = entry_price * (1 + liq_threshold)
|
||||
if arr_high[i] >= liq_price:
|
||||
balance -= entry_margin
|
||||
day_pnl -= entry_margin
|
||||
position = 0
|
||||
entry_price = 0.0
|
||||
entry_qty = 0.0
|
||||
entry_margin = 0.0
|
||||
trades += 1
|
||||
liq_count += 1
|
||||
|
||||
if (
|
||||
day_stopped
|
||||
or i < next_trade_bar
|
||||
or np.isnan(upper[i])
|
||||
or np.isnan(lower[i])
|
||||
or np.isnan(bandwidth[i])
|
||||
):
|
||||
equity_arr[i] = balance + unrealised(arr_close[i])
|
||||
position_arr[i] = position
|
||||
if balance <= 0:
|
||||
balance = 0.0
|
||||
equity_arr[i:] = 0.0
|
||||
position_arr[i:] = 0
|
||||
break
|
||||
continue
|
||||
|
||||
if cfg.trend_ema_period > 0 and np.isnan(trend_ema[i]):
|
||||
equity_arr[i] = balance + unrealised(arr_close[i])
|
||||
position_arr[i] = position
|
||||
continue
|
||||
|
||||
if bandwidth[i] < cfg.min_bandwidth:
|
||||
equity_arr[i] = balance + unrealised(arr_close[i])
|
||||
position_arr[i] = position
|
||||
continue
|
||||
|
||||
touched_upper = arr_high[i] >= upper[i]
|
||||
touched_lower = arr_low[i] <= lower[i]
|
||||
exec_px = arr_open[i + 1]
|
||||
|
||||
if cfg.trend_ema_period > 0:
|
||||
long_ok = arr_close[i] > trend_ema[i]
|
||||
short_ok = arr_close[i] < trend_ema[i]
|
||||
else:
|
||||
long_ok = True
|
||||
short_ok = True
|
||||
|
||||
if touched_upper and touched_lower:
|
||||
pass
|
||||
elif touched_upper:
|
||||
if position == 1:
|
||||
close_position(exec_px, i + 1)
|
||||
next_trade_bar = max(next_trade_bar, i + 1 + cfg.cooldown_bars)
|
||||
if position == 0 and short_ok:
|
||||
open_position(-1, exec_px, i + 1)
|
||||
next_trade_bar = max(next_trade_bar, i + 1 + cfg.cooldown_bars)
|
||||
elif touched_lower:
|
||||
if position == -1:
|
||||
close_position(exec_px, i + 1)
|
||||
next_trade_bar = max(next_trade_bar, i + 1 + cfg.cooldown_bars)
|
||||
if position == 0 and long_ok:
|
||||
open_position(1, exec_px, i + 1)
|
||||
next_trade_bar = max(next_trade_bar, i + 1 + cfg.cooldown_bars)
|
||||
|
||||
equity_arr[i] = balance + unrealised(arr_close[i])
|
||||
position_arr[i] = position
|
||||
|
||||
if balance <= 0:
|
||||
balance = 0.0
|
||||
equity_arr[i:] = 0.0
|
||||
position_arr[i:] = 0
|
||||
break
|
||||
|
||||
if position != 0 and balance > 0:
|
||||
close_position(arr_close[-1], n - 1)
|
||||
|
||||
equity_arr[-1] = balance
|
||||
position_arr[-1] = 0
|
||||
|
||||
eq_df = pd.DataFrame({"equity": equity_arr, "position": position_arr}, index=idx)
|
||||
daily = eq_df["equity"].resample("1D").last().dropna().to_frame("equity")
|
||||
daily["pnl"] = daily["equity"].diff().fillna(0.0)
|
||||
|
||||
return {
|
||||
"equity_curve": eq_df,
|
||||
"daily": daily,
|
||||
"final_equity": float(daily["equity"].iloc[-1]),
|
||||
"trade_count": int(trades),
|
||||
"win_rate": float(win_trades / max(trades, 1)),
|
||||
"liq_count": int(liq_count),
|
||||
"total_fee": float(total_fee),
|
||||
"total_rebate": float(total_rebate),
|
||||
}
|
||||
|
||||
|
||||
def summarize(label: str, result: dict, initial_capital: float):
|
||||
daily = result["daily"]
|
||||
eq = daily["equity"].astype(float)
|
||||
pnl = daily["pnl"].astype(float)
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - initial_capital) / initial_capital * 100
|
||||
max_dd = float((eq - eq.cummax()).min()) if len(eq) else 0.0
|
||||
sharpe = float(pnl.mean() / pnl.std() * np.sqrt(365)) if pnl.std() > 0 else 0.0
|
||||
|
||||
print(f"[{label}]")
|
||||
print(f" Final equity: {final_eq:.6f} U")
|
||||
print(f" Return: {ret_pct:+.4f}%")
|
||||
print(f" Trades: {result['trade_count']} | Win rate: {result['win_rate']*100:.2f}% | Liquidations: {result['liq_count']}")
|
||||
print(f" Max drawdown: {max_dd:.6f} U | Sharpe: {sharpe:.4f}")
|
||||
print(f" Total fee: {result['total_fee']:.6f} | Total rebate: {result['total_rebate']:.6f}")
|
||||
print(" Year-end equity:")
|
||||
for year in range(2020, 2026):
|
||||
m = daily.index.year == year
|
||||
if m.any():
|
||||
print(f" {year}: {float(daily.loc[m, 'equity'].iloc[-1]):.6f} U")
|
||||
print()
|
||||
|
||||
return {
|
||||
"label": label,
|
||||
"final_equity": final_eq,
|
||||
"return_pct": ret_pct,
|
||||
"trade_count": result["trade_count"],
|
||||
"win_rate_pct": result["win_rate"] * 100,
|
||||
"liq_count": result["liq_count"],
|
||||
"max_drawdown": max_dd,
|
||||
"total_fee": result["total_fee"],
|
||||
"total_rebate": result["total_rebate"],
|
||||
"sharpe": sharpe,
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
df = load_klines("5m", "2020-01-01", "2026-01-01")
|
||||
|
||||
baseline_cfg = PracticalConfig(
|
||||
bb_period=30,
|
||||
bb_std=3.0,
|
||||
leverage=1.0,
|
||||
trend_ema_period=0,
|
||||
min_bandwidth=0.0,
|
||||
cooldown_bars=0,
|
||||
)
|
||||
practical_cfg = PracticalConfig(
|
||||
bb_period=30,
|
||||
bb_std=3.2,
|
||||
leverage=1.0,
|
||||
trend_ema_period=288,
|
||||
min_bandwidth=0.01,
|
||||
cooldown_bars=6,
|
||||
)
|
||||
|
||||
print("=" * 118)
|
||||
print("Practical Upgrade Backtest | 5m | 2020-2025 | capital=200U | fee=0.05% each side | rebate=90% next day 08:00")
|
||||
print("=" * 118)
|
||||
print("Execution: signal at bar i, fill at bar i+1 open (conservative)")
|
||||
print()
|
||||
|
||||
baseline = run_practical_backtest(df, baseline_cfg)
|
||||
practical = run_practical_backtest(df, practical_cfg)
|
||||
|
||||
summary_rows = []
|
||||
summary_rows.append(summarize("Baseline (BB30/3.0, no filters)", baseline, baseline_cfg.initial_capital))
|
||||
summary_rows.append(summarize("Practical (BB30/3.2 + EMA + BW + cooldown)", practical, practical_cfg.initial_capital))
|
||||
|
||||
out_dir = Path(__file__).resolve().parent / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
baseline_daily = baseline["daily"].rename(columns={"equity": "baseline_equity", "pnl": "baseline_pnl"})
|
||||
practical_daily = practical["daily"].rename(columns={"equity": "practical_equity", "pnl": "practical_pnl"})
|
||||
daily_compare = baseline_daily.join(practical_daily, how="outer")
|
||||
daily_compare.to_csv(out_dir / "bb_5m_practical_upgrade_daily.csv")
|
||||
|
||||
pd.DataFrame(summary_rows).to_csv(out_dir / "bb_5m_practical_upgrade_summary.csv", index=False)
|
||||
|
||||
print(f"Saved: {out_dir / 'bb_5m_practical_upgrade_daily.csv'}")
|
||||
print(f"Saved: {out_dir / 'bb_5m_practical_upgrade_summary.csv'}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,199 +0,0 @@
|
||||
"""Run Bollinger Band mean-reversion backtest on ETH 2023+2024.
|
||||
|
||||
Preloads data once, then sweeps parameters in-memory for speed.
|
||||
"""
|
||||
import sys, time
|
||||
sys.stdout.reconfigure(line_buffering=True)
|
||||
sys.path.insert(0, str(__import__("pathlib").Path(__file__).resolve().parents[1]))
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import matplotlib
|
||||
matplotlib.use("Agg")
|
||||
import matplotlib.pyplot as plt
|
||||
from pathlib import Path
|
||||
from collections import defaultdict
|
||||
|
||||
from strategy.bb_backtest import BBConfig, run_bb_backtest
|
||||
from strategy.data_loader import KlineSource, load_klines
|
||||
from datetime import datetime, timezone
|
||||
|
||||
root = Path(__file__).resolve().parents[1]
|
||||
src = KlineSource(db_path=root / "models" / "database.db", table_name="bitmart_eth_5m")
|
||||
out_dir = root / "strategy" / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
t0 = time.time()
|
||||
|
||||
# Preload data once
|
||||
print("Loading data...")
|
||||
df_23 = load_klines(src, datetime(2023,1,1,tzinfo=timezone.utc),
|
||||
datetime(2023,12,31,23,59,tzinfo=timezone.utc))
|
||||
df_24 = load_klines(src, datetime(2024,1,1,tzinfo=timezone.utc),
|
||||
datetime(2024,12,31,23,59,tzinfo=timezone.utc))
|
||||
data = {2023: df_23, 2024: df_24}
|
||||
print(f"Loaded: 2023={len(df_23)} bars, 2024={len(df_24)} bars ({time.time()-t0:.1f}s)")
|
||||
|
||||
# ================================================================
|
||||
# Sweep
|
||||
# ================================================================
|
||||
print("\n" + "=" * 120)
|
||||
print(" Bollinger Band Mean-Reversion — ETH 5min | 1000U capital")
|
||||
print(" touch upper BB -> short, touch lower BB -> long (flip)")
|
||||
print("=" * 120)
|
||||
|
||||
results = []
|
||||
|
||||
def test(label, cfg):
|
||||
"""Run on both years, print summary, store results."""
|
||||
row = {"label": label, "cfg": cfg}
|
||||
for year in [2023, 2024]:
|
||||
r = run_bb_backtest(data[year], cfg)
|
||||
d = r.daily_stats
|
||||
pnl = d["pnl"].astype(float)
|
||||
eq = d["equity"].astype(float)
|
||||
dd = float((eq - eq.cummax()).min())
|
||||
final = float(eq.iloc[-1])
|
||||
nt = len(r.trades)
|
||||
wr = sum(1 for t in r.trades if t.net_pnl > 0) / max(nt, 1) * 100
|
||||
nf = r.total_fee - r.total_rebate
|
||||
row[f"a{year}"] = float(pnl.mean())
|
||||
row[f"d{year}"] = dd
|
||||
row[f"r{year}"] = r
|
||||
row[f"n{year}"] = nt
|
||||
row[f"w{year}"] = wr
|
||||
row[f"f{year}"] = nf
|
||||
row[f"eq{year}"] = final
|
||||
mn = min(row["a2023"], row["a2024"])
|
||||
avg = (row["a2023"] + row["a2024"]) / 2
|
||||
mark = " <<<" if mn >= 20 else (" **" if mn >= 10 else "")
|
||||
print(f" {label:52s} 23:{row['a2023']:+6.1f} 24:{row['a2024']:+6.1f} "
|
||||
f"avg:{avg:+5.1f} n23:{row['n2023']:3d} n24:{row['n2024']:3d} "
|
||||
f"dd:{min(row['d2023'],row['d2024']):+7.0f}{mark}")
|
||||
row["mn"] = mn; row["avg"] = avg
|
||||
results.append(row)
|
||||
|
||||
# [1] BB period
|
||||
print("\n[1] Period sweep")
|
||||
for p in [10, 15, 20, 30, 40]:
|
||||
test(f"BB({p},2.0) 80u 100x", BBConfig(bb_period=p, bb_std=2.0, margin_per_trade=80, leverage=100))
|
||||
|
||||
# [2] BB std
|
||||
print("\n[2] Std sweep")
|
||||
for s in [1.5, 1.8, 2.0, 2.5, 3.0]:
|
||||
test(f"BB(20,{s}) 80u 100x", BBConfig(bb_period=20, bb_std=s, margin_per_trade=80, leverage=100))
|
||||
|
||||
# [3] Margin
|
||||
print("\n[3] Margin sweep")
|
||||
for m in [40, 60, 80, 100, 120]:
|
||||
test(f"BB(20,2.0) {m}u 100x", BBConfig(bb_period=20, bb_std=2.0, margin_per_trade=m, leverage=100))
|
||||
|
||||
# [4] SL
|
||||
print("\n[4] Stop-loss sweep")
|
||||
for sl in [0.0, 0.01, 0.02, 0.03, 0.05]:
|
||||
test(f"BB(20,2.0) 80u SL={sl:.0%}", BBConfig(bb_period=20, bb_std=2.0, margin_per_trade=80, leverage=100, stop_loss_pct=sl))
|
||||
|
||||
# [5] MDL
|
||||
print("\n[5] Max daily loss")
|
||||
for mdl in [50, 100, 150, 200]:
|
||||
test(f"BB(20,2.0) 80u mdl={mdl}", BBConfig(bb_period=20, bb_std=2.0, margin_per_trade=80, leverage=100, max_daily_loss=mdl))
|
||||
|
||||
# [6] Combined fine-tune
|
||||
print("\n[6] Fine-tune")
|
||||
for p in [15, 20, 30]:
|
||||
for s in [1.5, 2.0, 2.5]:
|
||||
for m in [80, 100]:
|
||||
test(f"BB({p},{s}) {m}u mdl=150",
|
||||
BBConfig(bb_period=p, bb_std=s, margin_per_trade=m, leverage=100, max_daily_loss=150))
|
||||
|
||||
# ================================================================
|
||||
# Ranking
|
||||
# ================================================================
|
||||
results.sort(key=lambda x: x["mn"], reverse=True)
|
||||
print(f"\n{'='*120}")
|
||||
print(f" TOP 10 — ranked by min(daily_avg_2023, daily_avg_2024)")
|
||||
print(f"{'='*120}")
|
||||
for i, r in enumerate(results[:10]):
|
||||
print(f" {i+1:2d}. {r['label']:50s} 23:{r['a2023']:+6.1f} 24:{r['a2024']:+6.1f} "
|
||||
f"min:{r['mn']:+6.1f} dd:{min(r['d2023'],r['d2024']):+7.0f} "
|
||||
f"wr23:{r['w2023']:.0f}% wr24:{r['w2024']:.0f}%")
|
||||
|
||||
# ================================================================
|
||||
# Detailed report for best
|
||||
# ================================================================
|
||||
best = results[0]
|
||||
print(f"\n{'#'*70}")
|
||||
print(f" BEST: {best['label']}")
|
||||
print(f"{'#'*70}")
|
||||
|
||||
for year in [2023, 2024]:
|
||||
r = best[f"r{year}"]
|
||||
cfg = best["cfg"]
|
||||
d = r.daily_stats
|
||||
pnl = d["pnl"].astype(float)
|
||||
eq = d["equity"].astype(float)
|
||||
dd = (eq - eq.cummax()).min()
|
||||
final = float(eq.iloc[-1])
|
||||
nt = len(r.trades)
|
||||
wr = sum(1 for t in r.trades if t.net_pnl > 0) / max(nt, 1)
|
||||
nf = r.total_fee - r.total_rebate
|
||||
|
||||
loss_streak = max_ls = 0
|
||||
for v in pnl.values:
|
||||
if v < 0: loss_streak += 1; max_ls = max(max_ls, loss_streak)
|
||||
else: loss_streak = 0
|
||||
|
||||
print(f"\n --- {year} ---")
|
||||
print(f" Final equity : {final:,.2f} U ({final-cfg.initial_capital:+,.2f}, "
|
||||
f"{(final-cfg.initial_capital)/cfg.initial_capital*100:+.1f}%)")
|
||||
print(f" Max drawdown : {dd:,.2f} U")
|
||||
print(f" Avg daily PnL : {pnl.mean():+,.2f} U")
|
||||
print(f" Median daily PnL : {pnl.median():+,.2f} U")
|
||||
print(f" Best/worst day : {pnl.max():+,.2f} / {pnl.min():+,.2f}")
|
||||
print(f" Profitable days : {(pnl>0).sum()}/{len(pnl)} ({(pnl>0).mean():.1%})")
|
||||
print(f" Days >= 20U : {(pnl>=20).sum()}")
|
||||
print(f" Max loss streak : {max_ls} days")
|
||||
print(f" Trades : {nt} (win rate {wr:.1%})")
|
||||
print(f" Net fees : {nf:,.0f} U")
|
||||
sharpe = pnl.mean() / max(pnl.std(), 1e-10) * np.sqrt(365)
|
||||
print(f" Sharpe (annual) : {sharpe:.2f}")
|
||||
|
||||
# ================================================================
|
||||
# Chart
|
||||
# ================================================================
|
||||
fig, axes = plt.subplots(3, 2, figsize=(18, 12),
|
||||
gridspec_kw={"height_ratios": [3, 1.5, 1]})
|
||||
|
||||
for col, year in enumerate([2023, 2024]):
|
||||
r = best[f"r{year}"]
|
||||
cfg = best["cfg"]
|
||||
d = r.daily_stats
|
||||
eq = d["equity"].astype(float)
|
||||
pnl = d["pnl"].astype(float)
|
||||
dd = eq - eq.cummax()
|
||||
|
||||
axes[0, col].plot(eq.index, eq.values, linewidth=1.2, color="#1f77b4")
|
||||
axes[0, col].axhline(cfg.initial_capital, color="gray", ls="--", lw=0.5)
|
||||
axes[0, col].set_title(f"BB Strategy Equity — {year}\n"
|
||||
f"BB({cfg.bb_period},{cfg.bb_std}) {cfg.margin_per_trade}u {cfg.leverage:.0f}x",
|
||||
fontsize=11)
|
||||
axes[0, col].set_ylabel("Equity (U)")
|
||||
axes[0, col].grid(True, alpha=0.3)
|
||||
|
||||
colors = ["#2ca02c" if v >= 0 else "#d62728" for v in pnl.values]
|
||||
axes[1, col].bar(pnl.index, pnl.values, color=colors, width=0.8)
|
||||
axes[1, col].axhline(20, color="orange", ls="--", lw=1, label="20U target")
|
||||
axes[1, col].axhline(0, color="gray", lw=0.5)
|
||||
axes[1, col].set_ylabel("Daily PnL (U)")
|
||||
axes[1, col].legend(fontsize=8)
|
||||
axes[1, col].grid(True, alpha=0.3)
|
||||
|
||||
axes[2, col].fill_between(dd.index, dd.values, 0, color="#d62728", alpha=0.4)
|
||||
axes[2, col].set_ylabel("Drawdown (U)")
|
||||
axes[2, col].grid(True, alpha=0.3)
|
||||
|
||||
fig.tight_layout()
|
||||
fig.savefig(out_dir / "bb_strategy_report.png", dpi=150)
|
||||
plt.close(fig)
|
||||
print(f"\nChart: {out_dir / 'bb_strategy_report.png'}")
|
||||
print(f"Total time: {time.time()-t0:.0f}s")
|
||||
@@ -1,197 +0,0 @@
|
||||
"""
|
||||
回测 bb_trade.py 的 D方案策略
|
||||
BB(10, 2.5) | 5分钟 | ETH | 50x | 递增加仓+1%/次 max=3
|
||||
200U 本金 | 每次开仓 1% 权益 | 开平仓手续费万五 | 返佣90%次日早8点到账
|
||||
"""
|
||||
import sys, time
|
||||
sys.stdout.reconfigure(line_buffering=True)
|
||||
sys.path.insert(0, str(__import__("pathlib").Path(__file__).resolve().parents[1]))
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import matplotlib
|
||||
matplotlib.use("Agg")
|
||||
import matplotlib.pyplot as plt
|
||||
from pathlib import Path
|
||||
|
||||
from strategy.bb_backtest import BBConfig, run_bb_backtest
|
||||
from strategy.data_loader import load_klines
|
||||
|
||||
out_dir = Path(__file__).resolve().parent / "results"
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# ============================================================
|
||||
# 加载数据 2020-2025
|
||||
# ============================================================
|
||||
YEARS = list(range(2020, 2026))
|
||||
|
||||
print("加载 5 分钟 K 线数据 (2020-2025)...")
|
||||
t0 = time.time()
|
||||
data = {}
|
||||
for y in YEARS:
|
||||
df = load_klines('5m', f'{y}-01-01', f'{y+1}-01-01')
|
||||
data[y] = df
|
||||
print(f" {y}: {len(df):>7,} 条 ({df.index[0]} ~ {df.index[-1]})")
|
||||
|
||||
# 合并全量数据用于连续回测
|
||||
df_all = pd.concat([data[y] for y in YEARS])
|
||||
df_all = df_all[~df_all.index.duplicated(keep='first')].sort_index()
|
||||
print(f" 合计: {len(df_all):>7,} 条 ({df_all.index[0]} ~ {df_all.index[-1]})")
|
||||
print(f"数据加载完成 ({time.time()-t0:.1f}s)\n")
|
||||
|
||||
# ============================================================
|
||||
# 配置 — 完全匹配 bb_trade.py D方案
|
||||
# ============================================================
|
||||
cfg = BBConfig(
|
||||
bb_period=10,
|
||||
bb_std=2.5,
|
||||
leverage=50,
|
||||
initial_capital=200.0,
|
||||
margin_pct=0.01, # 1% 权益/单
|
||||
max_daily_loss=50.0,
|
||||
fee_rate=0.0005, # 万五 (0.05%) 每侧 (开+平各收一次)
|
||||
rebate_rate=0.0, # 无即时返佣
|
||||
rebate_pct=0.90, # 90% 手续费次日返还
|
||||
rebate_hour_utc=0, # UTC 0点 = 北京时间早上8点
|
||||
pyramid_enabled=True,
|
||||
pyramid_step=0.01, # 递增加仓 +1%/次
|
||||
pyramid_max=3, # 最多加仓3次
|
||||
slippage_pct=0.0, # 回测不加滑点 (实盘浏览器市价单有滑点)
|
||||
liq_enabled=True,
|
||||
stop_loss_pct=0.0,
|
||||
)
|
||||
|
||||
# ============================================================
|
||||
# 1) 逐年回测 (每年独立 200U 起步)
|
||||
# ============================================================
|
||||
print("=" * 100)
|
||||
print(" 【逐年独立回测】每年独立 200U 本金")
|
||||
print(f" BB({cfg.bb_period}, {cfg.bb_std}) | {cfg.leverage}x | 开仓={cfg.margin_pct:.0%}权益 | "
|
||||
f"手续费={cfg.fee_rate:.4%}/侧 | 返佣={cfg.rebate_pct:.0%}次日8点")
|
||||
print("=" * 100)
|
||||
print(f" {'年份':>6s} {'最终权益':>10s} {'收益率':>8s} {'日均PnL':>8s} {'交易次数':>8s} {'胜率':>6s} "
|
||||
f"{'最大回撤':>10s} {'回撤%':>8s} {'总手续费':>10s} {'总返佣':>10s} {'净手续费':>10s} {'Sharpe':>7s}")
|
||||
print("-" * 130)
|
||||
|
||||
year_results = {}
|
||||
for y in YEARS:
|
||||
r = run_bb_backtest(data[y], cfg)
|
||||
year_results[y] = r
|
||||
|
||||
d = r.daily_stats
|
||||
pnl = d["pnl"].astype(float)
|
||||
eq = d["equity"].astype(float)
|
||||
peak = eq.cummax()
|
||||
dd = float((eq - peak).min())
|
||||
dd_pct = dd / float(peak[eq - peak == dd].iloc[0]) * 100 if dd < 0 else 0
|
||||
final_eq = float(eq.iloc[-1])
|
||||
ret_pct = (final_eq - cfg.initial_capital) / cfg.initial_capital * 100
|
||||
n_trades = len(r.trades)
|
||||
win_rate = sum(1 for t in r.trades if t.net_pnl > 0) / max(n_trades, 1) * 100
|
||||
avg_daily = float(pnl.mean())
|
||||
sharpe = float(pnl.mean() / pnl.std()) * np.sqrt(365) if pnl.std() > 0 else 0
|
||||
net_fee = r.total_fee - r.total_rebate
|
||||
|
||||
print(f" {y:>6d} {final_eq:>10.1f} {ret_pct:>+7.1f}% {avg_daily:>+7.2f}U "
|
||||
f"{n_trades:>8d} {win_rate:>5.1f}% {dd:>+10.1f} {dd_pct:>+7.1f}% "
|
||||
f"{r.total_fee:>10.1f} {r.total_rebate:>10.1f} {net_fee:>10.1f} {sharpe:>7.2f}")
|
||||
|
||||
print()
|
||||
|
||||
# ============================================================
|
||||
# 2) 连续回测 (2020-2025 一次性跑,资金连续滚动)
|
||||
# ============================================================
|
||||
print("=" * 100)
|
||||
print(" 【连续回测】2020-2025 资金滚动,200U 起步")
|
||||
print("=" * 100)
|
||||
|
||||
r_all = run_bb_backtest(df_all, cfg)
|
||||
|
||||
d_all = r_all.daily_stats
|
||||
pnl_all = d_all["pnl"].astype(float)
|
||||
eq_all = d_all["equity"].astype(float)
|
||||
peak_all = eq_all.cummax()
|
||||
dd_all = float((eq_all - peak_all).min())
|
||||
dd_pct_all = dd_all / float(peak_all[eq_all - peak_all == dd_all].iloc[0]) * 100 if dd_all < 0 else 0
|
||||
final_eq_all = float(eq_all.iloc[-1])
|
||||
ret_pct_all = (final_eq_all - cfg.initial_capital) / cfg.initial_capital * 100
|
||||
n_trades_all = len(r_all.trades)
|
||||
win_rate_all = sum(1 for t in r_all.trades if t.net_pnl > 0) / max(n_trades_all, 1) * 100
|
||||
avg_daily_all = float(pnl_all.mean())
|
||||
sharpe_all = float(pnl_all.mean() / pnl_all.std()) * np.sqrt(365) if pnl_all.std() > 0 else 0
|
||||
net_fee_all = r_all.total_fee - r_all.total_rebate
|
||||
|
||||
print(f" 初始资金: {cfg.initial_capital:.0f} U")
|
||||
print(f" 最终权益: {final_eq_all:.1f} U")
|
||||
print(f" 总收益率: {ret_pct_all:+.1f}%")
|
||||
print(f" 日均 PnL: {avg_daily_all:+.2f} U")
|
||||
print(f" 交易次数: {n_trades_all}")
|
||||
print(f" 胜率: {win_rate_all:.1f}%")
|
||||
print(f" 最大回撤: {dd_all:+.1f} U ({dd_pct_all:+.1f}%)")
|
||||
print(f" 总手续费: {r_all.total_fee:.1f} U")
|
||||
print(f" 总返佣: {r_all.total_rebate:.1f} U")
|
||||
print(f" 净手续费: {net_fee_all:.1f} U")
|
||||
print(f" Sharpe: {sharpe_all:.2f}")
|
||||
print()
|
||||
|
||||
# 按年统计连续回测中的表现
|
||||
print(" 连续回测逐年切片:")
|
||||
print(f" {'年份':>6s} {'年初权益':>10s} {'年末权益':>10s} {'年收益':>10s} {'年收益率':>8s}")
|
||||
print("-" * 60)
|
||||
for y in YEARS:
|
||||
mask = (eq_all.index >= f'{y}-01-01') & (eq_all.index < f'{y+1}-01-01')
|
||||
if mask.sum() == 0:
|
||||
continue
|
||||
eq_year = eq_all[mask]
|
||||
start_eq = float(eq_year.iloc[0])
|
||||
end_eq = float(eq_year.iloc[-1])
|
||||
yr_ret = end_eq - start_eq
|
||||
yr_pct = yr_ret / start_eq * 100
|
||||
print(f" {y:>6d} {start_eq:>10.1f} {end_eq:>10.1f} {yr_ret:>+10.1f} {yr_pct:>+7.1f}%")
|
||||
print()
|
||||
|
||||
# ============================================================
|
||||
# 图表
|
||||
# ============================================================
|
||||
fig, axes = plt.subplots(3, 1, figsize=(18, 18), dpi=120)
|
||||
|
||||
# 图1: 逐年独立回测权益曲线
|
||||
ax1 = axes[0]
|
||||
colors = plt.cm.tab10(np.linspace(0, 1, len(YEARS)))
|
||||
for i, y in enumerate(YEARS):
|
||||
r = year_results[y]
|
||||
eq = r.equity_curve["equity"].dropna()
|
||||
days = (eq.index - eq.index[0]).total_seconds() / 86400
|
||||
ax1.plot(days, eq.values, label=f"{y}", color=colors[i], linewidth=0.8)
|
||||
ax1.set_title(f"BB(10,2.5) D方案 逐年独立回测 (200U起步)", fontsize=13, fontweight="bold")
|
||||
ax1.set_xlabel("天数")
|
||||
ax1.set_ylabel("权益 (USDT)")
|
||||
ax1.axhline(y=200, color="gray", linestyle="--", alpha=0.5, label="本金200U")
|
||||
ax1.legend(loc="upper left", fontsize=9)
|
||||
ax1.grid(True, alpha=0.3)
|
||||
|
||||
# 图2: 连续回测权益曲线
|
||||
ax2 = axes[1]
|
||||
eq_curve = r_all.equity_curve["equity"].dropna()
|
||||
ax2.plot(eq_curve.index, eq_curve.values, color="steelblue", linewidth=0.6)
|
||||
ax2.set_title(f"BB(10,2.5) D方案 连续回测 2020-2025 (200U→{final_eq_all:.0f}U)", fontsize=13, fontweight="bold")
|
||||
ax2.set_xlabel("日期")
|
||||
ax2.set_ylabel("权益 (USDT)")
|
||||
ax2.axhline(y=200, color="gray", linestyle="--", alpha=0.5)
|
||||
ax2.grid(True, alpha=0.3)
|
||||
|
||||
# 图3: 连续回测日PnL
|
||||
ax3 = axes[2]
|
||||
daily_pnl = r_all.daily_stats["pnl"].astype(float)
|
||||
colors_pnl = ['green' if x >= 0 else 'red' for x in daily_pnl.values]
|
||||
ax3.bar(daily_pnl.index, daily_pnl.values, color=colors_pnl, width=1, alpha=0.7)
|
||||
ax3.set_title("日 PnL 分布", fontsize=13, fontweight="bold")
|
||||
ax3.set_xlabel("日期")
|
||||
ax3.set_ylabel("PnL (USDT)")
|
||||
ax3.axhline(y=0, color="black", linewidth=0.5)
|
||||
ax3.grid(True, alpha=0.3)
|
||||
|
||||
plt.tight_layout()
|
||||
chart_path = out_dir / "bb_trade_d_plan_2020_2025.png"
|
||||
plt.savefig(chart_path, bbox_inches="tight")
|
||||
print(f"图表已保存: {chart_path}")
|
||||
@@ -1,125 +0,0 @@
|
||||
"""
|
||||
信号生成模块 - 多指标加权投票 + 多时间框架过滤
|
||||
"""
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def generate_indicator_signals(df: pd.DataFrame, params: dict) -> pd.DataFrame:
|
||||
"""
|
||||
根据指标值生成每个指标的独立信号 (+1 做多 / -1 做空 / 0 中性)
|
||||
df 必须已经包含 compute_all_indicators 计算出的列
|
||||
"""
|
||||
out = df.copy()
|
||||
|
||||
# --- 布林带 %B ---
|
||||
out['sig_bb'] = 0
|
||||
out.loc[out['bb_pct'] < params.get('bb_oversold', 0.0), 'sig_bb'] = 1
|
||||
out.loc[out['bb_pct'] > params.get('bb_overbought', 1.0), 'sig_bb'] = -1
|
||||
|
||||
# --- 肯特纳通道 ---
|
||||
out['sig_kc'] = 0
|
||||
out.loc[out['kc_pct'] < params.get('kc_oversold', 0.0), 'sig_kc'] = 1
|
||||
out.loc[out['kc_pct'] > params.get('kc_overbought', 1.0), 'sig_kc'] = -1
|
||||
|
||||
# --- 唐奇安通道 ---
|
||||
out['sig_dc'] = 0
|
||||
out.loc[out['dc_pct'] < params.get('dc_oversold', 0.2), 'sig_dc'] = 1
|
||||
out.loc[out['dc_pct'] > params.get('dc_overbought', 0.8), 'sig_dc'] = -1
|
||||
|
||||
# --- EMA 交叉 ---
|
||||
out['sig_ema'] = 0
|
||||
out.loc[out['ema_diff'] > 0, 'sig_ema'] = 1
|
||||
out.loc[out['ema_diff'] < 0, 'sig_ema'] = -1
|
||||
|
||||
# --- MACD ---
|
||||
out['sig_macd'] = 0
|
||||
out.loc[out['macd_hist'] > 0, 'sig_macd'] = 1
|
||||
out.loc[out['macd_hist'] < 0, 'sig_macd'] = -1
|
||||
|
||||
# --- ADX + DI ---
|
||||
adx_thresh = params.get('adx_threshold', 25)
|
||||
out['sig_adx'] = 0
|
||||
out.loc[(out['adx'] > adx_thresh) & (out['di_diff'] > 0), 'sig_adx'] = 1
|
||||
out.loc[(out['adx'] > adx_thresh) & (out['di_diff'] < 0), 'sig_adx'] = -1
|
||||
|
||||
# --- Supertrend ---
|
||||
out['sig_st'] = out['st_dir']
|
||||
|
||||
# --- RSI ---
|
||||
rsi_ob = params.get('rsi_overbought', 70)
|
||||
rsi_os = params.get('rsi_oversold', 30)
|
||||
out['sig_rsi'] = 0
|
||||
out.loc[out['rsi'] < rsi_os, 'sig_rsi'] = 1
|
||||
out.loc[out['rsi'] > rsi_ob, 'sig_rsi'] = -1
|
||||
|
||||
# --- Stochastic ---
|
||||
stoch_ob = params.get('stoch_overbought', 80)
|
||||
stoch_os = params.get('stoch_oversold', 20)
|
||||
out['sig_stoch'] = 0
|
||||
out.loc[(out['stoch_k'] < stoch_os) & (out['stoch_k'] > out['stoch_d']), 'sig_stoch'] = 1
|
||||
out.loc[(out['stoch_k'] > stoch_ob) & (out['stoch_k'] < out['stoch_d']), 'sig_stoch'] = -1
|
||||
|
||||
# --- CCI ---
|
||||
cci_ob = params.get('cci_overbought', 100)
|
||||
cci_os = params.get('cci_oversold', -100)
|
||||
out['sig_cci'] = 0
|
||||
out.loc[out['cci'] < cci_os, 'sig_cci'] = 1
|
||||
out.loc[out['cci'] > cci_ob, 'sig_cci'] = -1
|
||||
|
||||
# --- Williams %R ---
|
||||
wr_ob = params.get('wr_overbought', -20)
|
||||
wr_os = params.get('wr_oversold', -80)
|
||||
out['sig_wr'] = 0
|
||||
out.loc[out['wr'] < wr_os, 'sig_wr'] = 1
|
||||
out.loc[out['wr'] > wr_ob, 'sig_wr'] = -1
|
||||
|
||||
# --- WMA ---
|
||||
out['sig_wma'] = 0
|
||||
out.loc[out['wma_diff'] > 0, 'sig_wma'] = 1
|
||||
out.loc[out['wma_diff'] < 0, 'sig_wma'] = -1
|
||||
|
||||
return out
|
||||
|
||||
|
||||
SIGNAL_COLS = [
|
||||
'sig_bb', 'sig_kc', 'sig_dc', 'sig_ema', 'sig_macd',
|
||||
'sig_adx', 'sig_st', 'sig_rsi', 'sig_stoch', 'sig_cci',
|
||||
'sig_wr', 'sig_wma',
|
||||
]
|
||||
|
||||
WEIGHT_KEYS = [
|
||||
'w_bb', 'w_kc', 'w_dc', 'w_ema', 'w_macd',
|
||||
'w_adx', 'w_st', 'w_rsi', 'w_stoch', 'w_cci',
|
||||
'w_wr', 'w_wma',
|
||||
]
|
||||
|
||||
|
||||
def compute_composite_score(df: pd.DataFrame, params: dict) -> pd.Series:
|
||||
"""
|
||||
加权投票计算综合得分 (-1 ~ +1)
|
||||
"""
|
||||
weights = np.array([params.get(k, 1.0) for k in WEIGHT_KEYS])
|
||||
total_w = weights.sum()
|
||||
if total_w == 0:
|
||||
total_w = 1.0
|
||||
|
||||
signals = df[SIGNAL_COLS].values # (N, 12)
|
||||
score = (signals * weights).sum(axis=1) / total_w
|
||||
return pd.Series(score, index=df.index, name='score')
|
||||
|
||||
|
||||
def apply_htf_filter(score: pd.Series, htf_df: pd.DataFrame, params: dict) -> pd.Series:
|
||||
"""
|
||||
用高时间框架(如1h)的趋势方向过滤信号
|
||||
htf_df 需要包含 'ema_diff' 列
|
||||
只允许与大趋势同向的信号通过
|
||||
"""
|
||||
# 将 htf 的 ema_diff reindex 到主时间框架
|
||||
htf_trend = htf_df['ema_diff'].reindex(score.index, method='ffill')
|
||||
filtered = score.copy()
|
||||
# 大趋势向上时,屏蔽做空信号
|
||||
filtered.loc[(htf_trend > 0) & (filtered < 0)] = 0
|
||||
# 大趋势向下时,屏蔽做多信号
|
||||
filtered.loc[(htf_trend < 0) & (filtered > 0)] = 0
|
||||
return filtered
|
||||
@@ -1,226 +0,0 @@
|
||||
"""
|
||||
Optuna 训练入口 - 在 2020-2022 数据上搜索最优参数
|
||||
"""
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
import optuna
|
||||
from optuna.samplers import TPESampler
|
||||
import numpy as np
|
||||
|
||||
from strategy.data_loader import load_klines
|
||||
from strategy.indicators import compute_all_indicators
|
||||
from strategy.strategy_signal import (
|
||||
generate_indicator_signals, compute_composite_score,
|
||||
apply_htf_filter, WEIGHT_KEYS,
|
||||
)
|
||||
from strategy.backtest_engine import BacktestEngine
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 全局加载数据 (只加载一次)
|
||||
# ============================================================
|
||||
print("正在加载 2020-2022 训练数据...")
|
||||
DF_5M = load_klines('5m', '2020-01-01', '2023-01-01')
|
||||
DF_1H = load_klines('1h', '2020-01-01', '2023-01-01')
|
||||
print(f" 5m: {len(DF_5M)} 条, 1h: {len(DF_1H)} 条")
|
||||
print("数据加载完成。\n")
|
||||
|
||||
|
||||
def build_params(trial: optuna.Trial) -> dict:
|
||||
"""从 Optuna trial 构建完整参数字典"""
|
||||
p = {}
|
||||
|
||||
# --- 指标参数 ---
|
||||
p['bb_period'] = trial.suggest_int('bb_period', 10, 50)
|
||||
p['bb_std'] = trial.suggest_float('bb_std', 1.0, 3.5, step=0.1)
|
||||
|
||||
p['kc_period'] = trial.suggest_int('kc_period', 10, 50)
|
||||
p['kc_mult'] = trial.suggest_float('kc_mult', 0.5, 3.0, step=0.1)
|
||||
|
||||
p['dc_period'] = trial.suggest_int('dc_period', 10, 50)
|
||||
|
||||
p['ema_fast'] = trial.suggest_int('ema_fast', 3, 20)
|
||||
p['ema_slow'] = trial.suggest_int('ema_slow', 15, 60)
|
||||
|
||||
p['macd_fast'] = trial.suggest_int('macd_fast', 6, 20)
|
||||
p['macd_slow'] = trial.suggest_int('macd_slow', 18, 40)
|
||||
p['macd_signal'] = trial.suggest_int('macd_signal', 5, 15)
|
||||
|
||||
p['adx_period'] = trial.suggest_int('adx_period', 7, 30)
|
||||
|
||||
p['st_period'] = trial.suggest_int('st_period', 5, 20)
|
||||
p['st_mult'] = trial.suggest_float('st_mult', 1.0, 5.0, step=0.1)
|
||||
|
||||
p['rsi_period'] = trial.suggest_int('rsi_period', 7, 28)
|
||||
|
||||
p['stoch_k'] = trial.suggest_int('stoch_k', 5, 21)
|
||||
p['stoch_d'] = trial.suggest_int('stoch_d', 2, 7)
|
||||
p['stoch_smooth'] = trial.suggest_int('stoch_smooth', 2, 7)
|
||||
|
||||
p['cci_period'] = trial.suggest_int('cci_period', 10, 40)
|
||||
|
||||
p['wr_period'] = trial.suggest_int('wr_period', 7, 28)
|
||||
|
||||
p['wma_period'] = trial.suggest_int('wma_period', 10, 50)
|
||||
|
||||
# --- 信号阈值参数 ---
|
||||
p['bb_oversold'] = trial.suggest_float('bb_oversold', -0.3, 0.3, step=0.05)
|
||||
p['bb_overbought'] = trial.suggest_float('bb_overbought', 0.7, 1.3, step=0.05)
|
||||
p['kc_oversold'] = trial.suggest_float('kc_oversold', -0.3, 0.3, step=0.05)
|
||||
p['kc_overbought'] = trial.suggest_float('kc_overbought', 0.7, 1.3, step=0.05)
|
||||
p['dc_oversold'] = trial.suggest_float('dc_oversold', 0.0, 0.3, step=0.05)
|
||||
p['dc_overbought'] = trial.suggest_float('dc_overbought', 0.7, 1.0, step=0.05)
|
||||
p['adx_threshold'] = trial.suggest_float('adx_threshold', 15, 35, step=1)
|
||||
p['rsi_overbought'] = trial.suggest_float('rsi_overbought', 60, 85, step=1)
|
||||
p['rsi_oversold'] = trial.suggest_float('rsi_oversold', 15, 40, step=1)
|
||||
p['stoch_overbought'] = trial.suggest_float('stoch_overbought', 70, 90, step=1)
|
||||
p['stoch_oversold'] = trial.suggest_float('stoch_oversold', 10, 30, step=1)
|
||||
p['cci_overbought'] = trial.suggest_float('cci_overbought', 80, 200, step=5)
|
||||
p['cci_oversold'] = trial.suggest_float('cci_oversold', -200, -80, step=5)
|
||||
p['wr_overbought'] = trial.suggest_float('wr_overbought', -30, -10, step=1)
|
||||
p['wr_oversold'] = trial.suggest_float('wr_oversold', -90, -70, step=1)
|
||||
|
||||
# --- 权重 ---
|
||||
for wk in WEIGHT_KEYS:
|
||||
p[wk] = trial.suggest_float(wk, 0.0, 1.0, step=0.05)
|
||||
|
||||
# --- 回测参数 ---
|
||||
p['open_threshold'] = trial.suggest_float('open_threshold', 0.1, 0.6, step=0.02)
|
||||
p['max_positions'] = trial.suggest_int('max_positions', 1, 3)
|
||||
p['take_profit_pct'] = trial.suggest_float('take_profit_pct', 0.003, 0.025, step=0.001)
|
||||
|
||||
# 止损约束: N单同时止损 + 手续费 <= 50U
|
||||
# N * 1250 * sl_pct + N * 1.25 <= 50
|
||||
# sl_pct <= (50 - N*1.25) / (N*1250)
|
||||
n = p['max_positions']
|
||||
max_sl = (50.0 - n * 1.25) / (n * 1250.0)
|
||||
max_sl = round(max(max_sl, 0.002), 3) # 至少 0.2%
|
||||
p['stop_loss_pct'] = trial.suggest_float('stop_loss_pct', 0.002, max_sl, step=0.001)
|
||||
|
||||
return p
|
||||
|
||||
|
||||
def objective(trial: optuna.Trial) -> float:
|
||||
params = build_params(trial)
|
||||
|
||||
# 确保 ema_slow > ema_fast, macd_slow > macd_fast
|
||||
if params['ema_slow'] <= params['ema_fast']:
|
||||
return -1e6
|
||||
if params['macd_slow'] <= params['macd_fast']:
|
||||
return -1e6
|
||||
|
||||
try:
|
||||
# 计算指标
|
||||
df_5m = compute_all_indicators(DF_5M, params)
|
||||
df_1h = compute_all_indicators(DF_1H, params)
|
||||
|
||||
# 生成信号
|
||||
df_5m = generate_indicator_signals(df_5m, params)
|
||||
df_1h = generate_indicator_signals(df_1h, params)
|
||||
|
||||
# 综合得分
|
||||
score = compute_composite_score(df_5m, params)
|
||||
|
||||
# 高时间框架过滤
|
||||
score = apply_htf_filter(score, df_1h, params)
|
||||
|
||||
# 回测
|
||||
engine = BacktestEngine(
|
||||
initial_capital=1000.0,
|
||||
margin_per_trade=25.0,
|
||||
leverage=50,
|
||||
fee_rate=0.0005,
|
||||
rebate_ratio=0.70,
|
||||
max_daily_drawdown=50.0,
|
||||
min_hold_bars=1,
|
||||
stop_loss_pct=params['stop_loss_pct'],
|
||||
take_profit_pct=params['take_profit_pct'],
|
||||
max_positions=params['max_positions'],
|
||||
)
|
||||
|
||||
result = engine.run(df_5m, score, open_threshold=params['open_threshold'])
|
||||
|
||||
num_trades = result['num_trades']
|
||||
if num_trades < 50:
|
||||
return -1e6 # 交易次数太少,不可靠
|
||||
|
||||
total_pnl = result['total_pnl']
|
||||
max_dd = result['max_daily_dd'] # 负数 (引擎已保证 >= -50)
|
||||
avg_daily = result['avg_daily_pnl']
|
||||
|
||||
# 引擎内部已经有每日 50U 回撤熔断,这里不再硬约束
|
||||
# 目标: 最大化总收益
|
||||
score_val = total_pnl
|
||||
|
||||
# 奖励日均收益高的方案
|
||||
if avg_daily >= 50:
|
||||
score_val *= 1.3
|
||||
elif avg_daily >= 30:
|
||||
score_val *= 1.15
|
||||
|
||||
trial.set_user_attr('total_pnl', total_pnl)
|
||||
trial.set_user_attr('num_trades', num_trades)
|
||||
trial.set_user_attr('win_rate', result['win_rate'])
|
||||
trial.set_user_attr('max_daily_dd', max_dd)
|
||||
trial.set_user_attr('avg_daily_pnl', avg_daily)
|
||||
trial.set_user_attr('profit_factor', result['profit_factor'])
|
||||
|
||||
return score_val
|
||||
|
||||
except Exception as e:
|
||||
print(f"Trial {trial.number} 异常: {e}")
|
||||
return -1e6
|
||||
|
||||
|
||||
def main():
|
||||
study = optuna.create_study(
|
||||
direction='maximize',
|
||||
sampler=TPESampler(seed=42, n_startup_trials=30),
|
||||
study_name='eth_strategy_v1',
|
||||
)
|
||||
|
||||
# 设置日志级别
|
||||
optuna.logging.set_verbosity(optuna.logging.WARNING)
|
||||
|
||||
n_trials = 1000
|
||||
print(f"开始 Optuna 优化, 共 {n_trials} 次试验 (多单并发版)...")
|
||||
print("=" * 60)
|
||||
|
||||
def callback(study, trial):
|
||||
if trial.number % 10 == 0:
|
||||
best = study.best_trial
|
||||
print(f"[Trial {trial.number:>4d}] "
|
||||
f"当前值={trial.value:.2f} | "
|
||||
f"最佳值={best.value:.2f} | "
|
||||
f"PnL={best.user_attrs.get('total_pnl', 0):.1f}U | "
|
||||
f"胜率={best.user_attrs.get('win_rate', 0):.1%} | "
|
||||
f"日均={best.user_attrs.get('avg_daily_pnl', 0):.1f}U | "
|
||||
f"最大日回撤={best.user_attrs.get('max_daily_dd', 0):.1f}U")
|
||||
|
||||
study.optimize(objective, n_trials=n_trials, callbacks=[callback], show_progress_bar=True)
|
||||
|
||||
# 输出最佳结果
|
||||
best = study.best_trial
|
||||
print("\n" + "=" * 60)
|
||||
print("训练完成!最佳参数:")
|
||||
print("=" * 60)
|
||||
print(f" 目标值: {best.value:.4f}")
|
||||
print(f" 总收益: {best.user_attrs.get('total_pnl', 0):.2f}U")
|
||||
print(f" 交易次数: {best.user_attrs.get('num_trades', 0)}")
|
||||
print(f" 胜率: {best.user_attrs.get('win_rate', 0):.2%}")
|
||||
print(f" 日均收益: {best.user_attrs.get('avg_daily_pnl', 0):.2f}U")
|
||||
print(f" 最大日回撤: {best.user_attrs.get('max_daily_dd', 0):.2f}U")
|
||||
print(f" 盈亏比: {best.user_attrs.get('profit_factor', 0):.2f}")
|
||||
|
||||
# 保存最佳参数
|
||||
output_path = os.path.join(os.path.dirname(__file__), 'best_params_2020_2022.json')
|
||||
with open(output_path, 'w') as f:
|
||||
json.dump(best.params, f, indent=2, ensure_ascii=False)
|
||||
print(f"\n最佳参数已保存到: {output_path}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||