avatar of 发明者量化-小小梦 发明者量化-小小梦
关注 私信
4
关注
1162
关注者

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

创建于: 2021-05-20 09:53:15, 更新于: 2024-12-04 21:24:10
comments   0
hits   1321

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

策略出租码元数据的应用

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

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

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

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

在创建注册码时,可以指定一个元数据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策略,点击右侧的操作项,点击售卖

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

点击内部出售

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

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

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

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

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

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

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

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

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

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

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

  • ### 策略租用者使用策略

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

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

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

  • ### 修改Meta数据

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

在策略库,出售记录中。

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

可以修改Meta数据。

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

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

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

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

  • ### 综述

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

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

相关推荐