期货策略:卖出涨幅较大期货合约,买入涨幅较小期货合约

策略想法:选择期货锌和期货铜2016年主力合约小时数据,如果买入 前一小时涨幅较大合约,假设A,买入前一小时涨幅较小合约,假设B,买入时实时保持两者价值相等(价格不相等,则买入份数不一样),如果A涨幅小于B涨幅,则平仓。

策略代码如下:

import pandas as pdimport pyodbcfrom sqlalchemy import create_engineimport numpy as npfrom statistics import medianimport crash_on_ipyimport pdbimport matplotlib.pyplot as pltfrom numpy import nandata_cu=pd.read_csv(‘SQCU13.csv‘)data_zn=pd.read_csv(‘SQZN13.csv‘)data_zn.columns=[‘date‘,‘time‘,‘open‘,‘high‘,‘low‘,‘close‘,‘volumn‘,‘hold‘]data_cu.columns=[‘date‘,‘time‘,‘open‘,‘high‘,‘low‘,‘close‘,‘volumn‘,‘hold‘]data_zn[‘date_time‘]=data_zn[‘date‘]+data_zn[‘time‘]data_cu[‘date_time‘]=data_cu[‘date‘]+data_cu[‘time‘]del data_zn[‘date‘],data_zn[‘time‘],data_cu[‘date‘],data_cu[‘time‘]data_zn=data_zn.set_index(‘date_time‘)data_cu=data_cu.set_index(‘date_time‘)data_zn.rename(index=lambda x:str(x)[:12],inplace=True)data_cu.rename(index=lambda x:str(x)[:12],inplace=True)#取收盘价data_zn=data_zn.loc[:,[‘close‘]]data_cu=data_cu.loc[:,[‘close‘]]new_data_zn=data_zn.groupby(data_zn.index).last()new_data_cu=data_cu.groupby(data_cu.index).last()data=pd.concat([new_data_zn,new_data_cu],axis=1)data.columns=[‘zn_close‘,‘cu_close‘]data_zn_array=np.array(new_data_zn[‘close‘])data_cu_array=np.array(new_data_cu[‘close‘])T=len(data_zn_array)zn_return=[0]cu_return=[0]mark_enter=[0]*(T)mark_leave=[0]*(T)for i in range(1,T):    if new_data_zn.index[i]==new_data_cu.index[i]:        zn_return.append((data_zn_array[i]-data_zn_array[i-1])/data_zn_array[i])        cu_return.append((data_cu_array[i]-data_cu_array[i-1])/data_cu_array[i])data[‘zn_return‘]=zn_return;data[‘cu_return‘]=cu_returnprofit=[]position=Falselong_zn_positon=False

for i in range(1,T):    if data[‘zn_return‘][i]<data[‘cu_return‘][i] and not position:        position=True        long_zn_positon=True        mark_enter[i]=1        shares=data[‘cu_close‘][i]/data[‘zn_close‘][i]        long_price=data[‘zn_close‘][i]        short_price=data[‘cu_close‘][i]

elif data[‘zn_return‘][i]>data[‘cu_return‘][i] and not position:        position=True        long_zn_positon=False        shares = data[‘cu_close‘][i]/ data[‘zn_close‘][i]        mark_enter[i]=1        long_price = data[‘cu_close‘][i]        short_price = data[‘zn_close‘][i]    elif data[‘zn_return‘][i]>data[‘cu_return‘][i] and position and long_zn_positon:        position=False        long_zn_positon = False        mark_leave[i]=1        return_zn=(data[‘zn_close‘][i]-long_price)*shares        return_cu=short_price-data[‘cu_close‘][i]        profit.append((return_zn+return_cu)/(2*short_price))

elif data[‘zn_return‘][i]<data[‘cu_return‘][i] and position and not long_zn_positon:        position=False        long_zn_positon=False        mark_leave[i]=1        return_zn=(short_price-data[‘zn_close‘][i])*shares        return_cu=long_price-data[‘cu_close‘][i]        profit.append((return_zn + return_cu) / (2 * long_price))

