美文网首页
Python版单平台均衡策略

Python版单平台均衡策略

作者: 发明者量化 | 来源:发表于2020-02-15 13:44 被阅读0次

    JavaScript版

    策略地址:https://www.fmz.com/strategy/345

    本期文章,我们来一起练习移植一个简单的JavaScript策略。通过移植策略,更加熟悉发明者量化交易平台接口的调用,了解在平台开发策略时不同语言的略微差别,其实JavaScript版策略与Python版策略差别非常小,因为接口调用基本都是一样的。

    策略说明

    引用自JavaScript版的说明:

    这个需要建仓,比如账户有5000块钱,跟1个币,如果币的价值大于账户的余额5000了并且差价超过阀值,比如币现在值6000块钱,就卖掉(6000-5000)/6000/2个币,说明币升值了,把钱兑换回来,如果币贬值了,比如4000块钱了,就买入(5000-4000)/4000/2个币, 币跌的时候买一些回来,如果再涨了,就再卖掉,好像天平一样,两边不同的对冲,所以我命名为均衡策略

    策略原理非常简单,JavaScript版本的代码也并不长,只有70多行。移植成语法更加简练的Python语言策略,代码更加减短,非常适合初学者学习,在发明者量化交易平台上有大量开发者分享的代码,语言支持JavaScript/C++/Python等,所以多掌握一门开发语言,不仅对于学习、研究、开发策略都是很有帮助的,并且也能更加熟悉的了解平台的各个API接口。

    策略代码

    '''backtest
    start: 2019-12-01 00:00:00
    end: 2020-02-01 11:00:00
    period: 1m
    exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
    '''
    
    InitAccount = None
    
    def CancelPendingOrders():
        ret = False
        while True:
            orders = _C(exchange.GetOrders)
            if len(orders) == 0 :
                return ret
    
            for j in range(len(orders)):
                exchange.CancelOrder(orders[j].Id)
                ret = True
                if j < len(orders) - 1:
                    Sleep(Interval)
        return ret 
    
    def onTick():
        acc = _C(exchange.GetAccount)
        ticker = _C(exchange.GetTicker)
        spread = ticker.Sell - ticker.Buy
        diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2
        ratio = diffAsset / acc.Balance
        LogStatus("ratio:", ratio, _D())
        if abs(ratio) < threshold:
            return False
        if ratio > 0 :
            buyPrice = _N(ticker.Sell + spread, ZPrecision)
            buyAmount = _N(diffAsset / buyPrice, XPrecision)
            if buyAmount < MinStock:
                return False
            exchange.Buy(buyPrice, buyAmount, diffAsset, ratio)
        else :
            sellPrice = _N(ticker.Buy - spread, ZPrecision)
            sellAmount = _N(-diffAsset / sellPrice, XPrecision)
            if sellAmount < MinStock:
                return False 
            exchange.Sell(sellPrice, sellAmount, diffAsset, ratio)
        return True
    
    def main():
        global InitAccount, LoopInterval
        InitAccount = _C(exchange.GetAccount)
        LoopInterval = max(LoopInterval, 1)
        while True:
            if onTick():
                Sleep(1000)
                CancelPendingOrders()
                Log(_C(exchange.GetAccount))
            Sleep(LoopInterval * 1000)
    

    代码开头的

    '''backtest
    start: 2019-12-01 00:00:00
    end: 2020-02-01 11:00:00
    period: 1m
    exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
    '''
    

    是回测配置,意思就是回测配置(设置)以代码的形式保存了下来,回测时自动按照这个设置配置。这部分可以删除,删除了,回测时就需要手动在回测页面上设置回测配置信息了。
    参考:https://www.fmz.com/bbs-topic/859

    该策略的参数和JavaScript版本的完全一致,策略代码也是逐句移植,程序结构未改变,可以逐句对比,看下不同语言写的策略的区别之处。

    回测

    参数配置


    统计数据


    策略地址:https://www.fmz.com/strategy/183374

    策略仅供参考学习,回测测试,有兴趣可以优化升级。

    相关文章

      网友评论

          本文标题:Python版单平台均衡策略

          本文链接:https://www.haomeiwen.com/subject/wpbefhtx.html