同花顺Supermind量化交易 十行代码玩转量化交易----附完整代码和解析

对于大部分人来说,量化交易是非常陌生与神秘的。本篇文章将带你入门量化交易,全文阅读约10分钟。

  本篇文章内容摘要:
   1.理解量化策略的基本框架
   2.十行代码完成双均线策略编写
   3.开启策略模拟交易,实时接收交易信号

1.理解量化策略的基本框架

  通常情况下,完整的量化交易策略至少需要确定两件事:
   A.交易标的,即买什么
   B.确定交易时机,即怎么买卖
  让我们来设计一个简单完整的双均线量化交易策略:
   策略交易标的:通策医疗;
   策略交易时机:5日均线与20日均线金叉时,买入;5日均线与20日均线死叉时,卖出。

2.十行代码完成双均线策略

  第一步:登录SuperMind量化交易平台,导航栏上点击“我的策略”—“策略研究”,点击右上角蓝色按钮“+新建策略”,再点击已创建的策略进入策略编译器页面,如下:
 


  第二步:理解量化交易策略框架对应的代码框架。

def init(context):
    #初始化函数:确定交易标的
def handle_bar(context, bar_dict):
    #定时运行函数:确定交易时机

  框架理解
  1.def init(context)与def handle_bar(context, bar_dict)是两个函数,函数格式固定为:def 函数名(参数),其中def后面带空格键,函数末尾必须带冒号。
  2.def init(context)函数是初始化函数,只运行一次,确定初始化条件;def handle_bar(context, bar_dict)函数是定时运行函数,平台默认该函数定时运行。日级策略,每日9:30;分钟级策略,交易期间内的每分钟。
  3.“#”后面为注释内容,用于注释代码,便于编写和阅读。

  第三步:确定交易标的:g.stock = '600763.SH'
  温馨提示
  1.g是全局对象,该对象用于存放自定义参数。这里我们需要确定交易标的,即:g.stock = '600763.SH'

def init(context):
    g.stock = '600763.SH'
def handle_bar(context, bar_dict):
    #定时运行函数:确定交易时机

  第四步:确定交易时机,即为:5日均线与20日均线金叉时,买入;5日均线与20日均线死叉时,卖出。   从交易时机出发,我们需要计算交易标的5日和20日均线,那么5、20日均线需要用历史行情数据的收盘价来计算。

  整个流程即:获取历史行情20日的收盘价数据———计算5、20日均线———判断5、20日均线,进行买卖交易。

   A.获取历史行情20日的收盘价数据
    1.找到函数历史数据函数:history()
    2.填写函数参数,获取到数据
     i.交易标的,即:获取那个股票的数据。
     ii.数据字段:['close']收盘价,即:获取那个数据。
     iii.输入历史长度,即:获取多长时间的数据。
     iv.获取数据的时间步长,即:获取日线级步长数据。
     v.最终结果即为:history(g.stock, ['close'] , 20, '1d')
    3.将获取到的数据储存,便于计算,即:price = history(g.stock, ['close'] , 20, '1d')

#获取证券过去20日的收盘价数据  
price = history(g.stock, ['close'] , 20, '1d')

   B.计算5、20日均线

    1.获取数据值,即:price.values。values可以直接获取储存中的数据值,格式为price.values。温馨提示:price是我们刚才获取的数据,但是数据有股票、时间、数值,我们直接用values获取值用于计算即可。

    2.选取数据长度,即:price.values[-5:]。[]用于取值,我们之前获取20个数据,但5日均线只需要过去5日的收盘价,因此[-5:]即为获取倒数第五个到最后一个数据。温馨提示:

     i.[:]是获取所有数据。

     ii.[:x]是从第一个获取到第x个,不包括第x个。

     iii.[x:y]是从第x个到第y个,包括x,但不包括y。

     iv.[-x:]获取倒数第x个到最后一个数据。

    3.计算均值,即price.values[-5:].mean(),赋值给MA5。同理MA20=price.values.mean(),即对所有值取平均,相当于MA20=close.values[:].mean()。

#计算5日均线和20日均线
MA20 = price.values.mean()
MA5 = price.values[-5:].mean()

   C.判断5、20日均线,进行买卖交易

    1.if判断条件,即为 if MA5 > MA20:。温馨提示if判断函数的格式为if +添加判断+:,其中if后面必须带一个空格键,其次末尾必须带冒号。

    2.当MA5大于MA20时,下单买入交易

     i.当触发MA5大于MA20时,我们需要买入股票,这时候我们可以使用order_target_percent下单函数,该函数以目标市值百分比下单。

     ii.输入下单函数的参数,order_target_percent函数需要输入两个参数:

      1.下单的股票,即为g.stock,我们之前将交易标的传入进去,可以直接用。

      2.目标市值百分比,满仓即为1

#如果5日大于20日均线,则满仓买入
if MA5 > MA20:
    order_target_percent(g.stock,1)

    3.当MA5小于MA20时,下单卖出交易

     i.当触发MA5小于MA20时,我们需要卖出股票,这时候我们可以使用order_target下单函数,该函数以目标股数下单。

     ii.输入下单函数的参数,order_target函数需要输入两个参数:

      1.下单的股票,即为g.stock,我们之前将交易标的传入进去,可以直接用。

      2.下单的目标股数,即0,因为我们需要将持仓股票卖出,卖到0股为止。

#如果5日小于20日均线,则清仓卖出
if MA20 > MA5:
    order_target(g.stock,0)

  最终结果

# 初始化函数
def init(context):
    #设置需要交易的股票
    g.stock = '600763.SH'
#每日运行函数
def handle_bar(context, bar_dict):
    #获取证券过去20日的收盘价数据  
    price = history(g.stock, ['close'] , 20, '1d')
    #计算5日均线和20日均线
    MA20 = price.values.mean()
    MA5 = price.values[-5:].mean()
    #如果5日大于20日均线,则满仓买入
    if MA5 > MA20:
        order_target_percent(g.stock,1)
    #如果5日小于20日均线,则清仓卖出
    if MA20 > MA5:
        order_target(g.stock,0)

  第五步 回测量化交易策略   

通过以上4步,我们已经完成了量化交易策略编写,那么接下来我们需要进行量化交易策略回测。
  A.首先,我们尝试去跑通整个历史行情,排查代码错误
  右上角设置回测历史长度,设置资金,设置交易频率。点击左上角“编译运行”按钮,右边出现量化交易策略在历史行情中的表现情况
 


  B.当量化交易策略能跑通整个历史行情后,我们可以确定该代码正确无误,随后点击右上角蓝色按钮“进行回测”。页面跳转至回测页面,如下:

3.开启策略模拟交易,实时接收交易信号

1.在回测显示结果页面,右上角点击蓝色按钮开启模拟交易,可以自行选择:从当前日开始模拟,在已有的回测基础上继续模拟.如下图:

2.至此,我们成功开启了模拟交易,可以查看您的模拟交易账户详细情况:交易明细、持仓、盈亏情况、账户风险指标等等。如下图: 
 


3.您可以为您模拟交易账户新建模拟交易、暂停策略运行、发布策略至社区、重启策略、查看策略运行日志、查看策略代码。注意:重启按钮只会在策略运行错误后显示,如果策略运行正常,显示暂停按钮。新建模拟交易如下图:

查看以上策略详细请 到 supermind量化交易官网查看:十行代码玩转量化交易----附完整代码和解析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值