#计算sharpe#计算总回报total_return=np.expm1(np.log1p(profit).sum())#计算年化回报annual_return=(1+total_return)**(365/365)-1risk_free_rate=0.015profit_std=np.array(profit).std()volatility=profit_std*(len(profit)**0.5)annual_factor=1annual_volatility=volatility*((annual_factor)**0.5)sharpe=(annual_return-risk_free_rate)/annual_volatility# print(total_return,annual_return,std,volatility,annual_volatility,sharpe)print(‘夏普比率:{}‘.format(sharpe))

#计算最大回撤#计算df_cum=np.exp(np.log1p(profit).cumsum())max_return=np.maximum.accumulate(df_cum)max_drawdown=((max_return-df_cum)/max_return).max()print(‘-----------------‘)print(‘最大回撤: {}‘.format(max_drawdown))

#计算盈亏比plrwin_times=sum(x>0 for x in profit)loss_times=sum(x<0 for x in profit)plr=win_times/loss_timesprint(‘----------------------------‘)print(‘盈利次数:{}‘.format(win_times))print(‘亏损次数:{}‘.format(loss_times))print(‘盈亏比:{}‘.format(plr))

# #画出净值走势图fig=plt.figure()ax1=fig.add_subplot(2,1,1)cum_net_worth,=plt.plot(df_cum,label=‘cum_net_worth‘)plt.legend([cum_net_worth],[‘cum_net_worth‘])ax2=fig.add_subplot(2,1,2)zn,=plt.plot(zn_return)cu,=plt.plot(cu_return)plt.legend([zn,cu],[‘zn_return‘,‘cu_return‘])for i in range(0,T):    if mark_enter[i]==0:        cu_return[i]=nanplt.plot(cu_return,‘*‘)for i in range(0,T):    if mark_leave[i]==0:        zn_return[i]=nanplt.plot(zn_return,‘+‘)

plt.show()pdb.set_trace()

策略运行结果如下图:


				
时间: 2024-11-08 08:04:33

期货策略:卖出涨幅较大期货合约,买入涨幅较小期货合约的相关文章

最大子段和 股票最大买入卖出方案

[-2,2,3,-1]的最大字段和是[2,3] /*动态规划算法: **b[j]=max{a[i]+ +a[j]},1<=i<=j,且1<=j<=n,则所求的最大子段和为max b[j],1<=j<=n. **由b[j]的定义可易知,当b[j-1]>0时b[j]=b[j-1]+a[j],否则b[j]=a[j].故b[j]的动态规划递归式为: **b[j]=max(b[j-1]+a[j],a[j]),1<=j<=n. **T(n)=O(n) */ int

2018中国大学生程序设计竞赛 - 网络选拔赛 hdu6438 Buy and Resell 买入卖出问题 贪心

Buy and Resell Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1126    Accepted Submission(s): 359 Problem Description The Power Cube is used as a stash of Exotic Power. There are n cities numbe

1.股票交易委托:买入、卖出操作

股票委托交易,是指投资者在交易时间内,按交易所规则.进行股票买卖. 这里仅说A股: 什么是A股?  是指在我国境内发行,以人民币认购和交易的普通股股票. 交易所: 我国境内的证券交易所分为:上海证券交易所(沪市).深圳证券交易所(深市):   沪市A股股票代码以6开头:深圳A股股票代码以0开头,创业板以300开头 交易时间: 周一到周五(法定节假日除外)     集合竞价: 指在规定时间内接受的买卖申报一次性集中撮合的竞价方式.   连续竞价: 指对买卖申报逐笔连续撮合的竞价方式. 委托数量:

期权交易基本原理——买进看跌期权(Long Put),卖出看跌期权(Short Put)

