对于量化交易、程序化交易初学者学习入门最大的困难是什么?一般来说有这么几条。
随着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还可以给出优化建议,优化后的代码。