同花顺SuperMind股票量化交易策略

因为SuperMind没有封装计算MA均线等指标的函数,所以这里调用talib库来计算股票指标的值。

下面是一个简单的量化策略,策略思路是通过MA5和MA10大小关系再结合MACD的金死叉来进行交易,注释都写得很清楚了。

策略是在同花顺的量化平台编写运行的,如果是用其他平台记得修改代码,具体去查看一下官方文档即可。

import talib
def init(context):   
    #A股第25名华珏矿业
    g.security = '601020.SH' #输入股票代码
    #设置MACD模型参数
    g.Short = 12 #短周期平滑均线参数
    g.Long = 26 #长周期平滑均线参数
    g.M = 9 #DIFF的平滑均线参数
    set_benchmark('000300.SH') #设置基准指数,默认为沪深300
    #设置最大成交比例日级成交量比例50%,分钟级成交量比例50%
    set_volume_limit(daily=0.5, minute=0.5)
    set_commission(PerShare(type='stock',cost=0.0002))
    # 设置股票交易滑点0.5%,表示买入价为实际价格乘1.005,卖出价为实际价格乘0.995

    
def handle_bar(context,bar_dict): 
    hh = 0.00
    dd = 0.00
    #大小周期的MA5小于MA10(白线小于黄线)都成立时,才执行买入条件
    #判定买入条件:(小周期MACD金叉买进)
    #获取大小周期的MA值
    ma5_long,ma5_short,ma10_long,ma10_short = get_mean_N(g.security)
    # 快线小于慢线 AND 慢线大于O AND 最近个MACD值大于前一个"三个条件进行选股
    if ma5_long < ma10_long and ma5_short < ma10_short and ma5_long>0:
        macd = get_macd(g.security)
        if macd[-1] > macd[-2]:
            #小周期MACD金叉判断,小周期MACD金叉买进
            if macd[-1]>0 and macd[-2]<0 and len(list(context.portfolio.stock_account.positions.keys())) == 0:
                order_value(g.security,context.portfolio.available_cash)    
                log.info("买入 %s" % (g.security))
                #获取购买日的最高价和最低价
                high_price = history(g.security, ['high'], 1, '1d', False, 'pre', is_panel=1)
                low_price = history(g.security, ['low'], 1, '1d', False, 'pre', is_panel=1)
                high_price_l = high_price['high'].max()
                low_price_l = low_price['low'].min()
                hh = high_price_l
                dd = low_price_l
                print(hh,dd)
                #  # 记录买入价格
                # g.buy_price = context.current_data[g.security].close
    low_prices = history(g.security, ['low'], 2, '1d', False, 'pre', is_panel=1)
    # 获取过去两天中的最低价
    min_low_price = low_prices['low'].min()

    # 获取当前股票的最新价格
    current_price = bar_dict[g.security].close
    #判定卖出条件
    #判定止盈条件,执行止盈:大于等于两个hh-一个dd
    for stock in context.portfolio.positions:
        if context.portfolio.positions > 0:
            #两个hh-一个dd
            if current_price >= hh*2 - dd*1:
                # 记录这次卖出
                log.info(">=2hh-1dd, 卖出 %s" % (stock))
                # 调整stock的持仓为0,即卖出
                order_target(stock, 0)
                print("!!!大于等于2hh-1dd,执行止盈!!!")
            #止损
            if current_price <= dd:
                log.info("止损, 卖出 %s" % (stock))
                # 调整stock的持仓为0,即卖出
                order_target(stock, 0)
                print("!!!执行止损!!!")

#计算MACD值的函数
def get_macd(stock):
    price = history(stock, ['close'], 500, '1d', True, 'pre', is_panel=1)['close']
    DIFF, DEA, MACD = talib.MACD(price.values,
            fastperiod = g.Short, slowperiod = g.Long, signalperiod = g.M)
    return MACD

# #计算MA均线的值
def get_mean_N(stock):
    #大周期ma值(30min)
    close_data = history(stock, ['close'], 500, '30m', False, 'pre', is_panel=1)
    ma5_long= close_data['close'][-5:-1].mean()
    ma10_long= close_data['close'][-10:-1].mean()
    #小周期ma值(10min)
    close_data_1 = history(stock, ['close'], 500, '10m', False, 'pre', is_panel=1)
    ma5_short= close_data_1['close'][-5:-1].mean()
    ma10_short= close_data_1['close'][-10:-1].mean()
    return ma5_long,ma10_long,ma5_short,ma5_long

上述只是模拟回测的策略代码,请勿用于实盘交易,仅供学习!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值