1953 3

[交易平台及行情软件] 10分钟带你开启量化交易之旅 [推广有奖]

  • 0关注
  • 4粉丝

本科生

83%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
1228 点
帖子
47
精华
0
在线时间
107 小时
注册时间
2017-7-13
最后登录
2019-5-22

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

对于大部分人来说,量化交易是非常陌生与神秘的。本篇文章将带你开启量化交易之旅!
  本篇文章内容摘要:1.理解量化策略的基本框架。2.学会编写一个简单的量化交易策略。3.学会将量化交易策略绑定实盘模拟交易,并实时收到交易策略的买卖信号

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

  通常情况下,完整的量化交易策略至少需要确定两件事:

   A.交易标的,即买什么
   B.确定交易时机,即怎么买卖

  让我们来设计一个简单完整的量化交易策略:

   策略交易标的:贵州茅台;
   策略交易时机:5日均线与20日均线金叉时,买入;5日均线与20日均线死叉时,卖出。

2.学会编写一个简单的量化交易策略第一步:打开MindGo量化交易平台,先在上方导航栏点击“我的策略”—“策略编译”,再点击蓝色按钮“+新建策略”,接着点击已创建的策略进入策略编译器页面,如下:


温馨提示:“回测列表”下方三个按钮,可以设置编译器字体大小,背景颜色,开启全屏编译,查看API文档,如下:

第二步:理解量化交易策略框架对应的代码框架。def initialize(account):    #初始化函数:确定交易标的def handle_data(account,data):        #定时运行函数:确定交易时机

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

第三步:确定交易标的:account.security = '600519.SH'。

  温馨提示
  1.account是账户对象,该对象存放所有账户相关信息,持仓、可用现金、资产盈亏。
  2.account.security是在账户对象下,设置security变量,存放在账户内,这里我们需要确定交易标的,即:account.security = '600519.SH'。

def initialize(account):    account.security = '600519.SH'#已确定交易标的def handle_data(account,data):        #定时运行函数:确定交易时机第四步:确定交易时机,即为:5日均线与20日均线金叉时,买入;5日均线与20日均线死叉时,卖出。

  从交易时机出发,我们需要计算交易标的5日和20日均线,那么5、20日均线需要用历史行情数据的收盘价来计算。

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

   A.获取历史行情20日的收盘价数据

    1.找到函数历史数据函数:data.attribute_history()

    2.填写函数参数,获取到数据

     i.交易标的,即:获取那个股票的数据。

     ii.数据字段:'close'收盘价,即:获取那个数据。

     iii.输入历史长度,即:获取多长时间的数据。

     iv.获取数据的时间步长,即:获取日线级步长数据。

     v.最终结果即为:data.attribute_history(account.security, ['close'], 20, '1d')。

    3.将获取到的数据储存,便于计算,即:close=data.attribute_history(account.security, ['close'], 20, '1d')。

#获取证券过去20日的收盘价数据            close = data.attribute_history(account.security, ['close'], 20, '1d')

   B.计算5、20日均线

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

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

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

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

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

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

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

#计算五日均线价格        MA5 = close.values[-5:].mean()            #计算二十日均线价格            MA20 = close.values.mean()

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

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

    2.当MA5小于MA20时,我们再对持仓市值判断,如果有持仓,那么持仓市值必然大于0,需要进行卖出交易,我们直接通过account账户对象来获取持仓市值,即为:account.positions_value。

    3.下单买入交易

     i.当触发MA5大于MA20时,我们需要买入股票,这时候我们可以使用order_value下单函数,该函数以金额下单。

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

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

      2.下单的金额,即account.cash,这里的account是账户对象,我们从账户中获取可用资金,即为account.cash。

     iii.触发条件后程序提醒,当代码执行完下单函数后,我们用log.info()来打印日志,这样我们也可以看到程序下单了。

      温馨提示:log.info()内你可以直接输入中文,例如:log.info('条件满足!买入贵州茅台啦!')

    if MA5 > MA20:                    #使用所有现金买入证券                    order_value(account.security,account.cash)            #记录这次买入                    log.info("买入 %s" % (account.security))

    4.下单卖出交易

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

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

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

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

     iii.触发条件后程序提醒,当代码执行完下单函数后,我们同log.info()来打印日志,这样我们也可以看到程序下单了。

    #如果五日均线小于二十日均线,并且目前有头寸                if MA5 < MA20 and account.positions_value > 0:                    #卖出所有证券                    order_target(account.security,0)                    #记录这次卖出                    log.info("卖出 %s" % (account.security))

  最终结果

# 双均线策略# 策略逻辑:当五日均线与二十日均线金叉时买入,当五日均线与二十日均线死叉时卖出。#初始化账户            def initialize(account):                #设置要交易的证券(600519.SH 贵州茅台)                account.security = '600519.SH'            #设置买卖条件,每个交易频率(日/分钟/tick)调用一次            def handle_data(account,data):                #获取证券过去20日的收盘价数据                close = data.attribute_history(account.security, ['close'], 20, '1d')                #计算五日均线价格            MA5 = close.values[-5:].mean()                #计算二十日均线价格                MA20 = close.values.mean()                #如果五日均线大于二十日均线                if MA5 > MA20:                    #使用所有现金买入证券                    order_value(account.security,account.cash)                    #记录这次买入                    log.info("买入 %s" % (account.security))                #如果五日均线小于二十日均线,并且目前有头寸                if MA5 < MA20 and account.positions_value > 0:                    #卖出所有证券                    order_target(account.security,0)                    #记录这次卖出                    log.info("卖出 %s" % (account.security))第五步 回测量化交易策略

  通过以上4步,我们已经完成了量化交易策略编写,那么接下来我们需要进行量化交易策略回测。
  A.首先,我们尝试去跑通整个历史行情,排查代码错误
   i.右上角设置回测历史长度,设置资金,设置交易频率

   ii.点击左上角“编译运行”按钮,右边出现量化交易策略在历史行情中的表现情况

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

3.学会将量化交易策略绑定实盘模拟交易,并实时收到交易策略的买卖信号

  1.在回测显示结果页面,右上角点击蓝色按钮开启仿真交易.如下图:



  2.在账户类型一栏,有股票型、期货型、混合型三种交易账户,选择股票型账户如下图:



  3.为账户选择相应的资金配置,一旦确定就无法更改,如下图:



  4.至此,我们成功开启了模拟交易。点击模拟交易账户下绑定的策略,开启交易信号实时推送,即可将策略的买卖信号发送至同花顺手机APP上。如下图:

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



  6.您可以查看您的模拟交易账户详细情况:交易明细、持仓、盈亏情况、账户风险指标等等



  7.当您的模拟交易策略运行出错时,您可以在模拟交易账户的状态栏看到“错误”提示,如下图:



  8.策略运行出错还可能跟系统有关,如果你没发现代码层面的错误,直接点击重启按钮,策略就会继续运行啦。



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


MINDGO量化交易平台链接:http://quant.10jqka.com.cn/platform/html/home.html

使用道具

藤椅
lxmlau 发表于 2017-10-31 20:53:37 |只看作者 |坛友微信交流群
厉害,高人

使用道具

lxmlau 发表于 2017-10-31 20:53
厉害,高人
欢迎使用MindGo量化交易平台

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 05:24