欢迎访问比特币_区块链-币链视界!

币链视界

躺赚之路比特币自动交易4低买高卖

发布时间:2021-02-25比特币交易评论
算法交易模块算法交易是什么呢?我们来看下网上的介绍:根据一些特定的交易计划,我们根据计算机来制定下单的时机,下单的价格还有下单的数量。像一些大额的交易拆分成小额的

算法交易模块

算法交易是什么呢?我们来看下网上的介绍:根据一些特定的交易计划,我们根据计算机来制定下单的时机,下单的价格还有下单的数量。像一些大额的交易拆分成小额的交易,然后提高订单的执行效率和隐蔽性,可以一方面降低对市场的冲击的成本,另外一方面也可以减少交易的风险,像这类的方法我们就称之为算法。

说人话:假设你有价值5000万的比特币要卖,如果你直接砸到市场,那么对市场的冲击就会很大,把你给暴露的同时也卖不到你想要的价格。这时候就需要一种拆单算法来执行你的这一笔大额交易。

vnpy算法交易模块,提供多种常用的智能交易算法:TWAP、Sniper、Iceberg、BestLimit等等,支持常用算法配置保存。

网格交易算法

关于网格交易是什么网上的介绍太多了,在这里我就不说理论直接给大家举一个例子:假设现在比特币的价格是7200美元,我在7200美元买入了一个比特币,这时候比特币跌到了7100美元,我又买了1个比特币。当比特币的价格回到7200美元的时候我卖掉1个比特币,如果价格涨到了7300美元我再卖掉一个比特币。如果比特币的价格来回波动,是不是就能一直低买高卖赚取波动的利润了?

然而实际上:网格交易就是一种熊市被套,牛市卖飞的策略。这句话是什么意思呢?当比特币大跌的时候你会一直买入,心态好的会说这就是浮亏而已,迟早还能涨回去,其实你被套了。当比特币大涨的时候,你会早早的就把比特币卖完,这就是卖飞了。但是市场没什么波动的时候,你可以网格交易来回撸赚取波动的利润,这时候也许你会秀一把利润然后来一句真香。然后行情一来的时候,一波回到解放前

也许有人会搞各种网格策略的变种,什么无限网格或者加止损。拿无限网格来说,那得多少资金?如果网格的格子增大,那资金利用率就更低了,收益贼低,大部分时候还是浮亏。遇到大涨,浮亏也许变浮盈了,但是马上他就卖飞了。

但是网格交易见钱快,因为市场大部分时候都是在震荡,也许你刚跑这个策略,几天就能赚个5%(网格格子很小,当做市来做)。这就是很多人拿这种策略来圈钱的原因,也是我吐槽的原因。下面的图是别人一个在卖的策略介绍,以及客户的回复:跑了半个多月,3个btc,本来0.08的盈利。2019-9-24至2019-9-25单边大跌行情,亏损严重。利润全部跌完

那么到底能不能赚钱呢,其实也是能的。只是如果你格子设置大了,那么资金利用率特别低,真的跑着没什么意义。如果你格子设置小了,如果赶上震荡那能赚钱,但是大跌一次你就深套了。如果是期货网格做市,那你就要爆仓了。如果你对行情预测比较准,知道接下来会震荡,你可以手动开启和关闭网格策略。因为资金利用的问题,我并有实盘在跑网格策略,目前我自己实盘在跑的策略有趋势、做市和跨期价差套利。

吐槽完了,我们继续!

实战低买高卖

打开run.py,导入算法交易模块,然后右键运行。

导入

添加

run

如果一切顺利,你将会看到下面的界面,然后点击系统-》连接HBDM-》输入交易所提供给你的key-》点击连接(HBDM是火币期货合约接口)。

主界面

连接HBDM

连接

现在我们订阅EOS季度期货的合约数据试试,在代码里面输入EOS_CQ-》按回车键:

EOS_CQ

然后点击功能-》算法交易或者点击左边的算法交易小图标,选择Grid网格:

点击算法交易

选择Grid网格

下面我们设置这个算法的交易参数,本地代码:EOS_CQ.HUOBI、价格:2.7、网格交易间距:0.005、网格交易数量:1、每轮间隔(秒):5。如下图所示:

参数设置

上面这个设置是什么意思呢?还是举一个例子来说明一下:

设置参数价格2.7、网格交易间距0.005和网格交易数量1表示

2.7-0.005买入数量=1

2.7-0.005-0.005买入数量=1

