当前位置: 首页 > news >正文

【golang】量化开发学习(一)

均值回归策略简介

均值回归(Mean Reversion)假设价格会围绕均值波动,当价格偏离均值一定程度后,会回归到均值。
基本逻辑

  1. 计算一段时间内的移动均值(如 20 天均线)。
  2. 当当前价格高于均值一定比例,做空;当低于均值一定比例,做多。
  3. 持仓等待价格回归后平仓。


官网下载DOLGPHINDB 


总结

Docker 运行 DolphinDB
创建模拟股票数据表
Golang 连接 DolphinDB 进行查询

这样,Golang 代码就可以直接获取数据并进行回测了 🚀!如果需要更复杂的 数据流实时计算,可以考虑 DolphinDB 的 流式表(stream table)

📝 Golang 实现均值回归策略

📌 主要步骤

  • 从 DolphinDB 获取历史数据(收盘价)
  • 计算 n 日移动均值
  • 生成交易信号
  • 计算策略回测收益

🔧 代码

以下 Golang 代码:

  1. 连接 DolphinDB 获取数据
  2. 计算 20 日均线
  3. 执行简单的回测
 
package mainimport ("fmt""log""math""net/http""strings""encoding/json""io/ioutil"
)// DolphinDB 查询 URL(根据你的服务器 IP 修改)
const ddbURL = "http://your-dolphindb-server:8848/execute"var (n       = 20 // 均线周期threshold = 0.02 // 2% 偏差阈值capital   = 100000.0 // 初始资金
)// 查询 DolphinDB 数据
func fetchDolphinDBData(symbol string) ([]float64, error) {query := fmt.Sprintf(`select close from stock_data where symbol="%s" order by date;`, symbol)resp, err := http.Post(ddbURL, "text/plain", strings.NewReader(query))if err != nil {return nil, err}defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body)var result map[string]interface{}json.Unmarshal(body, &result)closePrices := []float64{}if values, ok := result["close"].([]interface{}); ok {for _, v := range values {closePrices = append(closePrices, v.(float64))}}return closePrices, nil
}// 计算 n 日均线
func movingAverage(prices []float64, period int) []float64 {ma := make([]float64, len(prices))var sum float64for i := range prices {if i < period {ma[i] = math.NaN()} else {sum = 0for j := 0; j < period; j++ {sum += prices[i-j]}ma[i] = sum / float64(period)}}return ma
}// 进行回测
func backtest(prices, ma []float64) float64 {position := 0balance := capitalfor i := n; i < len(prices); i++ {price := prices[i]if math.IsNaN(ma[i]) {continue}// 交易信号if price < ma[i]*(1-threshold) && position == 0 { // 买入position = int(balance / price)balance -= float64(position) * pricefmt.Printf("买入 %d 股, 价格: %.2f, 资金: %.2f\n", position, price, balance)} else if price > ma[i]*(1+threshold) && position > 0 { // 卖出balance += float64(position) * pricefmt.Printf("卖出 %d 股, 价格: %.2f, 资金: %.2f\n", position, price, balance)position = 0}}// 最后清仓if position > 0 {balance += float64(position) * prices[len(prices)-1]}return balance
}func main() {symbol := "AAPL"prices, err := fetchDolphinDBData(symbol)if err != nil {log.Fatalf("获取数据失败: %v", err)}ma := movingAverage(prices, n)finalBalance := backtest(prices, ma)fmt.Printf("策略最终资金: %.2f\n", finalBalance)
}

📌 代码解析

  1. 连接 DolphinDB
    • fetchDolphinDBData() 发送 HTTP 请求获取数据(你需要修改数据库 IP)
    • DolphinDB 返回 close 价格数据
  2. 计算移动均线
    • movingAverage() 计算 n 天均线
  3. 交易逻辑
    • 当价格比均线低 2%,买入
    • 当价格比均线高 2%,卖出
    • backtest() 模拟资金变化
  4. 打印回测结果
    • 资金增减情况
    • 最终资金

相关文章:

【golang】量化开发学习(一)

均值回归策略简介 均值回归&#xff08;Mean Reversion&#xff09;假设价格会围绕均值波动&#xff0c;当价格偏离均值一定程度后&#xff0c;会回归到均值。 基本逻辑&#xff1a; 计算一段时间内的移动均值&#xff08;如 20 天均线&#xff09;。当当前价格高于均值一定比…...

AI前端开发:跨领域合作的新引擎

随着人工智能技术的飞速发展&#xff0c;AI代码生成器等工具的出现正深刻地改变着软件开发的模式。 AI前端开发的兴起&#xff0c;不仅提高了开发效率&#xff0c;更重要的是促进了跨领域合作&#xff0c;让数据科学家、UI/UX设计师和前端工程师能够更紧密地协同工作&#xff0…...

数组练习(深入理解、实践数组)

1.练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚 编写代码&#xff0c;演示多个字符从两端移动&#xff0c;向中间汇聚 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> int main() {//解题思路&#xff1a;//根据题意再…...

Bigemap Pro如何进行面裁剪

一般在处理矢量数据&#xff0c;制图过程中&#xff0c;常常会用到面文件的裁剪功能&#xff0c;那么有没有一个工具可以同时实现按照线、顶点、网格以及面来裁剪呢&#xff1f;今天给大家介绍一个宝藏工具&#xff0c;叫做Bigemap Pro&#xff0c;在这里工具里面可以实现上述面…...

acwing算法全总结-数学知识

快速幂 原题链接&#xff1a;快速幂 ac代码&#xff1a; #include<iostream> #include<algorithm> using namespace std; typedef long long LL; LL qmi(int a,int b,int p) {LL res1%p;while(b)//这里本应该分两次进行&#xff0c;不过只有一次询问{if(b&1)…...

SpringMVC学习使用

一、SpringMVC简单理解 1.1 Spring与Web环境集成 1.1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的&#xff0c;但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(sp…...

10、《文件上传与下载:MultipartFile与断点续传设计》

文件上传与下载&#xff1a;MultipartFile与断点续传设计 一、基础文件上传与MultipartFile解析 1.1 Spring MVC文件上传基础 PostMapping("/upload") public String handleFileUpload(RequestParam("file") MultipartFile file) {if (!file.isEmpty())…...

DeepSeek 本地部署(电脑安装)

1.先安装Ollama 开源框架 网址链接为:Ollama 2.点中间的下载 3.选系统 4.下载好就安装 5.输入命令ollama -v 6.点击Model 7.选如下 8.选版本 9.复杂对应命令 10.控制台粘贴下载 11.就可以问问题啦 12.配置UI界面(在扩展里面输入) 13.配置完即可打开 14.选择刚才安装的就好啦…...

DeepSeek、Kimi、文心一言、通义千问:AI 大语言模型的对比分析

在人工智能领域&#xff0c;DeepSeek、Kimi、文心一言和通义千问作为国内领先的 AI 大语言模型&#xff0c;各自展现出了独特的特点和优势。本文将从技术基础、应用场景、用户体验和价格与性价比等方面对这四个模型进行对比分析&#xff0c;帮助您更好地了解它们的特点和优势。…...

Docker compose 以及镜像使用

Docker compose 以及镜像使用 高级配置 使用 Docker Compose Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。以下是一个 docker-compose.yml 示例&#xff1a; version: 3 services:web:image: my-appbuild: .ports:- "8000:8000"volumes:- …...

HCIA项目实践--RIP相关原理知识面试问题总结回答

9.4 RIP 9.4.1 补充概念 什么是邻居&#xff1f; 邻居指的是在网络拓扑结构中与某一节点&#xff08;如路由器&#xff09;直接相连的其他节点。它们之间可以直接进行通信和数据交互&#xff0c;能互相交换路由信息等&#xff0c;以实现网络中的数据转发和路径选择等功能。&am…...

使用Python进行云计算:AWS、Azure、和Google Cloud的比较

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行云计算&#xff1a;AWS、Azure、和Google Cloud的比较 随着云计算的普及&am…...

c++ 实现矩阵乘法

矩阵乘法的基本实现方法是三层循环&#xff0c;但不同的循环顺序会影响性能&#xff0c;比如i-j-k和i-k-j的顺序。然后&#xff0c;参考内容里提到了一些优化方法&#xff0c;比如调整循环顺序来提高缓存命中率&#xff0c;使用一维数组存储矩阵&#xff0c;或者利用SIMD指令如…...

无线4G多联机分户计费集中控制系统

拓森无线4G多联机集中控制系统应用于宝龙广场多联机计费集中控制节能改造项目&#xff0c;包括多联机集中控制&#xff0c;分户计费&#xff0c;空调监控管理、告警管理、节能管控、统计报表、能效分析、空调远程开关机等功能。项目的成功实施&#xff0c;不仅提升了维护管理效…...

文字转语音(一)各种实现说明

记录下文字转语音的各种方式及优缺点 目前只了解了调用 Windows PowerShell&#xff08;System.Speech.Synthesis&#xff09;、FreeTTS、JACOB&#xff08;Java COM Bridge&#xff09;库实现文字转语音。 其他的方式就是顺带记录了解下 Windows PowerShell&#xff08;System…...

大语言模型多代理协作(MACNET)

大语言模型多代理协作(MACNET) Scaling Large-Language-Model-based Multi-Agent Collaboration 提出多智能体协作网络(MACNET),以探究多智能体协作中增加智能体数量是否存在类似神经缩放定律的规律。研究发现了小世界协作现象和协作缩放定律,为LLM系统资源预测和优化…...

【笛卡尔树】

笛卡尔树 笛卡尔树定义构建性质 习题P6453 [COCI 2008/2009 #4] PERIODNICF1913D Array CollapseP4755 Beautiful Pair[ARC186B] Typical Permutation Descriptor 笛卡尔树 定义 笛卡尔树是一种二叉树&#xff0c;每一个节点由一个键值二元组 ( k , w ) (k,w) (k,w) 构成。要…...

Java堆外内存的高效利用与性能优化

在Java开发中&#xff0c;堆外内存&#xff08;Direct Memory&#xff09;是除Java堆以外的内存区域。它允许Java程序直接分配和管理非堆内存&#xff0c;这为高性能的数据处理提供了可能。 1、 什么是堆外内存&#xff1f; 堆外内存&#xff0c;也称为直接内存&#xff08;D…...

【Unity3D优化】使用ASTC压缩格式优化内存

在Unity3D手游开发中&#xff0c;合理选择纹理压缩格式对于优化内存占用、提高渲染效率至关重要。本文将记录近期在项目内进行的图片压缩格式优化过程&#xff0c;重点介绍从ETC2到ASTC 5x5的优化方案及其带来的收益。 1. 现状分析&#xff1a;从ETC2到ASTC 6x6 block 在项目…...

iptables网络安全服务详细使用

iptables防火墙概念说明 开源的基于数据包过滤的网络安全策略控制工具。 centos6.9 --- 默认防火墙工具软件iptables centos7 --- 默认防火墙工具软件firewalld&#xff08;zone&#xff09; iptables主要工作在OSI七层的二、三、四层&#xff0c;如果重新编译内核&…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...