做量化交易发愁写代码?一招教你白嫖GPT-4智能编程神器

论坛 期权论坛 股票     
期权匿名问答   2023-3-24 03:30   5771   17
自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'] # 计算DIF
df['DEA'] = talib.EMA(df['DIF'], timeperiod=9) # 计算DEA
df['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 bt
import tushare as ts
import pandas as pd

class MyStrategy(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) # 计算交叉点

    def next(self):
        if not self.position:
            if self.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:
            if self.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呢?


我是 @quantkoala,一枚大写的量化/程序化策略源码捕手,喜欢全方位收集分享市面上主流的策略源码(股票+期货+外汇),在『量化藏经阁』和『量化藏经阁Max』社群(入口)中,持续分享量化策略源码和量化知识等干货(目前已分享200+套精品策略),欢迎关注点赞&联系沟通,探讨共赢&成果共享,相互交流&共同进步!!!
常在线,多交流,多沟通!!!

更多相关资料请见下方文章卡片,另外还有一个周更的公Z号『量化君也』,专注于量化策略分享/交流/社群,欢迎来玩~
分享到 :
0 人收藏

17 个回复

倒序浏览
老板接量化实习生不[捂嘴]
[思考]我想知道它写代码写完几行被截断了怎么办?
截断后,照旧ctrl+k,在输入框里面输入“继续”或“continue”就可以了
各位老板,看过来,有木有接实习生的呢
先用GPT4问做啥要用到啥库比如天文,然后再给,cursor布置作业完美
可以啊,你这思路666~[赞][赞][赞][赞]
能直接让ai帮我编个稳定赚钱的程序不?
那肯定是可以的,只要你给它描述稳定赚钱的思路[耶]
感觉不太好用,是我没有掌握使用方法吗
没有装py能用吗
貌似GPT-4 事实上是GPT-3,貌似非是的错觉,官网事实上就没有证实用了GPT-4。只是你们认为的。
不是好用不好用 是会用不会用是两回事,[思考]
为什么国内要ban掉啊?无语
好过百度找代码
官网上直接就写有GPT-4字样,是他们让我们这样以为的
也同样可以用,它负责生成代码,不负责执行
Cursor国内直接可以用,只是chatGPT用不了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:391867
帖子:78374
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP