python编程语言例子-可以用 Python 编程语言做哪些神奇好玩的事情?
可以写个策略来赚钱算不算好玩呢?
网格大法好,熊市不用跑
不看眼成绩怎么有兴趣往后看~
回测做了很多组,不同网格大小分别在大周期、震荡各做了一次。大周期: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 编程语言做哪些神奇好玩的事情?相关推荐
- python可以干嘛用-Python可以被用来做哪些神奇好玩的事情
原标题:Python可以被用来做哪些神奇好玩的事情 如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇:温饱与空虚 躺着赚钱 一位匿名知乎网 ...
- python能做什么程序-Python可以被用来做哪些神奇好玩的事情
原标题:Python可以被用来做哪些神奇好玩的事情 如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇:温饱与空虚 躺着赚钱 一位匿名知乎网 ...
- SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧
前言 开始之前,我们先来看这样一个提问: python初学者,请教python学习路径 相信看完 @X_AirDu 的回答我们已经对 Python 有了一个大概的了解.那接下来就让我们更深入的了解 P ...
- python能用来做什么有意思的事情-Python可以被用来做哪些神奇好玩的事情
原标题:Python可以被用来做哪些神奇好玩的事情 如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇:温饱与空虚 躺着赚钱 一位匿名知乎网 ...
- python能用来做什么有意思的事情-可以用 Python 编程语言做哪些神奇好玩的事情?...
目前的数据工作中,数据科学家使用最多的工具语言就是Python,排在第二的工具语言是R语言.但这里有一个有趣的现象,那就是同时使用Python或者R语言的人,推荐别人使用Python的却远高于R语言. ...
- python有什么好玩的代码_可以用 Python 编程语言做哪些神奇好玩的事情?
Python作为一种应用极为广泛的语言,几乎在任何领域都能派上用场.想做Web有Flask/Django/Tornado:想做分布式有Celery:想做手机App有Kivy:想做数据分析有Pandas ...
- 可以用 Python 编程语言做哪些神奇好玩的事情?
[Python]作为一种应用极为广泛的语言,几乎在任何领域都能派上用场.想做Web有Flask / [Django] / Tornado:想做分布式有Celery:想做[手机][App]有 Kivy ...
- Python可以做哪些神奇好玩的事情?
Python作为一种应用极为广泛的语言,几乎在任何领域都能派上用场.想做Web有Flask / Django / Tornado:想做分布式有Celery:想做手机App有 Kivy :想做数据分析有 ...
- python能做什么有趣的东西-可以用 Python 做哪些神奇好玩的事情?
Python作为一种应用极为广泛的语言,几乎在任何领域都能派上用场.想做Web有Flask / Django / Tornado:想做分布式有Celery:想做手机App有 Kivy :想做数据分析有 ...
- python用来做什么好_Python可以被用来做哪些神奇好玩的事情
如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇:温饱与空虚 躺着赚钱 一位匿名知乎网友爆料用Python写了自动化交易程序,2年躺着赚了 ...
最新文章
- Genymotion配置及使用教程(最新最完整版附各部分下载地址)最快模拟器
- Delphi2010使用TImage打开jpeg图片错误的处理
- linux ubuntu 16.04下deb文件的安装以及一些问题的解决
- 雾计算精华问答 | 雾计算与云计算的区别?
- qt自定义窗口,其绘制的窗口边框线显示不全
- PspNet在MMsegmentation框架下成功训练Pascal VOC2012数据集及踩坑实录
- 2005年2月24日(星期四) 中午,晴+煙 - Central Incubator。
- [Android实例] 有关spinner 的item问题 谁能给解答下??
- 解决物理机U盘安装Kali Linux2018.1,光驱无法加载问题
- 前端跨域问题,以及ajax,jsonp,json的区别
- Win10电脑微软应用商店打不开怎么办
- 关于 easyPr的问题
- 1、Django下载与搭建、配置环境变量
- 安防监控系统的几个基础小知识
- gb和gib的区别_高端存储手册里面的KiB,MiB,GiB是啥意思?
- python3.6 scrapy模块查询POS后台获取指定时间和状态的订单存入到excel表格中
- 自动化运维工具-ansible入门(一)
- Codevs 4246 奶牛的身高
- 怎样使用快捷键在苹果Mac上强制退出应用程序?
- HDU 2977 Color Squares BFS
热门文章
- 林肯公园让听众用Facebook相册创作新歌MV
- 新能源产业发展论坛聚焦新时代新能源高质量发展
- 知识图谱第6享:动态本体
- 【大厂面试题】笔试题明明已经AC了,为什么还是把我挂掉了?乔戈里告诉你为什么...
- 赵钱孙李周五人选派谁出国(c语言)
- 实现电话簿管理程序, Mytel类描述单个电话号码,TelManager类负责管理电话号码。把增、删、改、查功能封装到该类中。要求电话号码能从磁盘读写。
- MySQL 在 Windows 系统下的安装
- 31、STM8 CCO时钟输出
- JavaScript Math和Date
- HTML5 canvas游戏开发实战 7 : 是男人就下一百层“游戏