Closed cliff007 closed 7 years ago
以上是完全copy样本策略里的rsi.py代码,只是在代码后面加上了if name == "main":开始的一段config和run(config),求测试python2.7下如何能跑成功
我编辑了一下你的代码,是这个意思吗?
上面两部分代码合成在同一个文件里,不是分开的,我的问题是:
1、 alog的script(.py)文件里在注释或任何地方有中文字符出现的话(包括诸如print u"你好"之类的u开头的字符串),不能加入像 # -- coding: UTF-8 -- 之类的文件编码申明字符,否则会导致algo无法编译执行 2、 在alog的script(.py)文件里尝试用if name == "main" 来写config并run(config),还是败在了中文编码上,没法正确执行 3、 只能独立新建一个test.py文件来写config并run(config),在这个test.py文件里,可以有# -- coding: UTF-8 -- 这样的申明(这种做法下alog的script(.py)文件里是可以有中文字符注释的) 4、 但如果alog的script(.py)文件里是全英文的话(不出现任何中文字符),if name == "main" 来写config并run(config)是能正确执行的
zipline是传递函数 rqalpha是传递整个algo文件内容 这会导致后者对于algo文件的解析多出很多意外
@cliff007 确实传递源码的这种方式有些情况下会出现一些问题,在策略开发阶段会有一些不方便,尤其是使用ipython notebook 的时候。
zipline 在 Ipython notebook 下使用确实比较方便, 这块后续会讨论出具体的方案以后会在该issue下贴出来,并且排期实现。
@cliff007 zipline 有三种方式,Command-line interface
, IPython Notebook
和 run_algorithm
。
RQAlpha 有两种方式,Command-lien interface
和 代码中引入RQAlpha库的方式
经过讨论,提供如下运行策略的API:
# 以策略文件路径的方式来运行
run_file(strategy_file_path, config=None)
# 以策略源码的方式来运行
run_code(strategy_code, config=None)
# 以策略函数的方式来运行
run_func(**kwargs)
有了第三种方式,代码可以这么写:
from rqalpha.api import *
def init(context):
context.s1 = "IF88"
subscribe(context.s1)
logger.info("Interested in: " + str(context.s1))
def handle_bar(context, bar_dict):
buy_open(context.s1, 1)
# 这里可以使用 __config__ 也可以使用 config
__config__ = {
"base": {
"securities": "future",
"start_date": "2015-01-09",
"end_date": "2015-03-09",
"frequency": "1d",
"matching_type": "current_bar",
"future_starting_cash": 1000000,
"benchmark": None,
},
"extra": {
"log_level": "error",
},
"mod": {
"sys_progress": {
"enabled": True,
"show": True,
},
}
}
if __name__ == '__main__':
from rqalpha import run_func
run_func(**globals())
# 当然,也可以显式指定参数
run_func(init=init, handle_bar=handle_bar, before_trading=None, config=__config__)
然后 RQAlpha 自动获取传入的参数 init
| handle_bar
| __config__
| config
等变量,并运行程序
rsi.py :