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: 西班牙语 等