网格策略、马丁策略这种喜欢震荡行情的策略有其固有弊端,在ETH合约市场上也测试了一段时间的类似策略。也经常和FMZ.COM上的新老玩家们聊天分享经验。对于此类策略,有一点是非常赞同一位朋友的说法的。那就是币圈中做合约,做多相对于做空风险小了那么一丢丢。或者简单说就是下跌最惨就是归零,上涨是无限的。
那么马丁、网格之类的策略是不是只做多,不做空,拉一个长区间分布抄底风险会比做双边的好些呢?这个思路听起来很不错,但是是否经得住实战谁也不知道。不过起码我们可以简单的回测测试一下这个思路。于是乎我们就有了今天的文章主题–设计一个合约抄底策略。
实现这个思路的代码真的非常简单,得益于平台的灵活性、接口封装、强大的回测系统等等。整个代码只用60行(为了代码书写规范,很多可以简写的并没有简写)。
策略思路设计很简单,根据逻辑开始时的初始价格,间隔距离往下挂买单,价格持续下行就继续挂买单,持续抄底。然后挂出基于持仓价格增加一定利润差价之后的平仓单,等待平仓。如果平仓,就以当前的价格为初始价格重复以上逻辑。策略不做空单持仓,只做多单。
策略源码:
function cancelAll() {
while (true) {
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
break
}
for (var i = 0 ; i < orders.length ; i++) {
exchange.CancelOrder(orders[i].Id, orders[i])
Sleep(interval)
}
}
}
function getLong(arr, kind) {
var ret = null
for (var i = 0 ; i < arr.length ; i++) {
if (arr[i].Type == (kind == "pos" ? PD_LONG : ORDER_TYPE_BUY)) {
ret = arr[i]
}
}
return ret
}
function pendingBidOrders(firstPrice) {
var index = 0
var amount = baseAmount
while (true) {
var pos = _C(exchange.GetPosition)
var price = firstPrice - index * baseSpacing
amount *= ratio
index++
exchange.SetDirection("buy")
exchange.Buy(price, amount)
if (pos.length != 0) {
var longPos = getLong(pos, "pos")
if (longPos) {
exchange.SetDirection("closebuy")
exchange.Sell(longPos.Price + profitTarget, longPos.Amount)
}
}
while (true) {
Sleep(interval)
if (!getLong(_C(exchange.GetOrders), "orders")) {
cancelAll()
break
}
if (!getLong(_C(exchange.GetPosition), "pos")) {
cancelAll()
return
}
}
}
}
function main() {
exchange.SetContractType(symbol)
while (true) {
pendingBidOrders(_C(exchange.GetTicker).Last)
}
}
参数设计也很简单:
只有这几个参数。
随便设置一下回测时间范围:
回测运行:
看起来很有网格、马丁类型策略的味道~。入门学习的新同学是不是很怕那种长篇的策略,很容易被劝退。简短精炼的策略入门更加合适,更容易消化策略思路,学习逻辑设计。
策略代码仅用于学习、研究。
阿乐 /upload/asset/1dd6dcfd4579dc0b239a6.jpeg 运行之后会报错然后一直在挂单,撤单无限循环,要如何解决
梦想身价八位数 这个策略只能在币安上跑吗?
梦想身价八位数 仓位增长系数是什么意思?
梦想身价八位数 怎么没有策略地址啊?复制策略源码不能用
发明者量化-小小梦 是不是运行了多个实盘,如果一个服务器上运行2个实盘,频率就翻倍,以此类推的。
阿乐 /upload/asset/1dd36e54848c3bdf8c759.jpeg 按道理我这个参数两个轮训一分钟最多120次,并没有超过币安限制每分钟1200次访问呀,有点不理解
发明者量化-小小梦 您好,这个和策略无关的,您可以设置一下麦语言模版参数上的轮询间隔,设置大一些。如果您一个服务器上跑多个实盘,都访问一个交易所的接口,那么频率是会翻倍的,很容易就超频超限了。
阿乐 /upload/asset/1dce38677beaf3c7ca065.jpeg 现在币安不能支持麦语言策略使用么,会提示用web什么的方式进行实时更新避免api封禁
发明者量化-小小梦 不客气,刚写支持FMZ量化。
阿乐 好的谢谢我知道了
发明者量化-小小梦 您好,这个是个教学策略,主要是讲解思路,可以在币安永续合约跑,跑OK需要对策略修改一下。上面问题的原因是下单量为小数了,OKX是要求下单量为合约整张数的。币安期货USDT本位永续合约可以是小数
发明者量化-小小梦 都可以跑,就是参数调整下就行。
发明者量化-小小梦 这个策略只是一个教学策略,切勿实盘,回测研究学习可以。复制策略源码,还要加上策略参数,参数如文章上的截图。
发明者量化-小小梦 设置2就是2倍加仓。