
『正文』
ˇ
去年12月的时候我们初次体验ChatGPT,《ChatGPT生成量化交易策略》.
当时还是很惊喜的,可以辅助写代码,写注释,给出一些示例。使用的时间长了发现写一些基础的东西还行,太复杂的内容BUG会比较多吧,有时候也是答非所问。学习了github,给出的很多示例都可以在github找到。当然了,你不能对现阶段的公开版Ai要求太苛刻了。这几个月白嫖下来,我个人是非常满意的,帮我解决了不少问题,真的是一个非常不错的效率工具。
经过几个月的时间Chat也出了付费的版本,一个月20刀的价格我觉的相当良心了,更快的响应速度,更长的字数。这要是国内的厂商,路子就比较广泛了,分模块付费,SVIP,免费版植入广告等等,老生常谈了。OK,言归正传。Chat新增了多个线程保存的功能,这样我们逐步训练自己的Ai助手,这个功能免费太良心了确实方便了很多。我的目的是让它帮我写一个基于国内Tbquant平台的代码,Chat并不了解它。因此,我们需要喂一些源码让它学习。需要不断校正Chat的回答,费了很多时间重新来过,总之就像教育子女一样,要有耐心,每天教育一点,有问题就纠错。不要暴躁,不要生气。。。。
这是一个Tbquant自带的布林策略,我们先让它学习。
以下是您提供的布林强盗_多策略的TBQUANT代码:
scssCopy codeParams Numeric bollingerLengths(50);Numeric Offset(1.25);Numeric rocCalcLength(30);Numeric liqLength(50);Numeric Lots(1);
Vars Series<Numeric> MidLine(0);Numeric Band(0);Series<Numeric> upBand(0);Series<Numeric> rocCalc(0);Series<Numeric> liqDays(50);Series<Numeric> liqPoint(0);
EventsOnBar(ArrayRef<integer> const& indexes) { MidLine = AverageFC(Close,bollingerLengths); Band = StandardDev(Close,bollingerLengths,2); upBand = MidLine + Offset*Band; rocCalc = Close - Close[rocCalcLength - 1];
If (MarketPosition != 1 And rocCalc[1] > 0 And High >= upBand[1]) Buy(Lots, Max(Open,upBand[1]));
If (MarketPosition == 0) { liqDays = liqLength; } Else { liqDays = liqDays - 1; liqDays = Max(liqDays,10); } liqPoint = Average(Close, liqDays);
If (MarketPosition == 1 And BarsSinceEntry >= 1 And liqPoint[1] < upBand[1] And Low <= liqPoint[1]) Sell(0, Min(Open,liqPoint[1])); }这是符合TBQUANT格式的代码,可以在TBQUANT平台上运行。
Chat:
好的,以下是一个简单的双均线策略代码,使用15分钟周期,在中国期货市场:scssCopy code
ParamsNumeric FastLength(5);Numeric SlowLength(20);Numeric Lots(1);VarsSeries<Numeric> FastMA(0);Series<Numeric> SlowMA(0);EventsOnBar(ArrayRef<Integer> const &inIndexes){FastMA = SMA(Close, FastLength);SlowMA = SMA(Close, SlowLength);
if (MarketPosition == 0and FastMA[1] < SlowMA[1] and FastMA[0] > SlowMA[0]) {Buy(Lots, Open);}elseif (MarketPosition == 1and FastMA[1] > SlowMA[1] and FastMA[0] < SlowMA[0]) {Sell(0, Open);}}
该策略使用两个简单移动平均线 (SMA),一个较短的均线 FastMA 和一个较长的均线 SlowMA。在每个15分钟周期结束时,计算两个均线的值,当短期均线上穿长期均线时,说明市场上涨势头强劲,会买入开多头仓位;反之,当短期均线下穿长期均线时,说明市场下跌势头强劲,会卖出平多头仓位。需要注意的是,这只是一个简单的双均线策略,仅供参考和学习。在实际应用中,还需要根据市场情况、风险偏好等因素进行调整和优化。它帮我写一个双均线的tbquant源码,代码里有一个地方偷价了。这个我需要手动修改一下,这是第一次训练,后面会逐步训练它修正细节。这里有一个细节需要注意,需要命名你们的代码格式,我和Chat约定这种代码格式是TB,以后我让它写代码,就只要说TB即可。如果不约定,它可能就去github或者pypi里找Python包了,而Tbquant是有python包的。情况如下:

你看,这就不是Tbquant的C++格式了,所以要再次和Chat明确代码格式,同时命名你们的之间的代码交流的格式。
Chat:
好的,这是一个基于tbquant实现的双均线策略的代码,你可以根据需要进行调整和优化:
scssCopy code
Params Numeric FastMA_Length(20); Numeric SlowMA_Length(50); Numeric Lots(1); Vars Series<Numeric> FastMA(0); Series<Numeric> SlowMA(0); EventsOnBar(ArrayRef<Integer> const& bars) { FastMA = MA(Close, FastMA_Length); SlowMA = MA(Close, SlowMA_Length);if (MarketPosition != 1 && CrossOver(FastMA, SlowMA)) { Buy(Lots, Open); }if (MarketPosition == 1 && CrossUnder(FastMA, SlowMA)) { Sell(0, Open); }if (MarketPosition != -1 && CrossUnder(SlowMA, FastMA)) { SellShort(Lots, Open); }if (MarketPosition == -1 && CrossOver(SlowMA, FastMA)) { BuyToCover(0, Open); } }

你看,Chat的学习速度很快,经过多次错误,修正调教后。它的回答越来越贴近我的目标了。
Chat:
Params Numeric FastLength(12); Numeric SlowLength(26); Numeric SignalLength(9); Numeric Lots(1); Vars Series<Numeric> MACD(0); Series<Numeric> Signal(0); Series<Numeric> Histogram(0); EventsOnBar(ArrayRef<Integer> const& bars) { MACD = MACD(Close, FastLength, SlowLength); Signal = SMA(MACD, SignalLength); Histogram = MACD - Signal;if (MarketPosition != 1 && CrossOver(MACD, Signal)) { Buy(Lots, Open); }if (MarketPosition == 1 && CrossUnder(MACD, Signal)) { Sell(0, Open); }if (MarketPosition != -1 && CrossUnder(Signal, MACD)) { SellShort(Lots, Open); }if (MarketPosition == -1 && CrossOver(Signal, MACD)) { BuyToCover(0, Open); } }我:对就是这样的格式,请帮我用TB编写一个RSI交易策略
Chat:好的,以下是基于TB的RSI交易策略的代码:
Params Numeric RSI_Length(14); Numeric Lots(1); Vars Series<Numeric> RSI(0); EventsOnBar(ArrayRef<Integer> const& bars) { RSI = RSI(Close, RSI_Length);if (MarketPosition != 1 && CrossOver(RSI, 20)) { Buy(Lots, Open); }if (MarketPosition != -1 && CrossUnder(RSI, 80)) { SellShort(Lots, Open); }if (MarketPosition == 1 && CrossUnder(RSI, 70)) { Sell(Lots, Open); }if (MarketPosition == -1 && CrossOver(RSI, 30)) { BuyToCover(Lots, Open); } }
总结:
总之,我现在坚持每天喂它一些源码让它去学习。我试试一年下来它会达到什么水平。有兴趣的朋友可以去试试,就当养孩子了,chatgpt是一个养成类游戏,哈哈哈哈。
End