[TOC]
对于量化交易、程序化交易初学者学习入门最大的困难是什么?一般来说有这么几条。
随着AI技术的发展,以上这些问题在一定程度上可以找到解决方案。最近大火的Chat GPT就可以用来作为量化交易学习、研究、创作的工具。随着FMZ平台对于策略编辑器的一次全新升级,同时也接入了Chat GPT,使得大幅提升了量化生产力,接下来就让我们一起来探索FMZ策略编辑器的新功能!
目前虽然Chat GPT的功能已经十分强大,对于人类提出的问题理解程度已经非常的高。但是它给出的答案依然对于问题描述的完整程度、描述的准确性等因素十分敏感,如果描述的场景、问题内容等不准确,Chat GPT还是无法给出十分完美的答案。所以在使用它解决一些问题时需要尽量表述正确、完整。
接下来我们就使用FMZ平台策略编辑器的Chat GPT功能解决一个代码设计问题,登录FMZ平台,在某个策略编辑页面。
在空白处使用右键菜单,选择ChatGPT选项并点击,可以唤出Chat GPT
,或者使用⌘K唤出ChatGPT。
假如我现在是一个量化交易初学者,我有一个需求:“使用一分钟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线图。
初步看来ChatGPT给出的算法使用1分钟K线合成5分钟K线是正确的。
/*
合成任意分钟的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");
}
FMZ上集成的ChatGPT不仅会帮你写代码,而且还会帮你解释代码。选中刚才ChatGPT写出的代码中的composeKLineData
函数,点击右键弹出菜单:
甚至ChatGPT还可以给出优化建议,优化后的代码。
本次FMZ编辑器更新,除了加入了ChatGPT这个大功能之外。更加优化、提升了线上程序编写的使用体验,增加了很多方便的功能。
在空白处或者选中代码时点击右键,弹出菜单。
显示出各种功能的快捷键组合。
Rename Symbol,修改局部的变量名。
只会修改上图中main
函数中的变量名records
。
Change All Occurrences,选中某个变量名、单词,同时编辑文中所有相同的内容。
Format Selection,格式化选中的代码。
Format Document,全部代码格式化。
Go to Definition,跳转到定义。 Go to References,跳转到引用。 Go to Symbol…,跳转到变量名、函数名等。
Peek Definition,定义预览。在不离开当前代码行的情况下查看选中的代码的定义。 Peek References,引用预览,在不离开当前代码行的情况下查看其它代码行中对当前代码行引用的情况,可以快速跳转,以便更好地理解代码逻辑和结构。
xuzijie 666
gaoyongfa 用后评论,6的
btc_Kevin 这个666
17732164739 太好了,梦总辛苦
发明者量化-小小梦 感谢支持发明者量化。