最近币圈可谓新闻不断,交易所的新闻也是满天飞。一时间各个币友人心惶惶,纷纷担心自己的区块链资产安全。各个币圈群也不少9折、8折收闲置二手币的小广告。各种“求一边稳定亏钱,一边稳定赚钱的策略”者甚多。也不少币友纷纷调侃“要是有稳定赚钱的,还要那个稳定亏钱的干嘛!”
确实,稳定赚钱、稳定亏钱的东西都是money printer
,并不好找到。
原谅我这蹩脚的英语。
但是,不稳定的还是有的,例如通过合约对冲,实现尽量一边亏损,一边盈利。
DEMO策略
/*backtest
start: 2020-09-30 00:00:00
end: 2020-10-19 00:00:00
period: 1d
basePeriod: 1m
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"},{"eid":"Futures_HuobiDM","currency":"BTC_USD"}]
*/
var step = 20 // 加仓价格步长
function main() {
var pos1 = []
var pos2 = []
var ct = "quarter" // 例如用季度合约
exchanges[0].SetContractType(ct)
exchanges[1].SetContractType(ct)
var diff = 0
while (true) {
var r1 = exchanges[0].Go("GetDepth") // A交易所
var r2 = exchanges[1].Go("GetDepth") // B交易所
var depth1 = r1.wait()
var depth2 = r2.wait()
if(depth1.Bids[0].Price - depth2.Asks[0].Price > diff) {
if(pos1.length == 0 && pos2.length == 0) {
var info1 = $.OpenShort(exchanges[0], ct, 10)
var info2 = $.OpenLong(exchanges[1], ct, 10)
pos1 = _C(exchanges[0].GetPosition)
pos2 = _C(exchanges[1].GetPosition)
diff = depth1.Bids[0].Price - depth2.Asks[0].Price
} else if(depth1.Bids[0].Price - depth2.Asks[0].Price > diff + step) {
var info1 = $.OpenShort(exchanges[0], ct, 10)
var info2 = $.OpenLong(exchanges[1], ct, 10)
pos1 = _C(exchanges[0].GetPosition)
pos2 = _C(exchanges[1].GetPosition)
diff = depth1.Bids[0].Price - depth2.Asks[0].Price
}
}
if(pos1.length != 0 && pos1[0].Profit < -0.001) {
var info1 = $.CoverShort(exchanges[0], ct, pos1[0].Amount)
var info2 = $.CoverLong(exchanges[1], ct, pos2[0].Amount)
pos1 = _C(exchanges[0].GetPosition)
pos2 = _C(exchanges[1].GetPosition)
diff = 0
}
LogStatus(_D(), diff)
Sleep(500)
}
}
策略逻辑: 策略开始初始化持仓变量pos1、pos2为空数组。策略进入主循环,每次循环开始获取两个交易所的合约的深度数据(订单薄数据),计算差价。差价如果继续扩大超过至“上次差价加一个步长”则继续对冲加仓。当持仓时,检测第一个交易所的持仓亏损超过一定数值(例如:-0.001),则平仓。如此往复执行。
原理实际是很简单的,就是差价大了,反对冲。等待期待亏损的交易所持仓亏损时平仓,如果差价继续扩大,就继续加仓对冲,直到所期待亏损的交易所持仓亏损。比较重要的几个参数就是:亏损多少平仓、加仓差价步长、对冲量这些。
策略比较简陋,仅仅是验证一下思路,实盘并非可用。实盘还有很多问题需要考虑,例如要交易的合约是币本位,还是U本位,A、B交易所的不同合约乘数是否相同等。
这样就实现了一个交易所亏钱,亏的部分大约变为另一个交易所赚的部分(差价问题,可能会有对冲亏损,即亏的比赚的多)。策略使用了一个期货交易类库,$.CoverShort
,$.OpenShort
这些就是模板的接口函数,上面的DEMO要回测运行,需要引用上这个类库才行。
以上策略原型仅仅是个最简单的小探索,具体实际操作时可能还有更多细节需要考虑,比如加仓量可以设计成递增的。这里只是抛砖引玉,类似策略应该可以有更多的优化,欢迎高手给出建议。
骨刀 请尽快实装吧,要是管用我想租用,把我的游戏币提出来
发明者量化-小小梦 作者开头其实说了,不稳定,搞不好是有可能反搬回去的。