可以写个策略来赚钱算不算好玩呢?

网格大法好,熊市不用跑

不看眼成绩怎么有兴趣往后看~

回测做了很多组,不同网格大小分别在大周期、震荡各做了一次。大周期:2018-10-10至2019-10-10-3%买,5%卖:【策略年化:75.38%】【基准年化:4.06%】

-5%买,10%卖:【策略年化:76.77%】【基准年化:4.06%】

-8%买,18%卖:【策略年化:77.18%】【基准年化:4.06%】

震荡:2019-06-10至2019-10-20-3%买,5%卖:【策略年化:37.83%】【基准年化:-13.79%】

-5%买,10%卖:【策略年化:43.85%】【基准年化:-13.79%】

-8%买,18%卖:【策略年化:48.67%】【基准年化:-13.7%】

网格交易的来源

网格交易法相信很多人都知道,其思路来源于信息论之父 香农。 />

上世纪40年代的某一天,香农在黑板上给大家演示了他的投资理论:

1、在任意一个价位上,用50%的资金买入股票。即 资金数量:股票市值=50%:50%。

例如,我有10万块钱,当前股价是10元/股。我花5万块钱,买了5000股(股票市值5万元),我还剩5万元。 此时,我的 资金数量:股票市值=50%:50%。

2、股票价格上涨一定幅度就卖出一部分股票,保持 剩余的资金数量:剩余股票市值=50%:50%; 反之股票价格下跌一定幅度,就用剩余资金买进一部分股票,始终 保持剩余资金数量:剩余股票市值=50%:50%。

还是那个例子,如果股票涨到12.5元/股,就卖掉1000股。 此时,我的资金数量还是5万元,不包含收益。 股票市值 = (5000-1000)股 * 12.5元 = 5万元。 资金数量:股票市值=50%:50%,保持不变。此时我的收益是2500元。

再举个反例,如果股票跌到8.33元/股,就买入500股,花了4167元。 此时,我的资金数量是45833.25元。股票市值 = (5000+500)* 8.33 = 45834.25元。资金数量:股票市值=50%:50%,维持在一个大致相同的比例。

从上面例子的重点来看,大家知道早期网格交易的核心了吧。

香农在十多年的交易生涯中,资金获得了29%的年复利增长。而这套方法不断的完善进化,形成了现在的网格交易策略。

网格交易到底是啥子?

这是一种仓位策略,用于动态调仓。

渔网策略:好像渔夫捕鱼一样,在不同的价位上设置好网,以逸待劳,等待捕鱼,下跌买入,上涨卖出,只要价格在一定的范围内波动就能赚到钱。每买卖一次都能赚到钱。当然了,网格交易法并不是适合于所有的市场,比如大跌可能会亏损很多。所以投资标的选定,还有参数的设定是非常讲究的。

其中有如下的参数需要设定:

交易区间:根据经验,不同的品种交易的区间不一样,交易区间决定了网格的密度,根据历史数据合理的划分交易区间才能赚到钱。

网格数量:网格越密集,越能捕捉到微小的价格波动,盈利越多,但需要的资金量越大。

每个网格购买数量:根据资金量进行划分,不同的策略有多种变种,如等比例下注,还是价格越低买的越多,亦或价格越高买的越多。

止盈价格:这个也要根据不同的品种,不同的价格,根据走势来,上涨的时候止盈要设置的高一点,震荡的时候设置的低一点。网格交易在外汇/期货/股票市场上都得到过验证,都取得过不错的成绩。

原则上在任何点位进入都可以(但资金管理很重要)如果目前的点位难以判断高低,以操作一只股票为例,第一次可以投入一半的资金,然后做好股价下跌50%的准备。

具体操作是,画好5%的固定网格,把股票数分为10份,每上涨5%卖出1份股票,每下跌5%买入一份股票,这样手中的股票可以应付股价单边上涨10个5%,资金可以应付单边下跌10个5%。

