十行代码量化框架

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

本篇文章内容摘要:

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

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

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

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

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

A.交易标的,即买什么

B.确定交易时机,即怎么买卖

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

策略交易标的:通策医疗;

策略交易时机:5日均线与20日均线金叉时,买入;5日均线与20日均线死叉时,卖出。

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

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


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

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.开启策略模拟交易,实时接收交易信号

完成策略回测后,可在右上角点击“开启仿真交易”,即可绑定模拟交易.


在模拟交易页面右侧,可开关信号推送,开启状态下,策略交易信号通过同花顺APP实时推送。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容