Utils 包
本包提供了一系列通用工具函数,包括文件操作、数学计算、字符串处理等功能。
文件操作
CopyDir
复制整个目录及其内容到目标位置。
参数:
src string
- 源目录路径dst string
- 目标目录路径
返回:
error
- 操作过程中的错误信息
Copy
复制单个文件到目标位置。
参数:
srcFile string
- 源文件路径dstFile string
- 目标文件路径
返回:
error
- 操作过程中的错误信息
Exists
检查文件或目录是否存在。
参数:
filePath string
- 要检查的文件或目录路径
返回:
bool
- true表示存在,false表示不存在
EnsureDir
确保目录存在,如果不存在则创建。
参数:
dir string
- 目录路径perm os.FileMode
- 目录权限
返回:
error
- 操作过程中的错误信息
FindSubPath
在指定目录下递归查找目标文件或目录。
参数:
parDir string
- 父目录路径tgtName string
- 要查找的目标名称maxDepth int
- 最大递归深度
返回:
string
- 找到的路径error
- 查找过程中的错误信息
数学计算
DecPow
计算十进制数的幂。
参数:
x decimal.Decimal
- 底数y decimal.Decimal
- 指数
返回:
decimal.Decimal
- 计算结果
DecArithMean
计算一组十进制数的算术平均值。
参数:
values []decimal.Decimal
- 数值数组
返回:
decimal.Decimal
- 平均值error
- 计算过程中的错误信息
DecStdDev
计算一组十进制数的总体标准差。
参数:
values []decimal.Decimal
- 数值数组
返回:
decimal.Decimal
- 标准差error
- 计算过程中的错误信息
SharpeRatio
计算夏普比率,使用默认252个交易日和年化处理。
参数:
moReturns []float64
- 收益率数组riskFree float64
- 无风险利率
返回:
float64
- 夏普比率error
- 计算过程中的错误信息
SortinoRatio
计算索提诺比率,使用默认252个交易日和年化处理。
参数:
moReturns []float64
- 收益率数组riskFree float64
- 无风险利率
返回:
float64
- 索提诺比率error
- 计算过程中的错误信息
字符串处理
SnakeToCamel
将下划线命名转换为驼峰命名。
参数:
input string
- 输入的下划线命名字符串
返回:
string
- 转换后的驼峰命名字符串
PadCenter
将字符串居中填充到指定宽度。
参数:
s string
- 原始字符串width int
- 目标宽度padText string
- 填充字符
返回:
string
- 填充后的字符串
RandomStr
生成指定长度的随机字符串。
参数:
length int
- 字符串长度
返回:
string
- 生成的随机字符串
FormatWithMap
使用map中的值格式化字符串。
参数:
text string
- 包含占位符的字符串args map[string]interface{}
- 替换值的map
返回:
string
- 格式化后的字符串
PrintErr
格式化错误信息。
参数:
e error
- 错误对象
返回:
string
- 格式化后的错误信息
GroupByPairQuotes
将交易对按报价货币分组。
格式: [key]:pairs...
转换为:
【key】
Quote: Base1 Base2 ...
参数:
items map[string][]string
- 交易对映射
返回:
string
- 格式化后的分组字符串
CountDigit
计算字符串中数字字符的数量。
参数:
text string
- 输入字符串
返回:
int
- 数字字符的数量
SplitSolid
分割字符串并忽略空字符串。
参数:
text string
- 要分割的字符串sep string
- 分隔符
返回:
[]string
- 分割后的非空字符串数组
切片和映射操作
SplitSolid
字符串分割,忽略返回结果中的空字符串。
参数:
text string
- 要分割的字符串sep string
- 分隔符
返回:
[]string
- 分割后的字符串数组
KeysOfMap
获取map的所有键。
参数:
m M
- 输入的map,支持泛型
返回:
[]K
- 键数组
ValsOfMap
获取map的所有值。
参数:
m M
- 输入的map,支持泛型
返回:
[]V
- 值数组
CutMap
从map中提取指定键的子集。
参数:
m M
- 输入的map,支持泛型keys ...K
- 要提取的键列表
返回:
M
- 包含指定键的新map
UnionArr
合并多个数组并去重。
参数:
arrs ...[]T
- 要合并的数组列表,支持泛型
返回:
[]T
- 合并后的去重数组
ReverseArr
原地反转数组元素顺序。
参数:
s []T
- 要反转的数组,支持泛型
ConvertArr
将一个类型的数组转换为另一个类型。
参数:
arr []T1
- 源数组doMap func(T1) T2
- 转换函数
返回:
[]T2
- 转换后的数组
ArrToMap
将数组转换为map,可能存在多个元素映射到同一个键。
参数:
arr []T2
- 源数组doMap func(T2) T1
- 键映射函数
返回:
map[T1][]T2
- 转换后的map,值为数组
RemoveFromArr
从数组中移除指定元素。
参数:
arr []T
- 源数组it T
- 要移除的元素num int
- 要移除的数量,负数表示移除所有
返回:
[]T
- 移除元素后的新数组
UniqueItems
获取数组中的唯一元素和重复元素。
参数:
arr []T
- 输入数组,支持泛型
返回:
[]T
- 唯一元素数组[]T
- 重复元素数组
DeepCopyMap
深度复制map。
参数:
dst map[string]interface{}
- 目标mapsrc map[string]interface{}
- 源map
MapToStr
将map转换为字符串表示。
参数:
m map[string]float64
- 要转换的map
返回:
string
- 转换后的字符串int
- 数值部分的总长度
网络操作
DoHttp
执行HTTP请求并返回结果。
参数:
client *http.Client
- HTTP客户端req *http.Request
- HTTP请求
返回:
*banexg.HttpRes
- HTTP响应结果
网络通信
NewBanServer
创建一个新的BanServer实例,用于处理TCP网络通信。
参数:
addr string
- 服务器监听地址(如:"127.0.0.1:6789")name string
- 服务器名称
返回:
*ServerIO
- 服务器实例
NewClientIO
创建一个新的BanClient实例,用于连接BanServer。
参数:
addr string
- 服务器地址(如:"127.0.0.1:6789")
返回:
*ClientIO
- 客户端实例*errs.Error
- 错误信息
GetServerData
从BanServer或BanClient获取数据。
参数:
key string
- 数据键名
返回:
string
- 获取的数据值*errs.Error
- 错误信息
SetServerData
向BanServer或BanClient设置数据。
参数:
args *KeyValExpire
- 包含键值和过期时间的数据结构Key string
- 键名Val string
- 值ExpireSecs int
- 过期时间(秒)
返回:
*errs.Error
- 错误信息
GetNetLock
获取分布式锁。
参数:
key string
- 锁的键名timeout int
- 获取锁的超时时间(秒)
返回:
int32
- 锁的值(用于解锁)*errs.Error
- 错误信息
DelNetLock
删除分布式锁。
参数:
key string
- 锁的键名lockVal int32
- 锁的值(从GetNetLock获得)
返回:
*errs.Error
- 错误信息
其他工具
MD5
计算数据的MD5哈希值。
参数:
data []byte
- 输入数据
返回:
string
- MD5哈希值的十六进制字符串
GetSystemLanguage
获取系统语言设置。
返回:
string
- 系统语言代码
相关性计算
CalcCorrMat
计算多个数据序列之间的相关性矩阵。
参数:
arrLen int
- 数据长度dataArr [][]float64
- 二维数据数组useChgRate bool
- 是否使用变化率计算
返回:
*mat.SymDense
- 相关性矩阵[]float64
- 每个序列的平均相关性error
- 错误信息
GenCorrImg
生成相关性矩阵的热力图。
参数:
m *mat.SymDense
- 相关性矩阵title string
- 图表标题names []string
- 序列名称列表fontName string
- 字体名称fontSize float64
- 字体大小
返回:
[]byte
- PNG图片数据error
- 错误信息
CalcEnvsCorr
计算多个K线环境的相关性。
参数:
envs []*ta.BarEnv
- K线环境列表hisNum int
- 历史数据数量
返回:
*mat.SymDense
- 相关性矩阵[]float64
- 每个环境的平均相关性error
- 错误信息
性能指标计算
CalcExpectancy
计算收益期望和风险回报比。
参数:
profits []float64
- 收益数组
返回:
float64
- 期望收益float64
- 风险回报比
CalcMaxDrawDown
计算最大回撤。
参数:
profits []float64
- 收益数组initBalance float64
- 初始余额
返回:
float64
- 最大回撤金额float64
- 最大回撤比例int
- 回撤开始位置int
- 回撤结束位置float64
- 回撤开始时的余额float64
- 回撤结束时的余额
AutoCorrPenalty
计算自相关惩罚因子。
参数:
returns []float64
- 收益率数组
返回:
float64
- 惩罚因子
KMeansVals
对数值序列进行K均值聚类。
参数:
vals []float64
- 数值数组num int
- 聚类数量
返回:
*ClusterRes
- 聚类结果
StdDevVolatility
计算标准差波动率。
参数:
data []float64
- 数据数组rate float64
- 衰减率
返回:
float64
- 波动率
NearScore
计算接近中心点的得分。
参数:
x float64
- 当前值mid float64
- 中心值rate float64
- 衰减率
返回:
float64
- 得分(0-1之间)
文件读写
ReadCSV
读取CSV文件内容。
参数:
path string
- CSV文件路径
返回:
[][]string
- CSV内容的二维数组*errs.Error
- 错误信息
ReadXlsx
读取Excel文件内容。
参数:
path string
- Excel文件路径sheet string
- 工作表名称(为空时使用第一个工作表)
返回:
[][]string
- Excel内容的二维数组*errs.Error
- 错误信息
ReadTextFile
读取文本文件内容。
参数:
path string
- 文件路径
返回:
string
- 文件内容*errs.Error
- 错误信息
ReadLastNLines
读取文件最后N行内容。
参数:
filePath string
- 文件路径lineCount int
- 要读取的行数
返回:
[]string
- 最后N行内容error
- 错误信息
WriteCsvFile
写入CSV文件。
参数:
path string
- 文件路径rows [][]string
- 要写入的数据compress bool
- 是否压缩
返回:
*errs.Error
- 错误信息
WriteFile
写入普通文件。
参数:
path string
- 文件路径data []byte
- 要写入的数据
返回:
*errs.Error
- 错误信息
KlineToStr
将K线数据转换为字符串数组。
参数:
klines []*banexg.Kline
- K线数据数组loc *time.Location
- 时区信息
返回:
[][]string
- 转换后的字符串数组
GetFontData
获取字体文件数据。
参数:
name string
- 字体名称(为空时使用arial.ttf)
返回:
[]byte
- 字体文件数据error
- 错误信息
GetOpenFont
获取OpenType字体。
参数:
name string
- 字体名称
返回:
*opentype.Font
- OpenType字体对象error
- 错误信息
IsTextContent
检查数据是否为文本内容。
参数:
data []byte
- 要检查的数据
返回:
bool
- true表示是文本内容,false表示可能是二进制内容
工具函数
ParallelRun
并行执行任务。
参数:
items []T
- 要处理的项目列表,支持泛型concurNum int
- 最大并发数handle func(int, T) *errs.Error
- 处理函数,接收索引和项目
返回:
*errs.Error
- 执行过程中的错误
IsDocker
检查当前是否在Docker容器中运行。
返回:
bool
- 是否在Docker容器中
OpenBrowser
打开系统默认浏览器访问指定URL。
参数:
url string
- 要访问的URL
返回:
error
- 执行过程中的错误
OpenBrowserDelay
延迟一定时间后打开浏览器访问URL。
参数:
url string
- 要访问的URLdelayMS int
- 延迟的毫秒数
IntToBytes
将uint32转换为字节数组。
参数:
n uint32
- 要转换的数字
返回:
[]byte
- 转换后的字节数组error
- 转换过程中的错误
MD5
计算数据的MD5哈希值。
参数:
data []byte
- 要计算哈希的数据
返回:
string
- MD5哈希值的十六进制字符串
ReadInput
从标准输入读取用户输入。
参数:
tips []string
- 提示信息列表
返回:
string
- 用户输入的字符串error
- 读取过程中的错误
ReadConfirm
从标准输入读取用户确认。
参数:
tips []string
- 提示信息列表ok string
- 确认字符串fail string
- 取消字符串exitAny bool
- 是否允许任意输入退出
返回:
bool
- 用户是否确认
NewPrgBar
创建新的进度条。
参数:
totalNum int
- 总进度数title string
- 进度条标题
返回:
*PrgBar
- 进度条对象
NewStagedPrg
创建多阶段进度条。
参数:
tasks []string
- 任务名称列表,按执行顺序,不可重复weights []float64
- 各个任务权重,>0,内部会自动归一化
返回:
*StagedPrg
- 多阶段进度条对象
系统相关函数
GetSystemLanguage
获取当前系统语言代码。
返回:
string
- ISO 639-1语言代码(可选带ISO 3166-1国家代码),如:- en-US: 英语(美国)
- zh-CN: 中文(简体)
- zh-TW: 中文(繁体)
- ja-JP: 日语
- ko-KR: 韩语
- fr-FR: 法语
- de-DE: 德语
- es-ES: 西班牙语 等