中间如有反复,每次对冲获利大约是总资金的1/20的4%(手续费按1%计算)。

总体看,如果1个月有10次对冲,月盈利是(1/20)0.0410 = 2%,年收益在25%以上。保守说,即使股价波动很小,每个月对冲2次,结果也不比银行差。

从目前中国市场看,没有什么股票的波动性会这么差。如果操作指数基金更好,不愁没有波动,手续费还少。

(可以同时采用大网格(例如10%)和小网格,还可以把网格划分得更细,例如2.5%甚至1.25%,但对冲差价不应少于5%。总之,以捕捉到更多的波动为佳。)

数字货币市场青睐的原因交易时间长,7*24小时交易,交易机会多

波动剧烈:大部分的时间是在震荡波动,震幅较大,我们知道,网格交易法最喜欢的就是波动了,波动越多,我们网的鱼也就越多。

程序化交易完善,网格交易法非常适合程序化交易来做,因为交易频繁,规则清晰,人工来做无法实时盯盘,而交给程序来做就简单很多。

风险较低。在外汇/期货市场上进行网格交易的问题是杠杆和资金量的问题,这两个市场上杠杆太高。这就意味着,需要控制好资金量,轻仓最重要。

基础网格的几个基本概念底仓价:价格的标准线,建仓和调仓的重要依据。

低吸高抛:仓位控制贯彻低吸高抛,绝不追涨杀跌。根据网格设置买卖价位。下面举个例子 />

在底仓价的附近,我们根据网格的大小,比如每跌3%按仓位买入(第一档:买40%,第二档:买30%,第三档:买20%,第四档:买10%)。网格大小:上图给出了3种网格大小。特点是买入网格小于卖出网格。这种不对称编织网格的道理在于网格的目的是网获利润,将利润建立在趋势的必然性中,而不仅仅是靠震荡的偶然性。

先讲特点和局限吧

首先,定理&公理:没有万能的策略趋势 决定策略的成败。在长期的上涨趋势中策略才能获得满意的回报。

底仓价格 设定在安全边际内。在估值顶部设立底仓价格风险极大,会造成很大的损失。

牛市表现不佳 分散的仓位策略,没有依据价格形态来修改网格,都可能在牛市中跑输大盘。降低贝塔的代价就是阿尔法也较低。

买卖规则不灵活 可能使一些重要的突破支撑或阻力位置的买卖点被忽略在网格之外。

收韭菜的时候到了

回测做了很多组,不同网格大小分别在大周期、震荡各做了一次。

大周期:2018-10-10至2019-10-10-3%买,5%卖:【策略年化:75.38%】【基准年化:4.06%】 />-5%买,10%卖:【策略年化:76.77%】【基准年化:4.06%】 />-8%买,18%卖:【策略年化:77.18%】【基准年化:4.06%】 />震荡:2019-06-10至2019-10-20-3%买,5%卖:【策略年化:37.83%】【基准年化:-13.79%】 />-5%买,10%卖:【策略年化:43.85%】【基准年化:-13.79%】 />-8%买,18%卖:【策略年化:48.67%】【基准年化:-13.7%】 />

下面是基本网格策略源码

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

from vitu import ai, log

# 配置单/多账户初始持仓信息,name字段区分

ai.create_account(name='account1', exchange='binance', account_type='digital.spot',

position_base=[{'asset': 'btc', 'qty': 10},{'asset': 'usdt', 'qty': 50000}])

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

def initialize(context):

context.account = context.get_account('account1')

context.universe = "BTC/USDT.binance"

context.initial_price = {}

# 连续N日下跌

def is_fall_nday(context, universe, days):

close_price = context.history(universe, 'close', bars=days+1, rtype='list')

cnt = 0

for i in range(days):

daily_return = (close_price[i+1]-close_price[i])/close_price[i]

if daily_return < 0:

cnt +=1

if cnt == days:

