关于:永续合约现货交易所app系统开发功能技术分析

关于:永续合约现货交易所app系统开发功能技术分析

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

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

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

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

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

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

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

18px;line-height: 40px;text-align: left;margin-bottom: 30px”> 交易所撮合引擎需要满足以下三个要求

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Proudly powered by WordPress | Theme: HoneyWaves by SpiceThemes