Quantopian 实时算法 - 如何?
Quantopian live algorithm - How to?
最大的问题是:
如何使用我用 alpha 组合设置的所有策略来实施我的量子算法?
我没有找到任何答案。
我发现 Alpaca 可以与 zipeline 一起使用,但我不能将 morningstar 或 Q1500US 与 alpaca 一起使用,或者我没有找到方法。
我花了很多时间来设置这个机器人,找到了具有低 alpha 和良好 returns 的好因素,我真的很失望,我真的不想从头开始然后再做一个机器人。
请帮助找到解决方案,如果根本不可能使用这个机器人,请告诉我哪个库是完整的量子图,我可以用它来做另一个相同风格的机器人。
谢谢大家,我的机器人就在下面!!
这是我的机器人:
import quantopian.algorithm as algo
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.filters import QTradableStocksUS
from quantopian.pipeline.filters.morningstar import Q1500US
from quantopian.pipeline.data.sentdex import sentiment
from quantopian.pipeline.data.morningstar import operation_ratios
def initialize(context):
"""
Called once at the start of the algorithm.
"""
# Rebalance every day, 1 hour after market open.
algo.schedule_function(
rebalance,
algo.date_rules.every_day(),
algo.time_rules.market_open(hours=1),
)
# Record tracking variables at the end of each day.
algo.schedule_function(
record_vars,
algo.date_rules.every_day(),
algo.time_rules.market_close(),
)
# Create our dynamic stock selector.
algo.attach_pipeline(make_pipeline(), 'pipeline')
#set_commission(commission.PerTrade(cost=0.001))
def make_pipeline():
# Yes : operation_ratios.revenue_growth.latest
# Yes : operation_ratios.operation_margin.latest
# Yes : sentiment
testing_factor1=operation_ratios.operation_margin.latest
testing_factor2=operation_ratios.revenue_growth.latest
testing_factor3=sentiment.sentiment_signal.latest
universe =(Q1500US() &
testing_factor1.notnull() &
testing_factor2.notnull() &
testing_factor3.notnull())
testing_factor1=testing_factor1.rank(mask=universe, method='average')
testing_factor2=testing_factor2.rank(mask=universe, method='average')
testing_factor3=testing_factor3.rank(mask=universe, method='average')
testing_factor= testing_factor1 + testing_factor2 + testing_factor3
testing_quantiles = testing_factor.quantiles(2)
pipe = Pipeline(columns={'testing_factor':testing_factor,'shorts':testing_quantiles.eq(0),'longs':testing_quantiles.eq(1)},screen=universe)
return pipe
def before_trading_start(context, data):
"""
Called every day before market open.
"""
context.output = algo.pipeline_output('pipeline')
# These are the securities that we are interested in trading each day.
context.security_list = context.output.index
def rebalance(context, data):
long_secs=context.output[context.output['longs']].index
long_weight=0.5/len(long_secs)
short_secs=context.output[context.output['shorts']].index
short_weight=-0.5/len(short_secs)
for security in long_secs:
if data.can_trade(security):
order_target_percent(security, long_weight)
for security in short_secs:
if data.can_trade(security):
order_target_percent(security, short_weight)
for security in context.portfolio.positions:
if data.can_trade(security) and security not in long_secs and security not in short_secs:
order_target_percent(security, 0)
def record_vars(context, data):
long_count=0
short_count=0
for position in context.portfolio.positions.values():
if position.amount>0:
long_count+=1
elif position.amount<0:
short_count+=1
record(num_longs=long_count, num_shorts=short_count, leverage=context.account.leverage)
要在 Quantopian 之外交易 Quantopian 策略,您需要两件事:回测和数据。
Zipline is the open-source backtesting library that powers the Quantopian backtester. The biggest problem is that out of the box, it does not support live trading. There have been some community-based attempts 使其适应实时交易,但它们从未获得太大的吸引力,而且似乎已经失败了。
您需要做的第二件事是从某处获取数据并编写自定义代码以将其加载到 Zipline 中。 Quantopian/Zipline 需要以名为 bcolz 的列式存储格式存储 1 分钟的数据。如果您在 Pipeline 中使用基础数据,加载该数据是一个单独的步骤,需要编写自定义代码。
最重要的是,为实时交易调整 Zipline 并非易事。
如果您更喜欢即用型选项,QuantRocket supports backtesting and live trading of Zipline strategies 并提供内置的 1 分钟美国股票数据。基础数据可在 Pipeline 中使用。 Q1500US 是 Quantopian 特有的,不是开源库的一部分,但您可以通过过滤美元数量或市值来估算它。
免责声明:我隶属于 QuantRocket。
最大的问题是:
如何使用我用 alpha 组合设置的所有策略来实施我的量子算法?
我没有找到任何答案。
我发现 Alpaca 可以与 zipeline 一起使用,但我不能将 morningstar 或 Q1500US 与 alpaca 一起使用,或者我没有找到方法。
我花了很多时间来设置这个机器人,找到了具有低 alpha 和良好 returns 的好因素,我真的很失望,我真的不想从头开始然后再做一个机器人。
请帮助找到解决方案,如果根本不可能使用这个机器人,请告诉我哪个库是完整的量子图,我可以用它来做另一个相同风格的机器人。
谢谢大家,我的机器人就在下面!!
这是我的机器人:
import quantopian.algorithm as algo
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.pipeline.filters import QTradableStocksUS
from quantopian.pipeline.filters.morningstar import Q1500US
from quantopian.pipeline.data.sentdex import sentiment
from quantopian.pipeline.data.morningstar import operation_ratios
def initialize(context):
"""
Called once at the start of the algorithm.
"""
# Rebalance every day, 1 hour after market open.
algo.schedule_function(
rebalance,
algo.date_rules.every_day(),
algo.time_rules.market_open(hours=1),
)
# Record tracking variables at the end of each day.
algo.schedule_function(
record_vars,
algo.date_rules.every_day(),
algo.time_rules.market_close(),
)
# Create our dynamic stock selector.
algo.attach_pipeline(make_pipeline(), 'pipeline')
#set_commission(commission.PerTrade(cost=0.001))
def make_pipeline():
# Yes : operation_ratios.revenue_growth.latest
# Yes : operation_ratios.operation_margin.latest
# Yes : sentiment
testing_factor1=operation_ratios.operation_margin.latest
testing_factor2=operation_ratios.revenue_growth.latest
testing_factor3=sentiment.sentiment_signal.latest
universe =(Q1500US() &
testing_factor1.notnull() &
testing_factor2.notnull() &
testing_factor3.notnull())
testing_factor1=testing_factor1.rank(mask=universe, method='average')
testing_factor2=testing_factor2.rank(mask=universe, method='average')
testing_factor3=testing_factor3.rank(mask=universe, method='average')
testing_factor= testing_factor1 + testing_factor2 + testing_factor3
testing_quantiles = testing_factor.quantiles(2)
pipe = Pipeline(columns={'testing_factor':testing_factor,'shorts':testing_quantiles.eq(0),'longs':testing_quantiles.eq(1)},screen=universe)
return pipe
def before_trading_start(context, data):
"""
Called every day before market open.
"""
context.output = algo.pipeline_output('pipeline')
# These are the securities that we are interested in trading each day.
context.security_list = context.output.index
def rebalance(context, data):
long_secs=context.output[context.output['longs']].index
long_weight=0.5/len(long_secs)
short_secs=context.output[context.output['shorts']].index
short_weight=-0.5/len(short_secs)
for security in long_secs:
if data.can_trade(security):
order_target_percent(security, long_weight)
for security in short_secs:
if data.can_trade(security):
order_target_percent(security, short_weight)
for security in context.portfolio.positions:
if data.can_trade(security) and security not in long_secs and security not in short_secs:
order_target_percent(security, 0)
def record_vars(context, data):
long_count=0
short_count=0
for position in context.portfolio.positions.values():
if position.amount>0:
long_count+=1
elif position.amount<0:
short_count+=1
record(num_longs=long_count, num_shorts=short_count, leverage=context.account.leverage)
要在 Quantopian 之外交易 Quantopian 策略,您需要两件事:回测和数据。
Zipline is the open-source backtesting library that powers the Quantopian backtester. The biggest problem is that out of the box, it does not support live trading. There have been some community-based attempts 使其适应实时交易,但它们从未获得太大的吸引力,而且似乎已经失败了。
您需要做的第二件事是从某处获取数据并编写自定义代码以将其加载到 Zipline 中。 Quantopian/Zipline 需要以名为 bcolz 的列式存储格式存储 1 分钟的数据。如果您在 Pipeline 中使用基础数据,加载该数据是一个单独的步骤,需要编写自定义代码。
最重要的是,为实时交易调整 Zipline 并非易事。
如果您更喜欢即用型选项,QuantRocket supports backtesting and live trading of Zipline strategies 并提供内置的 1 分钟美国股票数据。基础数据可在 Pipeline 中使用。 Q1500US 是 Quantopian 特有的,不是开源库的一部分,但您可以通过过滤美元数量或市值来估算它。
免责声明:我隶属于 QuantRocket。