return True

else:

return False

# 比较现价于N日均价

def compare_current_nmoveavg(context, universe, days, multi):

current_price = context.get_price(universe)

moveavg = context.history(universe, 'close', bars=days, rtype='dataframe').mean()

if current_price > multi*moveavg:

return True

else:

return False

# 初始底仓,没有initial_price,则建立基准价

def initial_price(context, universe):

if not context.initial_price.get(universe):

context.initial_price[universe] = context.get_price(universe)

def setup_position(context, universe, bench, status):

bottom_price = context.initial_price.get(universe)

current_price = context.get_price(context.universe)

btc_unit_value = 0.02

# usdt_unit_value = 10

returns = (current_price-bottom_price)/bottom_price

if status == 'buy':

if returns < bench:

context.account.buy(universe,current_price,4*btc_unit_value)

elif returns < 2 * bench:

context.account.buy(universe,current_price,3*btc_unit_value)

elif returns < 3 * bench:

context.account.buy(universe,current_price,2*btc_unit_value)

elif returns < 4 * bench:

context.account.buy(universe,current_price,1*btc_unit_value)

elif status == 'sell':

if returns > bench:

context.account.sell(universe, current_price, 4*btc_unit_value)

elif returns > 2 * bench:

context.account.sell(universe, current_price, 3*btc_unit_value)

elif returns > 3 * bench:

context.account.sell(universe, current_price, 2*btc_unit_value)

elif returns > 4 * bench:

context.account.sell(universe, current_price, btc_unit_value)

# 你选择的universe crypto的数据更新将会触发此段逻辑,例如日线历史数据或者是实时数据更新

def handle_data(context):

# 连续5日下跌,不操作

if is_fall_nday(context, context.universe, 5):

return

# 大于5日平均或10日平均1.5倍以上,不操作

if compare_current_nmoveavg(context, context.universe, 5, 1.5) or compare_current_nmoveavg(context, context.universe, 10, 1.5):

return

# 1. 初始建仓

initial_price(context, context.universe)

# 2. 开仓步长

setup_position(context, context.universe, -0.03, 'buy')

# 3. 平仓步长

setup_position(context, context.universe, 0.05, 'sell')

# 可以直接指定universe,或者通过筛选条件选择universe池

universe = ai.create_universe(['BTC/USDT.binance'])

# 配置策略参数如:基准、回测数据级别等

my_strategy = ai.create_strategy(

initialize,

handle_data,

universe=universe,

benchmark='csi5',

freq='d',

refresh_rate=1

)

# 配置回测参数如:回测日期、手续费率

ai.backtest(

strategy=my_strategy,

start='2018-10-01',

end='2019-03-10',

commission={'taker': 0.01, 'maker': 0.01}

)

