探索FMZ策略编辑器的新功能:ChatGPT如何大幅提升您的量化生产力

Author: 小小梦, Created: 2023-04-01 13:07:53, Updated: 2023-09-18 20:16:25

[TOC]

img

探索FMZ策略编辑器的新功能

对于量化交易、程序化交易初学者学习入门最大的困难是什么?一般来说有这么几条。

  • 基础知识欠缺:包括基础概念、市场规则、交易知识、策略思路等。
  • 编程基础薄弱:包括逻辑表达、程序设计编写、程序调试排错。
  • 逻辑思维薄弱:思考的过程容易造成混乱,越思考越混乱。
  • 自学困难:出问题无从下手解决,可能连问题搜索的方向都不清楚。

随着AI技术的发展,以上这些问题在一定程度上可以找到解决方案。最近大火的Chat GPT就可以用来作为量化交易学习、研究、创作的工具。随着FMZ平台对于策略编辑器的一次全新升级,同时也接入了Chat GPT,使得大幅提升了量化生产力,接下来就让我们一起来探索FMZ策略编辑器的新功能

使用Chat GPT辅助代码设计

目前虽然Chat GPT的功能已经十分强大,对于人类提出的问题理解程度已经非常的高。但是它给出的答案依然对于问题描述的完整程度描述的准确性等因素十分敏感,如果描述的场景、问题内容等不准确,Chat GPT还是无法给出十分完美的答案。所以在使用它解决一些问题时需要尽量表述正确、完整。

接下来我们就使用FMZ平台策略编辑器的Chat GPT功能解决一个代码设计问题,登录FMZ平台,在某个策略编辑页面。

1、如何唤出ChatGPT

img

在空白处使用右键菜单,选择ChatGPT选项并点击,可以唤出Chat GPT,或者使用⌘K唤出ChatGPT

2、关于提问的方式

假如我现在是一个量化交易初学者,我有一个需求:“使用一分钟K线合成任意周期K线数据”。作为初学者我编程能力薄弱,实在是不会写这样的算法,以前只能查找资料、找大神求助,现在有了Chat GPT就可以直接问它要答案。当然就如上文所说,直接描述这个需求:“使用一分钟K线合成任意周期K线数据”。GPT大概率是给不到你一个100%可用的答案的,还需要尽量把问题描述完善。就以这个需求例子来说,小编我不断调整我的问题,问了好多次才得到可用的并且我想要的答案。那么我们就把这个需求描述的更加完善一点:

在FMZ平台上调用exchange.GetRecords(60)函数可以获取一分钟K线数据,数据结构是:
[{
    Time    : 毫秒时间戳,   // 周期的起始时间  
    Open    : 1000,              
    High    : 1500,              
    Low     : 900,               
    Close   : 1200,              
    Volume  : 1000000            
}, ...]
请设计一个算法,使用一分钟K线数据合成任意分钟的K线数据,对于可以整除60分钟的周期,需要从整点的0分开始统计,使用Javascript语言实现,
这个算法单独写成一个函数,测试在function main()函数中测试,使用$.PlotRecords(KLineData, "name")画图。

唤出ChatGPT后,就可以把以上优化过的提问内容填写进去。

img

ChatGPT就开始干活了。

img

等它写完。

img

有时候Chat GPT给代码包裹了```符号,这个是在markdown中表示包裹住的内容是代码。所以我们删除掉第一行和最后一行就行了。因为我给它提出的问题中要求使用$.PlotRecords(KLineData, "name")画图,所以策略要引用画线类库才能画图,画图是为了验证Chat GPT给出的代码合成出的K线数据是否正确。 关于什么是模板类库,这里不再赘述,可以查询FMZ的API文档,画线类库地址

Chat GPT给出的这个代码是直接可以回测的,我把回测系统的默认K线周期设置为5分钟,用来对比Chat GPT给出的算法计算出的K线数据画出的K线图。

img

3、回测测试Chat GPT给出的代码

回测系统画图 ChatGPT给出的算法画图

初步看来ChatGPT给出的算法使用1分钟K线合成5分钟K线是正确的。

4、ChatGPT写的完整的代码

/*
合成任意分钟的K线数据
@param {Array} records - 一分钟K线数据
@param {Number} period - 合成的周期,单位为分钟
@return {Array} - 合成后的K线数据
*/
function composeKLineData(records, period) {
  var result = [];
  var index = 0;
  var open = records[0].Open;
  var high = records[0].High;
  var low = records[0].Low;
  var close = records[0].Close;
  var volume = records[0].Volume;
  var time = records[0].Time - records[0].Time % (period * 60 * 1000);
  for (var i = 1; i < records.length; i++) {
    var record = records[i];
    if (record.Time < time + period * 60 * 1000) {
      high = Math.max(high, record.High);
      low = Math.min(low, record.Low);
      close = record.Close;
      volume += record.Volume;
    } else {
      result[index] = {
        Time: time,
        Open: open,
        High: high,
        Low: low,
        Close: close,
        Volume: volume
      };
      index++;
      open = record.Open;
      high = record.High;
      low = record.Low;
      close = record.Close;
      volume = record.Volume;
      time = record.Time - record.Time % (period * 60 * 1000);
    }
  }
  result[index] = {
    Time: time,
    Open: open,
    High: high,
    Low: low,
    Close: close,
    Volume: volume
  };
  return result;
}

function main() {
  var records = exchange.GetRecords(60);
  var kLineData = composeKLineData(records, 5); // 合成5分钟K线数据
  $.PlotRecords(kLineData, "KLineData");
}

使用Chat GPT解释代码

FMZ上集成的ChatGPT不仅会帮你写代码,而且还会帮你解释代码。选中刚才ChatGPT写出的代码中的composeKLineData函数,点击右键弹出菜单:

img

img

使用Chat GPT给出建议、优化代码

甚至ChatGPT还可以给出优化建议,优化后的代码。

img


编辑器新增的其它功能

本次FMZ编辑器更新,除了加入了ChatGPT这个大功能之外。更加优化、提升了线上程序编写的使用体验,增加了很多方便的功能。

查看快捷键组合

在空白处或者选中代码时点击右键,弹出菜单。

img

显示出各种功能的快捷键组合。

img


修改变量名

Rename Symbol,修改局部的变量名。

img

img

只会修改上图中main函数中的变量名records


修改所有相同内容

Change All Occurrences,选中某个变量名、单词,同时编辑文中所有相同的内容。

img

img


格式化(代码美化,自动对齐格式)

Format Selection,格式化选中的代码。

Format Document,全部代码格式化。

img


跳转到定义、引用

Go to Definition,跳转到定义。 Go to References,跳转到引用。 Go to Symbol…,跳转到变量名、函数名等。

img


定义预览、引用预览

Peek Definition,定义预览。在不离开当前代码行的情况下查看选中的代码的定义。 Peek References,引用预览,在不离开当前代码行的情况下查看其它代码行中对当前代码行引用的情况,可以快速跳转,以便更好地理解代码逻辑和结构。

img


Related

More

gaoyongfa 用后评论,6的

btc_Kevin 这个666

17732164739 太好了,梦总辛苦