开源量化框架Catalyst中文教程(3)——双均线策略

GitHub:https://github.com/enigmampc/catalyst
官方文档:https://enigma.co/catalyst/index.html
参考视频:网易云课堂《从零搭建数字货币量化交易系统
系统环境:macOS High Sierra 10.13.6

这篇我们在Catalyst的官方示例dual_moving_average.py的基础上研究双均线策略。

一. 策略要点

1. 短期移动均线上穿长期移动均线,买入
2. 短期移动均线下穿长期移动均线,卖出

如图所示(注意:绿涨红跌,这是国际惯例):
在这里插入图片描述

3. 买入和卖出的时机(交易逻辑)

如图所示:第一根K线的短周期均线在长周期均线下方,第二根K线的短周期均线上穿长周期均线,当且仅当第二根K线结束我们才能确认这个买点形成,在catalyst中,我们可以在第二根K线结束时买入。

二. 代码详解

1. 常数设置和程序初始化

这里我们用bitfinex交易所的BCH/USD交易对,注意:BCH在bitfinex交易所的名称是BAB,所以symbol是bab_usd

NAMESPACE = 'dual_moving_average'
log = Logger(NAMESPACE)
SIGNAL_BUY = 'buy'  # 买入信号
SIGNAL_SELL = 'sell'  # 卖出信号
SIGNAL_INIT = ''  # 观望信号
SHORT_WIN = 5  # 短周期窗口
LONG_WIN = 20  # 长周期窗口


def initialize(context):
    """
        初始化
    """
    context.i = 0  # 经历过的交易周期
    context.asset = symbol('bab_usd')  # 交易对
    context.base_price = None  # 初始价格
    context.signal = SIGNAL_INIT  # 交易信号
2. 策略实现
def handle_data(context, data):
    # 经历过的交易周期大于长周期均线窗口才开始计算
    context.i += 1
    if context.i < LONG_WIN + 1:
        return

    # 获取历史数据,返回series
    history_data = data.history(context.asset,
                                'close',
                                bar_count=LONG_WIN + 1,
                                frequency="1D",
                                )

    # 获取当前持仓数量
    pos_amount = context.portfolio.positions[context.asset].amount

    # 计算双均线
    """
        pandas.Series.mean: Return the mean of the values for the requested axis.
                            scalar or Series (if level specified)
        pandas.Rolling.mean: Calculate the rolling mean of the values.
                             Returned object type is determined by the caller of the rolling calculation.
    """
    short_avgs = history_data.rolling(
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值