002 常见量化交易平台使用

002 常见量化交易平台使用

常见的量化交易平台:米筐,BigQuant,优矿,聚宽,掘金。

本文简单介绍其中的米筐量化交易平台。米筐支持Python,Java编写交易策略进行回测。

一、平台使用

1. 注册账号

平台网址:米筐量化平台

平台的帮助文档见网站【支持】页面:

2. 进入界面

打开右上角的【产品——米筐量化协作平台】进入策略编写界面,然后点击【新建策略】的【代码策略】,当然,也可以使用向导策略。

3. 编写策略

在左侧编写策略,点击右侧的【编译策略】

4. 运行回测

编译通过后,点击最右侧的【运行回测】,模拟交易策略的结果。

二、常用函数

1. init()

策略启动运行时首先执行的函数,只执行一次。其中context参数可理解为全局变量,可在各个函数中使用,以传递参数。

# 可以导入常见的numpy,pandas等库,以及米筐自带的talib库

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。

def init(context):

# 在context中保存全局变量

context.s1 = "000001.XSHE"

# 实时打印日志

logger.info("RunInfo: {}".format(context.run_info))

2. handle_bar()

股票数据有更新时会自动执行该函数,用于编写量化策略的主要逻辑和触发交易动作。

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新

def handle_bar(context, bar_dict):

# 开始编写你的主要的算法逻辑

# bar_dict[order_book_id] 可以拿到某个证券的bar信息

# context.portfolio 可以拿到现在的投资组合信息

# 使用order_shares(id_or_ins, amount)方法进行落单

# TODO: 开始编写你的算法吧!

order_shares(context.s1, 1000)

3. before_training()

每天策略开始交易前自动触发的函数。具体触发事件取决于交易策略的执行事件。

4. after_training()

每天收盘后组东触发的函数。

5. 交易函数

order_percent():按目前总资产的百分比金额买入或买出。如:

order_percent('000651.SZ', 1) # 全仓买入格力

order_percent('000651.SZ', 0.5) # 半仓买入格力

order_percent('000651.SZ', -1) # 清仓格力

order_percent('000651.SZ', -0.5) # 减半仓格力

order_shares:按若干股(必须是1手的倍数,A股中,1手=100股)的数量交易。如:

order_shares('000651.SZ', 200) # 买入200股格力

order_shares('000651.SZ', -100) # 卖出100股格力

order_lots:按若干手的数量交易。如:

order_lots('000651.SZ', 2) # 买入2手格力

order_lots('000651.SZ', -1) # 卖出1手股格力

order_value():按金额数量交易。如

order_value('000651.SZ', 100000) # 买入共1w人民币的格力

order_value('000651.SZ', -100000) # 卖出共1w人民币的格力

order_value('000651.SZ', 0) # 清仓格力

其他还有order_target_percent、order_target_portfolio是按当前仓位百分比进行增减仓的函数等。

6. 股票筛选函数

is_st_stock(stock_code):股票是否ST

is_suspend(stock_code):是否停牌

三、策略示例

策略示例摘自李天胜《python量化交易实战》一书。

1. 策略示例1

如果空仓,直接全仓买入茅台股票。

# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

import talib

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。

def init(context):

logger.info('init')

context.s1 = "600519.XSHG" # 茅台

context.fired = False # 是否发送了交易命令

context.cnt = 1 # 策略相关函数执行次数

# 设置这个策略当中会用到的参数,在策略中可以随时调用,这个策略使用长短均线,我们在这里设定长线和短线的区间,在调试寻找最佳区间的时候只需要在这里进行数值改动

context.SHORTPERIOD = 20

context.LONGPERIOD = 120

def before_trading(context):

logger.info('before trading', context.cnt)

context.cnt += 1

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新

def handle_bar(context, bar_dict):

# 开始编写你的主要的算法逻辑

context.cnt += 1

logger.info('handle_bar', context.cnt)

# bar_dict[order_book_id] 可以拿到某个证券的bar信息

# context.portfolio 可以拿到现在的投资组合状态信息

# 使用order_shares(id_or_ins, amount)方法进行落单

# TODO: 开始编写你的算法吧!

if not context.fired:

order_percent(context.s1, 1)

context.fired = True

回测结果:

2. 策略示例2

KDJ金叉全仓买入,KDJ死叉清仓

# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。

import talib

# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。

def init(context):

# 在context中保存全局变量

context.s1 = "600519.XSHG"

# 实时打印日志

logger.info("RunInfo: {}".format(context.run_info))

context.SHORTPERIOD = 20 # MA20

context.LONGPERIOD = 60 # MA60

# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次

def before_trading(context):

pass

# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新

def handle_bar(context, bar_dict):

# 开始编写你的主要的算法逻辑

# bar_dict[order_book_id] 可以拿到某个证券的bar信息

# context.portfolio 可以拿到现在的投资组合信息

# 使用order_shares(id_or_ins, amount)方法进行落单

# TODO: 开始编写你的算法吧!

prices = history_bars(context.s1, context.LONGPERIOD+1, '1d','close')

short_avg = talib.SMA(prices, context.SHORTPERIOD)

long_avg = talib.SMA(prices, context.LONGPERIOD)

plot('short avg', short_avg[-1])

plot('long avg', long_avg[-1])

# 当前股票持有的仓位

cur_position = get_position(context.s1).quantity

# 当前portfolio中现金可以买入多少股

shares = context.portfolio.cash/bar_dict[context.s1].close

# 死叉,清仓

if (short_avg[-1] - long_avg[-1]) < 0 and (short_avg[-2] - long_avg[-2] > 0) and cur_position > 0:

order_target_value(context.s1, 0)

# 金叉,加仓

if (short_avg[-1] - long_avg[-1]) > 0 and (short_avg[-2] - long_avg[-2] < 0):

order_shares(context.s1, shares)

# after_trading函数会在每天交易结束后被调用,当天只会被调用一次

def after_trading(context):

pass

回测结果:

相关推荐

洗完澡若身体出现4个表现,可能是疾病的征兆
365提款不到账的吗

洗完澡若身体出现4个表现,可能是疾病的征兆

📅 07-23 👁️ 6926
爆火泰国!床垫界的劳斯莱斯!MODERN LATEX乳胶寝具
365视频游戏世界

爆火泰国!床垫界的劳斯莱斯!MODERN LATEX乳胶寝具

📅 09-06 👁️ 1479
巅峰对决!决赛对阵出炉:孙颖莎VS陈梦,王楚钦狙击张本智和