期权交易基本原理--买进看跌期权(Long Put),卖出看跌期权(Short Put) 来源:中电投先融期货-青岛 浏览:13508次2014-07-25 14:25:55 3 第三节 买进看跌期权(Long Put) 一.买进看跌期权损益 以一定履约价格并支付一定权利金获得看跌期权多头部位后,买方就锁定了自己的风险,即如果价格高于履约价格,就放弃期权,他的最大风险是权利金.如果期货价格在履约价格与损益平衡点(履约价格-权利金)之间,会损失部分权利金.如果期货价格在损益平衡点以下,则买方仍可以

证券交易买进卖出手续费公式

1.上海:佣金不高于成交金额的千分之1.5,起点5元:印花税为成交金额的0.1%(出让方单边缴纳).:过户费按成交面额的0.1%:起点1元:2.深圳:佣金不高于成交金额的千分之1.5,起点5元:印花税为成交金额的0.1%(出让方单边缴纳) 证券交易监管费以及证券交易经手费费率,包含在佣金中吗包括在内的.即,如果你给客户报万分之5,则是净佣金万分之3加规费万分之2.如果你给客户报的是万分之8,而实际收取客户万分之10,则是违规行为!欺诈客户. 买进费用:佣金千分0.3到千分之3+过户费每10手收一

李笑来的财务自由法~把一份时间卖出很多份

大学毕业后,会计专业的我去做了销售,为什么呢?因为我真没学会做会计.第二个原因是,销售没有门槛,只要你肯干就行.在电脑城,我就一直琢磨着挣更多钱的方法.最初我的销售状态是,管他什么东西,能卖出去的才叫好,然后商业模式升级到专挑利润高的卖,后来我只卖贵的东西. 人也是有商业模式的.领英创始人霍夫曼有本书<把自己当作创业公司>,他说你可以是自己的CEO.而我认为最原始的个体商业模式是卖自己的时间.今天搬了几块砖,写了几条程序,码了几个字,律师打了几宗官司,医生看了几个病人,每个人的时间都有单价,他

从码农到农民的芋头哥:3个月卖出20万斤(转)

"芋头哥",真名周华斌,一个放弃华为5位数工资,决心转型回家种田,做新媒体电商的码农. 他的经历也颇为曲折,从五金店学徒到迪吧马仔,从工地农民工到富士康流水线工人,从华为5位数工资再到做电商的农民.作为一个90前的码农,他放弃了城市的灯红酒绿,回乡种田,仅通过微博一种途径,3个月卖出了20万斤芋头,还获得了第一笔投资! 从"码农"到农民 芋头哥从互联网行业跳去做农民,别人说他是个有着码农典型性格的文艺青年,但实际上,他是个很自我的屌丝.最早的时候,他在五金店做过学徒

我徒弟卖出一套《野草助力微营销》,公司奖励我多少?

我徒弟卖出一套<野草助力微营销>,公司奖励我多少? 你辅导徒弟未满50人,徒弟中有1人卖出1套教程,公司奖励你100,徒弟中有10人各卖出10套教程,公司奖励你100×10×10=10000,徒弟中有20人分别卖出20套教程,公司奖励你100×20×20=40000,以此类推········ 你辅导徒弟满50人,徒弟中有1人卖出1套教程,公司奖励你120,徒弟中有10人各卖出10套教程,公司奖励你120×10×10=12000,徒弟中有60人分别卖出60套教程,公司奖励你120×60×60=4

从码农到农民的芋头哥:3个月卖出20万斤

"芋头哥",真名周华斌,一个放弃华为5位数工资,决心转型回家种田,做新媒体电商的码农. 他的经历也颇为曲折,从五金店学徒到迪吧马仔,从工地农民工到富士康流水线工人,从华为5位数工资再到做电商的农民.作为一个90前的码农,他放弃了城市的灯红酒绿,回乡种田,仅通过微博一种途径,3个月卖出了20万斤芋头,还获得了第一笔投资! 从"码农"到农民 芋头哥从互联网行业跳去做农民,别人说他是个有着码农典型性格的文艺青年,但实际上,他是个很自我的屌丝.最早的时候,他在五金店做过学徒