如何调教ChatGPT成为你的策略助手

news2024/12/26 14:13:09

量化策略开发,高质量社群,交易思路分享等相关内容

『正文』

ˇ

去年12月的时候我们初次体验ChatGPT,《ChatGPT生成量化交易策略》.

当时还是很惊喜的,可以辅助写代码,写注释,给出一些示例。使用的时间长了发现写一些基础的东西还行,太复杂的内容BUG会比较多吧,有时候也是答非所问。学习了github,给出的很多示例都可以在github找到。当然了,你不能对现阶段的公开版Ai要求太苛刻了。这几个月白嫖下来,我个人是非常满意的,帮我解决了不少问题,真的是一个非常不错的效率工具。

经过几个月的时间Chat也出了付费的版本,一个月20刀的价格我觉的相当良心了,更快的响应速度,更长的字数。这要是国内的厂商,路子就比较广泛了,分模块付费,SVIP,免费版植入广告等等,老生常谈了。

OK,言归正传。Chat新增了多个线程保存的功能,这样我们逐步训练自己的Ai助手,这个功能免费太良心了确实方便了很多。我的目的是让它帮我写一个基于国内Tbquant平台的代码,Chat并不了解它。因此,我们需要喂一些源码让它学习。需要不断校正Chat的回答,费了很多时间重新来过,总之就像教育子女一样,要有耐心,每天教育一点,有问题就纠错。不要暴躁,不要生气。。。。

这是一个Tbquant自带的布林策略,我们先让它学习。

Chat:


以下是您提供的布林强盗_多策略的TBQUANT代码:

scss
Copy code
// ---------------------------------------------------------------------------------
// 策略参数
Params
    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);

