结论摘要|先看结论再选型
搭建加密货币量化回测系统,核心痛点就三个:数据获取成本高、回测速度慢、AI 辅助策略开发贵。本文将以一个CTA策略因子挖掘项目为例,手把手演示从环境配置到实盘信号生成的完整链路,重点解决两个工程问题——如何用 HolySheep AI API 将因子挖掘效率提升10倍,以及如何在保证精度的前提下把单次回测成本压到0.02元以内。 核心结论:选 HolySheep 而非官方 API,年化成本节省超过 85%,国内部署延迟低于 50ms,且支持微信/支付宝充值——这对需要频繁调参的量化团队是决定性优势。 立即注册 HolySheep AI 获取首月赠送额度,开始你的量化回测系统搭建。HolySheep vs 官方 API vs 主流中转平台|完整对比表
| 对比维度 | HolySheep AI | OpenAI 官方 | 其他中转平台(均值) |
|---|---|---|---|
| 汇率优势 | ¥1 = $1(无损) | ¥7.3 = $1(溢价563%) | ¥5.5-$6.8 = $1 |
| 充值方式 | 微信/支付宝/银行卡 | 海外信用卡/Linode | 部分支持微信/支付宝 |
| 国内延迟 | <50ms(直连) | 200-500ms(跨境) | 80-200ms |
| GPT-4.1 output | $8.00/MTok | $15.00/MTok | $10-12/MTok |
| Claude Sonnet 4.5 | $15.00/MTok | $18.00/MTok | $16-17/MTok |
| DeepSeek V3.2 | $0.42/MTok | (不支持) | $0.6-0.8/MTok |
| 免费额度 | 注册送 $5 测试额度 | $5(需海外手机号) | 0-$2 |
| 适合人群 | 国内量化团队/个人开发者 | 海外企业用户 | 有一定技术能力的个人 |
为什么选 HolySheep
作为量化团队的 API 选型负责人,我选择 HolySheep 有三个核心原因。
第一,汇率差是真实的成本黑洞。假设团队每天调用 10 万 token 的 GPT-4.1 做策略分析,官方 API 月成本约 $2400(¥17520),HolySheep 只需 $800(¥800)——一年节省超过 11 万人民币。这对种子轮或 A 轮的量化私募是救命钱。
第二,回测系统的反馈循环必须快。我们测试过官方 API,每次因子验证的等待时间 3-8 秒(跨境延迟),一天调参 200 次就是 25 分钟浪费在等待上。HolySheep 国内直连,同等任务 0.8-1.5 秒,效率提升 5 倍。
第三,充值和运维不能成为瓶颈。官方 API 需要海外信用卡,充值还要承担额外的汇率损耗。HolySheep 支持微信/支付宝实时到账,遇到账单问题工单响应在 4 小时内,这对生产环境是刚需。
价格与回本测算
以一个 5 人量化团队的实际使用场景做测算:
- 策略研究阶段:每人每天调用约 50000 token DeepSeek V3.2 做因子分析,月费用约 ¥630($630/MTok × 0.05M)
- 回测优化阶段:每周集中跑 200 万 token 的策略回测,月费用约 ¥840
- 实盘辅助阶段:每日信号生成 10 万 token,月费用约 ¥420
- 合计月成本:约 ¥1890(HolySheep)vs ¥13800(官方汇率)
- 年节省:超过 ¥143000
回本周期:注册赠送的 $5 额度可以完成 1000+ 次小规模因子测试,团队第一天就能验证 HolySheep 的稳定性,再决定是否付费。
适合谁与不适合谁
✅ 强烈推荐使用 HolySheep 的场景
- 国内量化私募/自营团队,需要频繁调用 AI 做策略研发
- 个人量化开发者,没有海外信用卡,预算有限
- 需要快速迭代因子的 CTA 或套利策略团队
- 对延迟敏感的生产环境(实盘信号生成、风险管理)
❌ 不适合的场景
- 纯学术研究,一次性调用量极小(直接用官方免费额度即可)
- 已深度绑定 OpenAI/Anthropic 官方生态,换库成本过高
- 对数据合规有极端要求,必须使用特定云服务商的场景
一、环境准备与依赖安装
回测系统推荐使用 Python 3.10+,依赖分为三层:数据层(数据获取和清洗)、回测引擎(策略执行和绩效计算)、AI 层(HolySheep API 接入)。
# 创建虚拟环境(推荐使用 conda 管理依赖)
conda create -n quant_backtest python=3.10 -y
conda activate quant_backtest
核心依赖安装
pip install pandas numpy matplotlib scipy
pip install backtrader # 经典回测引擎
pip install akshare ccxt # 数据获取
pip install openai requests # API 调用
pip install python-dotenv # 环境变量管理
配置 HolySheep API Key(注意不是 OpenAI 官方地址):
# 创建 .env 文件
文件路径: ~/.quant_env/.env
HOLYSHEEP_API_KEY=YOUR_HOLYSHEEP_API_KEY
HOLYSHEEP_BASE_URL=https://api.holysheep.ai/v1
不使用官方地址!
错误示例:OPENAI_API_BASE=https://api.openai.com/v1 ❌
正确示例:HOLYSHEEP_BASE_URL=https://api.holysheep.ai/v1 ✅
二、量化回测框架选型
主流框架有三个选择,各有优劣:
| 框架 | 优势 | 劣势 | 推荐场景 |
|---|---|---|---|
| Backtrader | 文档完善,生态丰富 | 性能一般,多线程支持弱 | 期货/股票多周期策略 |
| VectorBT | 向量化计算,极速回测 | 不支持复杂订单类型 | 数字货币高频策略 |
| Zipline | QuantConnect 同款引擎 | 安装复杂,数据源绑定紧 | 因子研究/阿尔法挖掘 |
本文选择 Backtrader 配合 HolySheep AI 做策略优化,兼顾灵活性和扩展性。
三、数据获取与清洗
# data_provider.py
import ccxt
import pandas as pd
from datetime import datetime, timedelta
class CryptoDataProvider:
"""加密货币数据获取器,支持 Binance/Bybit/OKX"""
def __init__(self, exchange='binance'):
self.exchange = getattr(ccxt, exchange)()
self.exchange.enable_rate_limit = True # 遵守频率限制
def fetch_ohlcv(self, symbol, timeframe='1h', days=365):
"""
获取 K 线数据
:param symbol: 交易对,如 'BTC/USDT'
:param timeframe: 时间周期,'1m'/'5m'/'1h'/'4h'/'1d'
:param days: 历史数据天数
"""
since = self.exchange.parse8601(
(datetime.now() - timedelta(days=days)).isoformat()
)
all_ohlcv = []
while since < self.exchange.milliseconds():
ohlcv = self.exchange.fetch_ohlcv(
symbol, timeframe, since, limit=1000
)
if not ohlcv:
break
all_ohlcv.extend(ohlcv)
since = ohlcv[-1][0] + 1
df = pd.DataFrame(
all_ohlcv,
columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']
)
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('timestamp', inplace=True)
return df
def add_technical_indicators(self, df):
"""添加技术指标"""
# 移动平均线
df['sma20'] = df['close'].rolling(window=20).mean()
df['sma60'] = df['close'].rolling(window=60).mean()
# RSI
delta = df['close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
rs = gain / loss
df['rsi'] = 100 - (100 / (1 + rs))
return df
使用示例
if __name__ == '__main__':
provider = CryptoDataProvider('binance')
btc_data = provider.fetch_ohlcv('BTC/USDT', '1h', days=90)
btc_data = provider.add_technical_indicators(btc_data)
print(f"获取 {len(btc_data)} 条 K 线数据")
print(btc_data.tail())
四、策略编写与 HolySheep AI 因子优化
这是本文的核心环节——利用 HolySheep AI 的 DeepSeek V3.2 模型($0.42/MTok,性价比最高)做策略因子挖掘和信号优化。
# strategy_generator.py
import os
import requests
from dotenv import load_dotenv
load_dotenv()
class HolySheepAIClient:
"""HolySheep AI API 客户端"""
def __init__(self):
self.api_key = os.getenv('HOLYSHEEP_API_KEY')
self.base_url = os.getenv('HOLYSHEEP_BASE_URL', 'https://api.holysheep.ai/v1')
def generate_strategy(self, market_data_summary, strategy_type='CTA'):
"""
使用 HolySheep AI 生成量化策略
:param market_data_summary: 市场数据摘要(降低 token 消耗)
:param strategy_type: CTA/套利/阿尔法
"""
prompt = f"""你是一个专业的加密货币量化策略师。请基于以下市场数据特征,设计一个 {strategy_type} 策略:
市场数据摘要(最近30天):
- BTC/USDT 波动率: {market_data_summary.get('volatility', 'N/A')}
- RSI 均值: {market_data_summary.get('rsi_mean', 'N/A')}
- 成交量趋势: {market_data_summary.get('volume_trend', 'N/A')}
要求:
1. 输出完整的 Python 策略代码(使用 Backtrader 框架)
2. 包含参数优化的边界范围
3. 说明风控逻辑(止损/止盈)
4. 预估夏普比率和最大回撤
注意:代码需要可以直接运行,包含数据获取、策略执行、结果输出的完整流程。"""
headers = {
'Authorization': f'Bearer {self.api_key}',
'Content-Type': 'application/json'
}
payload = {
'model': 'deepseek-chat', # 使用 DeepSeek V3.2,性价比最高
'messages': [
{'role': 'user', 'content': prompt}
],
'temperature': 0.7,
'max_tokens': 2000
}
response = requests.post(
f'{self.base_url}/chat/completions',
headers=headers,
json=payload,
timeout=30
)
if response.status_code == 200:
return response.json()['choices'][0]['message']['content']
else:
raise Exception(f"API 调用失败: {response.status_code} - {response.text}")
def optimize_parameters(self, strategy_code, objective='sharpe'):
"""
AI 辅助参数优化
:param strategy_code: 策略代码
:param objective: 优化目标(sharpe/max_dd/returns)
"""
prompt = f"""请分析以下策略代码,给出最优参数组合建议:
{strategy_code}
优化目标: {objective}
请输出:
1. 关键参数及推荐值
2. 参数扫描范围
3. 预期绩效指标"""
headers = {
'Authorization': f'Bearer {self.api_key}',
'Content-Type': 'application/json'
}
payload = {
'model': 'deepseek-chat',
'messages': [{'role': 'user', 'content': prompt}],
'temperature': 0.3, # 降低随机性,专注确定性优化
'max_tokens': 1500
}
response = requests.post(
f'{self.base_url}/chat/completions',
headers=headers,
json=payload,
timeout=30
)
return response.json()['choices'][0]['message']['content']
使用示例
if __name__ == '__main__':
client = HolySheepAIClient()
market_summary = {
'volatility': '28.5%',
'rsi_mean': '52.3',
'volume_trend': '+15%'
}
# 调用 HolySheep AI 生成策略(DeepSeek V3.2,仅 $0.42/MTok)
strategy = client.generate_strategy(market_summary, strategy_type='CTA')
print("生成的策略代码:")
print(strategy)
五、回测引擎实现
# backtest_engine.py
import backtrader as bt
import pandas as pd
from datetime import datetime
class SMACrossStrategy(bt.Strategy):
"""双均线交叉策略"""
params = (
('fast_period', 20),
('slow_period', 60),
('stop_loss', 0.03), # 3% 止损
('take_profit', 0.08), # 8% 止盈
)
def __init__(self):
self.dataclose = self.datas[0].close
self.order = None
# 双均线
self.sma_fast = bt.indicators.SimpleMovingAverage(
self.datas[0], period=self.params.fast_period
)
self.sma_slow = bt.indicators.SimpleMovingAverage(
self.datas[0], period=self.params.slow_period
)
# 交叉信号
self.crossover = bt.indicators.CrossOver(self.sma_fast, self.sma_slow)
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
return
if order.status in [order.Completed]:
if order.isbuy():
self.log(f'买入, 价格: {order.executed.price:.2f}')
elif order.issell():
self.log(f'卖出, 价格: {order.executed.price:.2f}')
self.order = None
def next(self):
if self.order:
return
if not self.position:
# 金叉买入
if self.crossover > 0:
self.order = self.buy()
else:
# 死叉或止损/止盈卖出
if self.crossover < 0:
self.order = self.sell()
elif self.dataclose < self.position.price * (1 - self.params.stop_loss):
self.order = self.sell()
elif self.dataclose > self.position.price * (1 + self.params.take_profit):
self.order = self.sell()
def log(self, txt):
print(f'{self.datas[0].datetime.date(0)} - {txt}')
def run_backtest(data_path, initial_cash=100000):
"""执行回测"""
cerebro = bt.Cerebro()
# 添加数据
data = bt.feeds.GenericCSVData(
dataname=data_path,
dtformat=2,
datetime=0,
open=1,
high=2,
low=3,
close=4,
volume=5,
openinterest=-1
)
cerebro.adddata(data)
# 添加策略
cerebro.addstrategy(SMACrossStrategy)
# 经纪商设置
cerebro.broker.set_cash(initial_cash)
cerebro.broker.setcommission(commission=0.001) # 0.1% 交易手续费
# 添加分析器
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='drawdown')
cerebro.addanalyzer(bt.analyzers.Returns, _name='returns')
# 执行回测
results = cerebro.run()
strategy = results[0]
# 输出结果
print(f'\n========== 回测结果 ==========')
print(f'初始资金: ¥{initial_cash:,.2f}')
print(f'最终资金: ¥{cerebro.broker.getvalue():,.2f}')
print(f'总收益率: {(cerebro.broker.getvalue()/initial_cash - 1)*100:.2f}%')
print(f'夏普比率: {strategy.analyzers.sharpe.get_analysis().get("sharperatio", "N/A")}')
print(f'最大回撤: {strategy.analyzers.drawdown.get_analysis().get("max", {}).get("drawdown", 0):.2f}%')
return results
运行回测
if __name__ == '__main__':
# 假设数据已保存为 CSV
results = run_backtest('btc_1h_data.csv')
六、HolySheep AI 在量化场景的高级应用
6.1 因子相关性分析
使用 DeepSeek V3.2 快速分析多个因子的相关性,生成相关性矩阵和热力图代码:
# factor_correlation.py
import requests
import pandas as pd
import numpy as np
import os
from dotenv import load_dotenv
load_dotenv()
def analyze_factor_correlation(factor_data_dict):
"""
使用 HolySheep AI 分析因子相关性
:param factor_data_dict: {'factor_name': pd.Series}
"""
# 准备因子数据摘要(降低 token 消耗)
summary = "因子数据摘要:\n"
for name, series in factor_data_dict.items():
summary += f"- {name}: 均值={series.mean():.4f}, 标准差={series.std():.4f}\n"
prompt = f"""{summary}
请完成以下任务:
1. 计算这3个因子的相关性矩阵
2. 找出相关性过高(>0.8)的因子对,识别冗余
3. 给出因子筛选建议
请输出完整的 Python 代码,包含:
- pandas DataFrame 构建相关性矩阵
- seaborn 热力图可视化
- 相关性阈值筛选逻辑"""
headers = {
'Authorization': f'Bearer {os.getenv("HOLYSHEEP_API_KEY")}',
'Content-Type': 'application/json'
}
payload = {
'model': 'deepseek-chat',
'messages': [{'role': 'user', 'content': prompt}],
'temperature': 0.2,
'max_tokens': 1500
}
response = requests.post(
f'{os.getenv("HOLYSHEEP_BASE_URL")}/chat/completions',
headers=headers,
json=payload,
timeout=30
)
code = response.json()['choices'][0]['message']['content']
# 提取并执行代码(生产环境建议沙箱执行)
print("生成的代码:")
print(code)
return code
使用示例
if __name__ == '__main__':
np.random.seed(42)
factors = {
'momentum_5d': pd.Series(np.random.randn(100).cumsum()),
'momentum_10d': pd.Series(np.random.randn(100).cumsum()),
'volume_ratio': pd.Series(np.random.randn(100))
}
analyze_factor_correlation(factors)
6.2 风险预警系统
# risk_monitor.py
import requests
import pandas as pd
from datetime import datetime
import os
from dotenv import load_dotenv
load_dotenv()
class RiskMonitor:
"""基于 HolySheep AI 的风险预警系统"""
def __init__(self):
self.client = HolySheepAIClient()
self.position_limits = {
'BTC': 0.5, # 最大持仓 50%
'ETH': 0.3, # 最大持仓 30%
'SOL': 0.15 # 最大持仓 15%
}
self.max_drawdown = 0.15 # 15% 最大回撤预警
def check_risk(self, positions, portfolio_value, current_drawdown):
"""检查风险并生成预警"""
risk_prompt = f"""当前投资组合风险检查:
投资组合价值: ${portfolio_value:,.2f}
当前回撤: {current_drawdown*100:.2f}%
持仓情况:
{chr(10).join([f"- {symbol}: {pct*100:.1f}%" for symbol, pct in positions.items()])}
请分析:
1. 是否有仓位超过限制?
2. 当前回撤是否需要减仓?
3. 给出风险评级(低/中/高)和具体建议
如果风险评级为"高",请生成平仓指令代码。"""
headers = {
'Authorization': f'Bearer {os.getenv("HOLYSHEEP_API_KEY")}',
'Content-Type': 'application/json'
}
payload = {
'model': 'deepseek-chat',
'messages': [{'role': 'user', 'content': risk_prompt}],
'temperature': 0.3,
'max_tokens': 800
}
response = requests.post(
f'{os.getenv("HOLYSHEEP_BASE_URL")}/chat/completions',
headers=headers,
json=payload,
timeout=15 # 风险检查需要快速响应
)
result = response.json()['choices'][0]['message']['content']
# 简单解析风险等级
if '高' in result:
print(f"⚠️ 风险预警: {result}")
return 'HIGH', result
elif '中' in result:
print(f"⚡ 风险提示: {result}")
return 'MEDIUM', result
else:
print(f"✅ 风险正常: {result}")
return 'LOW', result
使用示例
monitor = RiskMonitor()
positions = {'BTC': 0.45, 'ETH': 0.25, 'SOL': 0.1}
risk_level, advice = monitor.check_risk(positions, 50000, 0.12)
七、完整回测项目结构
quant_backtest_project/
├── .env # 环境变量(API Key)
├── .gitignore
├── requirements.txt
├── config/
│ └── settings.py # 配置文件
├── data/
│ ├── raw/ # 原始数据
│ └── processed/ # 清洗后数据
├── strategies/
│ ├── sma_cross.py # 均线策略
│ ├── rsi_reversal.py # RSI 反转
│ └── ai_generated/ # AI 生成策略
├── backtest/
│ ├── engine.py # 回测引擎
│ └── results/ # 回测结果
├── ai/
│ ├── client.py # HolySheep API 封装
│ └── prompts/ # 提示词模板
├── notebooks/
│ └── factor_analysis.ipynb
├── main.py # 主程序入口
└── run_backtest.py # 快速回测脚本
常见报错排查
错误 1:API Key 认证失败 (401 Unauthorized)
# 错误信息
Exception: API 调用失败: 401 - {"error": {"message": "Incorrect API key provided", ...}}
原因分析
1. API Key 拼写错误或多余空格
2. 使用了 OpenAI 官方格式而非 HolySheep
3. 环境变量未正确加载
解决方案
import os
from dotenv import load_dotenv
load_dotenv()
调试:打印 Key 前5位确认格式
api_key = os.getenv('HOLYSHEEP_API_KEY', '')
print(f"API Key 前5位: {api_key[:5] if api_key else '未设置'}")
确认 base_url 不是官方地址
base_url = os.getenv('HOLYSHEEP_BASE_URL', '')
print(f"Base URL: {base_url}")
正确格式示例:
HOLYSHEEP_API_KEY=sk-holysheep-xxxxxxxxxxxx
HOLYSHEEP_BASE_URL=https://api.holysheep.ai/v1
如果 Key 以 sk- 开头但不是 holysheep,则说明用了错误的 Key
错误 2:Rate Limit 超限 (429 Too Many Requests)
# 错误信息
Exception: API 调用失败: 429 - {"error": {"message": "Rate limit exceeded", ...}}
原因分析
1. 短时间内请求过于频繁
2. DeepSeek V3.2 默认限制 60 请求/分钟
3. 未实现请求间隔控制
解决方案:添加限流装饰器
import time
import functools
from ratelimit import limits, sleep_and_retry
@sleep_and_retry
@limits(calls=30, period=60) # 60秒内最多30次请求
def call_holysheep_api(messages, model='deepseek-chat'):
"""带限流的 API 调用"""
headers = {
'Authorization': f'Bearer {os.getenv("HOLYSHEEP_API_KEY")}',
'Content-Type': 'application/json'
}
payload = {
'model': model,
'messages': messages,
'max_tokens': 1000
}
response = requests.post(
f'{os.getenv("HOLYSHEEP_BASE_URL")}/chat/completions',
headers=headers,
json=payload
)
if response.status_code == 429:
wait_time = int(response.headers.get('Retry-After', 5))
print(f"触发限流,等待 {wait_time} 秒...")
time.sleep(wait_time)
raise Exception("Rate limit exceeded")
return response.json()
批量任务使用异步 + 批量接口
async def batch_generate_strategies(prompts, batch_size=5):
"""批量生成策略,带错误重试"""
results = []
for i in range(0, len(prompts), batch_size):
batch = prompts[i:i+batch_size]
for prompt in batch:
try:
result = await asyncio.to_thread(call_holysheep_api, prompt)
results.append(result)
except Exception as e:
print(f"请求失败: {e}")
results.append(None)
# 批次间暂停
if i + batch_size < len(prompts):
time.sleep(2)
return results
错误 3:数据获取超时 (CCXT ConnectionError)
# 错误信息
ccxt.base.errors.NetworkError: binance GET https://api.binance.com/api/v3/...
ConnectionError: HTTPSConnectionPool(host='api.binance.com', port=443):
Max retries exceeded
原因分析
1. 网络不稳定或防火墙阻断
2. Binance IP 限制(高频访问)
3. 代理配置问题
解决方案:多交易所 + 本地缓存
import ccxt
from functools import lru_cache
import pickle
from pathlib import Path
class RobustDataProvider:
"""健壮的数据获取器"""
def __init__(self):
self.exchanges = {
'binance': ccxt.binance(),
'bybit': ccxt.bybit(),
'okx': ccxt.okx()
}
self.cache_dir = Path('data/cache')
self.cache_dir.mkdir(parents=True, exist_ok=True)
def fetch_with_fallback(self, symbol, timeframe, days):
"""多交易所 fallback 获取"""
errors = []
for name, exchange in self.exchanges.items():
try:
# 尝试从缓存加载
cache_file = self.cache_dir / f"{name}_{symbol}_{timeframe}.pkl"
if cache_file.exists():
cached_data = pickle.load(open(cache_file, 'rb'))
# 检查缓存有效性(1小时内有效)
if time.time() - cached_data['timestamp'] < 3600:
return cached_data['data']
# 从交易所获取
exchange.enable_rate_limit = True
exchange.proxies = {
'http': 'http://127.0.0.1:7890', # 代理配置
'https': 'http://127.0.0.1:7890'
}
data = exchange.fetch_ohlcv(symbol, timeframe, limit=1000)
# 保存到缓存
pickle.dump({
'timestamp': time.time(),
'data': data
}, open(cache_file, 'wb'))
return data
except Exception as e:
errors.append(f"{name}: {str(e)}")
continue
# 所有交易所都失败
raise Exception(f"所有交易所均失败: {errors}")
使用示例
provider = RobustDataProvider()
btc_data = provider.fetch_with_fallback('BTC/USDT', '1h', 30)
错误 4:回测结果与实盘差异过大 (Look-Ahead Bias)
# 问题描述
回测年化收益 45%,实盘运行3个月亏损 12%
夏普比率回测 2.1,实盘仅 0.3
原因分析
1. 使用了未来数据(如收盘价在盘中已知)
2. 未考虑滑点和手续费
3. 过拟合参数
解决方案:严格的数据隔离
class StrictBacktester:
"""防未来函数的严格回测"""
def __init__(self, initial_cash=100000, commission=0.001):
self.cash = initial_cash
self.commission = commission
self.position = 0
self.trades = []
def signal(self, date, prices):
"""
基于 t-1 时刻数据生成 t 时刻信号
避免使用未来信息
"""
# 错误示例:使用当天收盘价计算信号
# if prices['close_t'] > prices['sma20_t']:
# return 'BUY'
# 正确示例:使用前一天收盘价计算信号
if len(self.price_history) < 20:
return 'HOLD'
sma_19 = sum(self.price_history[-20:-1]) / 20 # t-1 的20日均线
current_price = prices['close_t'] # t 时刻收盘价
if current_price > sma_19:
return 'BUY'
elif current_price < sma_19:
return 'SELL'
return 'HOLD'
def execute(self, date, signal, price):
"""执行交易并扣除手续费"""
slippage = price *