| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import httpx
- import json
- from httpx import BasicAuth
- from time import sleep
- class WorldQuantBrainAPI:
- def __init__(self, credentials_file='brain_credentials.txt'):
- self.credentials_file = credentials_file
- self.client = None
- self.brain_api_url = 'https://api.worldquantbrain.com'
-
- def load_credentials(self):
- """读取本地账号密码"""
- with open(self.credentials_file) as f:
- credentials = eval(f.read())
- return credentials[0], credentials[1]
-
- def login(self):
- """登录认证"""
- username, password = self.load_credentials()
- self.client = httpx.Client(auth=BasicAuth(username, password))
-
- response = self.client.post(f'{self.brain_api_url}/authentication')
- print(f"登录状态: {response.status_code}")
-
- if response.status_code == 201:
- print("登录成功!")
- return True
- else:
- print(f"登录失败: {response.json()}")
- return False
-
- def simulate_alpha(self, expression, settings=None):
- """模拟Alpha因子"""
- if self.client is None:
- raise Exception("请先登录")
-
- default_settings = {
- 'instrumentType': 'EQUITY',
- 'region': 'USA',
- 'universe': 'TOP3000',
- 'delay': 1,
- 'decay': 0,
- 'neutralization': 'INDUSTRY',
- 'truncation': 0.08,
- 'pasteurization': 'ON',
- 'unitHandling': 'VERIFY',
- 'nanHandling': 'OFF',
- 'language': 'FASTEXPR',
- 'visualization': False,
- }
-
- if settings:
- default_settings.update(settings)
-
- simulation_data = {
- 'type': 'REGULAR',
- 'settings': default_settings,
- 'regular': expression
- }
-
- sim_resp = self.client.post(
- f'{self.brain_api_url}/simulations',
- json=simulation_data,
- )
- print(f"模拟提交状态: {sim_resp.status_code}")
-
- sim_progress_url = sim_resp.headers['location']
- print(f"进度URL: {sim_progress_url}")
-
- while True:
- sim_progress_resp = self.client.get(sim_progress_url)
- retry_after_sec = float(sim_progress_resp.headers.get("Retry-After", 0))
-
- if retry_after_sec == 0:
- break
- print(sim_progress_resp.json())
- print(f"等待 {retry_after_sec} 秒...")
- sleep(retry_after_sec)
-
- alpha_id = sim_progress_resp.json()["alpha"]
- print(f"生成的Alpha ID: {alpha_id}")
- return alpha_id
- def close(self):
- """关闭连接"""
- if self.client:
- self.client.close()
- if __name__ == "__main__":
- api = WorldQuantBrainAPI()
-
- try:
- # 读取账号密码并登录
- if api.login():
- # 模拟Alpha因子
- alpha_id = api.simulate_alpha("liabilities/assets")
- print(f"模拟完成,Alpha ID: {alpha_id}")
- finally:
- api.close()
|