zoukankan      html  css  js  c++  java
  • CC高频策略经验分享

    https://zhuanlan.zhihu.com/p/321315337

    我的经历:

    大概两天时间写好了策略,经过1天的调整,23号在币安永续合约正式开始运行。收益率排名如下。由于统计有问题,实际上的排名应该更高。

     

    一点经验:

    并不是所有的市场和时间都适合高频策略,要运行高频机器人的条件很苛刻。下面是几点条件。

    1.适合高频的市场

    这5天只在币安交易FIL永续合约,FIL刚上线市场十分混乱,永续价格和现货的差价一度到了30%以上,导致多空在FIL分歧十分严重,16号开盘价从60一路跌到26开始反弹,又一度跌倒19反弹到37。交易额高的几天排名所有交易对第三,仅次于老牌的BTC和ETH,这是高频交易的黄金机会。遗憾的是我没有第一时间准备好机器人,错过了开始的几天,但还好赶上24-25号的行情,大部分收益来自于此时间段。27号过后,差价逐渐减小,顶格的资金费率也没有了,成交量萎缩,策略赚钱难度变大。

    类似的机会还有SUSHI/YFI/YFII/UNI上线之初的一段时间,波动性和交易量都很大,print(money)也是抓住了这些机会。在这些币无法继续赚钱的时候,FIL又出现了。这两波一次是炒的火热的DEFI概念,一个是备受瞩目的FIL,在现在的情况下,下一次的机会也需要等很久。

     

     

    2.交易费率

    高频策略对手续费十分敏感,币安maker返十万分之2的门槛并不高,虽然返费很少,但是可以理解为免手续费,一批在古老的现货无手续费时代的高频策略得以复活。当然在行情波动剧烈时,手续费相对没有那么重要。

    3.频率高

    高频机器人最有名的特点就是频率极高,在行情变化快时,我的策略很多都是在100ms内完成开平仓。

    4.策略的胜率

    高频策略需要对行情的短期趋势做出准确的判断,并且在胜率越高下单量越大,短时间交易量越大下单量越大。FIL由于交易量很大,交易频繁,所以几秒内的趋势预测准确率很高。同样多空博弈剧烈,给了maker建立相应仓位和平仓的机会。这一点和早期的现货高频不同,现在maker有返佣,但taker还是有很高的手续费,因此只能挂单。想象一下,如果所有人都短时间看多,高频策略由于吃单手续费,maker买单无法成交,也就无法获利,而如果市场完全没有的趋势,maker订单能成交但获利的概率不高。所以当前的高频策略即要求市场有大趋势保证高胜率,又要有局部的多空分歧保证能大量成交。

    行情顺利时,我的策略的胜率在80%以上,盈亏比大于1,当市场没有明显趋势,长期胜率也在65%以上,盈亏比低于1 。

    5.高频策略的容量

    高频策略的容量显然是不高的,由于永续的高杠杆,100u也能操作2000u以上的资金,所以高频策略能以很小的资金起步。但整体的获利净额并不会太大。具体的容量要看市场上的成交量。

    6.策略的风险

    有开仓就有风险,但高频的优势在于交易次数很高,一次亏损还可以迅速的再交易10次把亏损补回来,拉长周期看回撤很小。持仓越大风险越大,所以不能无限制的增加持仓,要有一定的负反馈机制,仓位多了就增加平仓减少开仓,保证有持仓的时间短。有持仓是如果正好逆势,会有很大的亏损,所以策略设计了对方向的判断,保证了大暴涨或大暴跌时站在趋势的一侧开仓,进一步价降低了风险,代价是短期趋势不明朗会频繁亏小钱。

    关于我的策略

    策略原理:

    获取最近成交trades、深度depth和当前仓位,根据trades判断趋势,根据成交量决定开仓大小,判断趋势为上涨就挂单开多,同时平多头,如果此时持有空头仓位就先全部平掉。判断趋势下跌操作同理。

    高频策略的思想都是很一致的,我本次的策略吸取了我以前公开的2014年的高频策略以及OKCoin韭菜收割机策略的思路。这两个策略在FMZ都能找到源码,如果把这两个策略都吃的很透,高频交易将对你没有秘密。

    策略架构:

    策略使用异步架构(参考FMZ社区进阶教程),这里没有源码只是简单用到函数的说明,并不是可运行的完整的代码,也没有涉及到核心逻辑。API全部使用REST协议,并没有用websocket。服务器在东京,可以获得更低的延时。语言使用JavaScript,实际上高频策略竞争也没到很激烈的程度,Js的V8引擎性能强大,对于新手也更友好,并不需要C++。

    //设置交易对与杠杆
    var pair = Symbol+'USDT'
    exchange.SetCurrency(Symbol+'_USDT')
    exchange.SetContractType("swap")
    exchange.IO("api", "POST", "/fapi/v1/leverage", "symbol="+pair+"&leverage="+5+"&timestamp="+Date.now())
    
    //基本的交易精度限制
    var price_precision = null
    var tick_size = null
    var amount_precision = null 
    var min_qty = null
    
    var exchange_info = JSON.parse(HttpQuery('https://fapi.binance.com/fapi/v1/exchangeInfo'))
    for (var i=0; i<exchange_info.symbols.length; i++){
       if(exchange_info.symbols[i].baseAsset == Symbol){
           tick_size = parseFloat(exchange_info.symbols[i].filters[0].tickSize)
           price_precision = exchange_info.symbols[i].filters[0].tickSize.length > 2 ? exchange_info.symbols[i].filters[0].tickSize.length-2 : 0
           amount_precision = exchange_info.symbols[i].filters[1].stepSize.length > 2 ? exchange_info.symbols[i].filters[1].stepSize.length-2 : 0
           min_qty = parseFloat(exchange_info.symbols[i].filters[1].minQty)
       }
    }
    
    function updatePosition(){//获取持仓,Symbol为交易对,加入交易对参数而不是返回全币种可以减少一次API占用
        position = exchange.IO("api", "GET","/fapi/v2/positionRisk","timestamp="+Date.now()+"&symbol="+Symbol+"USDT")
    }
    function updateTrades(){//获取最近成交
        trades = exchange.IO("api", "GET","/fapi/v1/trades","limit=200&timestamp="+Date.now()+"&symbol="+Symbol+"USDT")
    }
    function updateDepth(){//获取深度
        depth = exchange.IO("IO", "api", "GET","/fapi/v1/depth","timestamp="+Date.now()+"&symbol="+Symbol+"USDT")
    }
    
    function onTick(){
        updateDepth() 
        updateTrades() 
        updatePosition() 
        makeOrder() //计算下单价格、数量并下单
        updateStatus() //更新状态信息
    }
    
    //主循环,休眠时间100ms,策略的循环延时通常在在30ms以内。
    function main() {
        while(true){
            if(Date.now() - update_loop_time > 100){
                onTick()
                update_loop_time = Date.now()
            }
            Sleep(1)
        }
    }
    

     

  • 相关阅读:
    1451. Rearrange Words in a Sentence
    1450. Number of Students Doing Homework at a Given Time
    1452. People Whose List of Favorite Companies Is Not a Subset of Another List
    1447. Simplified Fractions
    1446. Consecutive Characters
    1448. Count Good Nodes in Binary Tree
    709. To Lower Case
    211. Add and Search Word
    918. Maximum Sum Circular Subarray
    lua 时间戳和时间互转
  • 原文地址:https://www.cnblogs.com/dhcn/p/14849620.html
Copyright © 2011-2022 走看看