交易信息大全
2026币圈信息集合

FMZ量化交易可视化模块搭建交易策略--进阶

欧意OKX  币安Binance  芝麻开门GATE

目前不清退的交易所推荐:

1、全球第二大交易所OKX欧意

国区邀请链接: https://www.promooboost.com/join/1837888   币种多,交易量大!

国际邀请链接:https://www.okx.com/join/1837888 注册简单,交易不需要实名,新用户能开合约,币种多,交易量大!

2、老牌交易所比特儿现改名叫芝麻开门 :https://www.gatewebsite.net/share/XgRDAQ8

全球最大交易所币安,国区邀请链接:https://accounts.binance.com/zh-CN/register?ref=16003031  币安注册不了IP地址用香港,居住地选香港,认证照旧,邮箱推荐如gmail、outlook。支持币种多,交易安全!

买好币上KuCoinhttps://www.kucoin.com/r/af/1f7w3  CoinMarketCap前五的交易所,注册友好操简单快捷!

FMZ量化交易平台邀请链接:https://www.fmz.com/

可视化模块搭建交易策略–进阶

学习可视化模块搭建交易策略–了初识篇,对于可视化模块搭建、拼接有了一个概念上的理解,
接下来学习使用其它的模块就很容易了。
可以组合出来一些更加复杂的功能。

  • 交易类别模块

    在之前的学习和测试中,我们已经接触过几种 「交易类别」的模块。
    例如:
    「交易所获取行情」 模块
    「交易所获取K线」 模块

    这些已经使用过的就不赘述了。

    • 1、获取交易所个数

      168e5c6d8283f932d276

      在编写策略使用机器人交易时,可以添加不止一个交易所对象,例如对冲的策略。
      或者需要遍历(遍历意思就是逐个访问一遍)交易所对象,访问行情时。
      这个时候就需要用到获取交易所个数的模块了。

      我们可以先用简单的结构打印一下当前配置的交易所个数:
      16fc9b2271cadd63c9a5

      其实就犹如调用了这样的JavaScript策略代码:

      function main () {
          Log(exchanges.length)
      }
      

      我们看下这个组合模块运行的结果:
      1600306c2631e6877a14

      可以看到我们添加了3个交易所对象,代表三个不同的交易所账户,回测日志输出结果为3。

    • 2、获取交易所名称

      1720bf21a9c619828ea5

      当添加三个交易所对象的时候,下拉框会显示出三个可选项。
      提前学习一个循环模块,在循环类型中。
      173bf3cad485c346e48c

      再提前学习一个条件判断模块:
      1644010de064c320ba87
      判断条件可以写:
      16d8a84f0ac05e558174

      我们使用循环模块遍历添加的交易所名称
      用条件判断模块来判断当前的循环计数,是否对应要打印的交易所名称。

      16ea75b0a42e515d55b9

      回测运行结果:
      1722e4d8c384ad2e2182

      如同JavaScript 策略代码:

      function main () {
          for (var i = 1 ; i <= exchanges.length ; i++) {
              if (i == 1) {
                  Log(exchanges[0].GetName())
              } else if (i == 2) {
                  Log(exchanges[1].GetName())
              } else {
                  Log(exchanges[2].GetName())
              }
          }
      }
      
    • 3、获取交易所当前交易对

      16844922b8882f60847f

      一个简单的例子获取当前设置的第一个交易所对象的交易对,并赋值给 text 变量(提前在变量类别中创建)。

      1716d102e86dedcbbc89
      回测结果:
      163d3c9a6ccf5b4bb245

      如果调用JavaScript 策略代码:

      function main () {
          var text = exchange.GetCurrency()
          Log(text)
      }
      
    • 4、下单模块

      169bc28adeb678e89d1d
      该模块非常重要,用于下单操作,第一个榫(凹)位置嵌入价格变量,用于指定下单价格,也可以直接输入固定数值。
      第二个榫(凹)位置嵌入下单量变量,用于指定下单的量。

      例如我们拼接一个根据当前 tick 行情数据的最新价格,加10元滑价下买单的例子,下单量设置为0.1个币,并且打印订单ID。
      16f1f48b40afaff91a41

      回测运行结果:
      17a3fe4cb8fc3dbea1e9

      如同以下 JavaScript 策略代码:

      function main () {
          var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
          Log(id)
      }
      
    • 5、获取当前交易对委托订单的模块

      16fbea43117666f68655

      该模块会返回当前交易对处于未完成状态的所有委托订单,返回的是一个列表结构(数组),可以用列表类型模块处理(遍历操作等)。
      例如:我们把上面的【4】下单模块范例稍加修改,把下单时加上的10元价格改成减去10元。订单就不会立即成交了,会处于挂在买卖深度中(即 买一 买二 买N 中某个档位上),这样订单就处于挂单等待成交的状态。
      然后我们使用「获取当前交易对委托订单」的模块,获取处于PENDING状态(等待成交状态)的订单列表。
      为了避免后续行情中订单成交,影响回测最后的观察,所以我们「获取当前交易对委托订单」模块执行后,打印出订单列表,就立即使用「抛出异常」模块,让程序停止。

      166079fe06f449638f2b

      回测可以看到:
      16f03a4248ea87db06fa

      下买单价格是低于当时最新价格10元,所以不会马上成交。
      然后获取处于等待成交状态的订单,并且打印了出来。
      最后抛出异常,让程序停止。

      整个拼装起来的模块如同调用了JavaScript 策略:

      function main () {
          var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
          Log(id)
          Log(exchange.GetOrders())
          throw "stop"
      }
      
    • 6、取消订单模块

      163259caad0157af3f1d

      该模块用于取消订单。

      在编写策略的时候有很多场景都需要这样操作:

      把当前所有挂出的订单全部取消掉。

      无疑这肯定要用到「撤单模块」,在学习撤单模块的同时,我们就可以用到【5】获取当前交易对委托订单的模块,组合实现这个功能。

      首先,为了测试撤销全部订单,挂一个订单不是很明显,我们开始下单两次,价格数量都不一样用来区别两个订单。

      16a73fa7a27a1dc9b9ac

      使用 循环类型 模块中的,「遍历列表中每个元素」 模块,对当前挂单列表中的订单进行遍历。
      15fb1528f288777da52a
      遍历时,每个取出的订单赋值给变量模块order(在变量模块类型中创建,如下图:)
      173dcf2a8a9758557bb2
      使用工具类型模块中的:
      16a47956df3c7a57b46f
      取出订单ID,传递给撤销订单模块的榫(凹)位置,取消订单模块执行撤销订单。

      回测运行:
      16914b98eddf6c38158a

      使用 JavaScript 策略描述:

      function main () {
          var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
          Log(id)
          var id2 = exchange.Buy(_C(exchange.GetTicker).Last - 12, 0.2)
          Log(id2)
          var orders = exchange.GetOrders()
          Log(orders)
          for (var i in orders) {
              var order = orders[i]
              Log(exchange.CancelOrder(order.Id))
          }
      }
      
    • 7、根据订单ID获取某个订单详细信息的模块

      16bd6c6390c44dd99995

      该模块榫(凹)位置接入一个订单ID变量模块,就可以返回订单详细信息。

      16bb11f1aaa6408974ee

      注意看下运行后返回的订单:
      16eb60aac5b427779fcf

      和 【5】范例中运行结果对比可以发现,打印的订单是一个单独的订单信息,没有[] 中括号包裹。
      因为范例【5】中返回的是列表,本例子返回的是一个单独的订单信息(基于该模块传入的榫位置上的ID变量模块获取)。

      以上范例如同执行 JavaScript 策略:

      function main () {
          var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
          Log(exchange.GetOrder(id))
      }
      
    • 8、期货交易模块

      以上模块我们逐一学习,测试交易所我们设置为商品期货。

      回测设置:
      1714cb24eb903446e68d
      以下范例根据该设置进行回测测试。

      • 判断CTP商品期货与期货公司服务器连接状态模块169fd7d9d50ee6ed1c0c

        商品期货有开市时间休市时间,在休市时,是连接不上。

      • 设置合约模块1734f17dbd655ea90387

        在交易所对象配置为期货交易所时,不设置合约,直接获取行情,会报错:
        170b53e7a98fabab5bfc

        我们设置合约为 MA909 ,甲醇目前的主力合约。
        177ce11f17aa08433bdf
        这样就获取到了 MA909 合约的当前 tick 行情中的最新价格数值。

      • 设置期货交易下单方向模块在执行 下单模块
        16789eda70718b57201e
        需要指定下单方向,因为期货有:
        buy : 开多仓
        sell : 开空仓
        closebuy : 平多仓
        closesell : 平空仓
        四个方向(商品期货 再多出两个方向:closebuy_today 平多头今仓, closesell_today 平空头今仓)。

        举例 设置下单模块为买入,那么就有 开多仓 和 平空仓 两个意义,产生了二义性。
        所以需要「设置期货交易下单方向」模块 去设置明确的下单方向。

        1740d1185ff4faf29ab3

        回测显示:
        16ae355a1399e90322bd

        如同 JavaScript 策略代码:

        function main () {
            while (true) {
                if (exchange.IO("status")) {
                    exchange.SetContractType("MA909")
                    Log(exchange.GetTicker().Last)
                    exchange.SetDirection("buy")
                    Log(exchange.Buy(1000, 1))
                    throw "stop"
                } else {
                    Log("未连接商品期货前置机")
                }
                Sleep(1000)
            }
        }
        
    • 9、数字货币期货交易模块

      数字货币期货方面的使用和以上的【8】中的商品期货用法基本一样

      • 合约代码以OKEX为例 可以是:
        • this_week : 当周
        • next_week : 次周
        • quarter : 季度
        • swap : 永续
      • BitMEX :
        • XBTUSD
        • ETHUSD
      • 设置杠杆模块16efa9a95e89c981db8a

        用来设置数字货币期货杠杆。

        # 注意  回测不支持。
        

        如同JavaScript 策略:

        function main () {
            exchange.SetMarginLevel(10)
        }
        

