update
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user