同花顺-圈子

请广大用户注意风险,切勿加入站外群组或添加私人微信,如因此造成的任何损失,由您自己承担。
带你入门MindGo-我的第一个策略
0人浏览 2017-06-23 13:57

首先,我们进入MindGo平台,点击导航栏的开始研究,进入策略编辑页面,如下图:



点击上图2加号,再点击新建策略,进入MindGo的新默认策略页面,左侧是策略选择界面,中间是编写策略代码,右侧是运行策略后的结果:



当然为了方便,左右两边的页面是可以拉伸的,一般在编译策略时我们隐藏策略选择界面。



1 平台框架与策略逻辑

平台框架

(1)def initialize(account):
#初始化方法,在整个回测、仿真交易中最开始执行一次,用于初始一些回测参数,也可定义全局变量
(2)def handle_data(account, data):
#设置买卖条件,每个交易频率(日/分钟/tick)调用一次(循环操作);
#该函数在回测中的非交易日是不会触发的(如回测结束日期为1月5日,而1月1日至3日是非交易日,则handle_data在1日至3日不会运行,4日继续运行)。

MindGo平台的几乎所有策略都基于这个框架,即:

(1)初始化账户,即最开始要做的事情,如选定股票,设置变量、参数等;
(2)设置买卖条件,每个交易频率(日/分钟/tick)调用一次。

策略逻辑:当五日均线与二十日均线金叉时买入,当五日均线与二十日均线死叉时卖出。

人为操作(分三步):
(1)先决定好交易哪一个股票;
(2)获取收盘价数据并计算五日均线和二十日均线;
(3)判断五日均线与二十日均线是否金叉,如果是,开盘就买入;如果不是,开盘就卖出。每天都这么做,循环下去。

接下来我们告诉计算机如何去实现这个策略逻辑,也分三步:
(1)初始化账户;
(2)获取收盘价数据,计算均线;
(3)判断是否买卖并下单。

2 初始化账户

我们先设置要交易的股票的代码,比如贵州茅台600519.SH:

#初始化账户   
def initialize(account):   
    #设置要交易的证券(600519.SH 贵州茅台)   
    account.security = "600519.SH"

其中:account参数为Account对象,存放当前账户、股票持仓信息

3 获取收盘价数据,计算均线

def handle_data(account,data):   
    #获取证券过去20日的收盘价数据   
    close = data.attribute_history(account.security, ["close"], 20, "1d")   
    #计算五日均线价格   
    MA5 = close.values[-5:].mean()   
    #计算二十日均线价格   
    MA20 = close.values.mean()

其中:
attribute_history:data对象,获取单只证券历史行情数据(单只证券多属性数据,只能在handle_data中使用)
data.attribute_history(symbol, fields, bar_count, fre_step, skip_paused=False, fq=None) 详见帮助的API文档

4 判断是否买卖并下单

数据已获取完毕,接下来我们做买卖判断:

#如果五日均线大于二十日均线   
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))

其中:

(1)order_value:按金额下单
order_value(symbol, value, limit_price=None, style=None) 详见帮助的API文档
例:

order_target("000001.SZ", 0) # 将股票全部卖出
order("000001.SZ", 100) # 若order下单买入100股成功,则当前持仓100股

(2)order_target:按目标股数下单,即将标的证券的持仓数量调整至目标股数
order_target(symbol, target, limit_price=None, style=None)
例:

log.info(get_open_orders())  # 打印所有未完成订单
if account.cash < 1000:     # 当资金小于1000元时,打印信息并结束回测
   log.error("资金不足")

(3)log:打印输出
log.info:打印输出日志或其他信息
log.error:正常情况下不使用,可以使用log.error来结束回测(即当执行到log.error后,回测将停止)
例:

log.info(get_open_orders())  # 打印所有未完成订单
if account.cash < 1000:     # 当资金小于1000元时,打印信息并结束回测
   log.error("资金不足")

5 策略代码写完,进行回测

把买入卖出和下单的代码写好后,策略就写完了,记得保存哦,完整双均线策略如下:

# 双均线策略
# 策略逻辑:当五日均线与二十日均线金叉时买入,当五日均线与二十日均线死叉时卖出。

#初始化账户   
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))


进行回测:在我的策略回测界面右上角,先设置回测时间:从2016-06-22到2017-05-31,设置初始资金100000,回测频率为每日,最后点击上边的运行。



运行结果:



如果代码无误,点击运行后就会顺利进行回测,点击回测详情,如下图,共耗时3秒:



至此,我们就完成了一个简单的双均线策略啦!接下来就是开启交易提醒,使MindGo上的仿真交易信号可以实时推送至同花顺手机APP~

6 开启与同花顺APP同步的仿真交易

策略写好,回测完成后(记得要回测完成后哦),点击回测结果中的开启仿真交易:



页面跳转出开启仿真交易的对话框,选择已有账户:



点击确定后即开启仿真交易(如果尚无账户,可先在交易页面的左上角添加账户后再点击开启仿真交易)。



开启交易提醒,仿真交易与同花顺APP同步,交易信号,实时推送!



绑定账户并开启交易提醒后,当模拟交易发出下单信号时,同花顺手机APP上将收到这样的消息推送:



点开同花顺APP的消息推送,显示:



MindGo上的仿真交易信号就同步在同花顺手机APP上了,是不是很方便呢~

至此,带你入门MindGo之我的第一个策略就学完啦,聪明的您是不是觉得很简单呢?快来编写您的第一个策略吧~ 温故知新

通过阅读这篇帖子,我们学会了:
(1)MindGo的回测框架;
(2)学会写一个简单的策略--双均线策略;
(3)开启与同花顺APP同步的仿真交易。

更多
· 推荐阅读
0
1
扫码下载股市教练,随时随地查看更多精彩文章
  • TOP
本文纯属作者个人观点,仅供您参考、交流,不构成投资建议!
请勿相信任何个人或机构的推广信息,否则风险自负