1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > python编程语言例子-可以用 Python 编程语言做哪些神奇好玩的事情?

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

时间:2022-05-18 16:15:59

相关推荐

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

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

网格大法好,熊市不用跑

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

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

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

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

震荡:-06-10至-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种网格大小。特点是买入网格小于卖出网格。这种不对称编织网格的道理在于网格的目的是网获利润,将利润建立在趋势的必然性中,而不仅仅是靠震荡的偶然性。

先讲特点和局限吧

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

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

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

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

收韭菜的时候到了

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

大周期:-10-10至-10-10-3%买,5%卖:【策略年化:75.38%】【基准年化:4.06%】 />-5%买,10%卖:【策略年化:76.77%】【基准年化:4.06%】 />-8%买,18%卖:【策略年化:77.18%】【基准年化:4.06%】 />震荡:-06-10至-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='-10-01',

end='-03-10',

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

)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。