// ---------------------------------------------------------------------------------
// 策略事件
Events
    OnBar(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

//------------------------------------------------------------------------
// 双均线策略
// 时间周期: 15分钟
// 市场: 中国期货市场
//------------------------------------------------------------------------
Params
Numeric FastLength(5);
Numeric SlowLength(20);
Numeric Lots(1);
Vars
Series<Numeric> FastMA(0);
Series<Numeric> SlowMA(0);
Events
OnBar(ArrayRef<Integer> const &inIndexes)
{
// 计算均线
FastMA = SMA(Close, FastLength);
SlowMA = SMA(Close, SlowLength);

// 没有仓位,金叉买入
if (MarketPosition == 0 and FastMA[1] < SlowMA[1] and FastMA[0] > SlowMA[0]) {
Buy(Lots, Open);
}
// 有多头仓位,死叉平仓
else if (MarketPosition == 1 and 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实现的双均线策略的代码,你可以根据需要进行调整和优化:

scss
Copy code
//------------------------------------------------------------------------
// 简称: DualMA
// 名称: 双均线策略
// 类别: 公式应用
// 类型: 内建应用
// 输出:
//------------------------------------------------------------------------
/*
策略说明:
    该策略基于两条均线(短期均线和长期均线)进行交易决策。
    当短期均线上穿长期均线时,开多单。
    当短期均线下穿长期均线时,平多单。
    当短期均线下穿长期均线时,开空单。
    当短期均线上穿长期均线时,平空单。
系统要素:
    1、短期均线长度
    2、长期均线长度
    3、交易手数
入场条件:
    1、短期均线上穿长期均线时,开多单。
    2、短期均线下穿长期均线时,开空单。
出场条件:
    1、持有多单时,短期均线下穿长期均线时,平多单。
    2、持有空单时,短期均线上穿长期均线时,平空单。
*/

Params
    Numeric FastMA_Length(20);      // 短期均线长度
    Numeric SlowMA_Length(50);      // 长期均线长度
    Numeric Lots(1);                // 交易手数
Vars
    Series<Numeric> FastMA(0);      // 短期均线
    Series<Numeric> SlowMA(0);      // 长期均线
Events
    OnBar(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:


//------------------------------------------------------------------------
// 简称: MACD
// 名称: 移动平均线散点图
// 类别: 公式应用
// 类型: 内建应用
// 输出:
//------------------------------------------------------------------------

Params
    Numeric FastLength(12);            // 快线周期
    Numeric SlowLength(26);            // 慢线周期
    Numeric SignalLength(9);           // 信号线周期
    Numeric Lots(1);                   // 交易手数
Vars
    Series<Numeric> MACD(0);           // MACD 线
    Series<Numeric> Signal(0);         // 信号线
    Series<Numeric> Histogram(0);      // MACD 柱状图
Events
    OnBar(ArrayRef<Integer> const& bars)
    {
        // 计算 MACD 线和信号线
        MACD = MACD(Close, FastLength, SlowLength);
        Signal = SMA(MACD, SignalLength);
        Histogram = MACD - Signal;
        
        // 当 MACD 线上穿信号线时,开多单
        if (MarketPosition != 1 && CrossOver(MACD, Signal))
        {
            Buy(Lots, Open);
        }
        
        // 当 MACD 线下穿信号线时,平多单
        if (MarketPosition == 1 && CrossUnder(MACD, Signal))
        {
            Sell(0, Open);
        }
        
        // 当 MACD 线下穿信号线时,开空单
        if (MarketPosition != -1 && CrossUnder(Signal, MACD))
        {
            SellShort(Lots, Open);
        }
        
        // 当 MACD 线上穿信号线时,平空单
        if (MarketPosition == -1 && CrossOver(Signal, MACD))
        {
            BuyToCover(0, Open);
        }
    }
    //这段代码使用 TB 语言编写了一个 MACD 策略。

我:对就是这样的格式,请帮我用TB编写一个RSI交易策略

Chat:好的,以下是基于TB的RSI交易策略的代码:

//------------------------------------------------------------------------
// 简称: RSI
// 名称: 相对强弱指标交易策略
// 类别: 公式应用
// 类型: 内建应用
// 输出:
//------------------------------------------------------------------------
/*
策略说明:
    该策略基于相对强弱指标(RSI)进行交易决策。
    当RSI指标上穿20时,开多单。
    当RSI指标下穿80时,开空单。
系统要素:
    1、RSI长度
    2、交易手数
入场条件:
    1、RSI指标上穿20时,开多单。
    2、RSI指标下穿80时,开空单。
出场条件:
    1、持有多单时,RSI指标下穿70时,平多单。
    2、持有空单时,RSI指标上穿30时,平空单。
*/

Params
    Numeric RSI_Length(14); // RSI指标长度
    Numeric Lots(1);       // 交易手数
Vars
    Series<Numeric> RSI(0); // RSI指标
Events
    OnBar(ArrayRef<Integer> const& bars)
    {
        // 计算RSI指标
        RSI = RSI(Close, RSI_Length);
        
        // 当RSI指标上穿20时,开多单
        if (MarketPosition != 1 && CrossOver(RSI, 20))
        {
            Buy(Lots, Open);
        }
        
        // 当RSI指标下穿80时,开空单
        if (MarketPosition != -1 && CrossUnder(RSI, 80))
        {
            SellShort(Lots, Open);
        }
        
        // 当持有多单且RSI指标下穿70时,平多单
        if (MarketPosition == 1 && CrossUnder(RSI, 70))
        {
            Sell(Lots, Open);
        }
        
        // 当持有空单且RSI指标上穿30时,平空单
        if (MarketPosition == -1 && CrossOver(RSI, 30))
        {
            BuyToCover(Lots, Open);
        }
    }

总结:

总之,我现在坚持每天喂它一些源码让它去学习。我试试一年下来它会达到什么水平。有兴趣的朋友可以去试试,就当养孩子了,chatgpt是一个养成类游戏,哈哈哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java面试题-GC垃圾回收

1.如何判断一个对象是否可以回收&#xff1f;Java虚拟机使用可达性分析算法来判断对象是否可以被回收。可达性分析算法的基本思路是从一组称为“GC Roots”的根对象开始遍历所有对象&#xff0c;只有从GC Roots开始的对象可以被访问到&#xff0c;其他的对象都被判定为无用对象…

13 Sentinel介绍

什么是Sentinel 分布式系统的流量防卫兵&#xff1a;随着微服务的普及&#xff0c;服务调用的稳定性变得越来越重要。Sentinel以“流量”为切入点&#xff0c;在流量控制、断路、负载保护等多个领域开展工作&#xff0c;保障服务可靠性。特点&#xff1a; 2. 丰富的应用场景&a…

Java 锁 高频 面试题回答

之前面了几个开发&#xff0c;问了关于锁的知识都是一问三不知 &#xff0c;也许是业务场景中出现的比较少&#xff0c;所以这些人只能回答出一些基础的线程方面的知识&#xff0c;之前也看了些书&#xff0c;做一些记录 &#xff0c;所以和大家分享一下 说一下乐观锁和悲观锁的…

Binder系统-C程序示例_框架分析

IPC&#xff1a;进程间的通信&#xff0c;远程调用&#xff0c;比如我们的A进程需要打开LED灯&#xff0c;调用led_open/led_ctl方法&#xff0c;但是他是没有权限去操作的&#xff0c;所以进程A通过&#xff1a;1.首先构造一些数据&#xff0c;2.通过IPC发送数据到进程B&#…

LPC4357JET256/LPC4337FET256/LPC4337JET256 32位MCU 204MHz 1MB

【详情】LPC4300系列微控制器(MCU)拥有全世界首款非对称双核数字信号控制器体系结构&#xff0c;配有ARM Cortex-M4和Cortex-M0处理器。这些NXP Cortex-M4 MCU配有Cortex-M0协处理器&#xff0c;优势在于&#xff0c;可在单一体系结构、开发环境中&#xff0c;开发数字信号处理…

画栋雕梁:定制投资体系2——规划开发能力圈

接上一篇&#xff0c;选择了适合自己“买”的方法&#xff0c;接下来就是要规划买的范围。这个范围一般受个人眼界、认知和理解的限制&#xff0c;也即是价值投资中的一个重要概念——能力圈。每个人的能力圈不可能一样&#xff0c;这和个人过往的学习、工作、成长经历相关。若…

PyQGIS开发 -- 基础学习笔记

1、自主学习QGIS开发虽然QGIS本身功能强大&#xff0c;但还是架不住我们要编写新的功能、新的业务流程、新的算法。前文中我们提到&#xff0c;扩展QGIS有2种方法&#xff0c;一是用Python、C来写QGIS的插件&#xff1b;另一种就是基于QGIS的C API开发独立应用程序。然而后者资…

前端食堂技术周刊第 72 期:Signals 是前端框架的未来、Chrome Headless、ts-reset、magic-regexp、Bun 新文档

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;草莓番茄 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 本期摘要 Signals 是前端框架的未来Chrome Headless 进化成完全体Next.js 13.2Deno…

纯x86汇编实现的多线程操作系统实践 - 第二章 BSP的启动

本章主要讲解BSP的初始化过程&#xff0c;对应的代码为mbr.asm。系统加电启动后&#xff0c;BIOS进行必要的初始化&#xff0c;并将硬盘的0扇区512字节的数据搬运到内存地址0x7c00处。之后&#xff0c;BSP的IP被置为0x7c00&#xff0c;开始运行。初始化代码mbr.asm将顺序执行以…

服务网格领域的百花齐放

服务网格是一种技术架构&#xff0c;它用于管理微服务系统中各个服务之间的通信&#xff0c;旨在处理微服务间的流量&#xff08;也称为东西向流量&#xff09;。 ​ 在云原生应用中&#xff0c;一个应用的背后可能存在着成百上千个服务&#xff0c;各个服务可能又有着若干个实…

机器学习——集成学习

引言 集成学习&#xff1a;让机器学习效果更好&#xff0c;单个不行&#xff0c;群殴走起。 分类 1. Bagging:训练多个分类器取平均&#xff08;m代表树的个数&#xff09;。 2.Boosting&#xff08;提升算法&#xff09;:从弱学习器开始加&#xff0c;通过加权来进行训练。…

这样在管理后台里实现 403 页面实在是太优雅了

前言403 页面通常表示无权限访问&#xff0c;与 404 页面代表着不同含义。而大部分管理后台框架仅提供了 404 页面的支持&#xff0c;但却忽略了对 403 页面的处理&#xff0c;有的框架虽然也有对 403 页面的处理&#xff0c;但处理效果却不尽人意。那怎么样的 403 页面才是即好…

异步交互的关键——Ajax

文章目录1,Ajax 概述1.1 作用1.2 同步和异步1.3 案例1.3.1 分析1.3.2 后端实现1.3.3 前端实现2&#xff0c;axios2.1 基本使用2.2 快速入门2.2.1 后端实现2.2.2 前端实现2.3 请求方法别名最后说一句1,Ajax 概述 AJAX (Asynchronous JavaScript And XML)&#xff1a;异步的 Jav…

【Fastdfs实战】在本地如何将文件上传到Linux虚拟机

作者&#xff1a;狮子也疯狂 专栏&#xff1a;《Fastdfs连续剧》 坚持做好每一步&#xff0c;幸运之神自然会驾凌在你的身上 目录一. &#x1f981; 前言二. &#x1f981; 上传原理Ⅰ. &#x1f407; 原理图解Ⅱ. &#x1f407; 传输原理三. &#x1f981; 实战演示Ⅰ. &…

TryHackMe-CVE-2021-41773/42013(Apache2.4.49/50)

CVE-2021-41773/42013 对 Apache 路径遍历错误的简短解释和不完整的修复 介绍 tryhackme: 在 Apache HTTP Server 2.4.49 中对路径规范化所做的更改中发现一个缺陷。攻击者可以使用路径遍历攻击将 URL 映射到预期文档根目录之外的文件。如果文档根目录之外的文件不受“要求全…

第三阶段-03MyBatis 中使用XML映射文件详解

MyBatis 中使用XML映射文件 什么是XML映射 使用注解的映射SQL的问题&#xff1a; 长SQL需要折行&#xff0c;不方便维护动态SQL查询拼接复杂源代码中的SQL&#xff0c;不方便与DBA协作 MyBatis建议使用XML文件映射SQL才能最大化发挥MySQL的功能 统一管理SQL&#xff0c; 方…

【工程实践】python 去除\xa0、\u3000、\n、\u2800、\t等字符

1.问题描述 在处理数据时&#xff0c;会遇到\xa0、\u3000、\u2800、\t等Unicode字符串。需要对其进行处理。 2.空格类型说明 空格可以分为两类&#xff0c;一类为普通文本空格&#xff0c;另一类为html实体空格。普通文本空格介绍普通半角空格和普通全角空格。html实体空格介绍…

【反序列化漏洞-01】为什么要序列化

为什么要序列化百度百科上关于序列化的定义是&#xff0c;将对象的状态信息转换为可以存储或传输的形式(字符串)的过程。在序列化期间&#xff0c;对象将其当前状态写入到临时或持久性存储区(非关系型键值对形式的数据库Redis&#xff0c;与数组类似)。以后&#xff0c;可以通过…

浅谈信安文章搜索引擎

一个搜索引擎的实现流程大概为&#xff1a;首先获取海量的数据&#xff0c;整理成统一的格式&#xff0c;然后交给索引程序建立索引&#xff0c;当索引建立好后&#xff0c;就可以进行搜索。简而言之就是&#xff1a;数据获取->数据检索->数据搜索 0x1数据获取 数据获取…

RK3399+FPGA+MIPI 方案细节之subLVDS to MIPI处理

#CROSSLINK系列 #CROSSLINK vs XO3L 总的来说XO3L的灵活性更强&#xff0c;更近似于一片通用的CPLD&#xff1b;CROSSLINK专用性更强。 针对subLVDS转换到MIPI的需求&#xff0c;CROSSLINK比较有优势&#xff0c;因为集成度更高&#xff0c;所以稳定性也更高。 #要点 #crossl…