资源加载中... loading...

如何通过策略出租码元数据给出租的策略指定不同的版本数据

Author: 发明者量化-小小梦, Created: 2021-05-20 09:53:15, Updated: 2023-09-24 19:37:08

img

策略出租码元数据的应用

在发明者量化交易平台上做开发的小伙伴们可能经常有这样的需求:

开发出一个策略出租时希望对于策略进行不同的资金限制,对策略出租时进行不同的交易所限制(限制策略操作的交易所),再或者希望对于策略出租时进行交易所账号配置的限制(指定这个策略只能操作事先约定好的账户,策略使用者使用其它账户时策略提示并不再做交易等操作)。

这些显然不能写死在代码里,因为如果写死在代码中。所有用户都会受到这些条件限制,就不能针对不同用户群体做出不同使用权限的控制。

基于以上需求场景,发明者量化交易平台扩展了新功能:策略出租注册码元数据设置

在创建注册码时,可以指定一个元数据Meta,数据为字符串。注意:生成注册码时Meta的长度不能超过190个字符。

  • 使用FMZ注册码元数据对策略限定

    例如我是一个策略开发大佬,我开发了一个现货交易对为BTC_USDT的策略,策略只做多(初始时只有计价币QuoteCurrency即USDT,买入了就持仓具有交易币BaseCurrency即BTC),我要出租这个策略,策略名称为test1

    可见,对于策略的限定设计需要结合具体策略的情况具体设计。本例是现货策略的一个演示,如果策略是一个期货策略呢?那就要限定期货持仓信息了(根据GetPosition返回的持仓数据)。当策略发现超过限定的持仓时,不再执行下单开仓逻辑(其它逻辑需要正常执行,例如平仓等操作)。

    所以这些设计需要结合策略本身具体而言,本例只是一个简单的说明例子,可能并不具有实际使用价值。

    策略源码:

    function main() {
        // 策略允许的计价币最大资产数值
        var maxBaseCurrency = null
        
        // 获取创建注册码时的元数据
        var level = GetMeta()
        
        // 检测Meta对应的条件
        if (level == "level1") {
            // -1为不限制
            maxBaseCurrency = -1       
        } else if (level == "level2") {
            maxBaseCurrency = 10     
        } else if (level == "level3") {
            maxBaseCurrency = 1
        } else {
            maxBaseCurrency = 0.5
        }
        
        while(1) {
            Sleep(1000)
            var ticker = exchange.GetTicker()
            
            // 检测资产数值
            var acc = exchange.GetAccount()
            if (maxBaseCurrency != -1 && maxBaseCurrency < acc.Stocks + acc.FrozenStocks) {
                // 停止执行策略交易逻辑
                LogStatus(_D(), "持仓超过注册码的使用限定,不再执行策略交易逻辑!")
                continue
            }
            
            // 其它交易逻辑
            
            // 正常输出状态栏信息
            LogStatus(_D(), "策略正常运行!ticker数据:\n", ticker)
        }
    }
    

    在创建注册码时,策略库中找到test1策略,点击右侧的操作项,点击售卖

    img

    点击内部出售

    img

    点击“小扳手”,设置注册码元数据。

    img

    然后把要限定的信息写进Meta控件,例如本例设计的几种策略使用等级:

    • level1 : 不限制持仓数量。
    • level2 : 限制持仓数量最大为10个币。
    • level3 : 限制持仓数量最大为1个币。
    • 不设置Meta : 不设置时,默认限制持仓数量最大为0.5个币。

    img

    我们首先给Meta控件设置level1,让这个创建的注册码具有test1策略的level1等级。 创建好了注册码:

    购买地址: https://www.fmz.com/m/s/282900
    注册码: 7af0c24404b268812c97b55d073c1867
    

    策略出租者将这个注册码发送给策略租用者。

    例如,这个时候我在我的另一个账号(策略租用者)使用这个注册码,就获得了test1这个策略的使用权。

    img

  • 策略租用者使用策略

    策略租用者,创建实盘,策略使用test1,添加一个WexApp现货交易所对象(WexApp是FMZ平台的模拟盘),运行实盘。

    img

    可以看到策略正常运行起来了,说明level1等级不限定持仓数量(现货账户持有的币数)。

  • 修改Meta数据

    当策略注册码已经使用,如果策略开发者需要调整发出的注册码的Meta数据时,还可以修改。

    在策略库,出售记录中。

    img

    可以修改Meta数据。

    img

    我们把之前的注册码的Meta数据修改为level3,然后这边策略使用者,重启实盘测试。

    img

    可以看到上图,触发了level3等级限定持仓最大只能为1个币的限制。

  • 综述

    根据不同用户群体、不同付费等级出租策略时,具体配置Meta元数据,以实现策略分级控制。

    当然,以上只是列举了最常见的限定、控制需求。还有各种各样的类似需求都可以使用这个功能实现。


Related

More