开启量化交易策略之旅:理解框架与编写简单策略
后台-插件-广告管理-内容页头部广告(手机) |
金融投资圈里,量化交易可是个热门话题。好多投资者都被它精准又高效的特点给吸引了。那些复杂的操作和规则,就像是一串神秘的密码,等着人们去破解。
获取数据的奥秘
def init(context):
#初始化函数:确定交易标的
def handle_bar(context, bar_dict):
#定时运行函数:确定交易时机
数据是量化交易的基础,对?比如,在这个策略里,咱们得用到过去20天的收盘价数据。这数据的来源对咱们做交易决策超级关键。比如说,在某些平台上,某个时间点的数据准确与否,直接影响到后面分析的可信度。这些数据是从真实的交易中来的,包括了股票名字、时间点、数值这些信息。咱们只需要用['close']就能轻松拿到收盘价,这事儿虽然简单,但其实它是整个策略启动的第一步。而且,用iloc[]来取值,这个方法也特别,它给咱们计算不同时间段的均线提供了方便。
在现实生活中,一旦数据获取出了差错,交易决策很可能会失误。举个例子,之前有位投资者在新兴金融市场做量化交易,结果因为数据接口不稳定,他拿到了错误的收盘价。虽然误差不大,但在高频交易中,最终却导致了巨额亏损。
def init(context):
context.security = '600519.SH'#已确定交易标的
def handle_bar(context, bar_dict):
#定时运行函数:确定交易时机
均线的计算与分析
#获取证券过去20日的收盘价数据
closeprice = history(context.security, ['close'], 20, '1d', False, 'pre', is_panel=1)
均线在量化交易中可是个关键角色。算出5日和20日均线后,它们就像交易中的指挥棒。一旦MA5低于MA20,就得特别留意交易动向了。比如说,在股市里,像茅台这样的股票,如果数据显示MA5小于MA20,那按照这个策略,就可能触发一些特定的交易动作。
还有一点就是,当MA5线高于MA20线时,这同样是一个不容忽视的信号。这样的均线关系转换在各类股票的不同时段都可能发生,投资者得随时留心。这种均线关系揭示了股价在短期与长期走势中的变化,对交易决策的正确与否有着直接的影响。
交易判断与操作
持仓市值判断有严格的规矩。当5日均线低于20日均线,持有股票且市值不为零时,就得执行卖出操作。比如说,小明在买卖股票时,就得遵循这个规矩,把股票卖掉才符合策略。另外,你可以用context.portfolio.stock_account.market_value这个方法来查持仓市值。
#计算二十日均线价格
MA20 = closeprice['close'].mean()
#计算五日均线价格
MA5 = closeprice['close'].iloc[-5:].mean()
买股票时得看情况,要是MA5超过了MA20,那就用order_target_percent这个下单功能。这玩意儿是按你想买的市值比例来操作的,这里设成1就等于全仓进。每个步骤都得讲究逻辑,差一点都可能影响到最后能赚多少钱。
下单函数的运用
下单函数在这套量化交易策略中可是扮演着大角色。好比说,咱们得卖股票了,就派上order_target这个下单函数,按照目标股数来操作。这回交易的股票指定的是context.security,之前设定的交易目标在这儿正好用上了。
用这些下单函数可得好好弄明白它们的功能和能用的数值区间。这就像打战一样,每种武器都有它专门的作用和能用的地方。只有挑对时候用对下单函数,咱们在交易这盘棋上才能赢。
# 如果5日均线大于20日均线,则全仓买入股票
if MA5 > MA20:
# 按目标市值占比下单
order_target_percent(context.security, 1)
# 记录这次买入
log.info("买入 %s" % (context.security))
策略的测试与运行
写完整个代码后,得点左上角的“编译运行”按键,立马能瞧见量化交易策略在历史行情里头怎么表现。这就像给产品做测试,只有通过了测试的策略才靠谱。要是策略能在整个历史行情里头顺利跑下来,那这代码基本上就能说是没错了。
回测操作得先来,点那个右上角蓝颜色的“进行回测”按钮。进了回测详情界面,能看到策略收益走势、风险指数、持仓情况、交易记录、输出日志等等,信息全都有。这玩意儿能让投资者对策略效果有个全面的认识,还能提前发现可能的问题,做个预警。
# 如果5日均线小于20日均线,并且目前有头寸,则清仓股票
elif MA20 > MA5 and context.portfolio.stock_account.market_value > 0:
# 卖出所有股票,使这只股票的最终持有量为0
order_target(context.security, 0)
# 记录这次卖出
log.info("卖出 %s" % (context.security))
开启模拟交易
def init(context):
# 设置要操作的股票:贵州茅台
context.security = '600519.SH'
# 设置买卖条件,每个交易频率(日/分钟/tick)调用一次
def handle_bar(context, bar_dict):
# 获取股票过去20天的收盘价数据
closeprice = history(context.security, ['close'], 20, '1d', False, 'pre', is_panel=1)
# 计算20日均线
MA20 = closeprice['close'].mean()
# 计算5日均线
MA5 = closeprice['close'].iloc[-5:].mean()
# 如果5日均线大于20日均线,则全仓买入股票
if MA5 > MA20 :
# 按目标市值占比下单
order_target_percent(context.security, 1)
# 记录这次买入
log.info("买入 %s" % (context.security))
# 如果5日均线小于20日均线,并且目前有头寸,则清仓股票
elif MA20 > MA5 and context.portfolio.stock_account.market_value > 0:
# 卖出所有股票,使这只股票的最终持有量为0
order_target(context.security, 0)
# 记录这次卖出
log.info("卖出 %s" % (context.security))
完成前期准备和测试后,咱们就可以开始模拟交易了。这时候,投资者可以细看模拟交易账户的各种信息,比如交易记录、持仓情况、盈亏状况、账户风险指数等等。这些信息对评估策略在模拟环境中的效果至关重要。模拟交易就像实战前的演练,能帮助投资者更熟悉策略的实际运用,及早发现并调整潜在问题。
各位读者,你们在搞量化交易的时候,是不是也遇到过数据不准确导致决策失误的情况?欢迎大家点个赞、转发一下、也来聊聊看法。
本文 融资融券杠杆炒股 原创,转载保留链接!网址:http://www.futuread.cn//zmt/435.html
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
后台-插件-广告管理-内容页尾部广告(手机) |