前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数字货币永续合约交易所开发开发功能以及代码呈现

数字货币永续合约交易所开发开发功能以及代码呈现

原创
作者头像
用户I34I63353I9
发布2022-08-08 17:13:01
5391
发布2022-08-08 17:13:01
举报
文章被收录于专栏:区块链技术分享

数字货币交易所系统开发,顾名思义就是进行某种信息及物品交易等等的场所或平台,数字货币现货期权合约交易所,所需要用的一个固定的地点或平台叫交易所。数字资产交易所,就是借助信息平台,实现产权信息共享、异地交易,统一协调。

 数字资产交易系统开发的功能有哪些?

 1、支持多个虚拟硬币的真正块链接口,以及台币的出库管理。

 2、货币交易、多虚拟货币兑换交易、K线实时行情、委托交易、市价交易

 3、场外交易,不同的买卖双方可以通过这个平台进行交易,合法的硬币可以兑换成虚拟的硬币。

 4、钱包功能、多种虚拟货币进出、锁定释放、糖果配送等

 5、安全管理,从程序,数据库,服务器,区块链接口,冷热钱包管理,双层加密等方面保障资产安全.

 交易所撮合引擎需要满足以下三个要求:

 1.强大到变态的性能:交易所规模越大,并发的交易也就越多,撮合引擎性能的好坏,直接制约了交易所业务的发展。

 2.多种订单类型全兼容:常用的订单类型就包括限价单、市价单、止盈止损单等。

 3.合约功能的支持:现阶段的交易所行业中,合约交易已经几乎成了必备功能,合约的撮合实现相比现货要复杂许多,对技术的要求也会更高。

 huobipro=ccxt.huobipro({

 'apiKey':'',

 'secret':'',

 })

 先使用ccxt获取交易所的实例,然后获取历史k线,得到的数据使用dataframe格式接受

 huobipro.fetch_ohlcv(symbol=symbol,limit=limit_num,timeframe=timeframe)

 然后利用pandas提供的函数计算MA,

 df['median_short']=df['close'].rolling(n_short,min_periods=1).mean()

 df['median_long']=df['close'].rolling(n_long,min_periods=1).mean()

 然后再找出买入卖出信号,

 #找出买入信号

 condition1=df['median_short']>df['median_long']#短均线上穿长均线

 condition2=df['median_short'].shift(1)<=df['median_long'].shift(1)

 df.loc[condition1&condition2,'signal']=1#产生买入信号的k线标记为1

 #找出卖出信号

 condition1=df['median_short']<df['median_long']#短均线上穿长均线

 condition2=df['median_short'].shift(1)>=df['median_long'].shift(1)

 df.loc[condition1&condition2,'signal']=0#产生卖出信号的k线标记为0

 有了交易信号,就可以获取信号,再判断进行下单(huobipro.create_limit_buy/sell_order()了)

 第五步:其实第四步就可以交易了,第五步是回测,一般来说先回测再根据回测结果选用策略,最后才进行实盘

 回测分析的相关有很多种,在这方面我也不是很懂,目前我还是习惯用累积利润来进行分析。

 #由signal计算出实际的每天持仓

 df['pos']=df['signal'].shift()

 df['pos'].fillna(method='ffill',inplace=True)

 df['pos'].fillna(value=0,inplace=True)

 到这里持仓信号就有了,就可以根据持仓和历史k线的价格计算累计利润了,

 df['change']=df['close'].pct_change(1)#根据收盘价计算涨跌幅

 df['by_at_open_change']=df['close']/df['open']-1#开盘买入到收盘的涨跌幅

 df['sell_next_open_change']=df['open'].shift(-1)/df['close']-1#这根收盘到下根开盘的涨跌幅

 df.at[len(df)-1,'sell_next_open_change']=0#补全空值df.at[4,'B']

 #选取开仓条件

 condition1=df['pos']==1

 condition2=df['pos']!=df['pos'].shift(1)

 open_pos_condition=condition1&condition2

 #选取平仓条件

 condition1=df['pos']==0

 condition2=df['pos']!=df['pos'].shift(1)

 close_pos_condition=condition1&condition2

 #对每次交易进行分组

 df.loc[open_pos_condition,'start_time']=df['open_time']

 df['start_time'].fillna(method='ffill',inplace=True)

 df.loc[df['pos']==0,'start_time']=pd.NaT

 init_cash=1000#初始资金

 #计算仓位变动

 #开仓时仓位

 df.loc[open_pos_condition,'position']=init_cash*(1+df['by_at_open_change'])

 group_num=len(df.groupby('start_time'))

 if group_num>1:

 temp=df.groupby('start_time').apply(lambda x:x['close']/x.iloc[0]['close']*x.iloc[0]['position'])

 temp=temp.reset_index(level=[0])

 df['position']=temp['close']

 df['position_max']=df['position']*df['high']/df['close']

 df['position_min']=df['position']*df['low']/df['close']

 ##平仓时的仓位

 #df.loc[close_pos_condition,'position']*=(1+df.loc[close_pos_condition,'sell_next_open_change'])

 #计算持仓利润

 df['porfit']=(df['position']-init_cash)*df['pos']#持仓利润或亏损

 #df.loc[df['pos']==1,'porfit_min']=(df['position_min']-init_cash)*df['pos']#最小持仓盈利或亏损

 #df.loc[df['pos']==0,'porfit_max']=(df['position_max']-init_cash)*df['pos']

 #计算实际资金量

 df['cash']=init_cash+df['porfit']#实际资金

 #计算资金曲线

 df['equity_change']=df['cash'].pct_change()

 #开仓日收益率

 df.loc[open_pos_condition,'equity_change']=df.loc[open_pos_condition,'cash']/init_cash-1

 df['equity_change'].fillna(value=0,inplace=True)

 df['equity_curve']=(1+df['equity_change']).cumprod()

 df['equity_curve']=df['equity_curve']*init_cash

 ​​

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档