可视化范例策略:

更多策略尽在:https://www.fmz.com/square

本系列其它文章

枯燥的编程,用搭积木的方式就可以轻松完成,动手试试吧,非常有趣!

FMZ量化交易平台邀请链接:https://www.fmz.com/

全球最大交易所币安,国区邀请链接:https://accounts.binance.com/zh-CN/register?ref=16003031  币安注册不了IP地址用香港,居住地选香港,认证照旧,邮箱推荐如gmail、outlook。支持币种多,交易安全!

买好币上KuCoinhttps://www.kucoin.com/r/af/1f7w3  CoinMarketCap前五的交易所,注册友好操简单快捷!

目前不清退的交易所推荐:

1、全球第二大交易所OKX欧意,邀请链接:https://www.promooboost.com/join/1837888 注册简单,交易不需要实名,新用户能开合约,币种多,交易量大!。

2、老牌交易所比特儿现改名叫芝麻开门 :https://www.gatewebsite.net/share/XgRDAQ8

买好币上币库:https://www.kucoin.com/r/1f7w3

火必所有用户现在可用了,但是要重新注册账号火币https://www.huobi.com

全球最大交易所币安

国区邀请链接: 支持86手机号码,网页直接注册。

赞(0)
未经允许不得转载:2026币圈信息集合 » FMZ量化交易可视化模块搭建交易策略--进阶