自chatGPT火遍大江南北之后,感觉AI领域就跟娱乐圈一个样,每天都有重磅大瓜可以吃。这不,最近几天又吃到一个蜜水直流的甜瓜,玩得停不下来,麻麻再也不用担心我的编程。
它就是如今AI界逐渐火出圈的智能编程神器——Cursor,多人反馈比GitHub Copilot还好用,是咱量化编程新手的福音,很多初级的编程任务都可以挥一挥衣袖轻松搞定,官网地址请撩:www.cursor.so
登录官网后就看到一句大大的slogan『Build Software. Fast.』,其下带有一行小字:Write, edit, and chat about your code with GPT-4 in a new type of editor。一目了然,从中就可以看出,Cursor是基于GPT-4模型的编程工具,可以通过它生成、编辑以及和AI讨论分析代码。
我这几天使用下来,它更多扮演的是一种助手的角色,你给它描述编程任务,它给你生成代码,如果你看不懂,它会给你一句一句翻译,如果代码运行出错,你把错误放在聊天框里面,它会回复是什么原因、怎么解决。
最最关键的是,它目前所用功能的使用都是免费的,其次是不需要爬梯子翻墙,国人直接就可以使用,全程没有任何套路,甚至连注册都不需要!
Cursor不是像chatGPT那样是在网页端直接使用的,而是要在官网上下载客户端,目前是支持Windows、MacOS和Linux三大操作系统,安装软件本体不大,只有80几兆。选择对应版本下载安装完成后,打开软件,来到暗黑色风格的类VS Code开发界面,整体非常简洁,菜单栏和图标也非常少,一股北欧极简风扑面而来。
Cursor的使用非常简单,只需要记住两个快捷键就行了,一个是Ctrl+K,另一个是Ctrl+L。
Ctrl+K(生成代码):负责代码的生成和编辑,也就是在这里给它描述和布置编程任务以及后续的修改。
Ctrl+L(聊代码):负责代码的说明、注释和理解,对于代码不理解和错误的地方,让它给你进行说明和改进。
打开Cursor后,默认情况下是已经打开PY的main.py文件和JS的main.js文件(如果没有,请从左侧文件列表手动打开),PY就是Python,JS是JavaScript,此外还支持C、C#和HTML等多种编程语言。
在量化交易领域,使用Python的人比较多,在此就以Python的自动化编程举例,咱先给它安排一个小任务看看效果如何,选中PY的main.py文件(或者自己新建一个py文件,此处我是新建了一个“MACD计算并展示.py”文件),让光标进入,按下快捷键Ctrl+K后,会在界面综上部弹出一个输入框,咱往里面敲入“使用tushare库获取贵州茅台从2018年元旦至2023年3月20日的行情数据,并计算MACD指标,最后要画图展示”。
输入完成后就点回车键Enter,然后编辑窗口就不断有代码生成,完整代码如下所示,要注意的是,每次输出的代码都是不同的,即使输入相同的prompt(提示词/关键,坊间俗称“咒语”)。
生成后记得点击保存,py文件默认会存储在路径“C:\Users\{你的用户名}\cursor-tutor”对应的文件夹下(也许不同电脑不同操作系统不一样),你可以在终端执行这个py文件,或者直接将代码拷贝到你的IDE里面执行,例如Spyder、PyCharm等。
我在终端直接运行这个py文件,很幸运,除了提示我要升级tushare到Pro版之外,并没有其他错误,直接就把最终的行情和MACD图给画出来了。虽然横坐标看起来很“奇怪”,因为里面用了date2num函数将日期转化为天数,也就是距离1900-01-01有多少天。
如果萌新看代码不是十分理解,要添加注释,那可以全部选中代码,接着Ctrl+K,在输入框里输入“请给每一行代码添加注释”。
然后敲击回车键Enter完成,就会出现修改前后的代码对比。
接着点左上角的绿色“Accept”表示接受修改,这样就能给代码都添加上注释了,这样代码的可读性就更高了。
如果在看代码的过程中,觉得有哪里不懂的,可以开启“聊代码”功能,只需要使用快捷键Ctrl+L,在弹出的输入框里面输入你想问的问题,例如自己不清楚画图展示中第26行candlestick_ochl函数,可以这样问。
敲击回车后,就会在界面右侧开启一个聊天小框,对你的问题进行回复,如果想继续了解,还可以继续提问,这就跟使用chatGPT是类似的了。
我当时发现可以这样聊天的时候,心想这不就可以同时白嫖chatGPT了吗?谁知道Cursor还是太油腻太鸡贼了,除了编程相关的问题,其他问题都是一律漠视的。
刚才咱不是说行情和MACD指标的画图里面横轴是数字吗,看起来怪怪的,咱来问一下Cursor该怎么修改,先选中画图的那部分代码,然后Ctrl+L,在弹出的输入框当中输入“我想让这段代码展示的图片里面,横轴是日期,请问我该如何修改?”。
Enter之后,开启聊天小框回答模式,详细回答了原因,以及如何进行修改,“虽然已经用date2num函数转换为数字,但最后可以用ax.xaxis_date函数再转回为日期显示”。
将原来的代码注释掉,然后把回答当中的代码copy进来,一运行,发现真的可以,数字变回日期了,虽然只把年份显示出来,Cursor你真666~
import tushare as ts # 导入tushare库import pandas as pd # 导入pandas库import matplotlib.pyplot as plt # 导入matplotlib库from mpl_finance import candlestick_ochl # 导入candlestick_ochl函数from matplotlib.pylab import date2num # 导入date2num函数import datetime # 导入datetime库import talib # 导入talib库# 获取贵州茅台从2018年元旦至2023年3月20日的行情数据start_date = '2018-01-01'# 起始日期end_date = '2023-03-20'# 结束日期df = ts.get_k_data('600519', start=start_date, end=end_date) # 获取贵州茅台的K线数据# 计算MACD指标df['EMA12'] = talib.EMA(df['close'], timeperiod=12) # 计算12日指数移动平均线df['EMA26'] = talib.EMA(df['close'], timeperiod=26) # 计算26日指数移动平均线df['DIF'] = df['EMA12'] - df['EMA26'] # 计算DIFdf['DEA'] = talib.EMA(df['DIF'], timeperiod=9) # 计算DEAdf['MACD'] = 2 * (df['DIF'] - df['DEA']) # 计算MACD# 画图展示df['date'] = pd.to_datetime(df['date']) # 将日期转换为datetime格式df['date'] = df['date'].apply(date2num) # 将日期转换为数字df_values = [tuple(vals) for vals in df[['date', 'open', 'close', 'high', 'low']].values] # 将数据转换为元组# fig, ax = plt.subplots(figsize=(20, 10)) # 创建画布# candlestick_ochl(ax, df_values, width=0.6, colorup='red', colordown='green', alpha=0.8) # 绘制K线图# plt.plot(df['date'], df['DIF'], label='DIF') # 绘制DIF曲线# plt.plot(df['date'], df['DEA'], label='DEA') # 绘制DEA曲线# plt.bar(df['date'], df['MACD'], label='MACD', width=0.03 * len(df)) # 绘制MACD柱状图# plt.legend() # 显示图例# plt.show() # 显示图形# plt.legend()# plt.show()fig, ax = plt.subplots(figsize=(20, 10)) # 创建画布candlestick_ochl(ax, df_values, width=0.6, colorup='red', colordown='green', alpha=0.8) # 绘制K线图plt.plot(df['date'], df['DIF'], label='DIF') # 绘制DIF曲线plt.plot(df['date'], df['DEA'], label='DEA') # 绘制DEA曲线plt.bar(df['date'], df['MACD'], label='MACD', width=0.03 * len(df)) # 绘制MACD柱状图plt.legend() # 显示图例plt.xticks(rotation=30) # 旋转横轴刻度标签ax.xaxis_date() # 将横轴刻度设为日期格式plt.show() # 显示图形
上面只是一个量化分析小任务,咱还可以让它编写量化策略,例如让它基于backtrader编写一个双均线策略,prompt:基于backtrader,写一个贵州茅台的双均线策略,数据获取要基于tushare,并进行回测,本金是一百万,时间范围是2018-01-01至2023-03-20。
代码如下,原始代码结构和形式上都是完整的,但是tushare的数据与导入Backtrader的数据格式不对应,将日期列转为index后和设置格式后便可以正常运行。
import backtrader as btimport tushare as tsimport pandas as pdclassMyStrategy(bt.Strategy): params = ( ('fast', 5), # 快速移动平均线的周期 ('slow', 20), # 慢速移动平均线的周期 )def__init__(self):self.fast_moving_average = bt.indicators.SMA(self.data.close, period=self.params.fast, plotname='5 day moving average'# 计算快速移动平均线 )self.slow_moving_average = bt.indicators.SMA(self.data.close, period=self.params.slow, plotname='20 day moving average'# 计算慢速移动平均线 )self.crossover = bt.indicators.CrossOver(self.fast_moving_average, self.slow_moving_average) # 计算交叉点defnext(self):ifnotself.position:ifself.crossover > 0: # 如果快速移动平均线上穿慢速移动平均线 amount_to_invest = (0.95 * self.broker.cash) # 计算可投资金额self.size = int(amount_to_invest / self.data.close) # 计算可购买股票数量 print("Buy {} shares of {} at {}".format(self.size, '600519', self.data.close[0])) # 输出购买信息self.buy(size=self.size) # 买入股票else:ifself.crossover < 0: # 如果快速移动平均线下穿慢速移动平均线 print("Sell {} shares of {} at {}".format(self.size, '600519', self.data.close[0])) # 输出卖出信息self.close() # 卖出股票if __name__ == '__main__': cerebro = bt.Cerebro() # 创建Cerebro引擎 cerebro.addstrategy(MyStrategy) # 添加策略 symbol = '600519'# 股票代码 df = ts.get_k_data(symbol, start='2018-01-01', end='2023-03-20') # 获取股票数据 df['date'] = pd.to_datetime(df['date']) # 将日期转换为datetime格式 df = df.set_index('date', drop=True) # 将日期设置为索引 data = bt.feeds.PandasData(dataname=df, datetime=None, open=0, high=1, low=2, close=3, volume=4, openinterest=-1) # 创建数据源 cerebro.adddata(data) # 添加数据源 cerebro.broker.setcash(1000000.0) # 设置初始资金 cerebro.broker.setcommission(commission=0.001) # 设置佣金 print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue()) # 输出初始资金 cerebro.run() # 运行策略 print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue()) # 输出最终资金 cerebro.plot() # 绘制图表
相信看到这里,大伙儿应该明白了Cursor的用途和能力,从今往后,就可以把它当做是自己的编程助理,自己可以像领导那样,Ctrl+K给它布置任务,遇到不符合预期的地方,Ctrl+L让它解释和修正。
虽然我已经觉得Cursor的编程能力已经不错了,但是多次的撩骚中发现它只使用了GPT-3模型,那官网首页说好的GPT-4呢?
Tip:点击关键字可以直接查看对应文章。
END
如果对本文有疑惑,或是想聊聊
亦或是围观朋友圈当点赞之交
点我,让我们一路同行
吃瓜吐槽写代码
(微信号:iquantman)
添加好友后,私信『666』
送你一些量化小福利
人工回复慢请见谅~
继续阅读
阅读原文