2.7-0.005-0.005-0.005买入数量=1

。。。

依次类推

假设现在EOS的季度期货价格为2.695,那么程序会自动买入1个,后面如果EOS的价格又继续跌了0.005到了2.69,那么程序又会买入1个。如果以上假设成立,那么当价格回到2.7的时候会卖掉一个,如果EOS的价格涨到了2.705,那么程序又会自动卖出1个,总共2个全部卖完。

源码分析

打开代码文件,目录如下图所示:

网格算法文件

参数:

default_setting={"vt_symbol":"",#代码"price":0.0,#价格"step_price":0.0,#网格交易间距"step_volume":0,#网格交易数量"interval":10,#每轮间隔}变量:

variables=["pos",#仓位"timer_count",#用来控制每轮间隔的"vt_orderid"#订单id]算法初始化:

初始化时从界面获取参数,初始化变量,然后订阅交易对的数据。

def__init__(self,algo_engine:BaseEngine,algo_name:str,setting:dict):""""""super().__init__(algo_engine,algo_name,setting)#Parametersself.vt_symbol=setting["vt_symbol"]self.price=setting["price"]self.step_price=setting["step_price"]self.step_volume=setting["step_volume"]self.interval=setting["interval"]#Variablesself.timer_count=0self.vt_orderid=""self.pos=0self.last_tick=Noneself.subscribe(self.vt_symbol)self.put_parameters_event()self.put_variables_event()整个程序的逻辑都在定时器on_timer里面,它的逻辑是这样的:首先算法引擎注册了EVENT_TIMER事件,他是每秒钟调用一次的,也就是process_timer_event这个函数。然后它会遍历当前算法实例,并且调用它的update_timer方法。

调用算法实例的方法

而我们的算法实例继承了AlgoTemplate,实现了它的虚函数on_timer,这样调用就会调用到我们的算法实例函数,这里涉及到多态的概念,不懂的可以百度百度,流程如下图所示:

虚函数

调用子类on_timer

网格交易类

流程我们已经分析清楚了,下面我们分析分析这个策略逻辑。

defon_timer(self):""""""ifnotself.last_tick:returnself.timer_count+=1ifself.timer_count上面的代码首先就是对时间的控制,使用timer_count计数,以控制N秒执行一次下面的逻辑。

然后判断当前是否有未完成订单,有就全部撤销,简单粗暴。

#Calculatetargetvolumetobuyandselltarget_buy_distance=(self.price-self.last_tick.ask_price_1)/self.step_pricetarget_buy_position=math.floor(target_buy_distance)*self.step_volumetarget_buy_volume=target_buy_position-self.pos#Calculatetargetvolumetoselltarget_sell_distance=(self.price-self.last_tick.bid_price_1)/self.step_pricetarget_sell_position=math.ceil(target_sell_distance)*self.step_volumetarget_sell_volume=self.pos-target_sell_position上面这段代码就是策略的核心了,用来计算买量或者卖量,看不太懂的我举个例子给你说明一下:

假设你设置的价格为2.7,网格交易数量为1,网格交易间距为0.005,而现在实际价格已经到了2.6,你当前持仓数量只有1,那么现在需要买入的数量为多少?

我们首先计算格子的数量,2.7-2.6/0.005=20,因为设置参数每个格子需要交易1个,20*1=20,而当前实际持仓数量只有1个,那么需要买入=20-1=19。

这下再看代码是不是就很好理解了。

计算格子数量:

target_buy_distance=(self.price-self.last_tick.ask_price_1)/self.step_price计算实际需要的数量:

target_buy_position=math.floor(target_buy_distance)*self.step_volume减去当前已经持有的数量:

target_buy_volume=target_buy_position-self.pos最后就是下单了:

#Buywhenpricedroppingiftarget_buy_volume>0:self.vt_orderid=self.buy(self.vt_symbol,self.last_tick.ask_price_1,min(target_buy_volume,self.last_tick.ask_volume_1))#Sellwhenpricerisingeliftarget_sell_volume>0:self.vt_orderid=self.sell(self.vt_symbol,self.last_tick.bid_price_1,min(target_sell_volume,self.last_tick.bid_volume_1))结语

看到这里如果你有点懵逼,不要紧,尝试着去启动算法,试着去了解程序自动执行的逻辑。

下一篇文章开始,我们将正式开始介绍vnpy,从底层源码执行流程到上层策略开发,带你走进量化交易的大门。

广告位

热心评论

评论列表