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

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

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

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

使用Chat GPT辅助代码设计

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

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

1、如何唤出ChatGPT

在空白处使用右键菜单,选择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后,就可以把以上优化过的提问内容填写进去。

ChatGPT就开始干活了。

等它写完。

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

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

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函数,点击右键弹出菜单:

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

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

 

 

 

免责声明:信息仅供参考,不构成投资及交易建议。投资者据此操作,风险自担。
如果觉得文章对你有用,请随意赞赏收藏
相关推荐
相关下载
登录后评论
Copyright © 2019 宽客在线