python编程语言例子-可以用 Python 编程语言做哪些神奇好玩的事情?相关推荐

  1. python可以干嘛用-Python可以被用来做哪些神奇好玩的事情

    原标题:Python可以被用来做哪些神奇好玩的事情 如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇:温饱与空虚 躺着赚钱 一位匿名知乎网 ...

  2. python能做什么程序-Python可以被用来做哪些神奇好玩的事情

    原标题:Python可以被用来做哪些神奇好玩的事情 如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇:温饱与空虚 躺着赚钱 一位匿名知乎网 ...

  3. SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

    前言 开始之前,我们先来看这样一个提问: python初学者,请教python学习路径 相信看完 @X_AirDu 的回答我们已经对 Python 有了一个大概的了解.那接下来就让我们更深入的了解 P ...

  4. python能用来做什么有意思的事情-Python可以被用来做哪些神奇好玩的事情

    原标题:Python可以被用来做哪些神奇好玩的事情 如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇:温饱与空虚 躺着赚钱 一位匿名知乎网 ...

  5. python能用来做什么有意思的事情-可以用 Python 编程语言做哪些神奇好玩的事情?...

    目前的数据工作中,数据科学家使用最多的工具语言就是Python,排在第二的工具语言是R语言.但这里有一个有趣的现象,那就是同时使用Python或者R语言的人,推荐别人使用Python的却远高于R语言. ...

  6. python有什么好玩的代码_可以用 Python 编程语言做哪些神奇好玩的事情?

    Python作为一种应用极为广泛的语言,几乎在任何领域都能派上用场.想做Web有Flask/Django/Tornado:想做分布式有Celery:想做手机App有Kivy:想做数据分析有Pandas ...

  7. 可以用 Python 编程语言做哪些神奇好玩的事情?

    [Python]作为一种应用极为广泛的语言,几乎在任何领域都能派上用场.想做Web有Flask / [Django] / Tornado:想做分布式有Celery:想做[手机][App]有 Kivy ...

  8. Python可以做哪些神奇好玩的事情?

    Python作为一种应用极为广泛的语言,几乎在任何领域都能派上用场.想做Web有Flask / Django / Tornado:想做分布式有Celery:想做手机App有 Kivy :想做数据分析有 ...

  9. python能做什么有趣的东西-可以用 Python 做哪些神奇好玩的事情?

    Python作为一种应用极为广泛的语言,几乎在任何领域都能派上用场.想做Web有Flask / Django / Tornado:想做分布式有Celery:想做手机App有 Kivy :想做数据分析有 ...

  10. python用来做什么好_Python可以被用来做哪些神奇好玩的事情

    如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇:温饱与空虚 躺着赚钱 一位匿名知乎网友爆料用Python写了自动化交易程序,2年躺着赚了 ...

最新文章

  1. Genymotion配置及使用教程(最新最完整版附各部分下载地址)最快模拟器
  2. Delphi2010使用TImage打开jpeg图片错误的处理
  3. linux ubuntu 16.04下deb文件的安装以及一些问题的解决
  4. 雾计算精华问答 | 雾计算与云计算的区别?
  5. qt自定义窗口,其绘制的窗口边框线显示不全
  6. PspNet在MMsegmentation框架下成功训练Pascal VOC2012数据集及踩坑实录
  7. 2005年2月24日(星期四) 中午,晴+煙 - Central Incubator。
  8. [Android实例] 有关spinner 的item问题 谁能给解答下??
  9. 解决物理机U盘安装Kali Linux2018.1,光驱无法加载问题
  10. 前端跨域问题,以及ajax,jsonp,json的区别
  11. Win10电脑微软应用商店打不开怎么办
  12. 关于 easyPr的问题
  13. 1、Django下载与搭建、配置环境变量
  14. 安防监控系统的几个基础小知识
  15. gb和gib的区别_高端存储手册里面的KiB,MiB,GiB是啥意思?
  16. python3.6 scrapy模块查询POS后台获取指定时间和状态的订单存入到excel表格中
  17. 自动化运维工具-ansible入门(一)
  18. Codevs 4246 奶牛的身高
  19. 怎样使用快捷键在苹果Mac上强制退出应用程序?
  20. HDU 2977 Color Squares BFS

热门文章

  1. 林肯公园让听众用Facebook相册创作新歌MV
  2. 新能源产业发展论坛聚焦新时代新能源高质量发展
  3. 知识图谱第6享:动态本体
  4. 【大厂面试题】笔试题明明已经AC了,为什么还是把我挂掉了?乔戈里告诉你为什么...
  5. 赵钱孙李周五人选派谁出国(c语言)
  6. 实现电话簿管理程序, Mytel类描述单个电话号码,TelManager类负责管理电话号码。把增、删、改、查功能封装到该类中。要求电话号码能从磁盘读写。
  7. MySQL 在 Windows 系统下的安装
  8. 31、STM8 CCO时钟输出
  9. JavaScript Math和Date
  10. HTML5 canvas游戏开发实战 7 : 是男人就下一百层“游戏